diff --git a/target/rescue/contrib/mkisolinux.sh b/target/rescue/contrib/mkisolinux.sh new file mode 100644 index 000000000..a984c4085 --- /dev/null +++ b/target/rescue/contrib/mkisolinux.sh @@ -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 < $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: +-------- + + Boot into rescue system (ramdisk) + grub Run grub from emulated floppy image + rescue options 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 diff --git a/target/rescue/contrib/mkrescueiso.sh b/target/rescue/contrib/mkrescueiso.sh index ad612b626..1202d7f49 100644 --- a/target/rescue/contrib/mkrescueiso.sh +++ b/target/rescue/contrib/mkrescueiso.sh @@ -3,6 +3,8 @@ # This is a contributed script to create a bootable ISO image from your # rescue target build. # +# It uses grub with fd-emu to create a bootable image. +# # (C) 2004 Tobias Hintze # @@ -12,19 +14,28 @@ set -e usage() { echo "Usage:" echo " $0 ISODIR FDDIR" - echo " creates the iso from iso-dir and fd-dir" + echo " creates the iso image from iso-dir and fd-dir" echo echo " $0 -c KERNEL INITRD[.gz] SYSTEM [OVERLAY]" echo " creates iso-dir and fd-dir" echo echo " $0 -C KERNEL INITRD[.gz] SYSTEM [OVERLAY]" - echo " creates the iso from kernel, initrd and system tarball" + 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 "initrd.img and system.tar.bz2 are generated during the" - echo "rescue-target build." + echo "$0 -C vmlinuz initrd.img system.tar.bz2" echo "" - echo "the kernel must have support for devfs and initrd." + echo "Using the -C option is like using the -c option except that after creating" + echo "the temporary directories the script calls itself to create the image from them" + echo "(first usage option). The directories are 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 "* kernel must be small to fit on 2880KB (minus initrd and grub stages)" exit 1 } @@ -33,15 +44,41 @@ die() { exit 2 } -test -z "$1" && usage +check_reqs() { + [ -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." + [ -z "`type -p grub`" ] && \ + die "You need grub to create an image with this script." + echo "requirements ok." +} -if [ "$1" == "-c" ] ; then - CREATEDIRS=1 -fi -if [ "$1" == "-C" ] ; then - CREATEDIRS=2 -fi -if [ ! -z "$CREATEDIRS" ] +test -z "$1" && usage +case "$1" in + -c|-C) + CREATEDIRS=1 + [[ "$1" == "-C" ]] && CREATEDIRS=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" + [[ $# == 5 ]] && { + [ -r $5 ] || exec echo "failed to read overlay $5" + } + ;; + *) + [[ $# == 2 ]] || usage + [ -r $1 ] || exec echo "failed to read iso-dir $1" + [ -r $2 ] || exec echo "failed to read fd-dir $2" + ;; +esac + +[[ "$CREATEDIRS" != 1 ]] && [ -e iso ] && die "file \"iso\" is in my way." + +check_reqs + +if [ -n "$CREATEDIRS" ] then shift TMPDIR=/var/tmp/rescue.$$ @@ -141,10 +178,10 @@ EOF rm -fv $ISODIR/device.map-$$ -create_fdemu_image() { +create_iso_image() { test -e iso && die "file \"iso\" is in my way." mkisofs -b fdemu.img -r -l -d -c boot.catalog \ -allow-multidot -allow-lowercase -o iso $ISODIR } -create_fdemu_image +create_iso_image