initrd - add tcplay root mount support
authorAlex Hornung <ahornung@gmail.com>
Tue, 12 Jul 2011 17:13:05 +0000 (18:13 +0100)
committerAlex Hornung <ahornung@gmail.com>
Sat, 16 Jul 2011 17:36:31 +0000 (18:36 +0100)
sbin/mkinitrd/mkinitrd.8
sbin/mkinitrd/mkinitrd.sh
share/initrd/Makefile
share/initrd/rcmount_tcplay [new file with mode: 0755]

index 63ac6f6..221575a 100644 (file)
@@ -103,8 +103,9 @@ new root in the initrd is specified in its general form below:
 vfs.root.realroot="<type>:[arg1[:arg2[:argN]]]"
 .Ed
 .Pp
-Currently, two types of real root are supported,
-.Pa local
+Currently, three types of real root are supported,
+.Pa local ,
+.Pa tcplay
 and
 .Pa crypt .
 The
@@ -125,6 +126,16 @@ be mounted as the new root.
 .Bd -literal -offset indent
 vfs.root.realroot="crypt:<FS TYPE>:<DEVICE PATH>:<VOLUME NAME>[:<OPTIONS>]"
 .Ed
+.Pp
+The
+.Pa tcplay
+type allows to mount volumes supported by
+.Xr tcplay 8 .
+The device will be set up by prompting the user for his key, and this
+volume will then be mounted as the new root.
+.Bd -literal -offset indent
+vfs.root.realroot="tcplay:<FS TYPE>:<DEVICE PATH>:<VOLUME NAME>[:<OPTIONS>]"
+.Ed
 .Sh EXAMPLES
 .Bd -literal -offset indent
 vfs.root.realroot="local:ufs:/dev/vg00/lv0[:OPTIONS]"
index 1ed2843..d8342e5 100644 (file)
@@ -34,7 +34,7 @@ TMP_DIR="/tmp"
 BOOT_DIR="/boot"
 INITRD_SIZE="15m"
 BIN_TOOLS="mkdir rm sh kill"
-SBIN_TOOLS="mount mount_devfs mount_hammer mount_nfs mount_null mount_procfs mount_tmpfs umount iscontrol cryptsetup lvm sysctl udevd"
+SBIN_TOOLS="mount mount_devfs mount_hammer mount_nfs mount_null mount_procfs mount_tmpfs umount iscontrol cryptsetup lvm sysctl udevd tcplay"
 INITRD_DIRS="bin boot dev etc mnt proc sbin tmp var new_root"
 CONTENT_DIRS="/usr/share/initrd"
 
index 3f2baca..d5f80ac 100644 (file)
@@ -6,7 +6,7 @@
 #add ${VAR_FILES} to FILES=
 #add a for loop for ${VAR_FILES}
 
-ETC_FILES=     rc rc.lvm2 rcmount_crypt
+ETC_FILES=     rc rc.lvm2 rcmount_crypt rcmount_tcplay
 FILES=         ${ETC_FILES}
 
 .for file in ${ETC_FILES}
diff --git a/share/initrd/rcmount_tcplay b/share/initrd/rcmount_tcplay
new file mode 100755 (executable)
index 0000000..1798b7b
--- /dev/null
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+if [ ! -x /sbin/tcplay ]; then
+       return 1;
+fi
+
+FSTYPE=$2
+MOUNTFROM=$3
+VOLUME=$4
+OPTIONS=$5
+
+# Make sure that MOUNTFROM starts with /dev/
+substr="${MOUNTFROM##/dev/}"
+if [ "$substr" = "$MOUNTFROM" ]; then
+       MOUNTFROM="/dev/$MOUNTFROM"
+fi
+
+# Open crypto volume
+/sbin/tcplay -m $VOLUME -d $MOUNTFROM $OPTIONS
+if [ "$?" -ne "0" ]; then
+       return 2;
+fi
+
+# Mount, as is expected, onto /new_root
+mount -o ro -t $FSTYPE /dev/mapper/$VOLUME /new_root
+if [ "$?" -ne "0" ]; then
+       return 3;
+fi