mirror of
https://git.savannah.gnu.org/git/grub.git
synced 2026-10-28 01:59:49 +00:00
70 lines
1.7 KiB
Bash
70 lines
1.7 KiB
Bash
#!/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
|