summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormaximilian attems <maks@debian.org>2006-08-23 09:22:54 +0200
committermaximilian attems <maks@debian.org>2006-08-23 09:22:54 +0200
commitfabe918dee7da26d177d67d4aa8fe3fd6e83e513 (patch)
tree5dee066c10e912f5328dba7de3032cd6058019dc
parentd1d6763409a1260708423e0092d7bc4182275773 (diff)
- improved nfsroo parsing
- added rootdelay and rootfstype bootargs - document this changes - initrd-tools backward compatible mdadm assembe and then run mdrun - update-initramfs really checkout use_bootloader from /etc/kernel-img.conf - tighter klibc deps
-rw-r--r--debian/NEWS13
-rw-r--r--debian/changelog39
-rw-r--r--debian/control2
-rwxr-xr-xinit13
-rw-r--r--initramfs-tools.850
-rwxr-xr-xmkinitramfs19
-rw-r--r--scripts/functions9
-rw-r--r--scripts/local19
-rwxr-xr-xscripts/local-top/mdrun9
-rw-r--r--scripts/nfs48
-rwxr-xr-xupdate-initramfs5
11 files changed, 196 insertions, 30 deletions
diff --git a/debian/NEWS b/debian/NEWS
index a6ae4bc..9ac39f5 100644
--- a/debian/NEWS
+++ b/debian/NEWS
@@ -1,3 +1,16 @@
+initramfs-tools (0.76) unstable; urgency=low
+
+ * This release features nfs auto detection in the initramfs.
+ The boot paramaters are parsed according to the linux source
+ Documentation/kernel-parameters.txt and more specifically
+ Documentation/nfsroot.txt.
+
+ The initramfs-tools(8) manpage documents the parsed boot parameter.
+ Note that the undocumented and non compliant nfsoption bootarg got
+ dropped.
+
+ -- maximilian attems <maks@sternwelten.at> Wed, 23 Aug 2006 08:47:26 +0200
+
initramfs-tools (0.61) unstable; urgency=low
* This release moves the initramfs-tools confdir from /etc/mkinitramfs to
diff --git a/debian/changelog b/debian/changelog
index 995d76d..a5ac22f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,42 @@
+initramfs-tools (0.76) unstable; urgency=medium
+
+ * debian/control: Tighten klibc to 1.4.19-2 for fixed nuke. (closes: 383730)
+
+ * mkinitramfs: Only hard code root when root arg got passed.
+
+ * init: Parse /proc/cmdline for rootfstype, initrd-tools did it too.
+
+ * init: Parse /proc/cmdline for rootdelay.
+
+ * scripts/local: Use eventual rootfstype and rootdelay info.
+
+ * initramfs-tools.8: Add more docs about boot args, s/2.6.15/2.6.17/.
+
+ * scripts/functions: Simplify parse_numeric() by arithmetic calculation,
+ instead of working on it's representation. Thanks to tarski.
+ (launchpad.net/21759) Much more elegant than the 0.58 version fix.
+
+ * mkinitramfs: Parse rootraid for sarge compatibility and pass the info
+ to the initramfs if etch mdadm is not yet installed.
+
+ * scripts/local-top/mdrun: Assemble the root raid first before mdrun.
+ Thanks martin f krafft <madduck@debian.org>. (closes: 383908, 384063)
+
+ * update-initramfs: Check if /etc/kernel-img.conf is readable,
+ before attempting to parse also check for the right field.
+
+ * init: Check for root=/dev/nfs. Parse ip kernel command line for nfsroot.
+ Drop undocumented and not compliant nfsopts.
+
+ * scripts/nfs: Add ip parsing conforming to Documentation/nfsroot.txt.
+ Use the nfsroot bootparam in combination with eventual ip provided
+ device or server-ip. Do minor code cleanups. Both items based on patches
+ by Vagrant Cascadian <vagrant+bugs@freegeek.org>. (closes: 380649)
+
+ * Set urgency medium due to large number of serious bug fixes.
+
+ -- maximilian attems <maks@sternwelten.at> Wed, 23 Aug 2006 08:17:51 +0200
+
initramfs-tools (0.75) unstable; urgency=high
* hook-functions: Add megaraid_sas to the scsi list. Thanks Kenshi Muto
diff --git a/debian/control b/debian/control
index 24d1bdc..dd4c3b3 100644
--- a/debian/control
+++ b/debian/control
@@ -8,7 +8,7 @@ Standards-Version: 3.7.2.0
Package: initramfs-tools
Architecture: all
-Depends: klibc-utils (>= 1.4.11-1), busybox (>= 1:1.01-3) | busybox-cvs-static (>= 20040623-1), cpio, module-init-tools, udev (>= 0.086-1)
+Depends: klibc-utils (>= 1.4.19-2), busybox (>= 1:1.01-3) | busybox-cvs-static (>= 20040623-1), cpio, module-init-tools, udev (>= 0.086-1)
Provides: linux-initramfs-tool
Description: tools for generating an initramfs
This package contains tools to create and boot an initramfs for packaged 2.6
diff --git a/init b/init
index ab679b5..386ec37 100755
--- a/init
+++ b/init
@@ -59,19 +59,28 @@ for x in $(cat /proc/cmdline); do
UUID=*)
ROOT="/dev/disk/by-uuid/${ROOT#UUID=}"
;;
+ /dev/nfs)
+ BOOT=nfs
+ ;;
esac
;;
rootflags=*)
ROOTFLAGS="-o ${x#rootflags=}"
;;
+ rootfstype=*)
+ ROOTFSTYPE="${x#rootfstype=}"
+ ;;
+ rootdelay=*)
+ ROOTDELAY="${x#rootdelay=}"
+ ;;
cryptopts=*)
cryptopts="${x#cryptopts=}"
;;
nfsroot=*)
NFSROOT="${x#nfsroot=}"
;;
- nfsopts=*)
- NFSOPTS="-o ${x#nfsopts=}"
+ ip=*)
+ IPOPTS="${x#ip=}"
;;
boot=*)
BOOT=${x#boot=}
diff --git a/initramfs-tools.8 b/initramfs-tools.8
index 0950b39..7af09e1 100644
--- a/initramfs-tools.8
+++ b/initramfs-tools.8
@@ -1,4 +1,4 @@
-.TH INITRAMFS-TOOLS 8 "Date: 2005/12/06" "" "mkinitramfs script overview"
+.TH INITRAMFS-TOOLS 8 "Date: 2006/08/19" "" "mkinitramfs script overview"
.SH NAME
initramfs-tools \- an introduction to writing scripts for mkinitramfs
@@ -29,18 +29,44 @@ arguments which influence the boot procedure:
.SS Boot options
+The init and root are usually passed by the boot loader for local boot.
+The other parameters are optional.
+
.TP
\fB \fI init
the binary to hand over execution to on the root fs after the initramfs scripts are done.
.TP
\fB \fI root
-the device node to mount as the rootfs.
+the device node to mount as the root file system.
+
+.TP
+\fB \fI rootdelay
+set delay in seconds. Determines how long mountroot waits for root to appear.
+
+.TP
+\fB \fI rootflags
+set the file system mount option string.
+
+.TP
+\fB \fI rootfstype
+set the root file system type.
.TP
\fB \fI nfsroot
can be either "auto" to try to get the relevant information from DHCP or a
-string of the form NFSSERVER:NFSPATH
+string of the form NFSSERVER:NFSPATH or NFSSERVER:NFSPATH:NFSOPTS.
+Use root=/dev/nfs for NFS to kick to in.
+
+.TP
+\fB \fI ip
+tells how to configure the ip adress. Allows to specify an different
+NFS server than the DHCP server. See Documentation/nfsroot.txt in
+any recent linux source for details. Optional paramater for NFS root.
+
+.TP
+\fB \fI cryptopts
+passes the args for cryptoroot. Set by the cryptsetup boot hooks.
.TP
\fB \fI boot
@@ -50,27 +76,33 @@ either local or NFS (affects which initramfs scripts are run, see the "Subdirect
\fB \fI resume
On install initramfs-tools tries to autodetect the resume partition. On success
the RESUME variable is written to /etc/initramfs-tools/conf.d/resume.
-The boot variable overrides it.
+The boot variable noresume overrides it.
.TP
\fB \fI quiet
-reduces the amount of text output to the console during boot
+reduces the amount of text output to the console during boot.
.TP
\fB \fI ro
-mounts the rootfs read-only
+mounts the rootfs read-only.
.TP
\fB \fI rw
-mounts the rootfs read-write
+mounts the rootfs read-write.
+
+.TP
+\fB \fI panic
+sets an timeout on panic. Currently only zero value supported.
.TP
\fB \fI debug
-generates lots of output to /tmp/initramfs.debug
+generates lots of output to /tmp/initramfs.debug.
.TP
\fB \fI break
spawns a shell in the initramfs image at chosen run-time
+(top, modules, premount, mount, bottom, init).
+The default is premount without any arg.
.SH HOOK SCRIPTS
@@ -404,7 +436,7 @@ to double-check if it contains the relevant binaries, libs or modules:
.nf
mkdir tmp/initramfs
cd tmp/initramfs
-gunzip -c -9 /boot/initrd.img-2.6.15-1-686 | \\
+gunzip -c -9 /boot/initrd.img-2.6.17-2-686 | \\
cpio -i -d -H newc --no-absolute-filenames
.fi
.RE
diff --git a/mkinitramfs b/mkinitramfs
index 67d9df0..759d6cb 100755
--- a/mkinitramfs
+++ b/mkinitramfs
@@ -209,7 +209,11 @@ for i in ${EXTRA_CONF}; do
copy_exec "/usr/share/initramfs-tools/conf.d/${i}" /conf/conf.d
fi
done
-echo "ROOT=${ROOT}" > ${DESTDIR}/conf/conf.d/root
+
+# ROOT hardcoding
+if [ -n "${ROOT}" ]; then
+ echo "ROOT=${ROOT}" > ${DESTDIR}/conf/conf.d/root
+fi
# Busybox
if [ "x${BUSYBOX}" = "xn" ]; then
@@ -233,7 +237,18 @@ run_scripts "${CONFDIR}"/hooks
# FIXME: Remove this Raid block after Etch releases
if [ -x /sbin/mdadm -a ! -f /usr/share/initramfs-tools/hooks/mdadm ]; then
- mdadm --examine --scan > $DESTDIR/conf/mdadm.conf
+ # use mkinitrd magic for Sarge backwards compat
+ rootraiddev="$(df / | sed -rne 's,^(/dev/[^[:space:]]+).*,\1,p')"
+ echo "rootraiddev=${rootraiddev}" > /conf/mdadm.conf
+ mdadm=$(mdadm --detail "${rootraiddev}")
+ echo "${mdadm}" | awk '
+ $1 == "Number" && $2 == "Major" { start = 1; next }
+ $1 == "UUID" { print "uuid=" $3; next }
+ !start { next }
+ $2 == 0 && $3 == 0 { next }
+ { devices = devices " " $NF }
+ END { print "devices='\''" devices "'\''" }' \
+ >> /conf/mdadm.conf
copy_exec /sbin/mdadm /sbin
copy_exec /sbin/mdrun /sbin
for x in md linear multipath raid0 raid1 raid456 raid5 raid6 raid10; do
diff --git a/scripts/functions b/scripts/functions
index 178ad5d..7e67771 100644
--- a/scripts/functions
+++ b/scripts/functions
@@ -224,13 +224,10 @@ parse_numeric() {
minor=${1#*:}
major=${1%:*}
;;
- [0-9][0-9][0-9])
- minor=$((0x${1#?}))
- major=$((0x${1%??}))
- ;;
*)
- minor=$((0x${1#??}))
- major=$((0x${1%??}))
+ value=$(( 0x${1} ))
+ minor=$(( ${value} % 256 ))
+ major=$(( ${value} / 256 ))
;;
esac
diff --git a/scripts/local b/scripts/local
index 0b9baab..9d71a5e 100644
--- a/scripts/local
+++ b/scripts/local
@@ -11,11 +11,18 @@ mountroot ()
# to deal with removable devices
if [ ! -e "${ROOT}" ]; then
log_begin_msg "Waiting for root file system..."
+
+ # Default delay is 180s
+ if [ -z "${ROOTDELAY}" ]; then
+ slumber=180
+ else
+ slumber=${ROOTDELAY}
+ fi
if [ -x /sbin/usplash_write ]; then
- /sbin/usplash_write "TIMEOUT 180" || true
+ /sbin/usplash_write "TIMEOUT ${slumber}" || true
fi
- slumber=1800
+ slumber=$(( ${slumber} * 10 ))
while [ ${slumber} -gt 0 -a ! -e "${ROOT}" ]; do
/bin/sleep 0.1
slumber=$(( ${slumber} - 1 ))
@@ -38,8 +45,12 @@ mountroot ()
panic "ALERT! ${ROOT} does not exist. Dropping to a shell!"
done
- # Get the root filesystem type
- eval $(fstype < ${ROOT})
+ # Get the root filesystem type if not set
+ if [ -z "${ROOTFSTYPE}" ]; then
+ eval $(fstype < ${ROOT})
+ else
+ FSTYPE=${ROOTFSTYPE}
+ fi
[ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-premount"
run_scripts /scripts/local-premount
diff --git a/scripts/local-top/mdrun b/scripts/local-top/mdrun
index 1b6ca3e..3ed995c 100755
--- a/scripts/local-top/mdrun
+++ b/scripts/local-top/mdrun
@@ -36,6 +36,11 @@ done
[ "${gotraid}" = y ] || exit
-# Assemble all raid devices
-# FIXME: assemble root raid first due to initrd-tools compatibility
+# source the presumed root md and it's info
+. ./conf/mdadm.conf
+
+# assemble root raid first due to initrd-tools compatibility
+mdadm -A ${rootraiddev} -R -u $uuid $devices
+
+# assemble all raid devices
/sbin/mdrun /dev
diff --git a/scripts/nfs b/scripts/nfs
index 5bfb03d..844db70 100644
--- a/scripts/nfs
+++ b/scripts/nfs
@@ -13,13 +13,57 @@ mountroot ()
# For DHCP
modprobe -q af_packet
- ipconfig ${DEVICE}
+ # support ip options see linux sources Documentation/nfsroot.txt
+ case ${IPOPTS} in
+ none|off)
+ # Do nothing
+ ;;
+ ""|on|any)
+ # Bring up device
+ ipconfig ${DEVICE}
+ ;;
+ dhcp|bootb|rarp|both)
+ ipconfig -c ${IPOPTS} -d ${DEVICE}
+ ;;
+ *)
+ ipconfig -d $IPOPTS
+
+ # grab device entry from full line
+ NEW_DEVICE=${IPOPTS#*:*:*:*:*:*}
+ NEW_DEVICE=${NEW_DEVICE%:*}
+ if [ -n "${NEW_DEVICE}" ]; then
+ DEVICE="${NEW_DEVICE}"
+ fi
+ # grab server-ip
+ SERVER_IP=${IPOPTS#*:}
+ SERVER_IP=${SERVER_IP%:*:*:*:*:*:*}
+ ;;
+ esac
+
+ # FIXME: who writes that?
. /tmp/net-${DEVICE}.conf
+
+ # get nfs root from dhcp
if [ "x${NFSROOT}" = "xauto" ]; then
NFSROOT=${ROOTSERVER}:${ROOTPATH}
+ # nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
+ elif [ -n "${NFSROOT}" ]; then
+ # nfs options are an optional arg
+ if [ "${NFSROOT#*,}" != "${NFSROOT}" ]; then
+ NFSOPTS="-o ${NFSROOT#*,}"
+ fi
+ NFSROOT=${NFSROOT%%,*}
+ # server-ip could be passed by ip
+ if [ "${NFSROOT#*:}" = "$NFSROOT" ]; then
+ if [ -n "${SERVER_IP}" ]; then
+ NFSROOT="${SERVER_IP}:${NFSROOT}"
+ else
+ NFSROOT=${ROOTSERVER}:${ROOTPATH}
+ fi
+ fi
fi
- if [ "x${NFSOPTS}" = "x" ]; then
+ if [ -z "${NFSOPTS}" ]; then
NFSOPTS="-o retrans=10"
fi
diff --git a/update-initramfs b/update-initramfs
index 3ce8f1f..1ec8c7d 100755
--- a/update-initramfs
+++ b/update-initramfs
@@ -2,6 +2,7 @@
STATEDIR=/var/lib/initramfs-tools
BOOTDIR=/boot
+KPKGCONF=/etc/kernel-img.conf
set -e
@@ -96,8 +97,8 @@ run_bootloader()
{
if [ -x /sbin/grub -o -e /boot/grub/menu.lst ]; then
if [ -e /etc/lilo.conf ]; then
- do_b=$(awk '/bootloader/{print $2}' \
- /etc/kernel-img.conf)
+ [ -r "${KPKGCONF}" ] && \
+ do_b=$(awk '/bootloader/{print $3}' "${KPKGCONF}")
if [ "${do_b}" = "yes" ] || [ "${do_b}" = "Yes" ] \
|| [ "${do_b}" = "YES" ]; then
run_lilo