BCCD:FossilScripts
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