mirror of
https://github.com/ibm-s390-linux/s390-tools.git
synced 2026-08-05 02:14:52 +00:00
scripts: Add script to switch zipl config to a BootLoaderSpec setup
Add a zipl-switch-to-blscfg script that can be used to switch the zipl configuration in a system to use the BootLoaderSpec (BLS) config files to define the IPL sections instead of having them defined in zipl.conf. Closes: #28 Signed-off-by: Javier Martinez Canillas <javierm@redhat.com> Reviewed-by: Stefan Haberland <sth@linux.ibm.com> Signed-off-by: Jan Höppner <hoeppner@linux.ibm.com>
This commit is contained in:
committed by
Jan Höppner
parent
d280e5b1fa
commit
b8a9f0d1d3
@@ -1,7 +1,7 @@
|
||||
include ../common.mak
|
||||
|
||||
SCRIPTS = dbginfo.sh zfcpdbf scsi_logging_level
|
||||
MAN_PAGES = dbginfo.sh.1 zfcpdbf.1
|
||||
SCRIPTS = dbginfo.sh zfcpdbf zipl-switch-to-blscfg scsi_logging_level
|
||||
MAN_PAGES = dbginfo.sh.1 zfcpdbf.1 zipl-switch-to-blscfg.1
|
||||
|
||||
all:
|
||||
|
||||
|
||||
213
scripts/zipl-switch-to-blscfg
Executable file
213
scripts/zipl-switch-to-blscfg
Executable file
@@ -0,0 +1,213 @@
|
||||
#!/bin/bash
|
||||
#
|
||||
# zipl-switch-to-blscfg - Switch zipl to use BootLoaderSpec configuration
|
||||
#
|
||||
# Copyright 2018 Red Hat, Inc.
|
||||
#
|
||||
# s390-tools is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the MIT license. See LICENSE for details.
|
||||
#
|
||||
|
||||
readonly SCRIPTNAME="${0##*/}"
|
||||
|
||||
declare -A zipl_to_bls
|
||||
zipl_to_bls["image"]="linux"
|
||||
zipl_to_bls["ramdisk"]="initrd"
|
||||
zipl_to_bls["parameters"]="options"
|
||||
|
||||
print_error() {
|
||||
echo "$1" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
function on_exit() {
|
||||
if ! rm -rf $TMP; then
|
||||
echo "Delete temporary files failed!" >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
if ! TMP="$(mktemp -d)"; then
|
||||
print_error "Creating a temporary dir for config files failed!"
|
||||
fi
|
||||
|
||||
trap 'on_exit' EXIT
|
||||
|
||||
print_version() {
|
||||
cat <<EOF
|
||||
${SCRIPTNAME}: version %S390_TOOLS_VERSION%
|
||||
Copyright Red Hat, Inc. 2018
|
||||
EOF
|
||||
}
|
||||
|
||||
print_usage()
|
||||
{
|
||||
print_version
|
||||
|
||||
cat <<EOF
|
||||
|
||||
Usage: ${SCRIPTNAME} [OPTIONS]
|
||||
|
||||
Switches the zipl boot-loader configuration to use BootLoaderSpec files.
|
||||
|
||||
Options:
|
||||
|
||||
-h, --help print this help and exit
|
||||
-v, --version print version information and exit
|
||||
--backup-suffix=SUFFIX suffix used for backup files, defaults to .bak
|
||||
--bls-directory=DIR path to generate BLS files, defaults to /boot/loader/entries
|
||||
--config-file=FILE path to zipl configuration file, defaults to /etc/zipl.conf
|
||||
--ignore-default ignore the default option from the zipl configuration file
|
||||
--use-version-name use the section kernel version as the BLS file name
|
||||
|
||||
EOF
|
||||
}
|
||||
|
||||
OPTS="$(getopt -o hv --long help,version,backup-suffix:,bls-directory:,config-file:,\
|
||||
ignore-default,use-version-name -n \'$SCRIPTNAME\' -- "$@")"
|
||||
eval set -- "$OPTS"
|
||||
|
||||
BACKUP_SUFFIX=.bak
|
||||
BLS_DIR="/boot/loader/entries"
|
||||
CMDLINE_LINUX_DEBUG=" systemd.log_level=debug systemd.log_target=kmsg"
|
||||
LINUX_DEBUG_VERSION_POSTFIX="_with_debugging"
|
||||
LINUX_DEBUG_TITLE_POSTFIX=" with debugging"
|
||||
CONFIG="/etc/zipl.conf"
|
||||
|
||||
while [ ${#} -gt 0 ]; do
|
||||
case "$1" in
|
||||
--help|-h)
|
||||
print_usage
|
||||
exit 0
|
||||
;;
|
||||
--version|-v)
|
||||
print_version
|
||||
exit 0
|
||||
;;
|
||||
--backup-suffix)
|
||||
BACKUP_SUFFIX=${2}
|
||||
shift
|
||||
;;
|
||||
--bls-directory)
|
||||
BLS_DIR=${2}
|
||||
shift
|
||||
;;
|
||||
--config-file)
|
||||
CONFIG=${2}
|
||||
shift
|
||||
;;
|
||||
--ignore-default)
|
||||
ignore_default=true
|
||||
;;
|
||||
--use-version-name)
|
||||
version_name=true
|
||||
;;
|
||||
--)
|
||||
shift
|
||||
break
|
||||
;;
|
||||
*)
|
||||
echo >&2
|
||||
echo "${SCRIPTNAME}: invalid option \"${1}\"" >&2
|
||||
echo "Try '${SCRIPTNAME} --help' for more information" >&2
|
||||
echo >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
|
||||
TMP_CONFIG="${TMP}/${CONFIG##*/}"
|
||||
|
||||
[[ -d "$BLS_DIR" ]] || mkdir -m 0700 -p "$BLS_DIR"
|
||||
|
||||
if [ -f /etc/machine-id ]; then
|
||||
read MACHINE_ID < /etc/machine-id
|
||||
MACHINE_ID=${MACHINE_ID}-
|
||||
fi
|
||||
|
||||
count=0
|
||||
OUTPUT=""
|
||||
TARGET=""
|
||||
while IFS='= ' read key val; do
|
||||
# for BLS the default kernel is always the latest one
|
||||
if [[ $key == \#* ]] || [[ $key == "default" && $ignore_default == true ]]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
# remove spaces
|
||||
key="$(echo $key | sed -e 's/^[ \t"]*//;s/[ \t"]*$//')"
|
||||
|
||||
if [[ $key = \[*] ]]; then
|
||||
if [[ $key == "[defaultboot]" ]]; then
|
||||
OUTPUT=${TMP_CONFIG}
|
||||
echo $key >> ${OUTPUT}
|
||||
else
|
||||
key="${key%\]}"
|
||||
key="${key#\[}"
|
||||
section=$key
|
||||
OUTPUT=${BLS_DIR}/${MACHINE_ID}${section}.conf
|
||||
if [ -f "${OUTPUT}" ]; then
|
||||
print_error "BLS file ${OUTPUT} already exists"
|
||||
fi
|
||||
fi
|
||||
elif [[ $val ]]; then
|
||||
val="$(echo $val | sed -e 's/^[ \t"]*//;s/[ \t"]*$//')"
|
||||
if [[ $key == "target" ]]; then
|
||||
if [ -z ${TARGET} ]; then
|
||||
echo $key=$val >> ${TMP_CONFIG}
|
||||
TARGET=$val
|
||||
else if [ "${TARGET}" != "${val}" ]; then
|
||||
print_error "BLS is only supported if all sections have the same target"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
if [ -n "${zipl_to_bls[$key]}" ]; then
|
||||
if [[ $key = "image" && $version_name == true ]]; then
|
||||
if [[ $val = *"vmlinuz-"* ]]; then
|
||||
version="${val##*/vmlinuz-}"
|
||||
else
|
||||
version="${val##*/}"
|
||||
fi
|
||||
echo "version $version" >> ${OUTPUT}
|
||||
if [[ $version = *"rescue"* ]]; then
|
||||
FILENAME=${BLS_DIR}/${MACHINE_ID}0-rescue.conf
|
||||
else
|
||||
FILENAME=${BLS_DIR}/${MACHINE_ID}${version}.conf
|
||||
fi
|
||||
|
||||
if [[ ${OUTPUT} != ${FILENAME} ]]; then
|
||||
if [ -f "${FILENAME}" ]; then
|
||||
print_error "BLS file ${FILENAME} already exists"
|
||||
fi
|
||||
mv ${OUTPUT} ${FILENAME}
|
||||
if [ ! $? -eq 0 ]; then
|
||||
print_error "Creating BLS file ${FILENAME} failed"
|
||||
fi
|
||||
OUTPUT=${FILENAME}
|
||||
fi
|
||||
elif [[ $key = "image" ]]; then
|
||||
echo "version $section" >> ${OUTPUT}
|
||||
fi
|
||||
|
||||
echo "${zipl_to_bls[$key]} ${val}" >> ${OUTPUT}
|
||||
else
|
||||
echo $key=$val >> ${TMP_CONFIG}
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
done < "${CONFIG}"
|
||||
|
||||
if [ -f "${CONFIG}${BACKUP_SUFFIX}" ]; then
|
||||
print_error "Backup file ${CONFIG}${BACKUP_SUFFIX} already exists"
|
||||
fi
|
||||
|
||||
cp -af "${CONFIG}" "${CONFIG}${BACKUP_SUFFIX}"
|
||||
mv "${TMP_CONFIG}" "${CONFIG}"
|
||||
|
||||
zipl > /dev/null
|
||||
if [ ! $? -eq 0 ]; then
|
||||
mv "${CONFIG}${BACKUP_SUFFIX}" "${CONFIG}"
|
||||
fi
|
||||
|
||||
exit 0
|
||||
45
scripts/zipl-switch-to-blscfg.1
Normal file
45
scripts/zipl-switch-to-blscfg.1
Normal file
@@ -0,0 +1,45 @@
|
||||
.TH ZIPL-SWITCH-TO-BLSCFG 1 "April 2018" "s390-tools"
|
||||
|
||||
.SH NAME
|
||||
zipl-switch-to-blscfg \- Switch zipl to use BootLoaderSpec configuration
|
||||
|
||||
.SH SYNOPSIS
|
||||
.br
|
||||
\fBzipl-switch-to-blscfg\fP [OPTIONS]
|
||||
.br
|
||||
\fBzipl-switch-to-blscfg\fP {\-h|\-v}
|
||||
|
||||
.SH DESCRIPTION
|
||||
This script switches the zipl boot-loader configuration to use BootLoaderSpec files
|
||||
to define IPL sections. For each Linux kernel defined in the zipl.conf config file,
|
||||
a BLS fragment is generated in the BLS directory specified. Also, the zipl.conf is
|
||||
modified it only contains global configurations, all IPL sections comes from BLS.
|
||||
|
||||
.SH OPTIONS
|
||||
.TP
|
||||
\fB\-h\fP, \fB\-\-help\fP
|
||||
Print this help and exit
|
||||
|
||||
.TP
|
||||
\fB\-v\fP, \fB\-\-version\fP
|
||||
Print version information and exit
|
||||
|
||||
.TP
|
||||
\fB\-\-backup-suffix <SUFFIX>\fP
|
||||
The suffix used for backup files, defaults to .bak.
|
||||
|
||||
.TP
|
||||
\fB\-\-bls-directory <DIRECTORY>\fP
|
||||
The DIRECTORY where the BLS fragments will be generated. The directory is created if it doesn't exists, by default /boot/loader/entries is used.
|
||||
|
||||
.TP
|
||||
\fB\-\-config-file <FILE>\fP
|
||||
The FILE used for zipl configuration file, defaults to /etc/zipl.conf.
|
||||
|
||||
.TP
|
||||
\fB\-\-ignore-default\fP
|
||||
Ignore the default option from the zipl configuration file
|
||||
|
||||
.TP
|
||||
\fB\-\-use-version-name\fP
|
||||
Use the section kernel version as the BLS file name
|
||||
Reference in New Issue
Block a user