On Fri, Sep 25, 2009 at 04:31:27PM +0200, Agustin Martin wrote:
> On Thu, Sep 24, 2009 at 09:29:58PM +0200, Jonas Meurer wrote:
> > first, thanks for the bugreport. the reason for change of bahaviour is a
> > line in /usr/share/initramfs/scripts/local-top/cryptroot that sets $ROOT
> > to $NEWROOT in /conf/params.conf in the initramfs:
> >
> > 302: if [ "$cryptrootdev" = "yes" ]; then
> > 303: # required for lilo to find the root
> > device
> > 304: echo "ROOT=$NEWROOT" >> /conf/param.conf
> > 305: fi
> >
> > commenting out these lines and regenerating the initramfs
> > (update-initramfs -u) afterwards should fix it. could you verify that?
>
> Working well with that change. Thanks for debugging.
>
> > unfortunately these lines are required in order to support setups with
> > cryptroot on lvm and lilo as bootloader. thus i don't know what to do
> > about that bug yet. will have to do further investigation and testing
> > with lilo as bootloader first.
>
> I have been playing with attached patch. However, I have just noticed that
> it does not play nicely with more than one cryptopts= entry in cmdline.
> Since I am not familiar with the code, I cannot discard other drawbacks.
Played a bit more with this. See attached patch. It is only tested in my
box, and not extensively (that is, fully untested under lilo+lvm), but it
may be useful.
Cheers,
--
Agustin
--- cryptroot.orig 2009-10-19 13:55:35.000000000 +0200
+++ cryptroot 2009-11-16 15:53:51.000000000 +0100
@@ -316,7 +316,7 @@
return 1
fi
- NEWROOT="/dev/mapper/$cryptlvm"
+ NEWROOT=${cmdline_root=/dev/mapper/$cryptlvm}
if [ "$cryptrootdev" = "yes" ]; then
# required for lilo to find the root device
echo "ROOT=$NEWROOT" >> /conf/param.conf
@@ -344,18 +344,29 @@
#
# Do we have any kernel boot arguments?
-found=''
+cmdline_cryptopts=''
+cmdline_root=''
for opt in $(cat /proc/cmdline); do
case $opt in
cryptopts=*)
- found=yes
- setup_mapping "${opt#cryptopts=}"
+ opt="${opt#cryptopts=}"
+ if [ -n "$opt" ]; then
+ if [ -n "cmdline_cryptopts" ]; then
+ cmdline_cryptopts="$cmdline_cryptopts,$opt"
+ else
+ cmdline_cryptopts="$opt"
+ fi
+ fi
;;
+ root=*)
+ cmdline_root="${opt#root=}"
+ ;;
esac
done
-if [ -n "$found" ]; then
- exit 0
+if [ -n "$cmdline_cryptopts" ]; then
+ setup_mapping "$cmdline_cryptopts"
+ exit 0
fi
# Do we have any settings from the /conf/conf.d/cryptroot file?