97 lines
3.4 KiB
Bash
97 lines
3.4 KiB
Bash
|
FOUND_ISO=
|
||
|
#RAMSIZE=100000 -o "size=${RAMSIZE}k"
|
||
|
|
||
|
msg ":: Creating new root ramdisk (dinamic size=${RAMSIZE}k) on /dev/shm..."
|
||
|
mkdir -p /flash /cdrom /squashfs ${NEWROOT}
|
||
|
|
||
|
#
|
||
|
# findiso(): looks for ISO9660 images stored in flash root
|
||
|
#
|
||
|
findiso(){
|
||
|
msg ":: Looking for openmamba ISO cdrom images"
|
||
|
|
||
|
# try removable devices only
|
||
|
for i in /flash/openmamba-*.iso; do
|
||
|
/bin/losetup /dev/loop0 $i
|
||
|
if mount -r -t iso9660 /dev/loop0 /cdrom >/dev/null 2>&1; then
|
||
|
if test -r /cdrom/rootfs.compressed; then
|
||
|
msg ":: Valid ISO image $i found..."
|
||
|
FOUND_ISO="$i"
|
||
|
return 0
|
||
|
fi
|
||
|
umount /cdrom
|
||
|
fi
|
||
|
/bin/losetup /dev/loop0
|
||
|
done
|
||
|
return 1
|
||
|
}
|
||
|
|
||
|
#/sbin/splash_util -c repaint ${splash_add} -t default --mesg="Looking for cdrom device" --progress="4444"
|
||
|
|
||
|
while true; do
|
||
|
msg ":: root device is ${root}"
|
||
|
if ! mount -t ext3 ${root} /flash >/dev/null 2>&1; then
|
||
|
if ! mount -t ext2 ${root} /flash >/dev/null 2>&1; then
|
||
|
err ":: Unable to mount USB rootfs. Supported filesystems are ext2 and ext3."
|
||
|
fi
|
||
|
fi
|
||
|
findiso
|
||
|
if [ "$FOUND_ISO" ]; then
|
||
|
# /sbin/splash_util -c repaint ${splash_add} -t default --mesg="Mounting compressed filesystem" --progress="5555"
|
||
|
msg ":: Mounting compressed filesystem"
|
||
|
/bin/losetup /dev/loop1 /cdrom/rootfs.compressed
|
||
|
mount -r -t squashfs /dev/loop1 /squashfs
|
||
|
|
||
|
if [ "${unionfs}" != "off" -a "${unionfs}" != "OFF" ]; then
|
||
|
|
||
|
[ "${unionfs}" = "reset" ] && {
|
||
|
msg ":: Resetting unionfs data in rwroot"
|
||
|
mkdir -p /flash/old
|
||
|
mv /flash/rwroot /flash/old/
|
||
|
}
|
||
|
msg ":: Mounting unionfs"
|
||
|
mkdir -p /flash/rwroot
|
||
|
mount -t unionfs -o dirs=/flash/rwroot=rw:/squashfs=ro unionfs ${NEWROOT}
|
||
|
mkdir -p ${NEWROOT}/squashfs ${NEWROOT}/flash ${NEWROOT}/cdrom
|
||
|
mount -n -o move /squashfs ${NEWROOT}/squashfs
|
||
|
mount -n -o move /flash ${NEWROOT}/flash
|
||
|
mount -n -o move /cdrom ${NEWROOT}/cdrom
|
||
|
else
|
||
|
msg ":: Creating directories and symlinks on ramdisk..."
|
||
|
/bin/mount -t tmpfs /dev/shm ${NEWROOT}
|
||
|
mkdir -p \
|
||
|
${NEWROOT}/tmp ${NEWROOT}/proc ${NEWROOT}/sys \
|
||
|
${NEWROOT}/initrd ${NEWROOT}/mnt ${NEWROOT}/media \
|
||
|
${NEWROOT}/oldroot ${NEWROOT}/squashfs ${NEWROOT}/flash \
|
||
|
${NEWROOT}/cdrom
|
||
|
mount -n -o move /squashfs ${NEWROOT}/squashfs
|
||
|
mount -n -o move /flash ${NEWROOT}/flash
|
||
|
mount -n -o move /cdrom ${NEWROOT}/cdrom
|
||
|
ln -s squashfs/bin ${NEWROOT}/bin
|
||
|
ln -s squashfs/boot ${NEWROOT}/boot
|
||
|
ln -s squashfs/lib ${NEWROOT}/lib
|
||
|
ln -s squashfs/opt ${NEWROOT}/opt
|
||
|
ln -s squashfs/sbin ${NEWROOT}/sbin
|
||
|
ln -s squashfs/srv ${NEWROOT}/srv
|
||
|
ln -s squashfs/usr ${NEWROOT}/usr
|
||
|
|
||
|
chroot ${NEWROOT} /bin/cp -a \
|
||
|
/squashfs/dev /squashfs/home /squashfs/var \
|
||
|
/squashfs/etc /squashfs/root /
|
||
|
fi
|
||
|
|
||
|
# Create empty utmp and wtmp
|
||
|
#:> ${NEWROOT}/var/run/utmp
|
||
|
#:> ${NEWROOT}/var/run/wtmp
|
||
|
|
||
|
# [ "${init}" ] || init=/sbin/init
|
||
|
# msg ":: Running init, runlevel:${runlevel}"
|
||
|
# exec run-init ${NEWROOT} ${init} ${runlevel}
|
||
|
# msg ":: Could not run init; opening a command prompt."
|
||
|
# /bin/sh.shared
|
||
|
else
|
||
|
msg ":: FATAL ERROR: could not find a valid ISO image."
|
||
|
# /bin/sh.shared
|
||
|
fi
|
||
|
done
|