BCCD:FossilScripts

From Earlham CS Department
Revision as of 17:32, 9 November 2005 by Gray (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

bbc_unfold script (unpacks the raw subsystems from the iso image)

#!/bin/sh

usage () {
    cat <<EOF
Usage: bbc_unfold iso-file

Take a LNX-BBC ISO file and unfold the four filesystems on the 
disk so they can be examined or modified.  The four filesystems
created are:

    bbc     This is a copy of the ISO9660 filesystem on the CD image.
            Exverything else is stored in here.


    sing    This directory contains the contents of the compressed
            filesystem stored in the file singularity on the CD image.
            This is the final running root filesystem of a lnx-bbc
            system when it is running.  This is most of the data
            is the CD image.

    lnx     This is a mounted FAT fileystem from the file lnx.img
            on the CD.  This is exactly the size of a 1.4MB floppy.
            When the lnx-bbc disc is booted, the system bios of the 
            PC treats this file as a fake bootable floppy.  This
            contains the kernel, an initial ram disk root.bin, and
            a few other files to boot using syslinux.

    root    This is a mount ext2 filesystem from the file root.bin
            contained in lnx.img.  This is the initial ramdisk
            root filesystem when the lnx-bbc boots.


    bbc_fold creates two mount points for lnx and root.  These 
    mount points are visible with a 'df'.  These filesystems should
    be unmounted with bbc_clean, bbc_fold, or bbc_isolinux when you
    are finished examing the lnx-bbc disc.

EOF
}

die () {
    echo
    echo "Error: $1";
    echo
    exit 1
}

# Get the ISO
for option in "$@"; do
    case "$option" in

        *)
            if test "x$iso" != x; then
                echo "Only specify one ISO file" 1>&2
                usage
                exit 1
            fi
            iso="${option}" ;;
    esac
done

if test "x$iso" = x; then
    echo "ISO file not specified." 1>&2
    usage
    exit 1
fi

# Mount the ISO image, make a copy of the contents and
# unmount the image.
#
echo "Mounting ISO image"
rm -rf bbc-iso
mkdir bbc-iso
sudo mount $iso bbc-iso -o loop || die "Cannot mount $iso as ISO9660"
rm -rf bbc
# cp -a bbc-iso bbc
rsync -HlpogDr bbc-iso bbc-tmp
mv bbc-tmp/bbc-iso bbc
rm -rf bbc-tmp

sudo umount bbc-iso
rm -rf bbc-iso

# Copy lnx.img floppy image from cd and mount as lnx
#
cp -f bbc/lnx.img .
mkdir -p lnx
sudo mount lnx.img lnx -o loop || die "Cannot mount lnx.img"

# Copy root.bin initrd, uncompress, and mount as root
#
cp -f lnx/root.bin root.bin.gz  || die "Cannot find lnx/root.bin"
rm -rf root.bin
gzip -d root.bin.gz
mkdir -p root
sudo mount root.bin root -o loop || die "Cannot mount root.bin"

# Decompress singularity
#
echo -n "Decompressing singularity..."
extract_compressed_fs bbc/singularity > sing.uncomp 2> /dev/null || \
    die "uncompressing singularity"
echo

# Mount singularity as romfs, copy contents, and unmount image
#
rm -rf sing.romfs
mkdir sing.romfs
sudo mount sing.uncomp sing.romfs -o loop -t romfs || \
    die "Cannot mount singularity"
# cp -a sing.romfs sing
rsync -HlpogDr sing.romfs sing-tmp
mv sing-tmp/sing.romfs sing
rm -rf sing-tmp

sudo umount sing.romfs
rm -rf sing.romfs sing.uncomp

echo
df lnx root
echo
echo
echo "lnx-bbc unfolded as follows:"
echo
echo "   bbc      r/w copy of CDROM filesystem"
echo "   sing     r/w copy of singularity comrpessed r/o filesystem"
echo "   lnx      Mounted fat r/w el-toritto fake book floppy"
echo "   root     Mounted ext2 r/w initrd root filesystem on floppy"
echo
exit 0


bbc_fold script that puts all of the pieces from unfold together into a new bootable image


#!/bin/sh

usage () {
    cat <<EOF
Usage: bbc_fold iso-file

Take the four directories created by bbc_unfold and fold them
back into a bootable LNX-BBC bootable image.

EOF
}

die () {
    echo
    echo "Error: $1";
    echo
    exit 1
}


# Get the ISO name
#
for option in "$@"; do
    case "$option" in

        *)
            if test "x$iso" != x; then
                echo "Only specify one ISO file" 1>&2
                usage
                exit 1
            fi
            iso="${option}" ;;
    esac
done

if test "x$iso" = x; then
    echo "ISO file not specified." 1>&2
    usage
    exit 1
fi

echo "Folding initrd root filesystem"
sudo umount root                || die "Cannot unmount root"
rm -rf root.bin.gz root
gzip -9 root.bin
mv root.bin.gz root.bin
sudo cp -f root.bin lnx
rm -rf root.bin

echo "Folding el toritto fake boot floppy"
sudo umount lnx                 || die "Cannot unmount lnx"
rm -rf lnx
sudo cp -f lnx.img bbc
rm -f lnx.img

echo "Generating new singularity"
sudo rm -rf bbc/singularity
genromfs -d sing -f sing.fs     || die "Cannot create romfs for singularity"

echo -n "Compressing singularity..."
create_compressed_fs sing.fs 65536 > bbc/singularity 2> /dev/null || \
    die "Cannot compress romfs into singularity"
rm -rf sing.fs

rm -rf $iso  || die "deleting old $iso"
mkisofs -v -d -N -D -R -T -c boot.catalog -b lnx.img -A "Linux" -V "LNX" -P "bbc-jeff" -o $iso bbc || die "mkisofs failed"
rm -rf sing bbc
exit 0