|
|
@ -0,0 +1,212 @@ |
|
|
|
#!/bin/sh |
|
|
|
# |
|
|
|
# This is a contributed script to create a bootable ISO image from your |
|
|
|
# rescue target build. |
|
|
|
# |
|
|
|
# It uses isolinux (syslinux) to create a non-emu bootable image. |
|
|
|
# It uses memdisk (syslinux) to add grub to the list of choices. |
|
|
|
# |
|
|
|
# (C) 2004 Tobias Hintze |
|
|
|
# |
|
|
|
|
|
|
|
[ -z "$GRUBSRC" ] && GRUBSRC="/usr/share/grub" |
|
|
|
[ -z "$SYSLINUXSRC" ] && SYSLINUXSRC="/usr/lib/syslinux" |
|
|
|
|
|
|
|
set -e |
|
|
|
|
|
|
|
usage() { |
|
|
|
echo "Usage:" |
|
|
|
echo " $0 ISODIR" |
|
|
|
echo " creates the iso image from iso-dir" |
|
|
|
echo |
|
|
|
echo " $0 -c KERNEL INITRD[.gz] SYSTEM [OVERLAY]" |
|
|
|
echo " creates iso-dir" |
|
|
|
echo |
|
|
|
echo " $0 -C KERNEL INITRD[.gz] SYSTEM [OVERLAY]" |
|
|
|
echo " creates the iso image from kernel, initrd and system tarball" |
|
|
|
echo "" |
|
|
|
echo "Example usage (most commonly used):" |
|
|
|
echo "(You get an iso image with default configuration and given files.)" |
|
|
|
echo "" |
|
|
|
echo "$0 -C vmlinuz initrd.img system.tar.bz2" |
|
|
|
echo "" |
|
|
|
echo "Using the -C option is like using the -c option except that after creating" |
|
|
|
echo "the temporary iso-dir the script calls itself to create the image from that" |
|
|
|
echo "dir (first usage option). The iso-dir is deleted on success afterwards." |
|
|
|
echo "" |
|
|
|
echo "* initrd.img and system.tar.bz2 are generated during the rescue-target build." |
|
|
|
echo "* kernel must have support for devfs" |
|
|
|
echo "* kernel must have support for initrd" |
|
|
|
echo "* kernel must have support for iso9660" |
|
|
|
echo "" |
|
|
|
exit 1 |
|
|
|
} |
|
|
|
|
|
|
|
die() { |
|
|
|
echo "$1" |
|
|
|
exit 2 |
|
|
|
} |
|
|
|
|
|
|
|
check_reqs() { |
|
|
|
[ -z "`type -p grub`" ] && \ |
|
|
|
die "You need grub to create an image with this script." |
|
|
|
[ -z "`type -p e2fsimage`" ] && \ |
|
|
|
die "You need e2fsimage to create an image with this script." |
|
|
|
[ -z "`type -p mkisofs`" ] && \ |
|
|
|
die "You need mkisofs to create an image with this script." |
|
|
|
[ -d "$GRUBSRC" ] || die "No grub stages at $GRUBSRC. I need them!" |
|
|
|
[ -d "$SYSLINUXSRC" ] || die "No syslinux at $SYSLINUXSRC. I need it!" |
|
|
|
echo "requirements ok." |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
test -z "$1" && usage |
|
|
|
case "$1" in |
|
|
|
-c|-C) |
|
|
|
CREATEDIR=1 |
|
|
|
[[ "$1" == "-C" ]] && CREATEDIR=2 |
|
|
|
[[ $# == 4 || $# == 5 ]] || usage |
|
|
|
[ -r $2 ] || exec echo "failed to read kernel image $2" |
|
|
|
[ -r $3 ] || exec echo "failed to read initrd image $3" |
|
|
|
[ -r $4 ] || exec echo "failed to read system $4" |
|
|
|
KERNEL=$2 |
|
|
|
INITRD=$3 |
|
|
|
SYSTEM=$4 |
|
|
|
|
|
|
|
[[ $# == 5 ]] && { |
|
|
|
[ -r $5 ] || exec echo "failed to read overlay $5" |
|
|
|
OVERLAY=$5 |
|
|
|
} |
|
|
|
;; |
|
|
|
*) |
|
|
|
[[ $# == 1 ]] || usage |
|
|
|
[ -r $1 ] || exec echo "failed to read iso-dir $1" |
|
|
|
esac |
|
|
|
|
|
|
|
[[ "$CREATEDIR" != 1 ]] && [ -e iso ] && die "file \"iso\" is in my way." |
|
|
|
|
|
|
|
check_reqs |
|
|
|
|
|
|
|
GRUBSRC="$( find $GRUBSRC -type d -mindepth 1 -maxdepth 1 | head -n 1 )" |
|
|
|
[ -r $GRUBSRC/stage1 -a -r $GRUBSRC/stage2 ] || die "grub stage1 or stage2 missing." |
|
|
|
|
|
|
|
[ -r $SYSLINUXSRC/isolinux.bin -a \ |
|
|
|
-r $SYSLINUXSRC/memdisk ] || die "isolinux.bin or memdisk missing." |
|
|
|
|
|
|
|
if [ -n "$CREATEDIR" ] |
|
|
|
then |
|
|
|
TMPDIR=/var/tmp/rescuecd.$$ |
|
|
|
mkdir $TMPDIR || die "failed to create tmp-dir \"$TMPDIR\"." |
|
|
|
mkdir -pv $TMPDIR/iso/isolinux $TMPDIR/iso/rescue $TMPDIR/fd |
|
|
|
|
|
|
|
|
|
|
|
# |
|
|
|
# prepare the directory |
|
|
|
# |
|
|
|
|
|
|
|
# syslinux |
|
|
|
cp -v $SYSLINUXSRC/isolinux.bin $SYSLINUXSRC/memdisk $TMPDIR/iso/isolinux/ |
|
|
|
|
|
|
|
# kernel |
|
|
|
cp -v $KERNEL $TMPDIR/iso/isolinux/krescue |
|
|
|
|
|
|
|
# initrd |
|
|
|
if [ "`file -bi $INITRD`" == "application/x-gzip" ] ; then |
|
|
|
cp -v $INITRD $TMPDIR/iso/isolinux/rdrescue.gz |
|
|
|
else |
|
|
|
echo "compressing initrd image..." |
|
|
|
cat $INITRD | gzip -c > $TMPDIR/iso/isolinux/rdrescue.gz |
|
|
|
fi |
|
|
|
|
|
|
|
cp -v $SYSTEM $TMPDIR/iso/rescue/system.tb2 |
|
|
|
[ -n "$OVERLAY" ] && cp -v $OVERLAY $TMPDIR/iso/rescue/overlay.tar.bz2 |
|
|
|
|
|
|
|
# |
|
|
|
# create grub fd |
|
|
|
# |
|
|
|
echo "creating bootable grub fd image" |
|
|
|
mkdir -v $TMPDIR/fd/grub |
|
|
|
cp -v $GRUBSRC/*stage* $TMPDIR/fd/grub/ |
|
|
|
e2fsimage -f $TMPDIR/iso/isolinux/fdgrub.img -d $TMPDIR/fd -v -s 360 |
|
|
|
rm -f $TMPDIR/device.map |
|
|
|
echo "(fd0) $TMPDIR/iso/isolinux/fdgrub.img" > $TMPDIR/device.map |
|
|
|
[[ "`id -u`" == "0" ]] && { |
|
|
|
echo "i don't want to run grub as root. destructive potential too high." |
|
|
|
echo "if you want to do it on your own issue the following command: " |
|
|
|
echo |
|
|
|
echo "grub --device-map=$TMPDIR/device.map --batch <<EOF" |
|
|
|
echo "root (fd0)" |
|
|
|
echo "setup (fd0)" |
|
|
|
echo "EOF" |
|
|
|
echo |
|
|
|
die "Cowardly refusing to endanger your MBR and disks." |
|
|
|
} |
|
|
|
grub --device-map=$TMPDIR/device.map --batch <<EOF |
|
|
|
root (fd0) |
|
|
|
setup (fd0) |
|
|
|
EOF |
|
|
|
echo "" |
|
|
|
echo "finished creating fdgrub.img" |
|
|
|
|
|
|
|
# create isolinux.cfg |
|
|
|
cat > $TMPDIR/iso/isolinux/isolinux.cfg << EOF |
|
|
|
DEFAULT rescue |
|
|
|
TIMEOUT 300 |
|
|
|
PROMPT 1 |
|
|
|
|
|
|
|
DISPLAY display.txt |
|
|
|
|
|
|
|
LABEL rescue |
|
|
|
KERNEL krescue |
|
|
|
APPEND initrd=rdrescue.gz root=/dev/ram boot=iso9660:/dev/cdroms/cdrom0 system=/mnt_boot/rescue/system.tb2 panic=60 |
|
|
|
|
|
|
|
LABEL grub |
|
|
|
KERNEL memdisk |
|
|
|
APPEND initrd=fdgrub.img |
|
|
|
|
|
|
|
EOF |
|
|
|
cat > $TMPDIR/iso/isolinux/display.txt << "EOF" |
|
|
|
|
|
|
|
____ ___ ___ _ __ _ |
|
|
|
| _ \ / _ \ / __| |/ / | | _ _ __ _ _ _ _ |
|
|
|
| . _/| | | | | | '_/ | | |_| '_ \| | | | \/ | |
|
|
|
| |\ \| |_| | |__| . \ | |__| | | | | `_' |> < |
|
|
|
|_| \_\ ___/ \___|_|\_\ |____|_|_| |_|\___/|_/\_| |
|
|
|
[============> http://www.rocklinux.org/ <============] |
|
|
|
|
|
|
|
|
|
|
|
Actions: |
|
|
|
-------- |
|
|
|
|
|
|
|
<ENTER> Boot into rescue system (ramdisk) |
|
|
|
grub <ENTER> Run grub from emulated floppy image |
|
|
|
rescue options <ENTER> Boot into rescue system with given options |
|
|
|
|
|
|
|
|
|
|
|
"EOF" |
|
|
|
EOF |
|
|
|
|
|
|
|
if [ "$CREATEDIR" == "1" ] ; then |
|
|
|
echo "ready. you might want to run:" |
|
|
|
echo "$0 $TMPDIR/iso" |
|
|
|
elif [ "$CREATEDIR" == "2" ] ; then |
|
|
|
echo "running $0 $TMPDIR/iso" |
|
|
|
$0 $TMPDIR/iso |
|
|
|
rm -rfv $TMPDIR |
|
|
|
fi |
|
|
|
exit 0 |
|
|
|
fi |
|
|
|
|
|
|
|
test -z "$1" && usage |
|
|
|
ISODIR=$1 |
|
|
|
|
|
|
|
test -d $ISODIR || die "ISODIR \"$ISODIR\" not a directory." |
|
|
|
|
|
|
|
create_iso_image() { |
|
|
|
test -e iso && die "file \"iso\" is in my way." |
|
|
|
mkisofs -b isolinux/isolinux.bin -c isolinux/boot.cat \ |
|
|
|
-no-emul-boot -boot-load-size 4 \ |
|
|
|
-boot-info-table -o iso $ISODIR |
|
|
|
} |
|
|
|
|
|
|
|
create_iso_image |