blob: 68f40f6b5f9eaf6ffe04761afde95b7875fc6ccb [file] [log] [blame] [edit]
#!/bin/sh
set -e
# Make local mount points
mkdir -p mnt1 mnt2
# Mount bootdisk image read-only
mount boot.img mnt1 -o loop,ro -t msdos
# Get the initial ramdisk it contains
cp mnt1/initrd.img .
# Finished with boot image for now.
umount mnt1
# Unzip and mount it
mv initrd.img initrd.gz
gunzip initrd.gz
# Prevent warning about having to check the filesystem
tune2fs -c 0 -i 0 initrd >/dev/null
mount initrd mnt2 -o loop
# Work in initial ramdisk
# Rename it's init
mv mnt2/sbin/init mnt2/sbin/init_real
# Put BRLTTY on it
cp brltty mnt2/sbin
# New init is a link to BRLTTY
ln -s brltty mnt2/sbin/init
# Help files and tables (if the person isn't familiar...)
if [ -d etcbrltty ]; then
mkdir -p mnt2/etc/brltty
install etcbrltty/* mnt2/etc/brltty
fi
# Make sure some needed device files are present
# ttyS0 ttyS1 tty0
for i in ttyS0 ttyS1 tty0; do
if [ ! -e mnt2/dev/$i ]; then
cp -a /dev/$i mnt2/dev/$i
chown root:root mnt2/dev/$i
fi
done
# vcsa or vcsa0
# NB this doesn't handle devfs...
if [ ! -e mnt2/dev/vcsa -a ! -e mnt2/dev/vcsa0 ]; then
for i in vcsa vcsa0; do
if [ -c /dev/$i ]; then
if [ -h /dev/$i ]; then
tgt="`readlink /dev/$i`"
# This assumes the link is relative...
if [ -c /dev/$tgt ]; then
cp -a /dev/$tgt mnt2/dev
else
echo "Failed to get link target of /dev/$i"
echo "Failed!!"
exit 1
fi
fi
cp -a /dev/$i mnt2/dev
fi
done
fi
if [ ! -e mnt2/dev/vcsa -a ! -e mnt2/dev/vcsa0 ]; then
echo "Failed to create mnt2/dev/vcsa"
echo "Failed!"
exit 1
fi
# Done with initial ramdisk. wrap it up.
umount mnt2
gzip -9 initrd
mv initrd.gz myroot.img