Files
sablink-distro/sys-kernel/genkernel/files/genkernel-3.4.6-unionfs-inkernel-support.patch
T
lxnay 18580fdcce definitely fix genkernel unionfs support
git-svn-id: http://svn.sabayonlinux.org/overlay@893 d7aec97c-591d-0410-af39-a8856400b30a
2007-02-11 22:26:56 +00:00

939 lines
26 KiB
Diff

diff -Nurp genkernel-3.4.6.orig/gen_compile.sh genkernel-3.4.6/gen_compile.sh
--- genkernel-3.4.6.orig/gen_compile.sh 2006-12-27 20:07:30.000000000 +0100
+++ genkernel-3.4.6/gen_compile.sh 2007-02-11 23:23:30.000000000 +0100
@@ -320,65 +320,6 @@ compile_kernel() {
fi
}
-compile_unionfs_modules() {
- if [ ! -f "${UNIONFS_MODULES_BINCACHE}" ]
- then
- [ -f "${UNIONFS_SRCTAR}" ] ||
- gen_die "Could not find unionfs source tarball: ${UNIONFS_SRCTAR}!"
- cd "${TEMP}"
- rm -rf ${UNIONFS_DIR} > /dev/null
- rm -rf unionfs > /dev/null
- mkdir -p unionfs
- /bin/tar -zxpf ${UNIONFS_SRCTAR} ||
- gen_die 'Could not extract unionfs source tarball!'
- [ -d "${UNIONFS_DIR}" ] ||
- gen_die 'Unionfs directory ${UNIONFS_DIR} is invalid!'
- cd "${UNIONFS_DIR}"
- print_info 1 'unionfs modules: >> Compiling...'
- echo "LINUXSRC=${KERNEL_DIR}" >> fistdev.mk
- echo 'TOPINC=-I$(LINUXSRC)/include' >> fistdev.mk
- echo "MODDIR= /lib/modules/${KV}" >> fistdev.mk
- echo "KERNELVERSION=${KV}" >> fistdev.mk
- # Fix for hardened/selinux systems to have extened attributes
- # per r2d2's request. Also add -DUNIONFS_UNSUPPORTED for 2.6.16
- echo "EXTRACFLAGS=-DUNIONFS_XATTR -DFIST_SETXATTR_CONSTVOID -DUNIONFS_UNSUPPORTED" \
- >> fistdev.mk
- # Here we do something really nasty and disable debugging, along with
- # change our default CFLAGS
- echo "UNIONFS_DEBUG_CFLAG=-DUNIONFS_NDEBUG" >> fistdev.mk
- echo "UNIONFS_OPT_CFLAG= -O2 -pipe" >> fistdev.mk
-
- if [ "${PAT}" -ge '6' ]
- then
- cd "${TEMP}"
- cd "${UNIONFS_DIR}"
- # Compile unionfs module within the unionfs
- # environment not within the kernelsrc dir
- make unionfs.ko || gen_die 'failed to compile unionfs'
- else
- gen_die 'unionfs is only supported on 2.6 targets'
- fi
- print_info 1 'unionfs: >> Copying to cache...'
-
- mkdir -p ${TEMP}/unionfs/lib/modules/${KV}/kernel/fs/unionfs
-
- if [ -f unionfs.ko ]
- then
- cp -f unionfs.ko ${TEMP}/unionfs/lib/modules/${KV}/kernel/fs/unionfs
- else
- cp -f unionfs.o ${TEMP}/unionfs/lib/modules/${KV}/kernel/fs/unionfs
- fi
-
- cd ${TEMP}/unionfs
- /bin/tar -cjf "${UNIONFS_MODULES_BINCACHE}" . ||
- gen_die 'Could not create unionfs modules binary cache'
-
- cd "${TEMP}"
- rm -rf "${UNIONFS_DIR}" > /dev/null
- rm -rf unionfs > /dev/null
- fi
-}
-
compile_unionfs_utils() {
if [ ! -f "${UNIONFS_BINCACHE}" ]
then
@@ -388,15 +329,17 @@ compile_unionfs_utils() {
rm -rf ${UNIONFS_DIR} > /dev/null
rm -rf unionfs > /dev/null
mkdir -p unionfs/sbin
+ rm -rf ${UNIONFS_DIR} > /dev/null
/bin/tar -zxpf ${UNIONFS_SRCTAR} ||
gen_die 'Could not extract unionfs source tarball!'
[ -d "${UNIONFS_DIR}" ] ||
gen_die 'Unionfs directory ${UNIONFS_DIR} is invalid!'
cd "${UNIONFS_DIR}"
print_info 1 'unionfs tools: >> Compiling...'
- sed -i Makefile -e 's|${CC} -o|${CC} -static -o|g'
- compile_generic utils utils
-
+ ./bootstrap &> /dev/null
+ ./configure >> ${DEBUGFILE} 2>&1 || gen_die 'Configuring unionfs-utils failed!'
+ sed -i Makefile -e 's|LDFLAGS = |LDFLAGS = -all-static|g'
+ compile_generic '' utils
print_info 1 'unionfs: >> Copying to cache...'
strip uniondbg unionctl
cp uniondbg ${TEMP}/unionfs/sbin/ ||
@@ -408,7 +351,6 @@ compile_unionfs_utils() {
gen_die 'Could not create unionfs tools binary cache'
cd "${TEMP}"
- rm -rf "${UNIONFS_DIR}" > /dev/null
rm -rf unionfs > /dev/null
fi
}
diff -Nurp genkernel-3.4.6.orig/generic/linuxrc genkernel-3.4.6/generic/linuxrc
--- genkernel-3.4.6.orig/generic/linuxrc 2006-12-27 20:07:30.000000000 +0100
+++ genkernel-3.4.6/generic/linuxrc 2007-02-11 23:22:53.000000000 +0100
@@ -557,6 +557,10 @@ then
if [ "${USE_UNIONFS_NORMAL}" -eq '1' ]
then
union_insert_dir ${UNION} ${NEW_ROOT}/${FS_LOCATION}
+
+ mkdir ${UNION}/mnt/livecd
+ mount --bind ${NEW_ROOT}/${FS_LOCATION} ${UNION}/mnt/livecd
+
# Make sure fstab notes livecd is mounted ro. Makes system skip remount which fails on unionfs dirs.
sed -e 's|\(.*\s/\s*tmpfs\s*\)defaults\(.*\)|\1defaults,ro\2|' /${UNION}/etc/fstab > /${UNION}/etc/fstab.new
diff -Nurp genkernel-3.4.6.orig/generic/linuxrc.orig genkernel-3.4.6/generic/linuxrc.orig
--- genkernel-3.4.6.orig/generic/linuxrc.orig 1970-01-01 01:00:00.000000000 +0100
+++ genkernel-3.4.6/generic/linuxrc.orig 2006-12-27 20:07:30.000000000 +0100
@@ -0,0 +1,745 @@
+#!/bin/sh
+# Copyright 2003-2006 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+. /etc/initrd.defaults
+. /etc/initrd.scripts
+
+splash() {
+ return 0
+}
+
+[ -e /etc/initrd.splash ] && . /etc/initrd.splash
+
+# Clean input/output
+exec >${CONSOLE} <${CONSOLE} 2>&1
+
+if [ "$$" != '1' ]
+then
+ echo '/linuxrc has to be run as the init process as the one'
+ echo 'with a PID of 1. Try adding init="/linuxrc" to the'
+ echo 'kernel command line or running "exec /linuxrc".'
+ exit 1
+fi
+
+mount -t proc proc /proc >/dev/null 2>&1
+mount -o remount,rw / >/dev/null 2>&1
+
+# Set up symlinks
+if [ "$0" = '/init' ]
+then
+ /bin/busybox --install -s
+
+ [ -e /linuxrc ] && rm /linuxrc
+
+ if [ -e /bin/lvm ]
+ then
+ ln -s /bin/lvm /bin/vgscan
+ ln -s /bin/lvm /bin/vgchange
+ fi
+fi
+
+quiet_kmsg
+
+CMDLINE="`cat /proc/cmdline`"
+# Scan CMDLINE for any specified real_root= or cdroot arguments
+REAL_ROOT=''
+FAKE_ROOT=''
+REAL_ROOTFLAGS=''
+for x in ${CMDLINE}
+do
+ case "${x}" in
+ real_root\=*)
+ REAL_ROOT=`parse_opt "${x}"`
+ ;;
+ root\=*)
+ FAKE_ROOT=`parse_opt "${x}"`
+ ;;
+ subdir\=*)
+ SUBDIR=`parse_opt "${x}"`
+ ;;
+ real_init\=*)
+ REAL_INIT=`parse_opt "${x}"`
+ ;;
+ init_opts\=*)
+ INIT_OPTS=`parse_opt "${x}"`
+ ;;
+ # Livecd options
+ cdroot)
+ CDROOT=1
+ ;;
+ cdroot\=*)
+ CDROOT=1
+ CDROOT_DEV=`parse_opt "${x}"`
+ ;;
+ # Start livecd loop and looptype options
+ loop\=*)
+ LOOP=`parse_opt "${x}"`
+ ;;
+ looptype\=*)
+ LOOPTYPE=`parse_opt "${x}"`
+ ;;
+ # Start Device Manager options
+ devfs)
+ USE_DEVFS_NORMAL=1
+ USE_UDEV_NORMAL=0
+ ;;
+ udev)
+ USE_DEVFS_NORMAL=0
+ USE_UDEV_NORMAL=1
+ ;;
+ unionfs)
+ if [ ! -x /sbin/unionctl ]
+ then
+ USE_UNIONFS_NORMAL=0
+ bad_msg 'Unionctl not found: aborting use of unionfs!'
+ else
+ USE_UNIONFS_NORMAL=1
+ fi
+ ;;
+ unionfs\=*)
+ if [ ! -x /sbin/unionctl ]
+ then
+ USE_UNIONFS_NORMAL=0
+ bad_msg 'Unionctl not found: aborting use of unionfs!'
+ else
+ USE_UNIONFS_NORMAL=1
+ CMD_UNIONFS=`parse_opt "${x}"`
+ echo ${CMD_UNIONFS}|grep , >/dev/null 2>&1
+ if [ "$?" -eq '0' ]
+ then
+ UID=`echo ${CMD_UNIONFS#*,}`
+ UNIONFS=`echo ${CMD_UNIONFS%,*}`
+ else
+ UNIONFS=${CMD_UNIONFS}
+ fi
+ fi
+ ;;
+ # Start Volume manager options
+ dolvm2)
+ USE_LVM2_NORMAL=1
+ ;;
+ dodmraid)
+ USE_DMRAID_NORMAL=1
+ ;;
+ dodmraid\=*)
+ DMRAID_OPTS=`parse_opt "${x}"`
+ USE_DMRAID_NORMAL=1
+ ;;
+ doevms2)
+ USE_EVMS2_NORMAL=1
+ ;;
+ # Debug Options
+ debug)
+ DEBUG='yes'
+ ;;
+ # Scan delay options
+ scandelay\=*)
+ SDELAY=`parse_opt "${x}"`
+ ;;
+ scandelay)
+ SDELAY=10
+ ;;
+ # Module no-loads
+ doload\=*)
+ MDOLIST=`parse_opt "${x}"`
+ MDOLIST="`echo ${MDOLIST} | sed -e \"s/,/ /g\"`"
+ ;;
+ nodetect)
+ NODETECT=1
+ ;;
+ noload\=*)
+ MLIST=`parse_opt "${x}"`
+ MLIST="`echo ${MLIST} | sed -e \"s/,/ /g\"`"
+ export MLIST
+ ;;
+ # Redirect output to a specific tty
+ CONSOLE\=*)
+ CONSOLE=`parse_opt "${x}"`
+ exec >${CONSOLE} <${CONSOLE} 2>&1
+ ;;
+ # /dev/md
+ lvmraid\=*)
+ RAID_DEVICES="`parse_opt ${x}`"
+ RAID_DEVICES="`echo ${RAID_DEVICES} | sed -e 's/,/ /g'`"
+ ;;
+ part\=*)
+ MDPART=`parse_opt "${x}"`
+ ;;
+ # NFS
+ ip\=*)
+ IP=`parse_opt "${x}"`
+ ;;
+ nfsroot\=*)
+ NFSROOT=`parse_opt "${x}"`
+ ;;
+ crypt_root\=*)
+ LUKS_ROOT=`parse_opt "${x}"`
+ ;;
+ crypt_swap\=*)
+ LUKS_SWAP=`parse_opt "${x}"`
+ ;;
+ real_rootflags\=*)
+ REAL_ROOTFLAGS=`parse_opt "${x}"`
+ ;;
+ esac
+done
+
+if [ -z "${REAL_ROOT}" -a \( "${CDROOT}" -eq 0 \) -a \( "${FAKE_ROOT}" != "/dev/ram0" \) ]
+then
+ REAL_ROOT="${FAKE_ROOT}"
+fi
+
+splash 'init'
+
+detect_sbp2_devices
+cmdline_hwopts
+
+# Load modules listed in MY_HWOPTS if /lib/modules exists
+if [ -d '/lib/modules' ]
+then
+ good_msg 'Loading modules'
+ # Load appropriate kernel modules
+ if [ "${NODETECT}" -ne '1' ]
+ then
+ for modules in $MY_HWOPTS
+ do
+ modules_scan $modules
+ eval DO_`echo $modules | sed 's/-//'`=1
+ done
+ fi
+ # Always eval doload=...
+ modules_load $MDOLIST
+else
+ for modules in $MY_HWOPTS
+ do
+ eval DO_`echo $modules | sed 's/-//'`=1
+ done
+ good_msg 'Skipping module load; no modules in the initrd!'
+fi
+
+# Mount sysfs
+mount_sysfs
+
+# Delay if needed for USB hardware
+sdelay
+
+# Start udev/devfs
+start_dev_mgr
+
+# Setup md device nodes if they dont exist
+setup_md_device
+
+# Scan volumes
+startVolumes
+
+# Initialize LUKS root device
+startLUKS
+
+# Set up unionfs
+mkdir -p ${NEW_ROOT}
+setup_unionfs
+
+if [ "${USE_UNIONFS_NORMAL}" -eq '1' ]
+then
+ CHROOT=${UNION}
+else
+ CHROOT=${NEW_ROOT}
+fi
+
+# Run debug shell if requested
+rundebugshell
+
+suspend_resume
+suspend2_resume
+
+if [ "${CDROOT}" -eq '1' ]
+then
+ 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 tmp tmp/.initrd mnt/gentoo sys
+ do
+ mkdir -p ${NEW_ROOT}/$i
+ chmod 755 ${NEW_ROOT}/$i
+ done
+ [ ! -e ${NEW_ROOT}/dev/null ] && mknod ${NEW_ROOT}/dev/null c 1 3
+ [ ! -e ${NEW_ROOT}/dev/console ] && mknod ${NEW_ROOT}/dev/console c 5 1
+
+ # For SGI LiveCDs ...
+ if [ "${LOOPTYPE}" = "sgimips" ]
+ then
+ [ ! -e ${NEW_ROOT}/dev/sr0 ] && mknod ${NEW_ROOT}/dev/sr0 b 11 0
+ [ ! -e ${NEW_ROOT}/dev/loop0 ] && mknod ${NEW_ROOT}/dev/loop0 b 7 0
+ fi
+
+ # Required for gensplash to work. Not an issue with the initrd as this
+ # device isnt created there and is not needed.
+ if [ -e /dev/tty1 ]
+ then
+ [ ! -e ${NEW_ROOT}/dev/tty1 ] && mknod ${NEW_ROOT}/dev/tty1 c 4 1
+ fi
+
+ if [ "${REAL_ROOT}" != "/dev/nfs" ] && [ "${LOOPTYPE}" != "sgimips" ]
+ then
+ bootstrapCD
+ fi
+
+ if [ "${REAL_ROOT}" = '' ]
+ then
+ echo -n -e "${WARN}>>${NORMAL}${BOLD} No bootable medium found. Waiting for new devices"
+
+ COUNTER=0
+ while [ $COUNTER -lt 3 ]; do
+ sleep 3
+ echo -n '.'
+ let COUNTER=$COUNTER+1
+ done
+
+ sleep 1
+ echo -e "${NORMAL}"
+ bootstrapCD
+ fi
+
+ if [ "${REAL_ROOT}" = '' ]
+ then
+ # Undo stuff
+ umount ${NEW_ROOT}/dev 2>/dev/null
+ umount ${NEW_ROOT}/sys 2>/dev/null
+ umount /sys 2>/dev/null
+
+ umount ${NEW_ROOT}
+ rm -rf ${NEW_ROOT}/*
+
+ bad_msg 'Could not find CD to boot, something else needed!'
+ CDROOT=0
+ fi
+fi
+
+setup_keymap
+
+# Determine root device
+good_msg 'Determining root device...'
+while true
+do
+ while [ "${got_good_root}" != '1' ]
+ do
+ case "${REAL_ROOT}" in
+ LABEL\=*|UUID\=*)
+
+ ROOT_DEV=""
+ retval=1
+
+ if [ "${retval}" -ne '0' ]; then
+ ROOT_DEV=`findfs "${REAL_ROOT}" 2>/dev/null`
+ retval=$?
+ fi
+
+ if [ "$retval" -ne '0' ]; then
+ ROOT_DEV=`busybox findfs "${REAL_ROOT}" 2>/dev/null`
+ retval=$?
+ fi
+
+ if [ "${retval}" -ne '0' ]; then
+ ROOT_DEV=`blkid -t "${REAL_ROOT}" | cut -d ":" -f 1 2>/dev/null`
+ retval=$?
+ fi
+
+ if [ "${retval}" -eq '0' ] && [ -n "${ROOT_DEV}" ]; then
+ good_msg "Detected real_root=${ROOT_DEV}"
+ REAL_ROOT="${ROOT_DEV}"
+ else
+ 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}" = '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.
+ 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
+ elif [ -b "${REAL_ROOT}" ] || [ "${REAL_ROOT}" = "/dev/nfs" ]
+ then
+ got_good_root=1
+
+ else
+ bad_msg "Block device ${REAL_ROOT} is not a valid root device..."
+ REAL_ROOT=""
+ got_good_root=0
+ fi
+ done
+
+
+ if [ "${CDROOT}" -eq '1' -a "${got_good_root}" = '1' -a "${REAL_ROOT}" != "/dev/nfs" ]
+ then
+ # CD already mounted; no further checks necessary
+ break
+ elif [ "${LOOPTYPE}" = "sgimips" ]
+ then
+ # sgimips mounts the livecd root partition directly
+ # there is no isofs filesystem to worry about
+ break
+ else
+ good_msg "Mounting root..."
+
+ # Try to mount the device as ${NEW_ROOT}
+ if [ "${REAL_ROOT}" = '/dev/nfs' ]; then
+ findnfsmount
+ else
+ # mount ro so fsck doesn't barf later
+# REAL_ROOT_TYPE=`vol_id -t ${REAL_ROOT}`
+# mount -t ${REAL_ROOT_TYPE} -o ro ${REAL_ROOT} ${NEW_ROOT}
+ if [ "${REAL_ROOTFLAGS}" = '' ]; then
+ mount -o ro ${REAL_ROOT} ${NEW_ROOT}
+ else
+ good_msg "Using mount -o ro,${REAL_ROOTFLAGS}"
+ mount -o ro,${REAL_ROOTFLAGS} ${REAL_ROOT} ${NEW_ROOT}
+ fi
+ fi
+
+ # If mount is successful break out of the loop
+ # else not a good root and start over.
+
+ if [ "$?" = '0' ]
+ then
+ break
+ else
+ bad_msg "Could not mount specified ROOT, try again"
+ got_good_root=0
+ REAL_ROOT=''
+ fi
+ fi
+done
+# End determine root device
+
+#verbose_kmsg
+
+# If cdroot is set determine the looptype to boot
+if [ "${CDROOT}" = '1' ]
+then
+ good_msg 'Determining looptype ...'
+ cd ${NEW_ROOT}
+
+ # Find loop and looptype if we have NFS-mounted a livecd
+ if [ "${LOOP}" = '' ] && [ "${REAL_ROOT}" = '/dev/nfs' ]
+ then
+ if [ -e "${NEW_ROOT}/mnt/cdrom/livecd.loop" ]; then
+ LOOP='/livecd.loop'
+ LOOPTYPE='normal'
+ elif [ -e "${NEW_ROOT}/mnt/cdrom/zisofs" ]; then
+ LOOP='/zisofs'
+ LOOPTYPE='zisofs'
+ elif [ -e "${NEW_ROOT}/mnt/cdrom/livecd.squashfs" ]; then
+ LOOP='/livecd.squashfs'
+ LOOPTYPE='squashfs'
+ elif [ -e "${NEW_ROOT}/mnt/cdrom/image.squashfs" ]; then
+ LOOP='/image.squashfs'
+ LOOPTYPE='squashfs'
+ elif [ -e "${NEW_ROOT}/mnt/cdrom/livecd.gcloop" ]; then
+ LOOP='/livecd.gcloop'
+ LOOPTYPE='gcloop'
+ else
+ LOOPTYPE='noloop'
+ fi
+ fi
+
+ # Failsafe the loop type wasn't set
+ if [ "${LOOPTYPE}" = '' ]
+ then
+ warn_msg 'Warning: loop type unspecified!'
+ if [ "${LOOP}" = '/livecd.loop' ]
+ then
+ LOOPTYPE='normal'
+ elif [ "${LOOP}" = '/zisofs' ]
+ then
+ LOOPTYPE='zisofs'
+ elif [ "${LOOP}" = '/livecd.squashfs' ]
+ then
+ LOOPTYPE='squashfs'
+ elif [ "${LOOP}" = '/image.squashfs' ]
+ then
+ LOOPTYPE='squashfs'
+ elif [ "${LOOP}" = '/livecd.gcloop' ]
+ then
+ LOOPTYPE='gcloop'
+ else
+ LOOPTYPE='noloop'
+ fi
+ fi
+
+ cache_cd_contents
+ # Setup the loopback mounts
+
+ if [ "${LOOPTYPE}" = 'normal' ]
+ then
+ good_msg 'Mounting loop filesystem'
+ mount -t ext2 -o loop,ro ${NEW_ROOT}/mnt/cdrom/${LOOPEXT}${LOOP} ${NEW_ROOT}/mnt/livecd
+ test_success 'Mount filesystem'
+ FS_LOCATION='mnt/livecd'
+
+
+ elif [ "${LOOPTYPE}" = 'squashfs' ]
+ then
+ good_msg 'Mounting squashfs filesystem'
+ mount -t squashfs -o loop,ro ${NEW_ROOT}/mnt/cdrom/${LOOPEXT}${LOOP} ${NEW_ROOT}/mnt/livecd
+
+ test_success 'Mount filesystem'
+ FS_LOCATION='mnt/livecd'
+
+ elif [ "${LOOPTYPE}" = 'gcloop' ]
+ then
+ good_msg 'Mounting gcloop filesystem'
+ echo ' ' | losetup -E 19 -e ucl-0 -p0 ${NEW_ROOT}/dev/loop0 ${NEW_ROOT}/mnt/cdrom/${LOOPEXT}${LOOP}
+ test_success 'losetup the loop device'
+
+ mount -t ext2 -o ro ${NEW_ROOT}/dev/loop0 ${NEW_ROOT}/mnt/livecd
+ test_success 'Mount the losetup loop device'
+ FS_LOCATION='mnt/livecd'
+
+ elif [ "${LOOPTYPE}" = 'zisofs' ]
+ then
+ FS_LOCATION="mnt/cdrom/${LOOPEXT}${LOOP}"
+
+ elif [ "${LOOPTYPE}" = 'noloop' ]
+ then
+ FS_LOCATION='mnt/cdrom'
+
+ elif [ "${LOOPTYPE}" = 'sgimips' ]
+ then
+ # getdvhoff finds the starting offset (in bytes) of the squashfs
+ # partition on the cdrom and returns this offset for losetup
+ #
+ # All currently supported SGI Systems use SCSI CD-ROMs, so
+ # so we know that the CD-ROM is usually going to be /dev/sr0.
+ #
+ # We use the value given to losetup to set /dev/loop0 to point
+ # to the liveCD root partition, and then mount /dev/loop0 as
+ # the LiveCD rootfs
+ good_msg 'Locating the SGI LiveCD Root Partition'
+ echo ' ' | \
+ losetup -o $(/bin/getdvhoff ${NEW_ROOT}${REAL_ROOT} 0) \
+ ${NEW_ROOT}${CDROOT_DEV} \
+ ${NEW_ROOT}${REAL_ROOT}
+ test_success 'losetup /dev/sr0 /dev/loop0'
+
+ good_msg 'Mounting the Root Partition'
+ mount -t squashfs -o ro ${NEW_ROOT}${CDROOT_DEV} ${NEW_ROOT}/mnt/livecd
+ test_success 'mount /dev/loop0 /'
+ FS_LOCATION='mnt/livecd'
+ fi
+
+#
+# End cdrom looptype determination and mounting if necessary
+#
+
+ if [ "${USE_UNIONFS_NORMAL}" -eq '1' ]
+ then
+ union_insert_dir ${UNION} ${NEW_ROOT}/${FS_LOCATION}
+
+ # Make sure fstab notes livecd is mounted ro. Makes system skip remount which fails on unionfs dirs.
+ 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
+ fi
+
+ # Unpacking additional packages from NFS mount
+ # This is useful for adding kernel modules to /lib
+ # We do this now, so that additional packages can add whereever they want.
+ if [ "${REAL_ROOT}" = '/dev/nfs' ]
+ then
+ if [ -e "${CHROOT}/mnt/cdrom/add" ]
+ then
+ for targz in `ls ${CHROOT}/mnt/cdrom/add/*.tar.gz`
+ do
+ tarname=`basename ${targz}`
+ good_msg "Adding additional package ${tarname}"
+ (cd ${CHROOT} ; /bin/tar -xzf ${targz})
+ done
+ fi
+ fi
+
+
+ if [ ! "${USE_UNIONFS_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})
+
+ # 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
+ for directory in `find "${NEW_ROOT}/${FS_LOCATION}/${x}" -type d 2>/dev/null`
+ 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 [ "${curent_parrent}" != '' ]; then
+ var=`echo "${directory}" | grep "^${curent_parrent}"`
+ 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
+ done
+ fi
+ done
+
+ [ "${DO_slowusb}" ] && sleep 10
+ mkdir initrd proc tmp sys 2>/dev/null
+ chmod 1777 tmp
+ fi
+
+ #UML=`cat /proc/cpuinfo|grep UML|sed -e 's|model name.*: ||'`
+ #if [ "${UML}" = 'UML' ]
+ #then
+ # # UML Fixes
+ # good_msg 'Updating for uml system'
+ #fi
+
+ # Let Init scripts know that we booted from CD
+ export CDBOOT
+ CDBOOT=1
+ [ "${DO_slowusb}" ] && sleep 10
+else
+ if [ "${USE_UNIONFS_NORMAL}" -eq '1' ]
+ then
+ union_insert_dir ${UNION} ${NEW_ROOT}
+ mkdir -p ${UNION}/tmp/.initrd
+ fi
+fi
+
+# Execute script on the cdrom just before boot to update things if necessary
+cdupdate
+
+if [ "${SUBDIR}" != '' -a -e "${CHROOT}/${SUBDIR}" ]
+then
+ good_msg "Entering ${SUBDIR} to boot"
+ CHROOT=${CHROOT}/${SUBDIR}
+fi
+
+verbose_kmsg
+
+# Move the /memory mount point to what will be the system root so that
+# 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}" -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!'
+fi
+
+if [ "$0" = '/linuxrc' ] || [ "$0" = 'linuxrc' ]
+then
+ [ ! -e ${CHROOT}/dev/console ] && mknod ${CHROOT}/dev/console c 5 1
+ echo -ne "${GOOD}>>${NORMAL}${BOLD} Booting"
+
+ cd ${CHROOT}
+ mkdir ${CHROOT}/proc ${CHROOT}/sys 2>/dev/null
+ pivot_root . tmp/.initrd
+ [ "${DO_slowusb}" ] && sleep 10
+ echo -n '.'
+
+ 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}" -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
+ /tmp/.initrd/bin/[ -e /tmp/.initrd/dev/stdout ] && rm /tmp/.initrd/dev/stdout
+ /tmp/.initrd/bin/[ -e /tmp/.initrd/dev/stderr ] && rm /tmp/.initrd/dev/stderr
+ /tmp/.initrd/bin/[ -e /tmp/.initrd/dev/core ] && rm /tmp/.initrd/dev/core
+ 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' ]
+ then
+ umount /tmp/.initrd/proc || echo "*: Failed to unmount the initrd /proc!"
+ umount /dev 2>/dev/null
+ mount -n --move /tmp/.initrd/dev dev 2>/dev/null
+ rm -rf /tmp/.initrd/dev || echo '*: Failed to remove the initrd /dev!'
+
+ umount /sys 2>/dev/null
+ umount /tmp/.initrd/sys 2>/dev/null
+ fi
+ echo -n '.'
+
+ # /usr/src/linux/Documentation/initrd.txt:
+ # exec chroot . /sbin/init </dev/console >/dev/console 2>&1
+
+ 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
+ exec ${REAL_INIT:-/sbin/init} ${INIT_OPTS}
+EOF
+elif [ "$0" = '/init' ]
+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)"
+
+ cd ${CHROOT}
+ mkdir ${CHROOT}/proc ${CHROOT}/sys 2>/dev/null
+ echo -n '.'
+ umount /sys || echo '*: Failed to unmount the initrd /sys!'
+ umount /proc || echo '*: Failed to unmount the initrd /proc!'
+ echo -n '.'
+
+ exec switch_root -c "/dev/console" "${CHROOT}" /sbin/init ${REAL_INIT}
+fi
+
+splash 'verbose'
+
+echo 'A fatal error has probably occured since /sbin/init did not'
+echo 'boot correctly. Trying to open a shell...'
+echo
+exec /bin/bash
+exec /bin/sh
+exec /bin/ash
+exec sh
diff -Nurp genkernel-3.4.6.orig/gen_initramfs.sh genkernel-3.4.6/gen_initramfs.sh
--- genkernel-3.4.6.orig/gen_initramfs.sh 2006-12-27 20:07:30.000000000 +0100
+++ genkernel-3.4.6/gen_initramfs.sh 2007-02-11 23:22:53.000000000 +0100
@@ -137,21 +137,6 @@ append_devfs(){
rm -rf "${TEMP}/initramfs-devfs-temp" > /dev/null
}
-append_unionfs_modules(){
- if [ -d "${TEMP}/initramfs-unionfs-modules-temp" ]
- then
- rm -r "${TEMP}/initramfs-unionfs-modules-temp/"
- fi
- print_info 1 'UNIONFS MODULES: Adding support (compiling)...'
- compile_unionfs_modules
- mkdir -p "${TEMP}/initramfs-unionfs-modules-temp/"
- /bin/tar -jxpf "${UNIONFS_MODULES_BINCACHE}" -C "${TEMP}/initramfs-unionfs-modules-temp" ||
- gen_die "Could not extract unionfs modules binary cache!";
- cd "${TEMP}/initramfs-unionfs-modules-temp/"
- find . -print | cpio ${CPIO_ARGS} --append -F "${CPIO}"
- rm -r "${TEMP}/initramfs-unionfs-modules-temp/"
-}
-
append_unionfs_tools(){
if [ -d "${TEMP}/initramfs-unionfs-tools-temp" ]
then
@@ -484,7 +469,6 @@ create_initramfs() {
append_data 'busybox' "${BUSYBOX}"
append_data 'devfs' "${DEVFS}"
# append_data 'udev' "${UDEV}"
- append_data 'unionfs_modules' "${UNIONFS}"
append_data 'unionfs_tools' "${UNIONFS}"
append_data 'suspend' "${SUSPEND}"
append_data 'lvm2' "${LVM2}"
diff -Nurp genkernel-3.4.6.orig/gen_initrd.sh genkernel-3.4.6/gen_initrd.sh
--- genkernel-3.4.6.orig/gen_initrd.sh 2006-12-27 20:07:29.000000000 +0100
+++ genkernel-3.4.6/gen_initrd.sh 2007-02-11 23:22:53.000000000 +0100
@@ -126,15 +126,6 @@ create_base_initrd_sys() {
# fi
# fi
- #unionfs modules
- if [ "${UNIONFS}" -eq '1' ]
- then
- print_info 1 'UNIONFS MODULES: Adding support (compiling)...'
- compile_unionfs_modules
- /bin/tar -jxpf "${UNIONFS_MODULES_BINCACHE}" -C "${TEMP}/initrd-temp" ||
- gen_die "Could not extract unionfs modules binary cache!";
- fi
-
#unionfs utils
if [ "${UNIONFS}" -eq '1' ]
then
diff -Nurp genkernel-3.4.6.orig/genkernel.conf genkernel-3.4.6/genkernel.conf
--- genkernel-3.4.6.orig/genkernel.conf 2006-12-27 20:07:28.000000000 +0100
+++ genkernel-3.4.6/genkernel.conf 2007-02-11 23:22:53.000000000 +0100
@@ -122,18 +122,10 @@ DMRAID_DIR="dmraid/${DMRAID_VER}"
DMRAID_SRCTAR="${GK_SHARE}/pkg/dmraid-${DMRAID_VER}.tar.bz2"
DMRAID_BINCACHE="%%CACHE%%/dmraid-${DMRAID_VER}-%%ARCH%%.tar.bz2"
-# Kernel Version Compatibility
-# (from http://www.am-utils.org/project-unionfs.html)
-
-# 2.6.9 - 2.6.15 1.1.5
-# 2.6.16 1.2
-# 2.6.17 1.3
-
UNIONFS_VER="VERSION_UNIONFS"
-UNIONFS_DIR="unionfs-${UNIONFS_VER}"
-UNIONFS_SRCTAR="${GK_SHARE}/pkg/unionfs-${UNIONFS_VER}.tar.gz"
-UNIONFS_BINCACHE="%%CACHE%%/unionfs-${UNIONFS_VER}-tools-%%ARCH%%.tar.bz2"
-UNIONFS_MODULES_BINCACHE="%%CACHE%%/unionfs-${UNIONFS_VER}-modules-%%KV%%-%%ARCH%%.tar.bz2"
+UNIONFS_DIR="unionfs-utils"
+UNIONFS_SRCTAR="${GK_SHARE}/pkg/unionfs-utils-${UNIONFS_VER}.tar.gz"
+UNIONFS_BINCACHE="%%CACHE%%/unionfs-utils-${UNIONFS_VER}-%%ARCH%%.tar.bz2"
E2FSPROGS_VER="VERSION_E2FSPROGS"
E2FSPROGS_DIR="e2fsprogs-${E2FSPROGS_VER}"