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