chiark / gitweb /
kernel-install: add default install scripts
authorHarald Hoyer <harald@redhat.com>
Tue, 30 Apr 2013 16:01:47 +0000 (18:01 +0200)
committerHarald Hoyer <harald@redhat.com>
Mon, 6 May 2013 14:19:02 +0000 (16:19 +0200)
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.

Makefile.am
man/kernel-install.xml
src/kernel-install/50-depmod.install [new file with mode: 0644]
src/kernel-install/90-loaderentry.install [new file with mode: 0644]
src/kernel-install/kernel-install

index d4c2f85..cba9a3e 100644 (file)
@@ -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 \
index 9c2ecc4..8c2abc7 100644 (file)
@@ -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 (file)
index 0000000..68c24be
--- /dev/null
@@ -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 (file)
index 0000000..55b4d24
--- /dev/null
@@ -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
index be4a8e2..fb2ee57 100644 (file)
@@ -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