You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
285 lines
9.0 KiB
285 lines
9.0 KiB
diff --git a/arch/x86/modules_load b/arch/x86/modules_load
|
|
index 2e93dce..a6db29d 100644
|
|
--- a/arch/x86/modules_load
|
|
+++ b/arch/x86/modules_load
|
|
@@ -22,5 +22,5 @@ MODULES_PCMCIA="pcmcia pcmcia_core yenta_socket pd6729 i82092 i82365 tcic ds ide
|
|
MODULES_USB="ehci-hcd uhci usb-ohci hid usb-storage uhci-hcd ohci-hcd usbhid sl811-hcd"
|
|
|
|
# Filesystems
|
|
-MODULES_FS="ext2 ext3 reiserfs jfs nfs xfs fuse"
|
|
+MODULES_FS="ext2 ext3 ext4 reiserfs jfs nfs xfs fuse"
|
|
|
|
diff --git a/arch/x86_64/modules_load b/arch/x86_64/modules_load
|
|
index 67b9a48..857f1a3 100644
|
|
--- a/arch/x86_64/modules_load
|
|
+++ b/arch/x86_64/modules_load
|
|
@@ -22,4 +22,4 @@ MODULES_PCMCIA="pcmcia pcmcia_core yenta_socket pd6729 i82092 i82365 tcic ds ide
|
|
MODULES_USB="ehci-hcd uhci usb-ohci hid usb-storage uhci-hcd ohci-hcd usbhid sl811-hcd"
|
|
|
|
# Filesystems
|
|
-MODULES_FS="ext2 ext3 reiserfs jfs nfs xfs fuse"
|
|
+MODULES_FS="ext2 ext3 ext4 reiserfs jfs nfs xfs fuse"
|
|
diff --git a/defaults/initrd.defaults b/defaults/initrd.defaults
|
|
index a417144..92e9d2d 100755
|
|
--- a/defaults/initrd.defaults
|
|
+++ b/defaults/initrd.defaults
|
|
@@ -68,6 +68,7 @@ fi
|
|
|
|
REAL_ROOT=''
|
|
CDROOT='0'
|
|
+SCRATCH='0'
|
|
CDROOT_DEV=''
|
|
CDROOT_TYPE='auto'
|
|
NEW_ROOT='/newroot'
|
|
diff --git a/defaults/initrd.scripts b/defaults/initrd.scripts
|
|
index beec6de..317eb99 100755
|
|
--- a/defaults/initrd.scripts
|
|
+++ b/defaults/initrd.scripts
|
|
@@ -169,11 +169,24 @@ cache_cd_contents() {
|
|
# TODO: Check the size of the image versus the size of our tmpfs
|
|
# along with the amount of available RAM and increase tmpfs size
|
|
# if necessary. (Not having awk sucks...)
|
|
- # z=0
|
|
- # for i in $(cat /proc/meminfo | grep -e ^MemFree -e ^Cached | \
|
|
- # cut -d: -f2 | cut -dk -f1 | sed -e "s/^\s*//") ; do
|
|
- # z=$(($z + $i)) ; done
|
|
- # echo $z
|
|
+
|
|
+ # getting memory
|
|
+ z=0
|
|
+ for i in $(cat /proc/meminfo | grep -e ^MemFree -e ^Cached | \
|
|
+ cut -d: -f2 | cut -dk -f1 | sed -e "s/^\s*//") ; do
|
|
+ z=$(($z + $i)) ; done
|
|
+
|
|
+ # getting size tmpfs of default
|
|
+ let curtfs=$z/2
|
|
+
|
|
+ # getting size of image
|
|
+ let q=`ls -la ${NEW_ROOT}/mnt/cdrom/${LOOP} | sed -r -n 's/(\S*\s*){4}(\S*).*/\2/p'`/5000*6
|
|
+
|
|
+ if [[ $((${curtfs}<${q})) = "1" -a $((${q}<${z})) = "1" ]];
|
|
+ then
|
|
+ good_msg "Increasing size of tmpfs for ${NEW_ROOT}"
|
|
+ mount -o remount,size=${q}000 -t tmpfs tmpfs ${NEW_ROOT}
|
|
+ fi
|
|
good_msg "Copying loop file for caching..."
|
|
cp -a ${NEW_ROOT}/mnt/cdrom/${LOOP} ${NEW_ROOT}/mnt/${LOOP}
|
|
if [ $? -ne 0 ]
|
|
@@ -184,6 +197,8 @@ cache_cd_contents() {
|
|
rm -rf ${NEW_ROOT}/mnt/zisofs 2>/dev/null
|
|
else
|
|
LOOPEXT='../'
|
|
+ good_msg "Unmounting media from ${NEW_ROOT}/mnt/cdrom"
|
|
+ umount ${NEW_ROOT}/mnt/cdrom
|
|
fi
|
|
fi
|
|
fi
|
|
@@ -950,6 +965,32 @@ getdvhoff() {
|
|
echo $(( $(hexdump -n 4 -s $((316 + 12 * $2)) -e '"%i"' $1) * 512))
|
|
}
|
|
|
|
+load_union_module() {
|
|
+ UNIONTYPE=""
|
|
+ # find module for union file system
|
|
+ [ -n "$(find /lib/ -name unionfs.ko)" ] && UNIONTYPE="unionfs"
|
|
+ [ -n "$(find /lib/ -name aufs.ko)" ] && UNIONTYPE="aufs"
|
|
+ if [ -z "${UNIONTYPE}" ]
|
|
+ then
|
|
+ bad_msg "Module for union file system is not found!"
|
|
+ run_shell
|
|
+ else
|
|
+ modprobe ${UNIONTYPE} > /dev/null 2>&1
|
|
+ # error on load union module
|
|
+ if [ -z "$(lsmod | grep $UNIONTYPE)" ]
|
|
+ then
|
|
+ bad_msg "Module for union file system is not correct!"
|
|
+ if [[ ${UNIONTYPE} = aufs ]]
|
|
+ then
|
|
+ bad_msg "Probably kernel compiled without standalone patch."
|
|
+ fi
|
|
+ run_shell
|
|
+ fi
|
|
+
|
|
+ good_msg "Loading ${UNIONTYPE}"
|
|
+ fi
|
|
+}
|
|
+
|
|
setup_unionfs() {
|
|
local rw_dir=$1
|
|
local ro_dir=$2
|
|
@@ -969,6 +1010,7 @@ setup_unionfs() {
|
|
mkdir -p ${UNION}
|
|
good_msg "Loading fuse module"
|
|
modprobe fuse > /dev/null 2>&1
|
|
+ load_union_module
|
|
# if [ -n "${UNIONFS}" ]
|
|
# then
|
|
# CHANGESDEV=${UNIONFS}
|
|
@@ -998,10 +1040,94 @@ setup_unionfs() {
|
|
mkdir /tmp
|
|
mkdir -p ${UNION}
|
|
# mkdir -p $CHANGES
|
|
-# mount -t unionfs -o dirs=$CHANGES=rw unionfs ${UNION}
|
|
+## mount -t unionfs -o dirs=$CHANGES=rw unionfs ${UNION}
|
|
+
|
|
+ if [ "${SCRATCH}" -ne 0 ];
|
|
+ then
|
|
+ good_msg "Loading in scratch mode"
|
|
+ BUILDERDIR=${UNION}/mnt/builder
|
|
+ SCRATCHDIR=${UNION}/mnt/scratch
|
|
+ DELTADIR=${rw_dir}/mnt/delta
|
|
+ WORKSPACEDIR=${rw_dir}/mnt/workspace
|
|
+ mount -o remount,rw ${rw_dir}/mnt/cdrom >/dev/null 2>&1
|
|
+ touch ${rw_dir}/mnt/cdrom/livecd >/dev/null 2>&1
|
|
+ if [ "$?" -ne 0 ];
|
|
+ then
|
|
+ ISRW=0
|
|
+ else
|
|
+ ISRW=1
|
|
+ fi
|
|
+
|
|
+ mkdir -p ${DELTADIR}
|
|
+ mkdir -p ${WORKSPACEDIR}
|
|
+ if [[ ${UNIONTYPE} = aufs ]]
|
|
+ then
|
|
+ if ! mount -t aufs -o udba=reval,br:${WORKSPACEDIR}=rw:${DELTADIR}=ro+wh:${rw_dir}/mnt/livecd=ro none ${UNION}
|
|
+ then
|
|
+ bad_msg "Can't setup union mount!"
|
|
+ run_shell
|
|
+ fi
|
|
+ else
|
|
+ mount -t unionfs -o dirs=${WORKSPACEDIR}=rw:${DELTADIR}=ro:${rw_dir}/mnt/livecd=ro unionfs ${UNION}
|
|
+ fi
|
|
+ tmpret=$?;[ "$tmpret" -ne 0 ] && ret=$tmpret
|
|
+ mkdir -p ${SCRATCHDIR}/calculate
|
|
+ mkdir -p ${SCRATCHDIR}/delta
|
|
+ mkdir -p ${SCRATCHDIR}/workspace
|
|
+ mount -o bind ${rw_dir}/mnt/delta ${SCRATCHDIR}/delta
|
|
+ tmpret=$?;[ "$tmpret" -ne 0 ] && ret=$tmpret
|
|
+ mount -o bind ${rw_dir}/mnt/workspace ${SCRATCHDIR}/workspace
|
|
+ tmpret=$?;[ "$tmpret" -ne 0 ] && ret=$tmpret
|
|
+ mkdir -p ${BUILDERDIR}
|
|
+ if [[ ${UNIONTYPE} = aufs ]]
|
|
+ then
|
|
+ if ! mount -t aufs -o udba=reval,br:${DELTADIR}=rw:${rw_dir}/mnt/livecd=ro none ${BUILDERDIR}
|
|
+ then
|
|
+ bad_msg "Can't setup union mount!"
|
|
+ run_shell
|
|
+ fi
|
|
+ else
|
|
+ mount -t unionfs -o dirs=${DELTADIR}=rw:${rw_dir}/mnt/livecd=ro unionfs ${BUILDERDIR}
|
|
+ fi
|
|
+ tmpret=$?;[ "$tmpret" -ne 0 ] && ret=$tmpret
|
|
+ mount -o bind ${rw_dir}/mnt/livecd ${SCRATCHDIR}/calculate
|
|
+ tmpret=$?;[ "$tmpret" -ne 0 ] && ret=$tmpret
|
|
+ if [ "$ISRW" -ne 0 ];
|
|
+ then
|
|
+ FLASHDIR=${UNION}/mnt/flash
|
|
+ mkdir -p ${FLASHDIR}
|
|
+ mount -o bind ${rw_dir}/mnt/cdrom ${FLASHDIR}
|
|
+ tmpret=$?;[ "$tmpret" -ne 0 ] && ret=$tmpret
|
|
+ else
|
|
+ CDROMDIR=${UNION}/mnt/cdrom
|
|
+ mkdir -p ${CDROMDIR}
|
|
+ mount -o bind ${rw_dir}/mnt/cdrom ${CDROMDIR}
|
|
+ tmpret=$?;[ "$tmpret" -ne 0 ] && ret=$tmpret
|
|
+ fi
|
|
+ else
|
|
+ CDROMDIR=${UNION}/mnt/cdrom
|
|
+ LIVECDDIR=${UNION}/mnt/livecd
|
|
+
|
|
+ if [[ ${UNIONTYPE} = aufs ]]
|
|
+ then
|
|
+ if ! mount -t aufs -o udba=reval,br:${rw_dir}:${ro_dir}=ro none ${UNION}
|
|
+ then
|
|
+ bad_msg "Can't setup union mount!"
|
|
+ run_shell
|
|
+ fi
|
|
+ else
|
|
+ mount -t unionfs -o dirs=${rw_dir}:${ro_dir}=ro unionfs ${UNION}
|
|
+ fi
|
|
+ chmod 0755 ${UNION}
|
|
+ mount -o bind ${rw_dir}/mnt/cdrom ${CDROMDIR}
|
|
+ mount -o bind ${rw_dir}/mnt/livecd ${LIVECDDIR}
|
|
+ ret=$?
|
|
+ fi
|
|
+
|
|
+ chmod 1777 ${UNION}/tmp
|
|
good_msg "Creating union mount"
|
|
- unionfs -o allow_other,cow,noinitgroups,suid,dev ${rw_dir}=RW:${ro_dir}=RO ${UNION} 2>/dev/null
|
|
- ret=$?
|
|
+# unionfs -o allow_other,cow,noinitgroups,suid,dev,default_permissions,use_ino ${rw_dir}=RW:${ro_dir}=RO ${UNION} 2>/dev/null
|
|
+# ret=$?
|
|
if [ "${ret}" -ne 0 ]
|
|
then
|
|
bad_msg "Can't setup union mount!"
|
|
diff --git a/defaults/linuxrc b/defaults/linuxrc
|
|
index d506f83..538b29b 100755
|
|
--- a/defaults/linuxrc
|
|
+++ b/defaults/linuxrc
|
|
@@ -62,6 +62,10 @@ do
|
|
init_opts\=*)
|
|
INIT_OPTS=`parse_opt "${x}"`
|
|
;;
|
|
+ # Scratch usbload
|
|
+ scratch)
|
|
+ SCRATCH=1
|
|
+ ;;
|
|
# Livecd options
|
|
cdroot)
|
|
CDROOT=1
|
|
@@ -465,9 +469,50 @@ do
|
|
then
|
|
break
|
|
else
|
|
- bad_msg "The filesystem mounted at ${REAL_ROOT} does not appear to be a valid /, try again"
|
|
- got_good_root=0
|
|
- REAL_ROOT=''
|
|
+ # check for scratch
|
|
+ if [ -e ${NEW_ROOT}/livecd.squashfs -a -d ${NEW_ROOT}/delta -a -d ${NEW_ROOT}/workspace ];
|
|
+ then
|
|
+ good_msg 'Found scratch data...'
|
|
+ load_union_module
|
|
+ modprobe squashfs >/dev/null
|
|
+ if mount -o remount,rw ${NEW_ROOT};
|
|
+ then
|
|
+ mkdir -p ${NEW_ROOT}/calculate && mkdir -p /union && mkdir -p ${NEW_ROOT}/workspace/mnt/builder && mkdir -p ${NEW_ROOT}/workspace/mnt/scratch
|
|
+ if mount -o loop,ro -t squashfs ${NEW_ROOT}/livecd.squashfs ${NEW_ROOT}/calculate;
|
|
+ then
|
|
+ if [[ ${UNIONTYPE} = aufs ]]
|
|
+ then
|
|
+ if mount -t aufs -o ro,udba=reval,br:${NEW_ROOT}/workspace=rw:${NEW_ROOT}/delta=ro+wh:${NEW_ROOT}/calculate=ro none /union;
|
|
+ then
|
|
+ mount -t aufs -o ro,udba=reval,br:${NEW_ROOT}/delta=rw:${NEW_ROOT}/calculate=ro none /union/mnt/builder
|
|
+ CHROOT=/union
|
|
+ break;
|
|
+ else
|
|
+ bad_msg 'Could not merge scratch layers!'
|
|
+ run_shell
|
|
+ fi
|
|
+ else
|
|
+ if mount -t unionfs -o ro,dirs=${NEW_ROOT}/workspace:${NEW_ROOT}/delta=ro:${NEW_ROOT}/calculate=ro unionfs /union;
|
|
+ then
|
|
+ mount -t unionfs -o ro,dirs=${NEW_ROOT}/delta:${NEW_ROOT}/calculate=ro unionfs /union/mnt/builder
|
|
+ CHROOT=/union
|
|
+ break;
|
|
+ else
|
|
+ bad_msg 'Could not merge scratch layers'
|
|
+ run_shell
|
|
+ fi
|
|
+ fi
|
|
+ else
|
|
+ bad_msg 'Could not mount scratch squashfs image'
|
|
+ fi
|
|
+ else
|
|
+ bad_msg 'Could not remount ${NEW_ROOT}'
|
|
+ fi
|
|
+ else
|
|
+ bad_msg "The filesystem mounted at ${REAL_ROOT} does not appear to be a valid /, try again"
|
|
+ got_good_root=0
|
|
+ REAL_ROOT=''
|
|
+ fi
|
|
fi
|
|
else
|
|
bad_msg "Could not mount specified ROOT, try again"
|