From cec0c7be5eb613c66485353fb7a1b169cd61fd2d Mon Sep 17 00:00:00 2001 From: Robin H. Johnson Date: Tue, 24 Jul 2007 23:39:59 -0700 Subject: [PATCH genkernel 1/4] Fixup for bugs from patch in bug 174294. The previous patch from bug #174294 still contained some bugs in the linuxrc and scripts, that caused a failure during boot. Clean them up with one more patch from Nelson Batalha , again on bug #174294. --- ChangeLog | 6 ++++ generic/initrd.scripts | 23 +++++++++++------ generic/linuxrc | 65 ++++++++++++++++++++++++++--------------------- 3 files changed, 57 insertions(+), 37 deletions(-) diff --git a/ChangeLog b/ChangeLog index b0f6c45..c1e23d1 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,12 @@ # Copyright 2006-2007 Gentoo Foundation; Distributed under the GPL v2 # $Header: $ + 24 Jul 2007; Robin H. Johnson generic/initrd.scripts, + generic/linuxrc: + The previous patch from bug #174294 still contained some bugs in the linuxrc + and scripts, that caused a failure during boot. Clean them up with one more + patch from Nelson Batalha , again on bug #174294. + 21 Jun 2007; Chris Gianelloni gen_initrd.sh: Fixed lvm/evms code for initrd generation. Thanks to Vinny on bug #179480 for pointing it out. diff --git a/generic/initrd.scripts b/generic/initrd.scripts index 4493bf8..2a03d81 100644 --- a/generic/initrd.scripts +++ b/generic/initrd.scripts @@ -108,26 +108,33 @@ findkeymount() { # Check for a block device to mount if [ -b "${x}" ] then - good_msg "Attempting to mount key media:- ${x}" - mount -r -t auto ${x} ${NEW_ROOT}/mnt/key \ + if [ ${crypt_silent} = '' ] + then + good_msg "Attempting to mount key media:- ${x}" + fi + + mount -r -t auto ${x} ${NEW_ROOT}/mnt/keydev \ > /dev/null 2>&1 - fi if [ "$?" = '0' ] then # Check for the key - if [ -e ${NEW_ROOT}/mnt/key/${SUBDIR}/${KEYNAME} ] + if [ -e ${NEW_ROOT}/mnt/keydev/${LUKS_ROOT_KEY} ] then - KEY_ROOT="${x}" + LUKS_ROOT_KEYDEV="${x}" + umount ${NEW_ROOT}/mnt/keydev break else - umount ${NEW_ROOT}/mnt/key + umount ${NEW_ROOT}/mnt/keydev fi fi fi done - if [ "${KEY_ROOT}" != '' ] + if [ "${LUKS_ROOT_KEYDEV}" != '' ] then - good_msg "Key media found on ${x}" + if [ ${crypt_silent} = '' ] + then + good_msg "Key media found on ${x}" + fi fi fi } diff --git a/generic/linuxrc b/generic/linuxrc index 6d7c74b..269a27e 100644 --- a/generic/linuxrc +++ b/generic/linuxrc @@ -72,16 +72,13 @@ do CDROOT=1 CDROOT_DEV=`parse_opt "${x}"` ;; - # Start livecd loop, looptype options and encryption + # Start livecd loop, looptype options loop\=*) LOOP=`parse_opt "${x}"` ;; looptype\=*) LOOPTYPE=`parse_opt "${x}"` ;; - loop_crypt\=*) - LOOP_CRYPT=`parse_opt "${x}"` - ;; # Start Device Manager options devfs) USE_DEVFS_NORMAL=1 @@ -182,6 +179,9 @@ do crypt_swap\=*) LUKS_SWAP=`parse_opt "${x}"` ;; + crypt_silent\=*) + LUKS_SILENT=`parse_opt "${x}"` + ;; real_rootflags\=*) REAL_ROOTFLAGS=`parse_opt "${x}"` ;; @@ -236,8 +236,11 @@ setup_md_device # Scan volumes startVolumes -# Initialize LUKS root device -startLUKS +# Initialize LUKS root device except for livecd's +if [ "${CDROOT}" -ne '1' ] +then + startLUKS +fi # Set up unionfs mkdir -p ${NEW_ROOT} @@ -264,7 +267,7 @@ then mount -t tmpfs tmpfs ${NEW_ROOT} fi - for i in dev mnt mnt/cdrom mnt/livecd mnt/key tmp tmp/.initrd mnt/gentoo sys + for i in dev mnt mnt/cdrom mnt/livecd mnt/keydev tmp tmp/.initrd mnt/gentoo sys do mkdir -p ${NEW_ROOT}/$i chmod 755 ${NEW_ROOT}/$i @@ -496,37 +499,41 @@ then # If encrypted, find key and mount, otherwise mount as usual - if [ "${LOOP_CRYPT}" != '' ] + if [ "${LUKS_ROOT}" != '' ] then - good_msg 'You booted an encrypted livecd' - KEYNAME=$(head -n 1 ${NEW_ROOT}/mnt/cdrom/livecd) + if [ "${LUKS_SILENT}" = '' ] + then + good_msg 'You booted an encrypted livecd' + fi - if [ "${KEYNAME}" = '' ] - then - good_msg 'It's not locked with a gpg key, attempting to decrypt manually' - losetup -e ${LOOP_CRYPT} /dev/loop1 ${NEW_ROOT}/mnt/cdrom/${LOOPEXT}${LOOP} - + LUKS_ROOT_KEY=$(head -n 1 ${NEW_ROOT}/mnt/cdrom/livecd) - else - good_msg 'Livecd locked with gpg key' + if [ "${LUKS_ROOT_KEY}" ] + then bootstrapKey - good_msg 'Attempting to decrypt with key' - losetup -K ${NEW_ROOT}/mnt/key/${SUBDIR}/${KEYNAME} -e ${LOOP_CRYPT} /dev/loop1 \ - ${NEW_ROOT}/mnt/cdrom/${LOOPEXT}${LOOP} fi - - test_success 'Unencrypting loop' + + losetup /dev/loop0 ${NEW_ROOT}/mnt/cdrom/${LOOPEXT}${LOOP} + + test_success 'Preparing loop filesystem' + + LUKS_ROOT='/dev/loop0' + + startLUKS case ${LOOPTYPE} in - squashfs) - MOUNTTYPE="squashfs" normal) MOUNTTYPE="ext2" - esac + ;; + *) + MOUNTTYPE="${LOOPTYPE}" + ;; + esac - mount -t ${MOUNTTYPE} -o ro /dev/loop1 ${NEW_ROOT}/mnt/livecd - - test_success 'Mount filesystem, checking key' + + mount -t ${MOUNTTYPE} -o ro /dev/mapper/root ${NEW_ROOT}/mnt/livecd + + test_success 'Mount filesystem' FS_LOCATION='mnt/livecd' @@ -590,7 +597,7 @@ then test_success 'mount /dev/loop0 /' FS_LOCATION='mnt/livecd' fi - + fi # # End cdrom looptype determination and mounting if necessary # -- 1.5.2.4