On Sun, Jul 16, 2006 at 08:33:36PM +0200, Max Vozeler wrote:
> On Sun, Jul 16, 2006 at 08:01:08PM +0200, Lionel Elie Mamane wrote:
>> This patch implements integration with initramfs-tools so that root
>> filesystems on (optionally encrypted) loop device work out of the
>> box.
> This sounds great! The patch wasn't included in your mail though,
Hmm... It seems that reportbug's -A options doesn't work in
conjunction with --mutt.
> can you please send it once more?
Here you are.
--
Lionel
diff -u loop-aes-utils-2.12r/debian/changelog
loop-aes-utils-2.12r/debian/changelog
--- loop-aes-utils-2.12r/debian/changelog
+++ loop-aes-utils-2.12r/debian/changelog
@@ -1,3 +1,9 @@
+loop-aes-utils (2.12r-11.0) unstable; urgency=low
+
+ * Integrate with initramfs-tools for root fs on loop/loopaes device
+
+ -- Lionel Elie Mamane <[EMAIL PROTECTED]> Sun, 16 Jul 2006 17:46:57 +0200
+
loop-aes-utils (2.12r-11) unstable; urgency=low
* Sync with util-linux 2.12r-10
diff -u loop-aes-utils-2.12r/debian/rules loop-aes-utils-2.12r/debian/rules
--- loop-aes-utils-2.12r/debian/rules
+++ loop-aes-utils-2.12r/debian/rules
@@ -64,7 +64,9 @@
install -m 755 mount/losetup $(DIR_UDEB)/sbin/losetup-aes
install -m 755 mount/swapon $(DIR_UDEB)/sbin/swapon-aes
install -m 755 debian/loop-aes-keygen $(DIR_UDEB)/bin
-
+ # initramsfs-tools integration
+ install -m 755 debian/initramfs-tools-script
$(DIR)/usr/share/initramfs-tools/scripts/local-top/loopaes
+ install -m 755 debian/initramfs-tools-hook
$(DIR)/usr/share/initramfs-tools/hooks/loopaes
binary-indep: build install
diff -u loop-aes-utils-2.12r/debian/loop-aes-utils.dirs
loop-aes-utils-2.12r/debian/loop-aes-utils.dirs
--- loop-aes-utils-2.12r/debian/loop-aes-utils.dirs
+++ loop-aes-utils-2.12r/debian/loop-aes-utils.dirs
@@ -7,0 +8,2 @@
+/usr/share/initramfs-tools/scripts/local-top
+/usr/share/initramfs-tools/hooks
only in patch2:
unchanged:
--- loop-aes-utils-2.12r.orig/debian/initramfs-tools-hook
+++ loop-aes-utils-2.12r/debian/initramfs-tools-hook
@@ -0,0 +1,109 @@
+#!/bin/sh
+
+set -e
+
+PREREQ=""
+
+prereqs()
+{
+ echo "$PREREQ"
+}
+
+case $1 in
+prereqs)
+ prereqs
+ exit 0
+ ;;
+esac
+
+. /usr/share/initramfs-tools/hook-functions
+
+get_root_device() {
+ [ -r /etc/fstab ] || return
+
+ grep '^[^#]' /etc/fstab | ( \
+ while read dev mount type options dump pass; do
+ if [ "$mount" = "/" ]; then
+ echo "rootdev=\"${dev}\" rootoptions=\"${options}\""
+ return
+ fi
+ done )
+}
+
+get_root_opts() {
+ local opt
+ local IFS=", "
+ for opt in $rootoptions; do
+ case $opt in
+ encryption=*)
+ loopaes_opts="${loopaes_opts},${opt}"
+ ;;
+ offset=*)
+ loopaes_opts="${loopaes_opts},${opt}"
+ ;;
+ sizelimit=*)
+ loopaes_opts="${loopaes_opts},${opt}"
+ ;;
+ pseed=*)
+ loopaes_opts="${loopaes_opts},${opt}"
+ ;;
+ phash=*)
+ loopaes_opts="${loopaes_opts},${opt}"
+ ;;
+ loinit=*)
+ loopaes_opts="${loopaes_opts},${opt}"
+ ;;
+ itercountk=*)
+ loopaes_opts="${loopaes_opts},${opt}"
+ ;;
+ gpgkey=*)
+ rootgpgkey=${opt#gpgkey=}
+ ;;
+ gpghome=*)
+ rootgpghome=${opt#gpgkey=}
+ ;;
+ loop=*)
+ rootloop=${opt#loop=}
+ ;;
+ *)
+ # Presumably a non-supported or filesystem option
+ ;;
+ esac
+ done
+}
+
+# Find out which device root is on
+eval $(get_root_device)
+[ -z "${rootdev}" ] && exit 0
+# We now have set: rootdev rootoptions
+
+get_root_opts
+[ -z "${rootloop}" ] && exit 0
+loopaes_opts="${loopaes_opts},loop=${rootloop}"
+
+# Prepare the initramfs
+if [ -n "${rootgpgkey}" ]; then
+ mkdir ${DESTDIR}/keys/
+ cp "${rootgpgkey}" ${DESTDIR}/keys/rootkeyfile.gpg
+ copy_exec /usr/bin/gpg /bin/
+ loopaes_opts="${loopaes_opts},gpgkey=/keys/rootkeyfile.gpg"
+fi
+
+if [ -n "${rootgpghome}" ]; then
+ cp -R "${rootgpgkey}" ${DESTDIR}/.gnupg
+else
+ mkdir ${DESTDIR}/.gnupg/
+fi
+loopaes_opts="${loopaes_opts},gpghome=/.gnupg"
+
+echo "LOOPAESOPTS=\"$loopaes_opts\"" > ${DESTDIR}/conf/conf.d/loopaes
+copy_exec /sbin/losetup /sbin/
+# Allow the correct keymap to be loaded if possible
+if [ -e /bin/loadkeys -a -r /etc/console/boottime.kmap.gz ]; then
+ copy_exec /bin/loadkeys /bin/
+ cp /etc/console/boottime.kmap.gz $DESTDIR/etc/
+fi
+manual_add_modules loop
+
+# Done
+exit 0
only in patch2:
unchanged:
--- loop-aes-utils-2.12r.orig/debian/initramfs-tools-script
+++ loop-aes-utils-2.12r/debian/initramfs-tools-script
@@ -0,0 +1,124 @@
+#!/bin/sh
+
+#
+# Standard initramfs preamble
+#
+prereqs()
+{
+ echo ""
+}
+
+case $1 in
+prereqs)
+ prereqs
+ exit 0
+ ;;
+esac
+
+
+#
+# Helper functions
+#
+get_options()
+{
+ # Do we have any settings from the /conf/conf.d/cryptroot file?
+ [ -r /conf/conf.d/loopaes ] && . /conf/conf.d/loopaes
+ loopaes_opts="${LOOPAESOPTS}"
+
+ # Does the kernel boot command line override them?
+ for x in $(cat /proc/cmdline); do
+ case $x in
+ loopaesopts=*)
+ loopaes_opts=${x#loopaesopts=}
+ ;;
+ esac
+ done
+
+ # Sanity check
+ if [ -z "${loopaes_opts}" ]; then
+ # Apparently the root partition isn't encrypted
+ echo "No root-on-loop configured, skipping"
+ exit 0
+ fi
+
+ local opt
+ local IFS=", "
+ for opt in $loopaes_opts; do
+ case $opt in
+ encryption=*)
+ losetup_opts="${losetup_opts} -e ${opt#encryption=}"
+ ;;
+ offset=*)
+ losetup_opts="${losetup_opts} -o ${opt#offset=}"
+ ;;
+ sizelimit=*)
+ losetup_opts="${losetup_opts} -s ${opt#sizelimit=}"
+ ;;
+ pseed=*)
+ losetup_opts="${losetup_opts} -S ${opt#pseed=}"
+ ;;
+ phash=*)
+ losetup_opts="${losetup_opts} -H ${opt#phash=}"
+ ;;
+ loinit=*)
+ losetup_opts="${losetup_opts} -I ${opt#loinit=}"
+ ;;
+ itercountk=*)
+ losetup_opts="${losetup_opts} -C ${opt#itercountk=}"
+ ;;
+ gpgkey=*)
+ losetup_opts="${losetup_opts} -K ${opt#gpgkey=}"
+ ;;
+ gpghome=*)
+ rootgpghome=${opt#gpgkey=}
+ ;;
+ loop=*)
+ rootloop=${opt#loop=}
+ ;;
+ *)
+ # Presumably a non-supported or filesystem option
+ ;;
+ esac
+ done
+}
+
+load_keymap()
+{
+ if [ -x /bin/loadkeys -a -r /etc/boottime.kmap.gz ]; then
+ loadkeys -q /etc/boottime.kmap.gz
+ fi
+}
+
+#
+# Begin real processing
+#
+
+# define crypto variables
+get_options
+
+if [ -z "${rootgpghome}" ]; then
+ rootgpghome=/.gnupg
+fi
+losetup_opts="${losetup_opts} -G ${rootgpghome}"
+
+if [ -z "${rootloop}" ]; then
+ echo "root on loop enabled, but not loop device given"
+ exit 1
+fi
+
+modprobe -q loop
+while ! [ -b "${rootloop}" ]; do
+ sleep 1
+done
+
+# If possible, load the keymap so that the user can input non-en characters
+load_keymap
+
+# Use /sbin/losetup to make sure that we get the loopaes modified one,
+# not the busybox one.
+/sbin/losetup ${losetup_opts} "${rootloop}" "$ROOT"
+
+# init can now pick up new FSTYPE, FSSIZE and ROOT
+echo "ROOT=\"${rootloop}\"" >> /conf/param.conf
+exit 0
+