#!/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