]> git.ipfire.org Git - thirdparty/dracut.git/commitdiff
Add "rd.cmdline=ask" kernel command line parameter
authorHarald Hoyer <harald@redhat.com>
Fri, 27 Jun 2014 10:02:14 +0000 (12:02 +0200)
committerHarald Hoyer <harald@redhat.com>
Mon, 30 Jun 2014 10:03:12 +0000 (12:03 +0200)
prompts the user for additional kernel command line parameters

dracut.cmdline.7.asc
modules.d/98systemd/dracut-cmdline-ask.service [new file with mode: 0644]
modules.d/98systemd/dracut-cmdline-ask.sh [new file with mode: 0755]
modules.d/98systemd/dracut-cmdline.sh
modules.d/98systemd/module-setup.sh
modules.d/99base/init.sh

index b5b1bae8a5fc015b63dcf3efb78f0e4b07eb3666..fef13b30a427432446e0c52b74398bbd1dec7625 100644 (file)
@@ -86,6 +86,9 @@ rootfstype=ext3
     was built on. This helps booting, if any disk layout changed, especially in
     combination with rd.auto or other parameters specifying the layout.
 
+**rd.cmdline=ask**::
+    prompts the user for additional kernel command line parameters
+
 **rd.fstab=0**::
     do not honor special mount options for the root filesystem found in
     _/etc/fstab_ of the real root.
diff --git a/modules.d/98systemd/dracut-cmdline-ask.service b/modules.d/98systemd/dracut-cmdline-ask.service
new file mode 100644 (file)
index 0000000..9993671
--- /dev/null
@@ -0,0 +1,33 @@
+#  This file is part of systemd.
+#
+#  systemd is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU Lesser General Public License as published by
+#  the Free Software Foundation; either version 2.1 of the License, or
+#  (at your option) any later version.
+
+# See systemd.special(7) for details
+
+[Unit]
+Description=dracut ask for additional cmdline parameters
+DefaultDependencies=no
+Before=dracut-cmdline.service
+After=systemd-journald.socket
+Wants=systemd-journald.socket
+ConditionPathExists=/etc/initrd-release
+ConditionKernelCommandLine=rd.cmdline=ask
+
+[Service]
+Environment=DRACUT_SYSTEMD=1
+Environment=NEWROOT=/sysroot
+Type=oneshot
+ExecStart=-/bin/dracut-cmdline-ask
+StandardInput=tty
+StandardOutput=inherit
+StandardError=inherit
+RemainAfterExit=yes
+KillMode=process
+IgnoreSIGPIPE=no
+
+# Bash ignores SIGTERM, so we send SIGHUP instead, to ensure that bash
+# terminates cleanly.
+KillSignal=SIGHUP
diff --git a/modules.d/98systemd/dracut-cmdline-ask.sh b/modules.d/98systemd/dracut-cmdline-ask.sh
new file mode 100755 (executable)
index 0000000..024d60e
--- /dev/null
@@ -0,0 +1,20 @@
+#!/bin/bash
+# -*- mode: shell-script; indent-tabs-mode: nil; sh-basic-offset: 4; -*-
+# ex: ts=8 sw=4 sts=4 et filetype=sh
+
+sleep 0.5
+echo
+sleep 0.5
+echo
+sleep 0.5
+echo
+echo
+echo
+echo
+echo "Enter additional kernel command line parameter (end with ctrl-d or .)"
+while read -e -p "> " line; do
+    [[ "$line" == "." ]] && break
+    [[ "$line" ]] && printf -- "%s\n" "$line" >> /etc/cmdline.d/99-cmdline-ask.conf
+done
+
+exit 0
index b8c7296efb8e4997111d6b037900fe00827d517c..124061c8306d88d890bff8255b3280452c2b21e4 100755 (executable)
@@ -11,7 +11,9 @@ type getarg >/dev/null 2>&1 || . /lib/dracut-lib.sh
 [ -n "$VERSION" ] && info "dracut-$VERSION"
 
 if ! getargbool 1 'rd.hostonly'; then
+    [ -f /etc/cmdline.d/99-cmdline-ask.conf ] && mv /etc/cmdline.d/99-cmdline-ask.conf /tmp/99-cmdline-ask.conf
     remove_hostonly_files
+    [ -f /tmp/99-cmdline-ask.conf ] && mv /tmp/99-cmdline-ask.conf /etc/cmdline.d/99-cmdline-ask.conf
 fi
 
 info "Using kernel command line parameters:"
index 9a8296af1ff0e9868237802707753b7cffec89ae..d56d21a2e02dd13fe02e3175a4b2bded8be50e9f 100755 (executable)
@@ -187,6 +187,7 @@ install() {
     ln_r "${systemdsystemunitdir}/initrd.target" "${systemdsystemunitdir}/default.target"
 
     inst_script "$moddir/dracut-cmdline.sh" /bin/dracut-cmdline
+    inst_script "$moddir/dracut-cmdline-ask.sh" /bin/dracut-cmdline-ask
     inst_script "$moddir/dracut-pre-udev.sh" /bin/dracut-pre-udev
     inst_script "$moddir/dracut-pre-trigger.sh" /bin/dracut-pre-trigger
     inst_script "$moddir/dracut-initqueue.sh" /bin/dracut-initqueue
@@ -216,6 +217,7 @@ install() {
     mkdir -p "${initdir}/$systemdsystemunitdir/initrd.target.wants"
     for i in \
         dracut-cmdline.service \
+        dracut-cmdline-ask.service \
         dracut-initqueue.service \
         dracut-mount.service \
         dracut-pre-mount.service \
index 2415d1518ff238250ce05549a348ed937d62bc00..8c26ebc808587700dbaedb7cd5f80d56724795f2 100755 (executable)
@@ -112,6 +112,14 @@ fi
 
 source_conf /etc/conf.d
 
+if getarg "rd.cmdline=ask"; then
+    echo "Enter additional kernel command line parameter (end with ctrl-d or .)"
+    while read -p "> " line; do
+        [ "$line" = "." ] && break
+        echo "$line" >> /etc/cmdline.d/99-cmdline-ask.conf
+    done
+fi
+
 if ! getargbool 1 'rd.hostonly'; then
     remove_hostonly_files
 fi