--- ../tags/mkinitrd-6_3_5/mkinitrd.in 2011-11-24 01:38:55.000000000 +0100 +++ mkinitrd-magellan/mkinitrd.in 2012-04-02 14:36:38.727982523 +0200 @@ -754,7 +754,16 @@ add_initrd 'mount -t proc proc /proc' add_initrd 'mount -t sysfs sysfs /sys' -add_initrd 'mount -t tmpfs tmpfs /dev -o rw,mode=0644,size=1024' +add_initrd "if [[ -z \$(grep '[[:space:]]/dev[[:space:]]' /proc/mounts | cut -d ' ' -f2) ]]" +add_initrd 'then' +add_initrd ' # many video drivers needed exec access' +add_initrd ' fstype=ramfs' +add_initrd ' # tmpfs was suggested by Greg Kroah-Hartman' +add_initrd " [[ \$(grep '[[:space:]]tmpfs' /proc/filesystems | cut -d \$'\\t' -f2) = tmpfs ]] && fstype=tmpfs" +add_initrd ' # mount devtmpfs if supported' +add_initrd " [[ \$(grep '[[:space:]]devtmpfs' /proc/filesystems | cut -d \$'\\t' -f2) = devtmpfs ]] && fstype=devtmpfs" +add_initrd ' mount -t ${fstype} dev /dev -o exec,nosuid,mode=0755,size=10M' +add_initrd 'fi' [[ ${IMAGE_TYPE} = loopback ]] && add_initrd 'mount -t ramfs -o remount,rw /dev/ram /' @@ -861,9 +870,6 @@ add_initrd 'echo "${device} /sysroot ${rootfs} defaults,ro 0 0" > /etc/fstab' add_initrd 'mount /sysroot || ash' -# use devtmpfs if supported -add_initrd "if [ \"\$(grep devtmpfs /proc/filesystems | cut -d$'\t' -f2)\" = \"devtmpfs\" ]; then mount -t devtmpfs dev /sysroot/dev;fi" - # unset hotplug event-manager add_initrd 'echo > /proc/sys/kernel/hotplug' @@ -875,9 +881,9 @@ add_initrd 'if [ "${BREAK_ENABLED}" = "yes" ]; then echo "-- Break requested, type 'exit' to resume operation ..."; ash; fi' add_initrd 'echo "-- Switching to real sysroot ..."' -add_initrd 'umount /dev' -add_initrd 'umount /sys' -add_initrd 'umount /proc' +add_initrd 'mount --move /dev /sysroot/dev' +add_initrd 'mount --move /sys /sysroot/sys' +add_initrd 'mount --move /proc /sysroot/proc' [[ ${IMAGE_TYPE} = initramfs ]] && add_initrd 'exec run-init /sysroot ${INITEXEC} $@ /sysroot/dev/console' if [[ ${IMAGE_TYPE} = loopback ]] --- ../tags/mkinitrd-6_3_5/livecd/linuxrc.sh 2011-11-24 01:38:55.000000000 +0100 +++ mkinitrd-magellan/livecd/linuxrc.sh 2012-04-02 14:36:28.495982524 +0200 @@ -61,13 +61,25 @@ FORCED_ROOTFS="" INITEXEC="/sbin/init" BREAK_ENABLED=no +UNIONFS=no +UNIONFS_FILE="" +CLOOPMOUNTDIR="/sysroot/mnt/cloop" ## starts here ## # mount essential filesystems mount -t proc proc /proc mount -t sysfs sysfs /sys -mount -t tmpfs tmpfs /dev -o rw,mode=0644,size=1024 +if [[ -z $(grep '[[:space:]]/dev[[:space:]]' /proc/mounts | cut -d ' ' -f2) ]] +then + # many video drivers needed exec access + fstype=ramfs + # tmpfs was suggested by Greg Kroah-Hartman + [[ $(grep '[[:space:]]tmpfs' /proc/filesystems | cut -d $'\t' -f2) = tmpfs ]] && fstype=tmpfs + # mount devtmpfs if supported + [[ $(grep '[[:space:]]devtmpfs' /proc/filesystems | cut -d $'\t' -f2) = devtmpfs ]] && fstype=devtmpfs + mount -t ${fstype} dev /dev -o exec,nosuid,mode=0755,size=10M +fi # install all busybox applets busybox --install -s @@ -92,6 +104,8 @@ rootfs=*) FORCED_ROOTFS="${i#*=}";; init=*) INITEXEC="${i#*=}";; break) BREAK_ENABLED=yes ;; + unionfs) UNIONFS=yes;; + unionfs_file=*) UNIONFS_FILE="${i#*=}";; rootdelay=*) ROOTDELAY="${i#*=}";; esac done @@ -178,31 +192,42 @@ echo -e "Mounting squashfs system image ..." echo [ ! -e /dev/loop0 ] && mknod /dev/loop0 b 7 0 - mount -o loop,ro -t squashfs /sysroot/mnt/cdrom/livecdrootfs.sqsh /sysroot/mnt/cloop + mount -o loop,ro -t squashfs /sysroot/mnt/cdrom/livecdrootfs.sqsh "${CLOOPMOUNTDIR}" + + # mount unionfs if enabled + if [[ ${UNIONFS} = yes ]] + then + echo -e "Mounting writeable cdbuffer (unionfs) ..." + + # default setting + CLOOPMOUNTDIR="/sysroot/mnt/unionfs" + [[ -z ${UNIONFS_FILE} ]] && UNIONFS_FILE="/sysroot/mnt/cdrom/unionfs" + + [[ ! -d /sysroot/mnt/unionfs ]] && install -d /sysroot/mnt/unionfs + mount -t unionfs dirs=${UNIONFS_FILE}=rw:/sysroot/mnt/cloop=ro ${CLOOPMOUNTDIR} + fi # symlinking cloop rootfs to /mnt as newroot cd /sysroot for x in bin sbin lib lib64 boot usr opt do - [ -d mnt/cloop/${x} ] && ln -s mnt/cloop/${x} ${x} + [ -d ${CLOOPMOUNTDIR/\/sysroot\//}/${x} ] && ln -s ${CLOOPMOUNTDIR/\/sysroot\//}/${x} ${x} done mkdir -p initrd proc tmp sys var/tmp dev media - # use devtmpfs if supported - if [ "$(grep devtmpfs /proc/filesystems | cut -d$'\t' -f2)" = "devtmpfs" ] - then - mount -t devtmpfs dev /sysroot/dev - else - # make /sysroot/dev/console & /mnt/dev/null - [ ! -e /sysroot/dev/console ] && mknod -m 600 /sysroot/dev/console c 5 1 - [ ! -e /sysroot/dev/null ] && mknod -m 666 /sysroot/dev/null c 1 3 - # only to be safe and to have a log channel - [ ! -e /sysroot/dev/tty ] && mknod /sysroot/dev/tty c 5 0 - # busybox needs this one - [ ! -e /sysroot/dev/tty5 ] && mknod /sysroot/dev/tty5 c 4 5 - fi - (cd /sysroot/mnt/cloop; cp -a etc root home var /sysroot) + # make /sysroot/dev/console & /mnt/dev/null + [ ! -e /sysroot/dev/console ] && mknod -m 600 /sysroot/dev/console c 5 1 + [ ! -e /sysroot/dev/null ] && mknod -m 666 /sysroot/dev/null c 1 3 + # only to be safe and to have a log channel + [ ! -e /sysroot/dev/tty ] && mknod /sysroot/dev/tty c 5 0 + # busybox needs this one + [ ! -e /sysroot/dev/tty5 ] && mknod /sysroot/dev/tty5 c 4 5 + + (cd ${CLOOPMOUNTDIR}; cp -a etc root home var /sysroot) + + # ensure that /sysroot/linurc exists + [ ! -e /sysroot/linuxrc ] && ln -snf ${INITEXEC} /sysroot/linuxrc # ensure the right permissions chmod 1777 /sysroot/tmp @@ -224,8 +249,8 @@ fi echo "-- Switching to real sysroot ..." -umount /dev -umount /sys -umount /proc +mount --move /dev /sysroot/dev +mount --move /sys /sysroot/sys +mount --move /proc /sysroot/proc exec run-init /sysroot ${INITEXEC} $@ /sysroot/dev/console