# Create and verify a simple ISO filesystem # #!/bin/sh set -e echo -n "isofs test " # testing ISO 9660 Level 3 compliance isn't possible for the time being # (not possible to store a >4GB ISO file into a ramdisk) testLevel3=0 testRockRidge=1 ramdev=/dev/ram mp=/mnt testdir=isofstest fsimage=isofsimage contents=CONTENTS out1=v1 out2=v2 create_contents_level3() { # >4GB file seq 1 1000000000 > $testdir/HUGEFILE } create_contents_rockridge() { # long filenames mkdir -p $testdir/rockridge/longnames echo "this is a test" > $testdir/rockridge/longnames/azertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopaz echo "this is a test" > $testdir/rockridge/longnames/azertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopaze echo "this is a test" > $testdir/rockridge/longnames/azertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazertyuiopazer # devices mkdir -p $testdir/rockridge/devices CURLOC=$(pwd) cd $testdir/rockridge/devices && MAKEDEV -s cd $CURLOC # symbolic links mkdir -p $testdir/rockridge/symlinks ln -s . $testdir/rockridge/symlinks/cur_dir ln -s .. $testdir/rockridge/symlinks/parent_dir ln -s / $testdir/rockridge/symlinks/root_dir ln -s /mnt $testdir/rockridge/symlinks/root_mnt_dir ln -s ../../rockridge $testdir/rockridge/symlinks/rockridge_dir ln -s ../../rockridge/symlinks $testdir/rockridge/symlinks/symlinks_dir ln -s ../../rockridge/symlinks/../symlinks $testdir/rockridge/symlinks/symlinks_dir_bis ln -s cur_dir $testdir/rockridge/symlinks/to_cur_dir ln -s rockridge_dir $testdir/rockridge/symlinks/to_rockridge_dir # deep directory tree mkdir -p $testdir/rockridge/deep_dirs/this/is/a/ridiculously/deep/directory/hierarchy/dont/you/think mkdir -p $testdir/rockridge/deep_dirs/this/is/a/ridiculously/deep/directory/hierarchy/dont/you/think/yes mkdir -p $testdir/rockridge/deep_dirs/this/is/a/ridiculously/deep/directory/hierarchy/dont/you/think/no echo "I agree." > $testdir/rockridge/deep_dirs/this/is/a/ridiculously/deep/directory/hierarchy/dont/you/think/yes/awnser1 echo "Yes, totally." > $testdir/rockridge/deep_dirs/this/is/a/ridiculously/deep/directory/hierarchy/dont/you/think/yes/awnser2 echo "Nah." > $testdir/rockridge/deep_dirs/this/is/a/ridiculously/deep/directory/hierarchy/dont/you/think/no/awnser1 echo "Meh." > $testdir/rockridge/deep_dirs/this/is/a/ridiculously/deep/directory/hierarchy/dont/you/think/no/awnser2 # permissions mkdir -p $testdir/rockridge/permissions for u in $(seq 0 7); do for g in $(seq 0 7); do for o in $(seq 0 7); do echo "$u$g$o" > $testdir/rockridge/permissions/mode-$u$g$o chmod $u$g$o $testdir/rockridge/permissions/mode-$u$g$o done done done echo "uid-gid test" > $testdir/rockridge/permissions/uid-1-gid-2 chown 1:2 $testdir/rockridge/permissions/uid-1-gid-2 echo "uid-gid test" > $testdir/rockridge/permissions/uid-128-gid-256 chown 128:256 $testdir/rockridge/permissions/uid-128-gid-256 echo "uid-gid test" > $testdir/rockridge/permissions/uid-12345-gid-23456 chown 12345:23456 $testdir/rockridge/permissions/uid-12345-gid-23456 } create_contents_base() { # simple file echo $(date) > $testdir/DATE # big file seq 1 100000 > $testdir/BIGFILE # lots of files in a directory mkdir $testdir/BIGDIR for i in $(seq 1 250); do HASH=$(cksum -a SHA1 < $testdir/BIGDIR/$FILE done # lots of directories mkdir $testdir/SUBDIRS for i in $(seq 1 1000); do HASH=$(cksum -a SHA1 < $testdir/SUBDIRS/$DIR1/$DIR2/$FILE done } rm -rf $testdir $fsimage $out1 $out2 if [ -d $testdir ] then echo "dir?" exit 1 fi mkdir -p $testdir if [ ! -d $testdir ] then echo "no dir?" exit 1 fi # make some small & big & bigger files OPTIONS= create_contents_base if [ "$testLevel3" -eq 1 ] then create_contents_level3 fi if [ "$testRockRidge" -eq 1 ] then create_contents_rockridge OPTIONS="-o rockridge" else # fixups for the fact that bare ISO 9660 isn't POSIX enough # for mtree # fix permissions find $testdir -exec chmod 555 {} ";" fi # make image /usr/sbin/makefs -t cd9660 $OPTIONS $fsimage $testdir # umount previous things umount $ramdev >/dev/null 2>&1 || true umount $mp >/dev/null 2>&1 || true # mount it on a RAM disk ramdisk $(expr $(wc -c < $fsimage) / 1024) $ramdev >/dev/null 2>&1 cat < $fsimage > $ramdev mount -t isofs $ramdev $mp >/dev/null 2>&1 # compare contents if [ "$testRockRidge" -eq 1 ] then # get rid of root directory time /usr/sbin/mtree -c -p $testdir | sed -e "s/\. *type=dir.*/\. type=dir/" | /usr/sbin/mtree -p $mp else # fixups for the fact that bare ISO 9660 isn't POSIX enough # for mtree # get rid of time /usr/sbin/mtree -c -p $testdir | sed -e "s/time=[0-9]*.[0-9]*//" | /usr/sbin/mtree -p $mp fi umount $ramdev >/dev/null 2>&1 # cleanup rm -rf $testdir $fsimage $out1 $out2 echo ok exit 0