[pkg-cryptsetup-devel] Bug#511840: - new revised patch

Pyotr Berezhkov p.g.berezhkov at gmail.com
Fri Jan 16 19:37:55 UTC 2009


Well, here you have it.  With this revision of the patch, the code only
runs if the user explicitly asks it to by specifying 'cryptsetroot' on
the kernel command line.  Otherwise nothing happens.  This was done in
response to maximilian attems' objection:

>  anyway the way you tried to solve it is out of question:
>  random script deleting the root device node.

--------------------------------- SNIP ------------------------------------
diff --git a/scripts/local-top/cryptroot b/scripts/local-top/cryptroot
index 56d1d63..544b3ef 100755
--- a/scripts/local-top/cryptroot
+++ b/scripts/local-top/cryptroot
@@ -264,6 +264,16 @@ setup_mapping()
 		fi
 
 		message "cryptsetup: $crypttarget setup successfully"
+		for opt in $(cat /proc/cmdline); do
+			if [ $opt = "cryptsetroot" ]; then
+				message "cryptsetup: linking /dev/root to $NEWROOT"
+				echo "ROOT=$NEWROOT" >> /conf/param.conf
+				if [ -e "/dev/root" ]; then
+					rm -f /dev/root
+				fi
+				ln -s $NEWROOT /dev/root
+			fi
+		done;
 		break
 	done
 
--------------------------------- SNIP ------------------------------------

Now you'll see what the patch does for us.  Here's the state of the
system after booting with the patch applied:

  # cat /proc/cmdline
  BOOT_IMAGE=LinuxExp ro root=fe04 cryptsetroot

Note that Lilo thought the root device was at 254,4:

  0xfe04 => major 254, minor 4

But it's really at 254,7!

  # cat /proc/mounts
  rootfs / rootfs rw 0 0
  none /sys sysfs rw,nosuid,nodev,noexec 0 0
  none /proc proc rw,nosuid,nodev,noexec 0 0
  udev /dev tmpfs rw,size=10240k,mode=755 0 0
  /dev/mapper/lenny-root_crypt / ext3 rw,errors=remount-ro,data=ordered 0 0
  tmpfs /lib/init/rw tmpfs rw,nosuid,mode=755 0 0
  usbfs /proc/bus/usb usbfs rw,nosuid,nodev,noexec 0 0
  tmpfs /dev/shm tmpfs rw,nosuid,nodev 0 0
  devpts /dev/pts devpts rw,nosuid,noexec,gid=5,mode=620 0 0
  /dev/mapper/lenny-boot /boot ext2 rw,errors=continue 0 0

  # ls -l /dev/dm-7 /dev/root /dev/mapper
  brw-rw---- 1 root disk 254, 7 Янв 16 21:42 /dev/dm-7
  lrwxrwxrwx 1 root root      4 Янв 16 21:43 /dev/root -> dm-7
  
  /dev/mapper/:
  итого 0
  crw-rw---- 1 root root  10, 60 Янв 16 21:42 control
  brw-rw---- 1 root disk 254,  5 Янв 16 21:42 lenny-boot
  brw-rw---- 1 root disk 254,  6 Янв 16 21:42 lenny-root
  brw-rw---- 1 root disk 254,  7 Янв 16 21:43 lenny-root_crypt
  brw-rw---- 1 root disk 254,  0 Янв 16 21:42 sid-boot
  brw-rw---- 1 root disk 254,  2 Янв 16 21:42 sid-root
  brw-rw---- 1 root disk 254,  1 Янв 16 21:42 sid-root-real
  brw-rw---- 1 root disk 254,  4 Янв 16 21:42 sid-sid--root_snapshot
  brw-rw---- 1 root disk 254,  3 Янв 16 21:42 sid-sid--root_snapshot-cow

I added the snapshot volume 'sid-sid--root_snapshot' at my previous
uptime.  Running lilo after adding the snapshot didn't help, because the
majors and minors change _only after rebooting_.  When I ran lilo before
rebooting the root device looked like this:

  brw-rw---- 1 root disk 254,  4 Янв 16 20:36 lenny-root_crypt

So you see, with the patch we simply ignore Lilo's silly hardcoding of
the root device major/minor, letting LVM and dm-crypt set everything up
for us a boot time.  Otherwise, booting fails after adding or deleting
LVM volumes.  Your comments are welcome.

  -PGB





More information about the pkg-cryptsetup-devel mailing list