]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
kernel-install: allow plugins to terminate the procedure (#4174)
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sat, 24 Sep 2016 13:03:54 +0000 (09:03 -0400)
committerGitHub <noreply@github.com>
Sat, 24 Sep 2016 13:03:54 +0000 (09:03 -0400)
Replaces #4103.

man/kernel-install.xml
src/kernel-install/kernel-install

index d7e27de758161faba2099ee1149e846b0a68e447..4a8a46cef4d3d448584de84e6d6ae1f17b4c742a 100644 (file)
     in <filename>/usr/lib/kernel/install.d/</filename>. This can be used to override a system-supplied
     executables with a local file if needed; a symbolic link in <filename>/etc/kernel/install.d/</filename>
     with the same name as an executable in <filename>/usr/lib/kernel/install.d/</filename>,
-    pointing to /dev/null, disables the executable entirely. Executables must have the
+    pointing to <filename>/dev/null</filename>, disables the executable entirely. Executables must have the
     extension <literal>.install</literal>; other extensions are ignored.</para>
 
+    <para>An executable should return <constant>0</constant> on success. It may also
+    return <constant>77</constant> to cause the whole operation to terminate
+    (executables later in lexical order will be skipped).</para>
   </refsect1>
 
   <refsect1>
index c66bcfc092d31b11ef8895fdcb77564db96ccd5d..0c0ee718accf552c204f51ca71c07529c399e235 100644 (file)
@@ -19,6 +19,8 @@
 # You should have received a copy of the GNU Lesser General Public License
 # along with systemd; If not, see <http://www.gnu.org/licenses/>.
 
+SKIP_REMAINING=77
+
 usage()
 {
     echo "Usage:"
@@ -123,7 +125,11 @@ case $COMMAND in
         for f in "${PLUGINS[@]}"; do
             if [[ -x $f ]]; then
                 "$f" add "$KERNEL_VERSION" "$BOOT_DIR_ABS" "$KERNEL_IMAGE"
-                ((ret+=$?))
+                x=$?
+                if [[ $x == $SKIP_REMAINING ]]; then
+                    return 0
+                fi
+                ((ret+=$x))
             fi
         done
         ;;
@@ -132,7 +138,11 @@ case $COMMAND in
         for f in "${PLUGINS[@]}"; do
             if [[ -x $f ]]; then
                 "$f" remove "$KERNEL_VERSION" "$BOOT_DIR_ABS"
-                ((ret+=$?))
+                x=$?
+                if [[ $x == $SKIP_REMAINING ]]; then
+                    return 0
+                fi
+                ((ret+=$x))
             fi
         done