mirror of
https://github.com/pentoo/pentoo-overlay
synced 2025-12-19 14:54:41 +01:00
915 lines
25 KiB
Diff
915 lines
25 KiB
Diff
diff -Naur genkernel-3.4.9/generic/initrd.defaults genkernel-3.4.9_pre10.orig/generic/initrd.defaults
|
|
--- genkernel-3.4.9/generic/initrd.defaults 2008-01-11 23:44:19.000000000 +0000
|
|
+++ genkernel-3.4.9_pre10.orig/generic/initrd.defaults 2007-11-28 21:43:19.000000000 +0000
|
|
@@ -73,7 +73,6 @@
|
|
REAL_ROOT=''
|
|
CDROOT=0
|
|
CDROOT_DEV=''
|
|
-CDROOT_TYPE='auto'
|
|
NEW_ROOT="/newroot"
|
|
CONSOLE="/dev/console"
|
|
|
|
diff -Naur genkernel-3.4.9/generic/initrd.scripts genkernel-3.4.9_pre10.orig/generic/initrd.scripts
|
|
--- genkernel-3.4.9/generic/initrd.scripts 2008-01-11 23:44:19.000000000 +0000
|
|
+++ genkernel-3.4.9_pre10.orig/generic/initrd.scripts 2007-11-28 21:43:19.000000000 +0000
|
|
@@ -37,9 +37,9 @@
|
|
|
|
modules_scan() {
|
|
local MODS
|
|
- [ -d "/etc/modules/${1}" ] || touch /etc/modules/${1}
|
|
+ [ -d /etc/modules/${1} ] || touch /etc/modules/${1}
|
|
|
|
- [ -f "/etc/modules/${1}" ] && MODS=`cat /etc/modules/${1}`
|
|
+ [ -f /etc/modules/${1} ] && MODS=`cat /etc/modules/${1}`
|
|
for x in ${MODS}
|
|
do
|
|
MLOAD=`echo ${MLIST} | sed -e "s/.*${x}.*/${x}/"`
|
|
@@ -63,96 +63,82 @@
|
|
done
|
|
}
|
|
|
|
-uppercase(){
|
|
- # needs tr on busybox
|
|
- echo $1 | tr 'a-z' 'A-Z'
|
|
-}
|
|
-
|
|
-
|
|
-findmediamount() {
|
|
- # $1 = mount dir name / media name
|
|
- # $2 = recognition file
|
|
- # $3 = variable to have the device path
|
|
- # $4 = directory before /mnt, like NEW_ROOT
|
|
- # args remaining are possible devices
|
|
-
|
|
- local media=$1 recon=$2 vrbl=$3
|
|
- local mntdir="${4}/mnt/${media}"
|
|
- shift 4
|
|
-
|
|
- good_msg "Looking for the ${media}" ${CRYPT_SILENT}
|
|
-
|
|
+findcdmount() {
|
|
if [ "$#" -gt "0" ]
|
|
then
|
|
-
|
|
- [ ! -d "${mntdir}" ] && mkdir -p ${mntdir} 2>/dev/null >/dev/null
|
|
-
|
|
for x in $*
|
|
do
|
|
# Check for a block device to mount
|
|
if [ -b "${x}" ]
|
|
then
|
|
- good_msg "Attempting to mount media:- ${x}" ${CRYPT_SILENT}
|
|
-
|
|
-# if [ "${media}" = "cdrom" ]; then
|
|
-# mount -r -t iso9660 ${x} ${mntdir} &>/dev/null
|
|
-# else
|
|
-# mount -r -t auto ${x} ${mntdir} &>/dev/null
|
|
-# fi
|
|
- mount -r -t ${CDROOT_TYPE} ${x} ${mntdir} &>/dev/null
|
|
+ good_msg "Attempting to mount media:- ${x}"
|
|
+ if [ -z "${CDROOT_DEV}" ]
|
|
+ then
|
|
+ mount -r -t auto ${x} ${NEW_ROOT}/mnt/cdrom \
|
|
+ > /dev/null 2>&1
|
|
+ else
|
|
+ mount -r -t iso9660 ${x} ${NEW_ROOT}/mnt/cdrom \
|
|
+ > /dev/null 2>&1
|
|
+ fi
|
|
if [ "$?" = '0' ]
|
|
then
|
|
- # Check for the media
|
|
- if [ -f "${mntdir}/${recon}" ]
|
|
+ # Check for a LiveCD
|
|
+ if [ -f ${NEW_ROOT}/mnt/cdrom/${SUBDIR}/livecd ]
|
|
then
|
|
- #set REAL_ROOT, CRYPT_ROOT_KEYDEV or whatever ${vrbl} is
|
|
- eval ${vrbl}'='"${x}"
|
|
- good_msg "Media found on ${x}" ${CRYPT_SILENT}
|
|
+ REAL_ROOT="${x}"
|
|
break
|
|
else
|
|
- umount ${mntdir}
|
|
+ umount ${NEW_ROOT}/mnt/cdrom
|
|
fi
|
|
fi
|
|
fi
|
|
done
|
|
+ if [ "${REAL_ROOT}" != '' ]
|
|
+ then
|
|
+ good_msg "Media found on ${x}"
|
|
+ fi
|
|
fi
|
|
-
|
|
- eval local result='$'${vrbl}
|
|
-
|
|
- [ -n "${result}" ] || bad_msg "Media not found" ${CRYPT_SILENT}
|
|
}
|
|
|
|
-devicelist(){
|
|
- # Locate the cdrom device with our media on it.
|
|
- # CDROM DEVICES
|
|
- local DEVICES="/dev/cdroms/* /dev/ide/cd/* /dev/sr*"
|
|
- # USB Keychain/Storage
|
|
- DEVICES="$DEVICES /dev/sd*"
|
|
- # IDE devices
|
|
- DEVICES="$DEVICES /dev/hd*"
|
|
- # USB using the USB Block Driver
|
|
- DEVICES="$DEVICES /dev/ubd* /dev/ubd/*"
|
|
- # iSeries devices
|
|
- DEVICES="$DEVICES /dev/iseries/vcd*"
|
|
- echo ${DEVICES}
|
|
-}
|
|
-
|
|
-bootstrapCD() {
|
|
- local DEVICES=`devicelist`
|
|
- # The device was specified on the command line, so there's no need to scan
|
|
- # a bunch of extra devices
|
|
- [ -n "${CDROOT_DEV}" ] && DEVICES="${CDROOT_DEV}"
|
|
+findkeymount() {
|
|
+ if [ "$#" -gt "0" ]
|
|
+ then
|
|
+ for x in $*
|
|
+ do
|
|
+ # Check for a block device to mount
|
|
+ if [ -b "${x}" ]
|
|
+ then
|
|
+ if [ ${crypt_silent} = '' ]
|
|
+ then
|
|
+ good_msg "Attempting to mount key media:- ${x}"
|
|
+ fi
|
|
|
|
- findmediamount "cdrom" "${SUBDIR}/livecd" "REAL_ROOT" "${NEW_ROOT}" ${DEVICES}
|
|
+ mount -r -t auto ${x} ${NEW_ROOT}/mnt/keydev \
|
|
+ > /dev/null 2>&1
|
|
+ if [ "$?" = '0' ]
|
|
+ then
|
|
+ # Check for the key
|
|
+ if [ -e ${NEW_ROOT}/mnt/keydev/${LUKS_ROOT_KEY} ]
|
|
+ then
|
|
+ LUKS_ROOT_KEYDEV="${x}"
|
|
+ umount ${NEW_ROOT}/mnt/keydev
|
|
+ break
|
|
+ else
|
|
+ umount ${NEW_ROOT}/mnt/keydev
|
|
+ fi
|
|
+ fi
|
|
+ fi
|
|
+ done
|
|
+ if [ "${LUKS_ROOT_KEYDEV}" != '' ]
|
|
+ then
|
|
+ if [ ${crypt_silent} = '' ]
|
|
+ then
|
|
+ good_msg "Key media found on ${x}"
|
|
+ fi
|
|
+ fi
|
|
+ fi
|
|
}
|
|
|
|
-bootstrapKey() {
|
|
- # $1 = ROOT/SWAP
|
|
- local KEYDEVS=`devicelist`
|
|
- eval local keyloc='"${CRYPT_'${1}'_KEY}"'
|
|
-
|
|
- findmediamount "key" "${keyloc}" "CRYPT_${1}_KEYDEV" "" ${KEYDEVS}
|
|
-}
|
|
|
|
cache_cd_contents() {
|
|
# Check loop file exists and cache to ramdisk if DO_cache is enabled
|
|
@@ -261,7 +247,7 @@
|
|
bad_msg "NFS Mounting failed. Is the path corrent ?"
|
|
fi
|
|
else
|
|
- good_msg "Attempting to mount NFS root on ${NFSROOT}"
|
|
+ good_msg "Attemping to mount NFS root on ${NFSROOT}"
|
|
mount -t nfs -o ro,nolock,rsize=1024,wsize=1024 ${NFSROOT} ${NEW_ROOT}
|
|
if [ "$?" = '0' ]
|
|
then
|
|
@@ -342,74 +328,24 @@
|
|
fi
|
|
}
|
|
|
|
-
|
|
-# msg functions arguments
|
|
-# $1 string
|
|
-# $2 hide flag
|
|
-
|
|
-good_msg() {
|
|
+good_msg() {
|
|
msg_string=$1
|
|
msg_string="${msg_string:-...}"
|
|
- [ "$2" != 1 ] && echo -e "${GOOD}>>${NORMAL}${BOLD} ${msg_string} ${NORMAL}"
|
|
+ echo -e "${GOOD}>>${NORMAL}${BOLD} ${msg_string} ${NORMAL}"
|
|
}
|
|
|
|
bad_msg() {
|
|
msg_string=$1
|
|
msg_string="${msg_string:-...}"
|
|
- if [ "$2" != 1 ]
|
|
- then
|
|
- splash 'verbose' > /dev/null &
|
|
- echo -e "${BAD}!!${NORMAL}${BOLD} ${msg_string} ${NORMAL}"
|
|
- fi
|
|
+ splash 'verbose' > /dev/null &
|
|
+ echo -e "${BAD}!!${NORMAL}${BOLD} ${msg_string} ${NORMAL}"
|
|
}
|
|
|
|
warn_msg() {
|
|
msg_string=$1
|
|
msg_string="${msg_string:-...}"
|
|
- [ "$2" != 1 ] && echo -e "${WARN}**${NORMAL}${BOLD} ${msg_string} ${NORMAL}"
|
|
-}
|
|
-
|
|
-crypt_filter() {
|
|
- if [ ${CRYPT_SILENT} -eq 1 ]
|
|
- then
|
|
- eval $1 >/dev/null 2>/dev/null
|
|
- else
|
|
- eval $1
|
|
- fi
|
|
-}
|
|
-
|
|
-whereis(){
|
|
- # $1 = variable whose value is the path (examples: "REAL_ROOT", "LUKS_KEYDEV")
|
|
- # $2 = label
|
|
- # $3 = optional explanations for failure
|
|
-
|
|
- eval local oldvalue='$'${1}
|
|
-
|
|
- [ \( $# != 2 \) -a \( $# != 3 \) ] && \
|
|
- bad_msg "Bad invocation of function whereis, please file a bug \
|
|
- report with this message" && exit 1
|
|
- [ -n "${3}" ] && local explnt=" or : ${3}" || local explnt="."
|
|
-
|
|
- bad_msg "Could not find the ${2} in ${oldvalue}${explnt}"
|
|
- echo ' Please specify another value or: press Enter for the same, type "shell" for a shell, or "q" to skip...'
|
|
- echo -n "${2}(${oldvalue}) :: "
|
|
- read ${1}
|
|
- case `eval echo '$'${1}` in
|
|
- 'q')
|
|
- eval ${1}'='${oldvalue}
|
|
- warn_msg "Skipping step, this will likely cause a boot failure."
|
|
- break
|
|
- ;;
|
|
- 'shell')
|
|
- eval ${1}'='${oldvalue}
|
|
- echo "To leave and try again just press <Ctrl>+D"
|
|
- run_shell
|
|
- ;;
|
|
- '')
|
|
- eval ${1}'='${oldvalue}
|
|
- ;;
|
|
- esac
|
|
-}
|
|
+ echo -e "${WARN}**${NORMAL}${BOLD} ${msg_string} ${NORMAL}"
|
|
+}
|
|
|
|
bind_mount_dev() {
|
|
# bind-mount /dev/ so that loop devices can be found
|
|
@@ -418,14 +354,14 @@
|
|
|
|
start_dev_mgr() {
|
|
# Check udev is available...
|
|
- if [ "${KV_2_6_OR_GREATER}" -a "${USE_UDEV_NORMAL}" != '0' ]
|
|
+ if [ "${KV_2_6_OR_GREATER}" -a ! "${USE_UDEV_NORMAL}" -eq '0' ]
|
|
then
|
|
USE_UDEV_NORMAL=1
|
|
else
|
|
USE_UDEV_NORMAL=0
|
|
fi
|
|
|
|
- if [ "${USE_UDEV_NORMAL}" = '1' ]
|
|
+ if [ "${USE_UDEV_NORMAL}" -eq '1' ]
|
|
then
|
|
cd /sys
|
|
[ "${DO_slowusb}" ] && sleep 10
|
|
@@ -442,6 +378,42 @@
|
|
fi
|
|
}
|
|
|
|
+bootstrapCD() {
|
|
+ # Locate the cdrom device with our media on it.
|
|
+ # CDROM DEVICES
|
|
+ DEVICES="/dev/cdroms/* /dev/ide/cd/* /dev/sr*"
|
|
+ # USB Keychain/Storage
|
|
+ DEVICES="$DEVICES /dev/sd*"
|
|
+ # IDE devices
|
|
+ DEVICES="$DEVICES /dev/hd*"
|
|
+ # USB using the USB Block Driver
|
|
+ DEVICES="$DEVICES /dev/ubd* /dev/ubd/*"
|
|
+ # iSeries devices
|
|
+ DEVICES="$DEVICES /dev/iseries/vcd*"
|
|
+ # The device was specified on the command line. Shold we even be doing a
|
|
+ # scan at this point? I think not.
|
|
+ [ -n "${CDROOT_DEV}" ] && DEVICES="$DEVICES ${CDROOT_DEV}"
|
|
+
|
|
+ findcdmount $DEVICES
|
|
+}
|
|
+
|
|
+bootstrapKey() {
|
|
+ # Locate the device with our key on it.
|
|
+ # USB Keychain/Storage
|
|
+ KEYDEVS="/dev/sd*"
|
|
+ # CDROM DEVICES
|
|
+ KEYDEVS="${KEYDEVS} /dev/cdroms/* /dev/ide/cd/* /dev/sr*"
|
|
+ # IDE devices
|
|
+ KEYDEVS="${KEYDEVS} /dev/hd*"
|
|
+ # USB using the USB Block Driver
|
|
+ KEYDEVS="${KEYDEVS} /dev/ubd* /dev/ubd/*"
|
|
+ # iSeries devices
|
|
+ KEYDEVS="${KEYDEVs} /dev/iseries/vcd*"
|
|
+
|
|
+ findkeymount ${KEYDEVS}
|
|
+}
|
|
+
|
|
+
|
|
cmdline_hwopts() {
|
|
# Scan CMDLINE for any "doscsi" or "noscsi"-type arguments
|
|
|
|
@@ -538,7 +510,7 @@
|
|
|
|
chooseKeymap
|
|
|
|
- [ "${DEVBIND}" = '1' ] && umount /dev
|
|
+ [ "${DEVBIND}" -eq '1' ] && umount /dev
|
|
|
|
if [ -e /etc/sysconfig/keyboard -a "${CDROOT}" -eq '1' ]
|
|
then
|
|
@@ -639,7 +611,7 @@
|
|
/sbin/mdadm --assemble
|
|
fi
|
|
|
|
- if [ "${USE_DMRAID_NORMAL}" = '1' ]
|
|
+ if [ "${USE_DMRAID_NORMAL}" -eq '1' ]
|
|
then
|
|
if [ -e '/sbin/dmraid' ]
|
|
then
|
|
@@ -653,7 +625,7 @@
|
|
fi
|
|
fi
|
|
|
|
- if [ "${USE_LVM_NORMAL}" = '1' ]
|
|
+ if [ "${USE_LVM_NORMAL}" -eq '1' ]
|
|
then
|
|
if [ -e '/bin/vgscan' -a -e '/bin/vgchange' ]
|
|
then
|
|
@@ -669,7 +641,7 @@
|
|
/bin/vgchange -ay --ignorelockingfailure 2>/dev/null
|
|
|
|
# Disable EVMS since lvm is activated and they dont work together.
|
|
- if [ "${USE_EVMS_NORMAL}" = '1' ]
|
|
+ if [ "${USE_EVMS_NORMAL}" -eq '1' ]
|
|
then
|
|
bad_msg "Disabling EVMS Support because LVM started"
|
|
bad_msg "Do not add dolvm to the cmdline if this is not what you want"
|
|
@@ -681,7 +653,7 @@
|
|
fi
|
|
fi
|
|
|
|
- if [ "${USE_EVMS_NORMAL}" = '1' ]
|
|
+ if [ "${USE_EVMS_NORMAL}" -eq '1' ]
|
|
then
|
|
if [ -e '/sbin/evms_activate' ]
|
|
then
|
|
@@ -692,142 +664,60 @@
|
|
}
|
|
|
|
# Open a LUKS device
|
|
-# It is either the root or a swap, other devices are supported in the scripts provided with sys-fs/cryptsetup-luks
|
|
-# $1 - root/swap
|
|
+# $1 LUKS device
|
|
+# $2 LUKS name
|
|
openLUKS() {
|
|
- # please use 'tr' and this line, or remove it
|
|
- # eval local TYPE=`uppercase $1`
|
|
-
|
|
- case $1 in
|
|
- root)
|
|
- local TYPE=ROOT
|
|
- ;;
|
|
- swap)
|
|
- local TYPE=SWAP
|
|
- ;;
|
|
- esac
|
|
-
|
|
- eval local LUKS_DEVICE='"${CRYPT_'${TYPE}'}"' LUKS_NAME="$1" LUKS_KEY='"${CRYPT_'${TYPE}'_KEY}"' LUKS_KEYDEV='"${CRYPT_'${TYPE}'_KEYDEV}"'
|
|
- local DEV_ERROR=0 KEY_ERROR=0 KEYDEV_ERROR=0
|
|
- local mntkey="/mnt/key/" cryptsetup_options=''
|
|
-
|
|
- [ ! -e /sbin/cryptsetup ] && bad_msg "The initrd does not support LUKS" && exit 1
|
|
- while [ 1 ]
|
|
- do
|
|
- # if crypt_silent=1 and some error occurs, enter shell quietly
|
|
- if [ \( ${CRYPT_SILENT} -eq 1 \) -a \( \( \( ${DEV_ERROR} -eq 1 \) -o \( ${KEY_ERROR} -eq 1 \) \) -o \( ${KEYDEV_ERROR} -eq 1 \) \) ]
|
|
- then
|
|
- run_shell
|
|
- elif [ ${DEV_ERROR} -eq 1 ]
|
|
- then
|
|
- whereis "LUKS_DEVICE" "${LUKS_NAME}"
|
|
- DEV_ERROR=0
|
|
- elif [ ${KEY_ERROR} -eq 1 ]
|
|
- then
|
|
- whereis "LUKS_KEY" "${LUKS_NAME} key"
|
|
- KEY_ERROR=0
|
|
- elif [ ${KEYDEV_ERROR} -eq 1 ]
|
|
- then
|
|
- whereis "LUKS_KEYDEV" "${LUKS_NAME} key device"
|
|
- KEYDEV_ERROR=0
|
|
- else
|
|
- setup_md_device ${LUKS_DEVICE}
|
|
- cryptsetup isLuks ${LUKS_DEVICE}
|
|
- if [ ! "$?" -eq '0' ]
|
|
+ LUKS_DEVICE="$1"
|
|
+ LUKS_NAME="$2"
|
|
+ if [ -e /sbin/cryptsetup ]
|
|
+ then
|
|
+ while [ 1 ]
|
|
+ do
|
|
+ if [ "${LUKS_DEVICE}" = '' ]
|
|
then
|
|
- bad_msg "The LUKS device ${LUKS_DEVICE} does not contain a LUKS header" ${CRYPT_SILENT}
|
|
- DEV_ERROR=1
|
|
+ # LUKS device could not be opened. Prompt user for device.
|
|
+ bad_msg "The LUKS ${LUKS_NAME} block device is not detected."
|
|
+ echo " Please specify a ${LUKS_NAME} LUKS device to open, "q" to skip, or "shell" for a shell..."
|
|
+ echo -n "LUKS ${LUKS_NAME}() :: "
|
|
+ read LUKS_DEVICE
|
|
continue
|
|
+ elif [ "${LUKS_DEVICE}" = 'shell' ]
|
|
+ then
|
|
+ run_shell
|
|
+
|
|
+ LUKS_DEVICE=''
|
|
+ continue
|
|
+ elif [ "${LUKS_DEVICE}" = 'q' ]
|
|
+ then
|
|
+ break
|
|
else
|
|
- # Handle keys
|
|
- if [ -n "${LUKS_KEY}" ]
|
|
+ setup_md_device ${LUKS_DEVICE}
|
|
+ if cryptsetup isLuks ${LUKS_DEVICE}
|
|
then
|
|
- if [ ! -e "${mntkey}${LUKS_KEY}" ]
|
|
+ good_msg "Opening LUKS device ${LUKS_DEVICE}"
|
|
+
|
|
+ cryptsetup luksOpen ${LUKS_DEVICE} ${LUKS_NAME}
|
|
+ if [ ! "$?" -eq '0' ]
|
|
then
|
|
- if [ -b "${LUKS_KEYDEV}" ]
|
|
- then good_msg "Using key device ${LUKS_KEYDEV}." ${CRYPT_SILENT}
|
|
- else
|
|
- good_msg "Please insert removable device ${LUKS_KEYDEV} for ${LUKS_NAME}" ${CRYPT_SILENT}
|
|
- # abort after 10 secs
|
|
- local count=10
|
|
- while [ ${count} -gt 0 ]
|
|
- do
|
|
- count=$((count-1))
|
|
- sleep 1
|
|
- if [ -b "${LUKS_KEYDEV}" ]
|
|
- then
|
|
- good_msg "Removable device ${LUKS_KEYDEV} detected." ${CRYPT_SILENT}
|
|
- break
|
|
- fi
|
|
- done
|
|
- if [ ! -b "${LUKS_KEYDEV}" ]
|
|
- then
|
|
- eval CRYPT_${TYPE}_KEY=${LUKS_KEY}
|
|
- bootstrapKey ${TYPE}
|
|
- eval LUKS_KEYDEV='"${CRYPT_'${TYPE}'_KEYDEV}"'
|
|
- if [ ! -b "${LUKS_KEYDEV}" ]; then
|
|
- KEYDEV_ERROR=1
|
|
- bad_msg "Removable device ${LUKS_KEYDEV} not found." ${CRYPT_SILENT}
|
|
- continue
|
|
- fi
|
|
- # continue otherwise will mount keydev which is mounted by bootstrap
|
|
- continue
|
|
- fi
|
|
- fi
|
|
- # At this point a device was recognized, now let's see if the key is there
|
|
- [ ! -d "$mntkey" ] && mkdir -p ${mntkey} 2>/dev/null >/dev/null
|
|
-
|
|
- mount -n -o ro ${LUKS_KEYDEV} ${mntkey} >/dev/null 2>/dev/null
|
|
- if [ "$?" != '0' ]
|
|
- then
|
|
- KEYDEV_ERROR=1
|
|
- bad_msg "Mounting of device ${LUKS_KEYDEV} failed." ${CRYPT_SILENT}
|
|
- continue
|
|
- else
|
|
- good_msg "Removable device ${LUKS_KEYDEV} mounted." ${CRYPT_SILENT}
|
|
- sleep 2
|
|
- # keyfile exists?
|
|
- if [ ! -e "${mntkey}${LUKS_KEY}" ]; then
|
|
- umount -n ${mntkey} 2>/dev/null >/dev/null
|
|
- KEY_ERROR=1
|
|
- KEYDEV_ERROR=1
|
|
- bad_msg "Key {LUKS_KEY} on device ${LUKS_KEYDEV} not found." ${CRYPT_SILENT}
|
|
- continue
|
|
- fi
|
|
- fi
|
|
+ bad_msg "Failed open LUKS device ${LUKS_DEVICE}"
|
|
+ else
|
|
+ break
|
|
fi
|
|
- # At this point a candidate key exists (either mounted before or not)
|
|
- good_msg "${LUKS_KEY} on device ${LUKS_KEYDEV} found" ${CRYPT_SILENT}
|
|
- cryptsetup_options="-d ${mntkey}${LUKS_KEY}"
|
|
- fi
|
|
- # At this point, keyfile or not, we're ready!
|
|
- crypt_filter "cryptsetup ${cryptsetup_options} luksOpen ${LUKS_DEVICE} ${LUKS_NAME}"
|
|
- if [ $? -eq 0 ]
|
|
- then
|
|
- good_msg "LUKS device ${LUKS_DEVICE} opened" ${CRYPT_SILENT}
|
|
- break
|
|
else
|
|
- bad_msg "Failed to open LUKS device ${LUKS_DEVICE}" ${CRYPT_SILENT}
|
|
- DEV_ERROR=1
|
|
- KEY_ERROR=1
|
|
- KEYDEV_ERROR=1
|
|
+ bad_msg "The LUKS device ${LUKS_DEVICE} does not contain a LUKS header"
|
|
fi
|
|
fi
|
|
- fi
|
|
- done
|
|
- umount ${mntkey} 2>/dev/null >/dev/null
|
|
- rmdir -p ${mntkey} 2>/dev/null >/dev/null
|
|
+ LUKS_DEVICE=''
|
|
+ done
|
|
+ else
|
|
+ bad_msg "The initrd does not support LUKS"
|
|
+ fi
|
|
}
|
|
|
|
startLUKS() {
|
|
-
|
|
- # if key is set but key device isn't, find it
|
|
-
|
|
- [ -n "${CRYPT_ROOT_KEY}" ] && [ -z "${CRYPT_ROOT_KEYDEV}" ] \
|
|
- && sleep 6 && bootstrapKey "ROOT"
|
|
-
|
|
- if [ -n "${CRYPT_ROOT}" ]; then
|
|
- openLUKS "root"
|
|
+ if [ -n "${LUKS_ROOT}" ]
|
|
+ then
|
|
+ openLUKS "${LUKS_ROOT}" "root"
|
|
if [ -n "${REAL_ROOT}" ]
|
|
then
|
|
# Rescan volumes
|
|
@@ -836,18 +726,10 @@
|
|
REAL_ROOT="/dev/mapper/root"
|
|
fi
|
|
fi
|
|
-
|
|
- # same for swap, but no need to sleep if root was unencrypted
|
|
- [ -n "${CRYPT_SWAP_KEY}" ] && [ -z "${CRYPT_SWAP_KEYDEV}" ] \
|
|
- && { [ -z "${CRYPT_ROOT}" ] && sleep 6; bootstrapKey "SWAP"; }
|
|
-
|
|
- if [ -n "${CRYPT_SWAP}" ]; then
|
|
- openLUKS "swap"
|
|
- if [ -z "${REAL_RESUME}" ]
|
|
- then
|
|
- # Resume from swap as default
|
|
- REAL_RESUME="/dev/mapper/swap"
|
|
- fi
|
|
+ if [ -n "${LUKS_SWAP}" ]
|
|
+ then
|
|
+ openLUKS "${LUKS_SWAP}" "swap"
|
|
+ break
|
|
fi
|
|
}
|
|
|
|
@@ -874,7 +756,7 @@
|
|
|
|
|
|
cdupdate() {
|
|
- if [ "${CDROOT}" = '1' ]
|
|
+ if [ "${CDROOT}" -eq '1' ]
|
|
then
|
|
if [ -x /${NEW_ROOT}/mnt/cdrom/cdupdate.sh ]
|
|
then
|
|
@@ -920,7 +802,7 @@
|
|
}
|
|
|
|
setup_unionfs() {
|
|
- if [ "${USE_UNIONFS_NORMAL}" = '1' ]
|
|
+ if [ "${USE_UNIONFS_NORMAL}" -eq '1' ]
|
|
then
|
|
# Directory used for rw changes in union mount filesystem
|
|
UNION=/union
|
|
@@ -975,13 +857,6 @@
|
|
fi
|
|
}
|
|
|
|
-swsusp_resume() {
|
|
- ### determine swap resume partition
|
|
- local device=$(ls -l "${REAL_RESUME}" | sed 's/\ */ /g' | cut -d \ -f 6-7 | sed 's/,\ */:/')
|
|
- [ -f /sys/power/resume ] && echo "${device}" > /sys/power/resume
|
|
- return 0
|
|
-}
|
|
-
|
|
tuxonice_resume() {
|
|
[ -d /proc/suspend2 -o -d /sys/power/suspend2 -o -d /sys/power/tuxonice ] || return
|
|
|
|
diff -Naur genkernel-3.4.9/generic/linuxrc genkernel-3.4.9_pre10.orig/generic/linuxrc
|
|
--- genkernel-3.4.9/generic/linuxrc 2008-01-11 23:44:19.000000000 +0000
|
|
+++ genkernel-3.4.9_pre10.orig/generic/linuxrc 2007-11-28 21:43:19.000000000 +0000
|
|
@@ -44,7 +44,6 @@
|
|
REAL_ROOT=''
|
|
FAKE_ROOT=''
|
|
REAL_ROOTFLAGS=''
|
|
-CRYPT_SILENT=0
|
|
for x in ${CMDLINE}
|
|
do
|
|
case "${x}" in
|
|
@@ -71,9 +70,6 @@
|
|
CDROOT=1
|
|
CDROOT_DEV=`parse_opt "${x}"`
|
|
;;
|
|
- cdroot_type\=*)
|
|
- CDROOT_TYPE=`parse_opt "${x}"`
|
|
- ;;
|
|
# Start livecd loop, looptype options
|
|
loop\=*)
|
|
LOOP=`parse_opt "${x}"`
|
|
@@ -178,31 +174,13 @@
|
|
NFSROOT=`parse_opt "${x}"`
|
|
;;
|
|
crypt_root\=*)
|
|
- CRYPT_ROOT=`parse_opt "${x}"`
|
|
+ LUKS_ROOT=`parse_opt "${x}"`
|
|
;;
|
|
crypt_swap\=*)
|
|
- CRYPT_SWAP=`parse_opt "${x}"`
|
|
- ;;
|
|
- root_key\=*)
|
|
- CRYPT_ROOT_KEY=`parse_opt "${x}"`
|
|
- ;;
|
|
- root_keydev\=*)
|
|
- CRYPT_ROOT_KEYDEV=`parse_opt "${x}"`
|
|
- ;;
|
|
- swap_key\=*)
|
|
- CRYPT_SWAP_KEY=`parse_opt "${x}"`
|
|
- ;;
|
|
- swap_keydev\=*)
|
|
- CRYPT_SWAP_KEYDEV=`parse_opt "${x}"`
|
|
- ;;
|
|
- real_resume\=*)
|
|
- REAL_RESUME=`parse_opt "${x}"`
|
|
+ LUKS_SWAP=`parse_opt "${x}"`
|
|
;;
|
|
- noresume)
|
|
- NORESUME=1
|
|
- ;;
|
|
- crypt_silent)
|
|
- CRYPT_SILENT=1
|
|
+ crypt_silent\=*)
|
|
+ LUKS_SILENT=`parse_opt "${x}"`
|
|
;;
|
|
real_rootflags\=*)
|
|
REAL_ROOTFLAGS=`parse_opt "${x}"`
|
|
@@ -225,7 +203,7 @@
|
|
then
|
|
good_msg 'Loading modules'
|
|
# Load appropriate kernel modules
|
|
- if [ "${NODETECT}" != '1' ]
|
|
+ if [ "${NODETECT}" -ne '1' ]
|
|
then
|
|
for modules in $MY_HWOPTS
|
|
do
|
|
@@ -259,7 +237,7 @@
|
|
startVolumes
|
|
|
|
# Initialize LUKS root device except for livecd's
|
|
-if [ "${CDROOT}" != 1 ]
|
|
+if [ "${CDROOT}" -ne '1' ]
|
|
then
|
|
startLUKS
|
|
fi
|
|
@@ -268,7 +246,7 @@
|
|
mkdir -p ${NEW_ROOT}
|
|
setup_unionfs
|
|
|
|
-if [ "${USE_UNIONFS_NORMAL}" = '1' ]
|
|
+if [ "${USE_UNIONFS_NORMAL}" -eq '1' ]
|
|
then
|
|
CHROOT=${UNION}
|
|
else
|
|
@@ -278,23 +256,17 @@
|
|
# Run debug shell if requested
|
|
rundebugshell
|
|
|
|
-if [ "${NORESUME}" != '1' ]
|
|
-then
|
|
- swsusp_resume
|
|
-# suspend_resume
|
|
-# suspend2_resume
|
|
- tuxonice_resume
|
|
-fi
|
|
+tuxonice_resume
|
|
|
|
-if [ "${CDROOT}" = '1' ]
|
|
+if [ "${CDROOT}" -eq '1' ]
|
|
then
|
|
- if [ ! "${USE_UNIONFS_NORMAL}" = '1' ]
|
|
+ if [ ! "${USE_UNIONFS_NORMAL}" -eq '1' ]
|
|
then
|
|
good_msg "Making tmpfs for ${NEW_ROOT}"
|
|
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
|
|
@@ -385,17 +357,31 @@
|
|
good_msg "Detected real_root=${ROOT_DEV}"
|
|
REAL_ROOT="${ROOT_DEV}"
|
|
else
|
|
- whereis "REAL_ROOT" "root block device"
|
|
+ bad_msg "Could not find root block device: ${REAL_ROOT}"
|
|
+ echo ' Please specify a device to boot, or "shell" for a shell...'
|
|
+ echo -n 'boot() :: '
|
|
+ read REAL_ROOT
|
|
got_good_root=0
|
|
continue
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
- if [ "${REAL_ROOT}" = '' ]
|
|
+ if [ "${REAL_ROOT}" = 'shell' ]
|
|
+ then
|
|
+ run_shell
|
|
+
|
|
+ REAL_ROOT=''
|
|
+ got_good_root=0
|
|
+ continue
|
|
+
|
|
+ elif [ "${REAL_ROOT}" = '' ]
|
|
then
|
|
# No REAL_ROOT determined/specified. Prompt user for root block device.
|
|
- whereis "REAL_ROOT" "root block device"
|
|
+ bad_msg "The root block device is unspecified or not detected."
|
|
+ echo ' Please specify a device to boot, or "shell" for a shell...'
|
|
+ echo -n 'boot() :: '
|
|
+ read REAL_ROOT
|
|
got_good_root=0
|
|
|
|
# Check for a block device or /dev/nfs
|
|
@@ -411,7 +397,7 @@
|
|
done
|
|
|
|
|
|
- if [ "${CDROOT}" = 1 -a "${got_good_root}" = '1' -a "${REAL_ROOT}" != "/dev/nfs" ]
|
|
+ if [ "${CDROOT}" -eq '1' -a "${got_good_root}" = '1' -a "${REAL_ROOT}" != "/dev/nfs" ]
|
|
then
|
|
# CD already mounted; no further checks necessary
|
|
break
|
|
@@ -455,7 +441,7 @@
|
|
|
|
#verbose_kmsg
|
|
|
|
-# If cd root is set determine the looptype to boot
|
|
+# If cdroot is set determine the looptype to boot
|
|
if [ "${CDROOT}" = '1' ]
|
|
then
|
|
good_msg 'Determining looptype ...'
|
|
@@ -509,19 +495,28 @@
|
|
fi
|
|
|
|
cache_cd_contents
|
|
+
|
|
|
|
# If encrypted, find key and mount, otherwise mount as usual
|
|
- if [ -n "${CRYPT_ROOT}" ]
|
|
+ if [ "${LUKS_ROOT}" != '' ]
|
|
then
|
|
- good_msg 'You booted an encrypted livecd' ${CRYPT_SILENT}
|
|
+ if [ "${LUKS_SILENT}" = '' ]
|
|
+ then
|
|
+ good_msg 'You booted an encrypted livecd'
|
|
+ fi
|
|
+
|
|
+ LUKS_ROOT_KEY=$(head -n 1 ${NEW_ROOT}/mnt/cdrom/livecd)
|
|
|
|
- CRYPT_ROOT_KEY=$(head -n 1 ${NEW_ROOT}/mnt/cdrom/livecd)
|
|
+ if [ "${LUKS_ROOT_KEY}" ]
|
|
+ then
|
|
+ bootstrapKey
|
|
+ fi
|
|
|
|
losetup /dev/loop0 ${NEW_ROOT}/mnt/cdrom/${LOOPEXT}${LOOP}
|
|
|
|
test_success 'Preparing loop filesystem'
|
|
|
|
- CRYPT_ROOT='/dev/loop0'
|
|
+ LUKS_ROOT='/dev/loop0'
|
|
|
|
startLUKS
|
|
|
|
@@ -606,7 +601,7 @@
|
|
# End cdrom looptype determination and mounting if necessary
|
|
#
|
|
|
|
- if [ "${USE_UNIONFS_NORMAL}" = '1' ]
|
|
+ if [ "${USE_UNIONFS_NORMAL}" -eq '1' ]
|
|
then
|
|
union_insert_dir ${UNION} ${NEW_ROOT}/${FS_LOCATION}
|
|
|
|
@@ -632,7 +627,7 @@
|
|
fi
|
|
|
|
|
|
- if [ "${USE_UNIONFS_NORMAL}" != '1' ]
|
|
+ if [ ! "${USE_UNIONFS_NORMAL}" -eq '1' ]
|
|
then
|
|
good_msg "Copying read-write image contents to tmpfs"
|
|
# Copy over stuff that should be writable
|
|
@@ -700,7 +695,7 @@
|
|
sleep 10
|
|
fi
|
|
else
|
|
- if [ "${USE_UNIONFS_NORMAL}" = '1' ]
|
|
+ if [ "${USE_UNIONFS_NORMAL}" -eq '1' ]
|
|
then
|
|
union_insert_dir ${UNION} ${NEW_ROOT}
|
|
mkdir -p ${UNION}/tmp/.initrd
|
|
@@ -722,7 +717,7 @@
|
|
# init scripts will be able to unmount it properly at next reboot
|
|
#
|
|
# Eventually, all "unions over /" mounts should go in that /.unions/
|
|
-if [ "${USE_UNIONFS_NORMAL}" = '1' ]
|
|
+if [ "${USE_UNIONFS_NORMAL}" -eq '1' ]
|
|
then
|
|
mkdir -p /${CHROOT}/.unions/memory 2>/dev/null
|
|
mount -o move /memory /${CHROOT}/.unions/memory || echo '*: Failed to move unionfs /memory into the system root!'
|
|
@@ -731,7 +726,7 @@
|
|
if [ "$0" = '/linuxrc' ] || [ "$0" = 'linuxrc' ]
|
|
then
|
|
[ ! -e ${CHROOT}/dev/console ] && mknod ${CHROOT}/dev/console c 5 1
|
|
- echo -ne "${GOOD}>>${NORMAL}${BOLD} Booting${NORMAL}"
|
|
+ echo -ne "${GOOD}>>${NORMAL}${BOLD} Booting"
|
|
|
|
cd ${CHROOT}
|
|
mkdir ${CHROOT}/proc ${CHROOT}/sys 2>/dev/null
|
|
@@ -740,14 +735,14 @@
|
|
then
|
|
sleep 10
|
|
fi
|
|
- echo -ne "${BOLD}.${NORMAL}"
|
|
+ echo -n '.'
|
|
|
|
- if /tmp/.initrd/bin/[ "${USE_DEVFS_NORMAL}" = '1' -a "${CDROOT}" = 0 ]
|
|
+ if /tmp/.initrd/bin/[ "${USE_DEVFS_NORMAL}" -eq '1' -a "${CDROOT}" -eq '0' ]
|
|
then
|
|
umount /tmp/.initrd/proc || echo '*: Failed to unmount the initrd /proc!'
|
|
mount -n --move /tmp/.initrd/dev dev || echo '*: Failed to move over the /dev tree!'
|
|
rm -rf /tmp/.initrd/dev || echo '*: Failed to remove the initrd /dev!'
|
|
- elif /tmp/.initrd/bin/[ "${USE_UDEV_NORMAL}" = '1' ]
|
|
+ elif /tmp/.initrd/bin/[ "${USE_UDEV_NORMAL}" -eq '1' ]
|
|
then
|
|
/tmp/.initrd/bin/[ -e /tmp/.initrd/dev/fd ] && rm /tmp/.initrd/dev/fd
|
|
/tmp/.initrd/bin/[ -e /tmp/.initrd/dev/stdin ] && rm /tmp/.initrd/dev/stdin
|
|
@@ -757,7 +752,7 @@
|
|
umount /tmp/.initrd/dev || echo '*: Failed to unmount the initrd /dev!'
|
|
umount /tmp/.initrd/proc || echo '*: Failed to unmount the initrd /proc!'
|
|
umount /tmp/.initrd/sys || echo '*: Failed to unmount the initrd /sys!'
|
|
- elif /tmp/.initrd/bin/[ "${CDROOT}" -eq 1 ]
|
|
+ elif /tmp/.initrd/bin/[ "${CDROOT}" -eq '1' ]
|
|
then
|
|
umount /tmp/.initrd/proc || echo "*: Failed to unmount the initrd /proc!"
|
|
umount /dev 2>/dev/null
|
|
@@ -767,13 +762,13 @@
|
|
umount /sys 2>/dev/null
|
|
umount /tmp/.initrd/sys 2>/dev/null
|
|
fi
|
|
- echo -ne "${BOLD}.${NORMAL}"
|
|
+ echo -n '.'
|
|
|
|
# /usr/src/linux/Documentation/initrd.txt:
|
|
# exec chroot . /sbin/init </dev/console >/dev/console 2>&1
|
|
|
|
- echo -e "${BOLD}.${NORMAL}"
|
|
exec <dev/console >dev/console 2>&1
|
|
+ echo '.'
|
|
exec chroot . /bin/sh <<- EOF
|
|
umount /tmp/.initrd || echo "*: Failed to unmount the initrd!"
|
|
/sbin/blockdev --flushbufs /dev/ram0 >/dev/null 2>&1
|
|
@@ -783,14 +778,14 @@
|
|
then
|
|
[ ! -e ${CHROOT}/dev/console ] && mknod ${CHROOT}/dev/console c 5 1
|
|
[ ! -e ${CHROOT}/dev/tty1 ] && mknod ${CHROOT}/dev/tty1 c 4 1
|
|
- echo -ne "${GOOD}>>${NORMAL}${BOLD} Booting (initramfs)${NORMAL}"
|
|
+ echo -ne "${GOOD}>>${NORMAL}${BOLD} Booting (initramfs)"
|
|
|
|
cd ${CHROOT}
|
|
mkdir ${CHROOT}/proc ${CHROOT}/sys 2>/dev/null
|
|
- echo -ne "${BOLD}.${NORMAL}"
|
|
+ echo -n '.'
|
|
umount /sys || echo '*: Failed to unmount the initrd /sys!'
|
|
umount /proc || echo '*: Failed to unmount the initrd /proc!'
|
|
- echo -e "${BOLD}.${NORMAL}"
|
|
+ echo -n '.'
|
|
|
|
exec switch_root -c "/dev/console" "${CHROOT}" ${REAL_INIT:-/sbin/init} ${INIT_OPTS}
|
|
fi
|