[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Minimal patch of init for 64-bits and squashfs+cloop



I have found what I think is close to a minimal set of changes to apply to Knoppix 6.4.4 init to achieve full 64-bits mounting and handling of squashfs/cloop images transparently for the end user.
mountknoppix() had to be changed a lot to accomodate symmetraical handling of cloop and squashfs, and the modified script ends with a chroot hack to circumvent the inability of available busyboxes to start programs in loop-mounted 64-bit images. It turned out the problems were the same for squashfs and cloop. 

Trond
-------
Here are the changes:
diff init init644.org > patch_64_squash.txt
156c156
< if [ -r /mnt-system/"$knoppix_dir"/KNOPPIX$knoppix_ext ]; then

---
> if [ -r /mnt-system/"$knoppix_dir"/KNOPPIX ]; then
316,324d315
<
< # Setup extension for squashfs
< if checkbootparam "squashfs" ; then
< knoppix_ext=".sq" ; usecloop=0 ;

< else
< usecloop=1
< fi
<
<
586c577
< [ -b /dev/loop8 ] || mknod -m 755 /dev/loop8 b 7 8
---
> [ -b /dev/loop0 ] || mknod -m 755 /dev/loop0 b 7 0
606,608c597,599

< losetup -d /dev/loop8 2>/dev/null
< runknoppixlib /sbin/losetup -p 0 -e aes -k 256 /dev/loop8 /mnt-system/"$knoppix_dir"/knoppix-data.aes </tmp/knoppix.pw; rc="$?"; rm -f /tmp/knoppix.pw

< runknoppixlib /sbin/mke2fs -F -m 0 /dev/loop8
---
> losetup -d /dev/loop0 2>/dev/null
> runknoppixlib /sbin/losetup -p 0 -e aes -k 256 /dev/loop0 /mnt-system/"$knoppix_dir"/knoppix-data.aes </tmp/knoppix.pw; rc="$?"; rm -f /tmp/knoppix.pw

> runknoppixlib /sbin/mke2fs -F -m 0 /dev/loop0
610c601
< mount -t ext2 -o rw /dev/loop8 /KNOPPIX-DATA && return 0
---
> mount -t ext2 -o rw /dev/loop0 /KNOPPIX-DATA && return 0

627c618
< [ -b /dev/loop8 ] || mknod -m 755 /dev/loop8 b 7 8
---
> [ -b /dev/loop0 ] || mknod -m 755 /dev/loop0 b 7 0
642c633
< if runknoppixlib /sbin/losetup -e aes -k 256 /dev/loop8 "$img"; then

---
> if runknoppixlib /sbin/losetup -e aes -k 256 /dev/loop0 "$img"; then
644,645c635,636
< runknoppixlib /sbin/e2fsck -y /dev/loop8 >/dev/null 2>&1
< mount -t ext2 -o rw /dev/loop8 /KNOPPIX-DATA && return 0

---
> runknoppixlib /sbin/e2fsck -y /dev/loop0 >/dev/null 2>&1
> mount -t ext2 -o rw /dev/loop0 /KNOPPIX-DATA && return 0
648c639
< losetup -d /dev/loop8 >/dev/null 2>&1

---
> losetup -d /dev/loop0 >/dev/null 2>&1
655c646
< losetup -d /dev/loop8 >/dev/null 2>&1
---
> losetup -d /dev/loop0 >/dev/null 2>&1
665d655
<

668,670c658,659
< if [[ $usecloop = 1 ]]; then
< grep -q cloop /proc/devices || insmod /mnt-system/"$knoppix_dir"/modules/cloop.ko preload=32 || return 2
< fi
---
> [ -b /dev/cloop ] || mknod -m 644 /dev/cloop b 240 0

> grep -q cloop /proc/devices || insmod /mnt-system/"$knoppix_dir"/modules/cloop.ko preload=32 || return 2
672,674c661,663
< for k in /mnt-system/"$knoppix_dir"/[Kk][Nn][Oo][Pp][Pp][Ii][Xx]$knoppix_ext \

< /mnt-system/"$knoppix_dir"/[Kk][Nn][Oo][Pp][Pp][Ii][Xx][0-7]$knoppix_ext; do
< [[ -r "$k" ]] || continue
---
> for k in /mnt-system/"$knoppix_dir"/[Kk][Nn][Oo][Pp][Pp][Ii][Xx] \

> /mnt-system/"$knoppix_dir"/[Kk][Nn][Oo][Pp][Pp][Ii][Xx][0-9]; do
> [ -r "$k" ] || continue
676,682c665,666
< if [[ $count = 0 ]]; then
< dir=/KNOPPIX
< if [[ $usecloop = 1 ]]; then

< dev=/dev/cloop ;
< else
< dev=/dev/loop0 ;
< fi
---
> if [ $count = 0 ]; then
> dev=/dev/cloop ; dir=/KNOPPIX
684,689c668,670
< dir=/KNOPPIX$count

< if [[ $usecloop = 1 ]]; then
< dev=/dev/cloop$count ;
< else
< dev=/dev/loop$count ;
< fi
---
> dev=/dev/cloop$count ; dir=/KNOPPIX$count
> [ -b $dev ] || mknod -m 644 $dev b 240 $count

> [ -d $dir ] || mkdir -m 755 $dir
691,703c672
< # Set up and mount
< [[ -d $dir ]] || mkdir -m 755 $dir ; mntsuccess=1;
< if [[ $usecloop = 1 ]]; then
< [[ -b $dev ]] || mknod -m 644 $dev b 240 $count

< (losetup $dev $k >/dev/null 2>&1 && mount -r -t iso9660 $dev $dir >/dev/null 2>&1)||mntsuccess=0
< echo "mntsuccess cloop: $mntsuccess"
< else
< [[ -b $dev ]] || mknod -m 755 $dev b 7 $count

< (losetup $dev $k >/dev/null 2>&1 && mount -r -t squashfs $dev $dir >/dev/null 2>&1)||mntsuccess=0
< echo "mntsuccess squashfs: $mntsuccess"
< fi
< # Something went wrong, we unmount all loop-mounts

< if [[ $mntsuccess = 0 ]]; then
---
> if ! losetup $dev $k >/dev/null 2>&1 || ! mount -r -t iso9660 $dev $dir >/dev/null 2>&1; then
705c674
< echo -n -e "\n\r${RED}${BROKENIMAGE}: $k ${ON} "; mount | grep /mnt-system; dmesg | tail | grep 'c*loop'; echo -n "${NORMAL}"

---
> echo -n -e "\n\r${RED}${BROKENIMAGE}: $k ${ON} "; mount | grep /mnt-system; dmesg | tail | grep cloop; echo -n "${NORMAL}"
707c676
< for dev in /dev/cloop* /dev/loop*; do

---
> for dev in /dev/cloop*; do
718,719d686
<
<
764c731
< mount --bind /UNIONFS/home /home
---
> /bin/mount --bind /UNIONFS/home /home
813,818c780
<
< for d in mnt-system KNOPPIX-DATA ramdisk; do

< [ -d /UNIONFS/"$d" ] || mkdir /UNIONFS/"$d"
< mount --bind /"$d" /UNIONFS/"$d"
< done
< exec chroot /UNIONFS /sbin/init "$@" </dev/console >/dev/console 2>&1

---
> exec /sbin/init "$@" </dev/console >/dev/console 2>&1


Reply to: