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
+

Reply via email to