diff options
-rw-r--r-- | Makefile.am | 8 | ||||
-rw-r--r-- | man/kernel-install.xml | 26 | ||||
-rw-r--r-- | src/kernel-install/50-depmod.install | 8 | ||||
-rw-r--r-- | src/kernel-install/90-loaderentry.install | 77 | ||||
-rw-r--r-- | src/kernel-install/kernel-install | 68 |
5 files changed, 116 insertions, 71 deletions
diff --git a/Makefile.am b/Makefile.am index d4c2f8577d..cba9a3e609 100644 --- a/Makefile.am +++ b/Makefile.am @@ -90,6 +90,7 @@ udevhomedir=$(udevlibexecdir) udevrulesdir=$(udevlibexecdir)/rules.d udevhwdbdir=$(udevlibexecdir)/hwdb.d catalogdir=$(prefix)/lib/systemd/catalog +kernelinstalldir = $(prefix)/lib/kernel/install.d # And these are the special ones for / rootprefix=@rootprefix@ @@ -291,11 +292,12 @@ bin_PROGRAMS = \ systemd-delta \ systemd-analyze -bin_SCRIPTS = \ +dist_bin_SCRIPTS = \ src/kernel-install/kernel-install -EXTRA_DIST += \ - src/kernel-install/kernel-install +dist_kernelinstall_SCRIPTS = \ + src/kernel-install/50-depmod.install \ + src/kernel-install/90-loaderentry.install rootlibexec_PROGRAMS = \ systemd \ diff --git a/man/kernel-install.xml b/man/kernel-install.xml index 9c2ecc48b2..8c2abc747c 100644 --- a/man/kernel-install.xml +++ b/man/kernel-install.xml @@ -84,7 +84,9 @@ along with systemd; If not, see <http://www.gnu.org/licenses/>. <varlistentry> <term><command>add <replaceable>KERNEL-VERSION</replaceable> <replaceable>KERNEL-IMAGE</replaceable></command></term> <listitem> - <para>calls every executable + <para><command>kernel-install</command> creates the directory + <filename>/boot/<replaceable>MACHINE-ID</replaceable>/<replaceable>KERNEL-VERSION</replaceable>/</filename> + and calls every executable <filename>/usr/lib/kernel/install.d/*.install</filename> and <filename>/etc/kernel/install.d/*.install</filename> with the arguments @@ -93,21 +95,22 @@ add <replaceable>KERNEL-VERSION</replaceable> <filename>/boot/<replaceable>MACHI </programlisting> </para> - <para><command>kernel-install</command> copies + <para>The kernel-install plugin <filename>50-depmod.install</filename> runs depmod for the <replaceable>KERNEL-VERSION</replaceable>.</para> + + <para>The kernel-install plugin <filename>90-loaderentry.install</filename> copies <replaceable>KERNEL-IMAGE</replaceable> to <filename>/boot/<replaceable>MACHINE-ID</replaceable>/<replaceable>KERNEL-VERSION</replaceable>/linux</filename>. - </para> - - <para><command>kernel-install</command> also creates a boot - loader entry according to the boot loader specification in + It also creates a boot loader entry according to the boot loader specification in <filename>/boot/loader/entries/<replaceable>MACHINE-ID</replaceable>-<replaceable>KERNEL-VERSION</replaceable>.conf</filename>. + The title of the entry is the <replaceable>PRETTY_NAME</replaceable> parameter specified in <filename>/etc/os-release</filename>, + or "Linux <replaceable>KERNEL-VERSION</replaceable>", if unset. If the file <filename>initrd</filename> is found next to the <filename>linux</filename> file, the initrd will be added to the configuration.</para> </listitem> </varlistentry> <varlistentry> - <term><command>remove</command> <replaceable>KERNEL-VERSION</replaceable> <replaceable>KERNEL-IMAGE</replaceable></term> + <term><command>remove <replaceable>KERNEL-VERSION</replaceable></command></term> <listitem> <para>calls every executable <filename>/usr/lib/kernel/install.d/*.install</filename> and <filename>/etc/kernel/install.d/*.install</filename> with the arguments @@ -117,9 +120,10 @@ remove <replaceable>KERNEL-VERSION</replaceable> <filename>/boot/<replaceable>MA </para> <para><command>kernel-install</command> removes the entire directory - <filename>/boot/<replaceable>MACHINE-ID</replaceable>/<replaceable>KERNEL-VERSION</replaceable>/</filename> - and the file - <filename>/boot/loader/entries/<replaceable>MACHINE-ID</replaceable>-<replaceable>KERNEL-VERSION</replaceable>.conf</filename></para> + <filename>/boot/<replaceable>MACHINE-ID</replaceable>/<replaceable>KERNEL-VERSION</replaceable>/</filename> afterwards.</para> + + <para>The kernel-install plugin <filename>90-loaderentry.install</filename> removes the file + <filename>/boot/loader/entries/<replaceable>MACHINE-ID</replaceable>-<replaceable>KERNEL-VERSION</replaceable>.conf</filename>.</para> </listitem> </varlistentry> @@ -167,7 +171,7 @@ remove <replaceable>KERNEL-VERSION</replaceable> <filename>/boot/<replaceable>MA <filename>/etc/os-release</filename> </term> <listitem> - <para>The content of the file specifies the operating system id <replaceable>OS-ID</replaceable>.</para> + <para>The content of the file specifies the operating system title <replaceable>PRETTY_NAME</replaceable>.</para> </listitem> </varlistentry> </variablelist> diff --git a/src/kernel-install/50-depmod.install b/src/kernel-install/50-depmod.install new file mode 100644 index 0000000000..68c24bed7a --- /dev/null +++ b/src/kernel-install/50-depmod.install @@ -0,0 +1,8 @@ +#!/bin/bash +# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# ex: ts=8 sw=4 sts=4 et filetype=sh + +[[ $1 == "add" ]] || exit 0 +[[ $2 ]] || exit 1 + +exec depmod -a "$2" diff --git a/src/kernel-install/90-loaderentry.install b/src/kernel-install/90-loaderentry.install new file mode 100644 index 0000000000..55b4d24672 --- /dev/null +++ b/src/kernel-install/90-loaderentry.install @@ -0,0 +1,77 @@ +#!/bin/bash +# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*- +# ex: ts=8 sw=4 sts=4 et filetype=sh + +COMMAND="$1" +KERNEL_VERSION="$2" +BOOT_DIR_ABS="$3" +KERNEL_IMAGE="$4" + +if [[ -f /etc/machine-id ]]; then + read MACHINE_ID < /etc/machine-id +fi + +if ! [[ $MACHINE_ID ]]; then + exit 1 +fi + +BOOT_DIR="/$MACHINE_ID/$KERNEL_VERSION" +LOADER_ENTRY="/boot/loader/entries/$MACHINE_ID-$KERNEL_VERSION.conf" + +if [[ $COMMAND == remove ]]; then + exec rm -f "$LOADER_ENTRY" +fi + +if ! [[ $COMMAND == add ]]; then + exit 1 +fi + +if ! [[ $KERNEL_IMAGE ]]; then + exit 1 +fi + +if [[ -f /etc/os-release ]]; then + . /etc/os-release +fi + +if ! [[ $PRETTY_NAME ]]; then + PRETTY_NAME="Linux $KERNEL_VERSION" +fi + +if [[ -f /etc/kernel/cmdline ]]; then + readarray -t BOOT_OPTIONS < /etc/kernel/cmdline +fi + +if ! [[ ${BOOT_OPTIONS[*]} ]]; then + readarray -t BOOT_OPTIONS < /proc/cmdline +fi + +if ! [[ $BOOT_OPTIONS ]]; then + echo "Could not determine the kernel command line parameters." >&2 + echo "Please specify the kernel command line in /etc/kernel/cmdline!" >&2 + exit 1 +fi + +cp --preserve "$KERNEL_IMAGE" "$BOOT_DIR_ABS/linux" || { + echo "Could not copy '$KERNEL_IMAGE to '$BOOT_DIR_ABS/linux'." >&2 + exit 1 +} + +mkdir -p "${LOADER_ENTRY%/*}" || { + echo "Could not create loader entry directory '${LOADER_ENTRY%/*}'." >&2 + exit 1 +} + +{ + echo "title $PRETTY_NAME" + echo "version $KERNEL_VERSION" + echo "machine-id $MACHINE_ID" + echo "options ${BOOT_OPTIONS[*]}" + echo "linux $BOOT_DIR/linux" + [[ -f $BOOT_DIR_ABS/initrd ]] && \ + echo "initrd $BOOT_DIR/initrd" +} > "$LOADER_ENTRY" || { + echo "Could not create loader entry '$LOADER_ENTRY'." >&2 + exit 1 +} +exit 0 diff --git a/src/kernel-install/kernel-install b/src/kernel-install/kernel-install index be4a8e274d..fb2ee57b5b 100644 --- a/src/kernel-install/kernel-install +++ b/src/kernel-install/kernel-install @@ -58,16 +58,6 @@ COMMAND="$1" KERNEL_VERSION="$2" KERNEL_IMAGE="$3" -if [[ -f /etc/os-release ]]; then - . /etc/os-release -fi - -if ! [[ $ID ]]; then - echo "Could not determine the distribution name from /etc/os-release." >&2 - echo "Please specify ID=... in /etc/os-release. See man:os-release(5)" >&2 - exit 1 -fi - if [[ -f /etc/machine-id ]]; then read MACHINE_ID < /etc/machine-id fi @@ -78,28 +68,12 @@ if ! [[ $MACHINE_ID ]]; then exit 1 fi -if [[ -f /etc/kernel/cmdline ]]; then - readarray -t BOOT_OPTIONS < /etc/kernel/cmdline -fi - -if ! [[ ${BOOT_OPTIONS[*]} ]]; then - readarray -t BOOT_OPTIONS < /proc/cmdline -fi - -if ! [[ $BOOT_OPTIONS ]]; then - echo "Could not determine the kernel command line parameters." >&2 - echo "Please specify the kernel command line in /etc/kernel/cmdline!" >&2 - exit 1 -fi - if [[ ! $COMMAND ]] || [[ ! $KERNEL_VERSION ]]; then usage exit 1 fi -BOOT_DIR="/$MACHINE_ID/$KERNEL_VERSION" -BOOT_DIR_ABS="/boot$BOOT_DIR" -LOADER_ENTRY="/boot/loader/entries/$MACHINE_ID-$KERNEL_VERSION.conf" +BOOT_DIR_ABS="/boot/$MACHINE_ID/$KERNEL_VERSION" ret=0 readarray -t PLUGINS < <( @@ -121,41 +95,23 @@ case $COMMAND in } for f in "${PLUGINS[@]}"; do - [[ -x $f ]] && "$f" add "$KERNEL_VERSION" "$BOOT_DIR_ABS" - ((ret+=$?)) + if [[ -x $f ]]; then + "$f" add "$KERNEL_VERSION" "$BOOT_DIR_ABS" "$KERNEL_IMAGE" + ((ret+=$?)) + fi done - - cp --preserve "$KERNEL_IMAGE" "$BOOT_DIR_ABS/linux" || { - echo "Could not copy '$KERNEL_IMAGE to '$BOOT_DIR_ABS/linux'." >&2 - exit 1 - } - - mkdir -p "${LOADER_ENTRY%/*}" || { - echo "Could not create loader entry directory '${LOADER_ENTRY%/*}'." >&2 - exit 1 - } - - { - echo "title $PRETTY_NAME" - echo "version $KERNEL_VERSION" - echo "machine-id $MACHINE_ID" - echo "options ${BOOT_OPTIONS[*]}" - echo "linux $BOOT_DIR/linux" - [[ -f $BOOT_DIR_ABS/initrd ]] && \ - echo "initrd $BOOT_DIR/initrd" - } > "$LOADER_ENTRY" || { - echo "Could not create loader entry '$LOADER_ENTRY'." >&2 - exit 1 - } ;; remove) for f in "${PLUGINS[@]}"; do - [[ -x $f ]] && "$f" remove "$KERNEL_VERSION" "$BOOT_DIR_ABS" - ((ret+=$?)) + if [[ -x $f ]]; then + "$f" remove "$KERNEL_VERSION" "$BOOT_DIR_ABS" + ((ret+=$?)) + fi done - rm -rf "$LOADER_ENTRY" "$BOOT_DIR_ABS" + rm -rf "$BOOT_DIR_ABS" + ((ret+=$?)) ;; *) @@ -164,6 +120,4 @@ case $COMMAND in ;; esac -((ret+=$?)) - exit $ret |