From: Harald Hoyer Date: Tue, 30 Apr 2013 16:01:47 +0000 (+0200) Subject: kernel-install: add default install scripts X-Git-Tag: v203~17 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=8f51399e75e5d0d0741ecb18c549a57840bd1cc3 kernel-install: add default install scripts Do the depmod in the kernel-install hooks, so hooks can produce/install kernel modules and be part of the depmod. Also move the basic boot loader entry creation and removal to a plugin script. If PRETTY_NAME is not defined in /etc/os-release, fallback to PRETTY_NAME="Linux $KERNEL_VERSION". Add documentation for everything in the man page. --- diff --git a/Makefile.am b/Makefile.am index d4c2f8577..cba9a3e60 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 9c2ecc48b..8c2abc747 100644 --- a/man/kernel-install.xml +++ b/man/kernel-install.xml @@ -84,7 +84,9 @@ along with systemd; If not, see . add KERNEL-VERSION KERNEL-IMAGE - calls every executable + kernel-install creates the directory + /boot/MACHINE-ID/KERNEL-VERSION/ + and calls every executable /usr/lib/kernel/install.d/*.install and /etc/kernel/install.d/*.install with the arguments @@ -93,21 +95,22 @@ add KERNEL-VERSION /boot/MACHI - kernel-install copies + The kernel-install plugin 50-depmod.install runs depmod for the KERNEL-VERSION. + + The kernel-install plugin 90-loaderentry.install copies KERNEL-IMAGE to /boot/MACHINE-ID/KERNEL-VERSION/linux. - - - kernel-install 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 /boot/loader/entries/MACHINE-ID-KERNEL-VERSION.conf. + The title of the entry is the PRETTY_NAME parameter specified in /etc/os-release, + or "Linux KERNEL-VERSION", if unset. If the file initrd is found next to the linux file, the initrd will be added to the configuration. - remove KERNEL-VERSION KERNEL-IMAGE + remove KERNEL-VERSION calls every executable /usr/lib/kernel/install.d/*.install and /etc/kernel/install.d/*.install with the arguments @@ -117,9 +120,10 @@ remove KERNEL-VERSION /boot/MA kernel-install removes the entire directory - /boot/MACHINE-ID/KERNEL-VERSION/ - and the file - /boot/loader/entries/MACHINE-ID-KERNEL-VERSION.conf + /boot/MACHINE-ID/KERNEL-VERSION/ afterwards. + + The kernel-install plugin 90-loaderentry.install removes the file + /boot/loader/entries/MACHINE-ID-KERNEL-VERSION.conf. @@ -167,7 +171,7 @@ remove KERNEL-VERSION /boot/MA /etc/os-release - The content of the file specifies the operating system id OS-ID. + The content of the file specifies the operating system title PRETTY_NAME. diff --git a/src/kernel-install/50-depmod.install b/src/kernel-install/50-depmod.install new file mode 100644 index 000000000..68c24bed7 --- /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 000000000..55b4d2467 --- /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 be4a8e274..fb2ee57b5 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