aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFernando Reyes (likewhoa) <design@missionaccomplish.com>2014-06-23 19:58:33 +0200
committerRick Farina (Zero_Chaos) <zerochaos@gentoo.org>2015-04-29 13:31:45 -0400
commit935febab43502bfd27a0b18d2d4e0cc99a8a4b11 (patch)
tree48c816f84fe22b5e6058e8c4ca655c7d441c556b
parentFixes a bug introduced by 8405e23 that broke none AUFS boots (diff)
downloadgenkernel-935febab43502bfd27a0b18d2d4e0cc99a8a4b11.tar.gz
genkernel-935febab43502bfd27a0b18d2d4e0cc99a8a4b11.tar.bz2
genkernel-935febab43502bfd27a0b18d2d4e0cc99a8a4b11.zip
Coding style changes throughout all the AUFS related code.
-rwxr-xr-xdefaults/initrd.defaults4
-rw-r--r--defaults/initrd.scripts179
-rw-r--r--defaults/linuxrc227
3 files changed, 188 insertions, 222 deletions
diff --git a/defaults/initrd.defaults b/defaults/initrd.defaults
index 2d79fc3..17847fe 100755
--- a/defaults/initrd.defaults
+++ b/defaults/initrd.defaults
@@ -58,7 +58,7 @@ KSUFF='.ko'
REAL_ROOT=''
CONSOLE='/dev/console'
NEW_ROOT='/newroot'
-RC_NO_UMOUNTS="/newroot|/newroot/mnt/changesdev|/mnt/overlay|/mnt/livecd|/mnt/cdrom|/.unions/memory|/.unions/memory/xino"
+RC_NO_UMOUNTS="/newroot|/newroot/mnt/changesdev|/mnt/rw_branch|/mnt/livecd|/mnt/cdrom|/.unions/memory|/.unions/memory/xino"
CDROOT='0'
CDROOT_DEV=''
CDROOT_TYPE='auto'
@@ -71,7 +71,7 @@ CDROOT_MARKER='/livecd'
USE_AUFS_NORMAL=0
AUFS_MODULES=false
AUFS_CHANGES=false
-AUFS_CHANGESFILE=livecd.aufs
+AUFS_CHANGESFILE=/livecd.aufs
LOOPS='/livecd.loop /zisofs /livecd.squashfs /image.squashfs /livecd.gcloop'
diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
index 91056b1..c258c00 100644
--- a/defaults/initrd.scripts
+++ b/defaults/initrd.scripts
@@ -314,8 +314,7 @@ union_insert_modules() {
# This should really go into /etc/init.d/localmounts but until then we manually set this here
conf_rc_no_umounts() {
local conf nomount fnd
- conf="${CHROOT}/etc/rc.conf"
- fnd=0
+ conf=$CHROOT/etc/rc.conf fnd=0
if nomount=$(grep -n '^[[:blank:]]*RC_NO_UMOUNTS=' $conf); then
local i n data cmd IFS
@@ -350,33 +349,28 @@ conf_rc_no_umounts() {
create_changefs() {
local size
- while [ 1 ]
- do
+ while :; do
read -p '<< Size of file (Press Enter for default 256 Mb): ' size
- if [ -z "${size}" ]; then
- size=256
- fi
- size="${size}"
- if [ ${size} -lt 16 ]
- then
- bad_msg "Please give a size of at least 16 Mb"
+ [ -n "$size" ] || size=256
+
+ size=$size
+
+ if [ 15 -ge "$size" ]; then
+ bad_msg "Please give a size of at least 16 Megabytes"
else
- dd if=/dev/zero of=${CHANGESMNT}/${AUFS_CHANGESFILE} bs=1M count=${size} &>/dev/null
- if [ $? = '0' ]
- then
- good_msg "Creation of ${AUFS_CHANGESFILE}, ${size} Mb on ${CHANGESDEV} successful, formatting it ext2"
- mke2fs -F ${CHANGESMNT}/${AUFS_CHANGESFILE} &>/dev/null
+ if dd if=/dev/zero "of=$CHANGESMNT$AUFS_CHANGESFILE" bs=1M count="$size" &>/dev/null; then
+ good_msg "Creation of $AUFS_CHANGESFILE, ${size}Mb on $CHANGESDEV successful, formatting it ext2"
+ mke2fs -F "$CHANGESMNT$AUFS_CHANGESFILE" >/dev/null
AUFS_CHANGES=true
break
else
- rm -f ${CHANGESMNT}/${AUFS_CHANGESFILE}
- bad_msg "Unable to create ${AUFS_CHANGESFILE} on ${CHANGESDEV} of ${size} Mb"
+ rm -f "$CHANGESMNT$AUFS_CHANGESFILE"
+ bad_msg "Unable to create ${AUFS_CHANGESFILE#*/} on $CHANGESDEV of ${size}Mb"
bad_msg "Ensure your disk is not full or read-only"
+
read -p '<< Type "a" to abort, anything else to continue : ' doabort
- if [ "${doabort}" = "a" ]; then
- return 1
- fi
+ if [ a = "$doabort" ]; then return 1; fi
fi
fi
done
@@ -386,87 +380,80 @@ create_changefs() {
setup_aufs() {
bootstrapCD
- if [ -n "${AUFS}" ]
- then
- if [ "${AUFS}" = "detect" ]
- then
- CHANGESMNT="${NEW_ROOT}${CDROOT_PATH}"
- CHANGESDEV=${REAL_ROOT}
+ if [ -n "$AUFS" ]; then
+ if [ detect = "$AUFS" ]; then
+ CHANGESMNT=$NEW_ROOT$CDROOT_PATH
+ CHANGESDEV=$REAL_ROOT
else
- CHANGESDEV=${AUFS}
- good_msg "Mounting ${CHANGESDEV} to ${MEMORY} for aufs support"
- mount -t auto ${CHANGESDEV} ${CHANGESMNT} &>/dev/null
- ret=$?
- if [ "${ret}" -ne 0 ]
- then
- bad_msg "Mount of ${CHANGESDEV} failed, falling back to ramdisk based aufs"
+ CHANGESDEV=$AUFS
+ good_msg "Mounting $CHANGESDEV to $MEMORY for aufs support"
+
+ if ! mount -t auto "$CHANGESDEV" "$CHANGESMNT" &>/dev/null; then
+ bad_msg "Mount of $CHANGESDEV failed, falling back to ramdisk based aufs"
unset AUFS
fi
fi
+
# Check and attempt to create the changesfile
- if [ ! -e ${CHANGESMNT}/${AUFS_CHANGESFILE} ] && [ -n "${AUFS}" ]
- then
+ if [ ! -e $CHANGESMNT$AUFS_CHANGESFILE ] && [ -n "$AUFS" ]; then
create_changefs
- mount -t auto ${CHANGESMNT}/${AUFS_CHANGESFILE} ${MEMORY}
- elif [ -n "${AUFS}" ]
- then
- local nbpass=0
- while [ 1 ]
- do
- mount -t auto ${CHANGESMNT}/${AUFS_CHANGESFILE} ${MEMORY}
- ret=$?
- if [ "${ret}" -ne 0 ]
- then
- if [ ${nbpass} -eq 0 ]
- then
- bad_msg "Mounting of changes file failed, Running e2fsck"
- e2fsck ${CHANGESMNT}/${AUFS_CHANGESFILE}
- nbpass=$((${nbpass} + 1))
- else
- bad_msg "Mount of ${CHANGESDEV} failed, falling back to ramdisk based aufs"
- bad_msg "your ${AUFS_CHANGESFILE} might be messed up, and I couldn't fix it"
- bad_msg "moving ${AUFS_CHANGESFILE} to ${AUFS_CHANGESFILE}.bad"
- mv ${CHANGESMNT}/${AUFS_CHANGESFILE} ${CHANGESMNT}/${AUFS_CHANGESFILE}.bad
- bad_msg "Try to fix it yourself with e2fsck"
+ mount -t auto "$CHANGESMNT$AUFS_CHANGESFILE" "$MEMORY"
+ elif [ -n "$AUFS" ]; then
+ while :; do
+ if mount -t auto "$CHANGESMNT$AUFS_CHANGESFILE" "$MEMORY" &>/dev/null; then
+ break
+ else
+ bad_msg "Mounting of changes file failed, Running e2fsck"
+
+ if ! hash e2fsck &>/dev/null; then
+ bad_msg "/sbin/e2fsck not found! aborting filesystem check"
+ bad_msg "Moving ${AUFS_CHANGESFILE#*/} to ${AUFS_CHANGESFILE#*/}.bad"
+
+ mv "$CHANGESMNT$AUFS_CHANGESFILE" "$CHANGESMNT$AUFS_CHANGESFILE.bad"
+ break
+
+ fi
+
+ if e2fsck "$CHANGESMNT$AUFS_CHANGESFILE" &>/dev/null; then
+ good_msg "e2fsck ran successfully. Please verify data after bootup"
+ else
+ bad_msg "Your ${AUFS_CHANGESFILE#*/} image might be corrupted"
+ bad_msg "moving ${AUFS_CHANGESFILE#*/} to ${AUFS_CHANGESFILE#*/}.bad"
+
+ mv "$CHANGESMNT$AUFS_CHANGESFILE" "$CHANGESMNT$AUFS_CHANGESFILE.bad"
break
fi
- else
- if [ ${nbpass} -eq 1 ]
- then
- good_msg "e2fsck ran successfully. Please check your files after bootup"
- fi
- break
fi
done
fi
# mount tmpfs only in the case when changes= boot parameter was
# empty or we were not able to mount the storage device
- if [ "${CDROOT}" -eq '1' -a ! -f ${CHANGESMNT}/${AUFS_CHANGESFILE} ]
- then
- XINO=${MEMORY}
- umount ${MEMORY} &>/dev/null
- bad_msg "Failed to find ${AUFS_CHANGESFILE} file on ${CHANGESDEV}"
- bad_msg "Create an ext2 ${AUFS_CHANGESFILE} file on this device if you wish to use it for aufs"
- bad_msg "Falling back to ramdisk based aufs for safety"
+ if [ 1 = "$CDROOT" ] && [ ! -f "$CHANGESMNT$AUFS_CHANGESFILE" ]; then
+ XINO=$MEMORY
+ umount "$MEMORY" &>/dev/null
+
+ bad_msg "Create an extfs ${AUFS_CHANGESFILE#*/} file on this device"
+ bad_msg "if you wish to have aufs data persistency on reboots"
+ bad_msg "Falling back to ramdisk based aufs"
good_msg "Mounting ramdisk to $MEMORY for aufs support"
- mount -t tmpfs tmpfs ${MEMORY}
+
+ mount -t tmpfs tmpfs "$MEMORY"
else
- XINO=${MEMORY}/xino
- mkdir -p ${XINO}
- mount -t tmpfs tmpfs ${XINO}
+ XINO=$MEMORY/xino
+
+ mkdir -p "$XINO"
+ mount -t tmpfs aufs-xino "$XINO"
fi
else
- good_msg "Mounting ramdisk to $MEMORY for aufs support"
- mount -t tmpfs tmpfs ${MEMORY}
- XINO=${MEMORY}
+ XINO=$MEMORY
+
+ good_msg "Mounting ramdisk to $MEMORY for aufs support"
+ mount -t tmpfs tmpfs "$MEMORY"
fi
- mkdir -p ${CHANGES}
- mount -t aufs -n -o nowarn_perm,udba=none,xino=${XINO}/.aufs.xino,br:${CHANGES}=rw aufs ${UNION}
- ret=$?
- if [ "${ret}" -ne 0 ]
- then
- bad_msg "Can't setup union ${UNION} in directory!"
+ mkdir -p "$CHANGES"
+ if ! mount -t aufs -n -o "nowarn_perm,udba=none,xino=$XINO/.aufs.xino,br:$CHANGES=rw" aufs "$UNION"; then
+ bad_msg "Can't setup union $UNION in directory!"
USE_AUFS_NORMAL=0
fi
}
@@ -1420,22 +1407,24 @@ getdvhoff() {
setup_squashfs_aufs() {
# Setup aufs directories and vars
- overlay=/mnt/overlay
- static=/mnt/livecd
+ rw_branch=/mnt/rw_branch ro_branch=/mnt/livecd
- for i in "${overlay}" "${static}"; do
- [ ! -d "${i}" ] && mkdir -p "${i}"
+ for dir in $rw_branch $ro_branch; do
+ [ ! -d $dir ] && mkdir -p "$dir"
done
- good_msg "Loading aufs"
- modprobe aufs > /dev/null 2>&1
- mount -t squashfs -o loop,ro "${CDROOT_PATH}/${LOOPEXT}${LOOP}" "${static}"
- mount -t tmpfs none "${overlay}"
- mount -t aufs -o br:${overlay}:${static} aufs "${NEW_ROOT}"
+ good_msg "Loading aufs module ..."
+ modprobe aufs &>/dev/null
- [ ! -d "${NEW_ROOT}${overlay}" ] && mkdir -p "${NEW_ROOT}${overlay}"
- [ ! -d "${NEW_ROOT}${static}" ] && mkdir -p "${NEW_ROOT}${static}"
- for i in "${overlay}" "${static}"; do mount --move "${i}" "${NEW_ROOT}${i}"; done
+ mount -t squashfs -o loop,ro "$CDROOT_PATH/$LOOPEXT$LOOP" "$ro_branch"
+ mount -t tmpfs none "$rw_branch"
+ mount -t aufs -o "br:$rw_branch:$ro_branch" aufs "$NEW_ROOT"
+
+ [ ! -d $NEW_ROOT$rw_branch ] && mkdir -p "$NEW_ROOT$rw_branch"
+ [ ! -d $NEW_ROOT$ro_branch ] && mkdir -p "$NEW_ROOT$ro_branch"
+ for mount in $rw_branch $ro_branch; do
+ mount --move "$mount" "$NEW_ROOT$mount"
+ done
}
setup_unionfs() {
diff --git a/defaults/linuxrc b/defaults/linuxrc
index 8b3ff87..5a341af 100644
--- a/defaults/linuxrc
+++ b/defaults/linuxrc
@@ -255,31 +255,17 @@ do
;;
aufs\=*)
USE_AUFS_NORMAL=1
- echo ${x#*=} | grep , &>/dev/null
- if [ "$?" -eq '0' ]
- then
+ if echo "${x#*=}" | grep , &>/dev/null; then
UID=${x#*,}
AUFS=${x%,*}
else
AUFS=${x#*=}
fi
;;
- aufs.changes\=*)
- USE_AUFS_NORMAL=1
- echo ${x#*=} | grep , &>/dev/null
-
- if [ "$?" -eq '0' ]
- then
- UID=${x#*,}
- AUFS=${x%,*}
- else
- AUFS=${x#*=}
- fi
- ;;
aufs.persistent)
USE_AUFS_NORMAL=1
- AUFS="detect"
+ AUFS=detect
;;
# Allow user to specify the modules location
aufs.modules\=*)
@@ -461,16 +447,14 @@ then
# Setup the root filesystem
bootstrapFS
- if [ "${USE_AUFS_NORMAL}" -eq '1' ]
- then
+ if [ 1 = "$USE_AUFS_NORMAL" ]; then
setup_aufs
- CHROOT=${UNION}
+ CHROOT=$UNION
else
CHROOT=${NEW_ROOT}
fi
- if [ "${REAL_ROOT}" != "/dev/nfs" ] && [ "${LOOPTYPE}" != "sgimips" ] && [ "${USE_AUFS_NORMAL}" != '1' ]
- then
+ if [ /dev/nfs != "$REAL_ROOT" ] && [ sgimips != "$LOOPTYPE" ] && [ 1 != "$USE_AUFS_NORMAL" ]; then
bootstrapCD
fi
@@ -502,7 +486,7 @@ then
fi
# Determine root device
-good_msg 'Determining root device...'
+good_msg 'Determining root device ...'
while true
do
while [ "${got_good_root}" != '1' ]
@@ -720,7 +704,7 @@ then
FS_LOCATION='mnt/livecd'
elif [ "${LOOPTYPE}" = 'squashfs' ]
then
- if [ "${USE_AUFS_NORMAL}" != '1' ]; then
+ if [ 1 != "$USE_AUFS_NORMAL" ]; then
good_msg 'Mounting squashfs filesystem'
_CACHED_SQUASHFS_PATH="${NEW_ROOT}/mnt/${LOOP}"
_squashfs_path="${CDROOT_PATH}/${LOOPEXT}${LOOP}" # Default to uncached
@@ -782,25 +766,23 @@ then
fi
fi # if [ -n "${CRYPT_ROOT}" ]
- if [ "${USE_AUFS_NORMAL}" -eq '1' ]
- then
- union_insert_dir ${CHROOT} ${NEW_ROOT}/${FS_LOCATION}
-
- # Make sure fstab notes livecd is mounted ro. Makes system skip remount which fails on aufs dirs.
- # TODO: remounting all tmpfs as RO seems weird, can we be more specific?
- #sed -e 's|\(.*\s/\s*tmpfs\s*\)defaults\(.*\)|\1defaults,ro\2|' /${UNION}/etc/fstab > /${UNION}/etc/fstab.new
- #mv /${UNION}/etc/fstab.new /${UNION}/etc/fstab
+ if [ 1 = "$USE_AUFS_NORMAL" ]; then
+ union_insert_dir "$CHROOT" "$NEW_ROOT/$FS_LOCATION"
# Function to handle the RC_NO_UMOUNTS variable in ${CHROOT}/etc/rc.conf
conf_rc_no_umounts
# Fstab changes for aufs
- if ! grep -q '^aufs' "${CHROOT}"/etc/fstab 2>/dev/null; then
- for i in /var/tmp /tmp /usr/portage/distfiles; do
- [ ! -d "${CHROOT}${i}" ] && mkdir -p "${CHROOT}${i}"
+ if ! grep -q '^aufs' "$CHROOT/etc/fstab" 2>/dev/null; then
+ for dir in /var/tmp /tmp /usr/portage/distfiles; do
+ [ ! -d $CHROOT$dir ] && mkdir -p "$CHROOT$dir"
done
- cat > "${CHROOT}"/etc/fstab << FSTAB
+ cat > "$CHROOT/etc/fstab" << FSTAB
+####################################################
+## ATTENTION: THIS IS THE FSTAB ON THE LIVECD ##
+## PLEASE EDIT THE FSTAB at /mnt/gentoo/etc/fstab ##
+####################################################
aufs / aufs defaults 0 0
vartmp /var/tmp tmpfs defaults 0 0
tmp /tmp tmpfs defaults 0 0
@@ -808,30 +790,29 @@ distfiles /usr/portage/distfiles tmpfs defaults 0 0
FSTAB
fi
- if ${AUFS_MODULES}; then
+ if $AUFS_MODULES; then
warn_msg "Adding all modules in $MODULESD/modules/"
- if [ -z "${MODULESD}" ]
- then
- union_insert_modules ${CDROOT_PATH}
+ if [ -z "$MODULESD" ]; then
+ union_insert_modules "$CDROOT_PATH"
else
- mkdir ${NEW_ROOT}/mnt/modulesd
- mount "${MODULESD}" ${NEW_ROOT}/mnt/modulesd
- union_insert_modules ${NEW_ROOT}/mnt/modulesd
+ mkdir "$NEW_ROOT/mnt/modulesd"
+ mount "$MODULESD" "$NEW_ROOT/mnt/modulesd"
+ union_insert_modules "$NEW_ROOT/mnt/modulesd"
fi
fi
# Copy user keymap file
if [ -e /etc/sysconfig/keyboard ]; then
- [ ! -d ${CHROOT}/etc/sysconfig ] && mkdir -p ${CHROOT}/etc/sysconfig
- cp /etc/sysconfig/keyboard ${CHROOT}/etc/sysconfig/
+ [ ! -d $CHROOT/etc/sysconfig ] && mkdir -p "$CHROOT/etc/sysconfig"
+ cp /etc/sysconfig/keyboard "$CHROOT/etc/sysconfig/"
fi
# Create the directories for our new union mounts
- test ! -d "${CHROOT}${NEW_ROOT}" && mkdir -p "${CHROOT}${NEW_ROOT}"
+ [ ! -d $CHROOT$NEW_ROOT ] && mkdir -p "$CHROOT$NEW_ROOT"
- if ${AUFS_CHANGES} && [ ! -d "${CHROOT}${NEW_ROOT}/mnt/changesdev" ]; then
- mkdir -p "${CHROOT}${NEW_ROOT}/mnt/changesdev"
+ if $AUFS_CHANGES && [ ! -d $CHROOT$NEW_ROOT/mnt/changesdev ]; then
+ mkdir -p "$CHROOT$NEW_ROOT/mnt/changesdev"
fi
fi
@@ -856,67 +837,67 @@ FSTAB
then
setup_unionfs ${NEW_ROOT} /${FS_LOCATION}
CHROOT=/union
- else
- #XXX Note to potential reviewers. diff formats this section very very oddly. Be sure to review this hunk after applied, do NOT simply read the diff
- if [ ! "${USE_AUFS_NORMAL}" -eq '1' ]
- then
- good_msg "Copying read-write image contents to tmpfs"
- # Copy over stuff that should be writable
- (cd "${NEW_ROOT}/${FS_LOCATION}"; cp -a ${ROOT_TREES} "${NEW_ROOT}") || {
- bad_msg "Copying failed, dropping into a shell."
- do_rundebugshell
- }
-
- # Now we do the links.
- for x in ${ROOT_LINKS}
- do
- if [ -L "${NEW_ROOT}/${FS_LOCATION}/${x}" ]
- then
- ln -s "$(readlink ${NEW_ROOT}/${FS_LOCATION}/${x})" "${x}" 2>/dev/null
- else
- # List all subdirectories of x
- find "${NEW_ROOT}/${FS_LOCATION}/${x}" -type d 2>/dev/null | while read directory
- do
- # Strip the prefix of the FS_LOCATION
- directory="${directory#${NEW_ROOT}/${FS_LOCATION}/}"
-
- # Skip this directory if we already linked a parent directory
- if [ "${current_parent}" != '' ]; then
- var=$(echo "${directory}" | grep "^${current_parent}")
- if [ "${var}" != '' ]; then
- continue
- fi
- fi
- # Test if the directory exists already
- if [ -e "/${NEW_ROOT}/${directory}" ]
- then
- # It does exist, link all the individual files
- for file in $(ls /${NEW_ROOT}/${FS_LOCATION}/${directory})
- do
- if [ ! -d "/${NEW_ROOT}/${FS_LOCATION}/${directory}/${file}" ] && [ ! -e "${NEW_ROOT}/${directory}/${file}" ]; then
- ln -s "/${FS_LOCATION}/${directory}/${file}" "${directory}/${file}" 2> /dev/null
- fi
- done
- else
- # It does not exist, make a link to the livecd
- ln -s "/${FS_LOCATION}/${directory}" "${directory}" 2>/dev/null
- current_parent="${directory}"
- fi # if [ -e "/${NEW_ROOT}/${directory}" ] ... else
- done # while read directory
- fi # if [ -L "${NEW_ROOT}/${FS_LOCATION}/${x}" ] ... else
- done # for x in ${ROOT_LINKS}
- mkdir -p initramfs proc tmp run sys 2>/dev/null
- chmod 1777 tmp
-
- fi # if [ ! "${USE_AUFS_NORMAL}" -eq '1' ]
- #XXX: end extremely confusing hunk
-
- # have handy /mnt/cdrom (CDROOT_PATH) as well
- _new_cdroot="${NEW_ROOT}${CDROOT_PATH}"
- [ ! -d "${_new_cdroot}" ] && mkdir -p "${_new_cdroot}"
- mount --bind "${CDROOT_PATH}" "${_new_cdroot}"
-
- fi # if [ "${USE_UNIONFS_NORMAL}" = '1' ] ... else
+ else
+ #XXX Note to potential reviewers. diff formats this section very very oddly. Be sure to review this hunk after applied, do NOT simply read the diff
+ if [ ! "${USE_AUFS_NORMAL}" -eq '1' ]
+ then
+ good_msg "Copying read-write image contents to tmpfs"
+ # Copy over stuff that should be writable
+ (cd "${NEW_ROOT}/${FS_LOCATION}"; cp -a ${ROOT_TREES} "${NEW_ROOT}") || {
+ bad_msg "Copying failed, dropping into a shell."
+ do_rundebugshell
+ }
+
+ # Now we do the links.
+ for x in ${ROOT_LINKS}
+ do
+ if [ -L "${NEW_ROOT}/${FS_LOCATION}/${x}" ]
+ then
+ ln -s "$(readlink ${NEW_ROOT}/${FS_LOCATION}/${x})" "${x}" 2>/dev/null
+ else
+ # List all subdirectories of x
+ find "${NEW_ROOT}/${FS_LOCATION}/${x}" -type d 2>/dev/null | while read directory
+ do
+ # Strip the prefix of the FS_LOCATION
+ directory="${directory#${NEW_ROOT}/${FS_LOCATION}/}"
+
+ # Skip this directory if we already linked a parent directory
+ if [ "${current_parent}" != '' ]; then
+ var=$(echo "${directory}" | grep "^${current_parent}")
+ if [ "${var}" != '' ]; then
+ continue
+ fi
+ fi
+ # Test if the directory exists already
+ if [ -e "/${NEW_ROOT}/${directory}" ]
+ then
+ # It does exist, link all the individual files
+ for file in $(ls /${NEW_ROOT}/${FS_LOCATION}/${directory})
+ do
+ if [ ! -d "/${NEW_ROOT}/${FS_LOCATION}/${directory}/${file}" ] && [ ! -e "${NEW_ROOT}/${directory}/${file}" ]; then
+ ln -s "/${FS_LOCATION}/${directory}/${file}" "${directory}/${file}" 2> /dev/null
+ fi
+ done
+ else
+ # It does not exist, make a link to the livecd
+ ln -s "/${FS_LOCATION}/${directory}" "${directory}" 2>/dev/null
+ current_parent="${directory}"
+ fi # if [ -e "/${NEW_ROOT}/${directory}" ] ... else
+ done # while read directory
+ fi # if [ -L "${NEW_ROOT}/${FS_LOCATION}/${x}" ] ... else
+ done # for x in ${ROOT_LINKS}
+ mkdir -p initramfs proc tmp run sys 2>/dev/null
+ chmod 1777 tmp
+
+ fi # if [ ! "${USE_AUFS_NORMAL}" -eq '1' ]
+ #XXX: end extremely confusing hunk
+
+ # have handy /mnt/cdrom (CDROOT_PATH) as well
+ _new_cdroot="${NEW_ROOT}${CDROOT_PATH}"
+ [ ! -d "${_new_cdroot}" ] && mkdir -p "${_new_cdroot}"
+ mount --bind "${CDROOT_PATH}" "${_new_cdroot}"
+
+ fi # if [ "${USE_UNIONFS_NORMAL}" = '1' ] ... else
#UML=$(cat /proc/cpuinfo|grep UML|sed -e 's|model name.*: ||')
#if [ "${UML}" = 'UML' ]
@@ -928,18 +909,16 @@ FSTAB
# Let Init scripts know that we booted from CD
export CDBOOT
CDBOOT=1
-else # if [ "${CDROOT}" = '1' ]
+else
if [ "${USE_UNIONFS_NORMAL}" = '1' ]
then
mkdir /union_changes
mount -t tmpfs tmpfs /union_changes
setup_unionfs /union_changes ${NEW_ROOT}
mkdir -p ${UNION}/tmp/.initrd
- fi
- if [ "${USE_AUFS_NORMAL}" -eq '1' ]
- then
- union_insert_dir ${UNION} ${NEW_ROOT}
- mkdir -p ${UNION}/tmp/.initrd
+ elif [ 1 = "$USE_AUFS_NORMAL" ]; then
+ union_insert_dir "$UNION" "$NEW_ROOT"
+ mkdir -p "$UNION/tmp/.initrd"
fi
fi # if [ "${CDROOT}" = '1' ]
@@ -986,22 +965,20 @@ fi
verbose_kmsg
-if [ "${USE_AUFS_NORMAL}" -eq '1' ]
-then
- UNION_MEMORY=${CHROOT}/.unions/memory
+if [ 1 = "$USE_AUFS_NORMAL" ]; then
+ UNION_MEMORY=$CHROOT/.unions/memory
- mkdir -p "${UNION_MEMORY}"
- mount --move "${MEMORY}" "${UNION_MEMORY}"
+ mkdir -p "$UNION_MEMORY"
+ mount --move "$MEMORY" "$UNION_MEMORY"
test_success "Failed to move aufs /memory into the system root"
- for i in /mnt/gentoo /mnt/livecd /mnt/overlay ${CDROOT_PATH}
- do
- mkdir -p "${CHROOT}${i}"
- chmod 755 "${CHROOT}${i}"
+ for dir in /mnt/gentoo $rw_branch $ro_branch $CDROOT_PATH; do
+ mkdir -p "$CHROOT$dir"
+ chmod 755 "$CHROOT$dir"
done
- for i in ${CDROOT_PATH} ${overlay} ${static}; do
- mount --move ${NEW_ROOT}${i} ${CHROOT}${i}
+ for dir in $CDROOT_PATH $rw_branch $ro_branch; do
+ mount --move "$NEW_ROOT$dir" "$CHROOT$dir"
done
fi