diff options
Diffstat (limited to 'extra/mkbootcd')
-rw-r--r-- | extra/mkbootcd/PKGBUILD | 26 | ||||
-rw-r--r-- | extra/mkbootcd/boot.msg | 14 | ||||
-rwxr-xr-x | extra/mkbootcd/mkbootcd | 143 | ||||
-rw-r--r-- | extra/mkbootcd/mkbootcd.conf | 38 | ||||
-rw-r--r-- | extra/mkbootcd/options.msg | 6 |
5 files changed, 227 insertions, 0 deletions
diff --git a/extra/mkbootcd/PKGBUILD b/extra/mkbootcd/PKGBUILD new file mode 100644 index 000000000..dc06beb41 --- /dev/null +++ b/extra/mkbootcd/PKGBUILD @@ -0,0 +1,26 @@ +# $Id: PKGBUILD 12672 2008-09-17 21:20:37Z tpowa $ +# Maintainer : Tobias Powalowski <tpowa@archlinux.org> + +pkgname=mkbootcd +pkgver=2008.09 +pkgrel=1 +pkgdesc="Advanced, modular isolinux bootcd image creation utility" +arch=(i686 x86_64) +license=('GPL') +url="http://www.archlinux.org/" +depends=('mkinitcpio' 'cdrkit' 'syslinux') +source=('boot.msg' 'mkbootcd' 'mkbootcd.conf' 'options.msg') +backup=(etc/mkbootcd.conf) + +build() +{ + cd $startdir/src/ + install -D -m755 mkbootcd $startdir/pkg/usr/sbin/mkbootcd + install -D -m644 mkbootcd.conf $startdir/pkg/etc/mkbootcd.conf + install -D -m644 boot.msg $startdir/pkg/usr/share/mkbootcd/boot.msg + install -D -m644 options.msg $startdir/pkg/usr/share/mkbootcd/options.msg +} +md5sums=('d02e111f81204044644f728ff85e2284' + 'bfae68f0a5168bd41f8d0c56f524fb08' + 'e08b9b952b5e468feb16e3f20ee3faf2' + 'fa078942b8adf261e4d925e080dc3018') diff --git a/extra/mkbootcd/boot.msg b/extra/mkbootcd/boot.msg new file mode 100644 index 000000000..271c58016 --- /dev/null +++ b/extra/mkbootcd/boot.msg @@ -0,0 +1,14 @@ + + +------------------------------------------------------------------------------ +Arch Linux +ISOLINUX BOOT +created with 'mkbootcd' written by Tobias Powalowski <tpowa@archlinux.org> + +Press ENTER or type 'arch' to boot the CD. + +If you wish to change your defaults to boot into your existing system, +type 'vmlinuz initrd=initrd.img <any_other_boot_option>' +Use the F2 key for troubleshooting and options. +------------------------------------------------------------------------------ + diff --git a/extra/mkbootcd/mkbootcd b/extra/mkbootcd/mkbootcd new file mode 100755 index 000000000..e7e5e62b1 --- /dev/null +++ b/extra/mkbootcd/mkbootcd @@ -0,0 +1,143 @@ +#! /bin/sh +# Created by Tobias Powalowski <tpowa@archlinux.org> +# Settings +APPNAME=$(basename "${0}") +CONFIG="/etc/mkbootcd.conf" +GENIMG="" +BURN="0" +BLANK="0" +GRUB="0" +TARNAME="" +export TEMPDIR=$(mktemp /tmp/mkbootcd.XXXX) +usage () +{ + echo "${APPNAME}: usage" + echo " -g=IMAGE Generate a ISO image as IMAGE" + echo " -c=CONFIG Use CONFIG file. default: /etc/mkbootcd.conf" + echo " -B Burn the ISO image after creation" + echo " -b Blanking media first" + echo " -grub Use grub instead of isolinux" + echo " -t=TARNAME Generate a tar image instead of an iso image" + echo " -h This message." + exit 1 +} + +[ "$1" == "" ] && usage + +while [ $# -gt 0 ]; do + case $1 in + -c=*|--c=*) CONFIG="$(echo $1 | awk -F= '{print $2;}')" ;; + -g=*|--g=*) GENIMG="$(echo $1 | awk -F= '{print $2;}')" ;; + -B|--B) BURN="1" ;; + -b|--b) BLANK="1" ;; + -grub|--grub) GRUB="1" ;; + -t=*|--t=*) TARNAME="$(echo $1 | awk -F= '{print $2;}')" ;; + -h|--h|?) usage ;; + *) usage ;; + esac + shift +done + +if [ "${TARNAME}" = "" -a "${GENIMG}" = "" ]; then + echo "ERROR: No image name specified, please use the -g option" + exit 1 +fi + +if [ ! -f "${CONFIG}" ]; then + echo "config file '${CONFIG}' cannot be found, aborting..." + exit 1 +fi + +. "${CONFIG}" +# export for mkinitcpio +[ -n "${APPENDBOOTMESSAGE}" ] && export APPENDBOOTMESSAGE +[ -n "${APPENDBOOTMESSAGE_SYSLINUX}" ] && export APPENDBOOTMESSAGE_SYSLINUX +[ -n "${APPENDBOOTMESSAGE_SYSLINUX_LOWMEM}" ] && export APPENDBOOTMESSAGE_SYSLINUX_LOWMEM +[ -n "${APPENDOPTIONSBOOTMESSAGE}" ] && export APPENDOPTIONSBOOTMESSAGE + +if [ "$GRUB" = "1" ]; then + export RUNPROGRAM="${APPNAME}-grub" + export BOOTDIRNAME="boot" +else + export RUNPROGRAM="${APPNAME}" + export BOOTDIRNAME="isolinux" +fi +[ "${BOOTMESSAGE}" = "" ] && export BOOTMESSAGE=$(mktemp /tmp/bootmessage.XXXX) +[ "${OPTIONSBOOTMESSAGE}" = "" ] && export OPTIONSBOOTMESSAGE=$(mktemp /tmp/optionsbootmessage.XXXX) +[ "${ISONAME}" = "" ] && export ISONAME=$(mktemp /tmp/isoname.XXXX) +export USEKERNEL=${VERSION} +# begin script +[ -e ${TEMPDIR} ] && rm -r ${TEMPDIR} +mkdir -p ${TEMPDIR}/${BOOTDIRNAME} +if [ "$GRUB" = "1" ]; then + mkdir ${TEMPDIR}/${BOOTDIRNAME}/grub + install -m755 /usr/share/grub/i386-pc/stage2_eltorito ${TEMPDIR}/${BOOTDIRNAME}/grub/stage2_eltorito +else + install -m755 /usr/lib/syslinux/isolinux.bin ${TEMPDIR}/${BOOTDIRNAME}/isolinux.bin +fi +# create isolinux.cfg +if [ "$GRUB" = "1" ]; then + echo ":: Creating menu.lst ..." + [ ! -e "${MENULST}" ] && echo "No menu.lst found" && exit 1 + sed "s|@@PROMPT@@|${PROMPT}|g;s|@@TIMEOUT@@|${TIMEOUT}|g;s|@@KERNEL_BOOT_OPTIONS@@|${KERNEL_BOOT_OPTIONS}|g" \ + ${MENULST} \ + > ${TEMPDIR}/${BOOTDIRNAME}/grub/menu.lst +else + echo ":: Creating isolinux.cfg ..." + if [ "${ISOLINUXCFG}" = "" ]; then + [ -e ${TEMPDIR}/${BOOTDIRNAME}/isolinux.cfg ] && rm ${TEMPDIR}/${BOOTDIRNAME}/isolinux.cfg + echo "prompt ${PROMPT}" >> ${TEMPDIR}/${BOOTDIRNAME}/isolinux.cfg + echo "timeout ${TIMEOUT}" >> ${TEMPDIR}/${BOOTDIRNAME}/isolinux.cfg + echo "display boot.msg" >> ${TEMPDIR}/${BOOTDIRNAME}/isolinux.cfg + echo "F1 boot.msg" >> ${TEMPDIR}/${BOOTDIRNAME}/isolinux.cfg + echo "F2 options.msg" >> ${TEMPDIR}/${BOOTDIRNAME}/isolinux.cfg + echo "default arch" >> ${TEMPDIR}/${BOOTDIRNAME}/isolinux.cfg + echo "label arch" >> ${TEMPDIR}/${BOOTDIRNAME}/isolinux.cfg + echo "kernel vmlinuz" >> ${TEMPDIR}/${BOOTDIRNAME}/isolinux.cfg + echo "append initrd=initrd.img ${KERNEL_BOOT_OPTIONS}" >> ${TEMPDIR}/${BOOTDIRNAME}/isolinux.cfg + else + sed "s|@@PROMPT@@|${PROMPT}|g;s|@@TIMEOUT@@|${TIMEOUT}|g;s|@@KERNEL_BOOT_OPTIONS@@|${KERNEL_BOOT_OPTIONS}|g" \ + ${ISOLINUXCFG} > ${TEMPDIR}/${BOOTDIRNAME}/isolinux.cfg + fi + [ ! -s ${TEMPDIR}/${BOOTDIRNAME}/isolinux.cfg ] && echo "No isolinux.cfg found" && exit 1 +fi +echo ":: Calling mkinitcpio CONFIG=${MKINITCPIO_CONFIG} KERNEL=${VERSION} ..." +# generate initramdisk +echo ":: Creating initramdisk ..." + mkinitcpio -c ${MKINITCPIO_CONFIG} -k ${VERSION} -g ${TEMPDIR}/${BOOTDIRNAME}/initrd.img +echo ":: Using ${KERNEL} as image kernel ..." + install -m644 ${KERNEL} ${TEMPDIR}/${BOOTDIRNAME}/vmlinuz + install -m644 ${BOOTMESSAGE} ${TEMPDIR}/${BOOTDIRNAME}/boot.msg + install -m644 ${OPTIONSBOOTMESSAGE} ${TEMPDIR}/${BOOTDIRNAME}/options.msg + [ ! -s ${TEMPDIR}/${BOOTDIRNAME}/boot.msg ] && echo 'ERROR:no boot.msg found, aborting!' && exit 1 + [ ! -s ${TEMPDIR}/${BOOTDIRNAME}/options.msg ] && echo 'ERROR:no options.msg found, aborting!' && exit 1 +# create image +if ! [ "${TARNAME}" = "" ]; then + echo ":: Creating tar image ..." + [ -e ${TARNAME} ] && rm ${TARNAME} + rm ${TEMPDIR}/arch/pkg/*.pkg.tar.gz > /dev/null 2>&1 + tar cfv ${TARNAME} ${TEMPDIR} > /dev/null 2>&1 && echo ":: tar Image succesfull created at ${TARNAME}" +else + echo ":: Creating ISO image ..." + [ -e ${GENIMG} ] && rm ${GENIMG} + [ -s "${ISONAME}" ] && ISONAME=$(cat $ISONAME) || ISONAME="Arch Linux" + if [ "$GRUB" = "1" ]; then + mkisofs -RlDJLV "${ISONAME}" -b boot/grub/stage2_eltorito -c boot/boot.cat \ + -no-emul-boot -boot-load-size 4 -boot-info-table -o ${GENIMG} ${TEMPDIR}/ > /dev/null 2>&1 + else + mkisofs -RlDJLV "${ISONAME}" -b isolinux/isolinux.bin -c isolinux/boot.cat \ + -no-emul-boot -boot-load-size 4 -boot-info-table -o ${GENIMG} ${TEMPDIR}/ > /dev/null 2>&1 + fi + [ $? -ne 0 ] && echo ":: ISO Image succesfull created at ${GENIMG}" + # burning/blanking image + if [ "$BLANK" = "1" ]; then + echo ":: Blanking media DEVICE=${DEVICE}, BLANKMODE=${BLANKMODE}, SPEED=${SPEED} ..." + cdrecord dev=${DEVICE} speed=${SPEED} blank=${BLANKMODE} > /dev/null 2>&1 && echo ":: Successfull." + fi + if [ "$BURN" = "1" ]; then + echo ":: Burning ISO image DEVICE=${DEVICE}, SPEED=${SPEED} ..." + cdrecord dev=${DEVICE} speed=${SPEED} -eject ${GENIMG} > /dev/null 2>&1 && echo ":: Successfull." + fi +fi +# clean /tmp +rm -r ${TEMPDIR} diff --git a/extra/mkbootcd/mkbootcd.conf b/extra/mkbootcd/mkbootcd.conf new file mode 100644 index 000000000..b27be81e6 --- /dev/null +++ b/extra/mkbootcd/mkbootcd.conf @@ -0,0 +1,38 @@ +# Created by Tobias Powalowski <tpowa@archlinux.org> +# config file of mkbootcd + +# DEFAULT kernel boot options like root=/dev/hda3 etc. +# add your root= option, if you boot from a disk device +# and don't want to add it by hand on each boot +KERNEL_BOOT_OPTIONS="" + +# mkinitcpio config file, defaulted to stock config file +MKINITCPIO_CONFIG="/etc/mkinitcpio.conf" + +# kernel version, defaulted to build for runtime kernel +VERSION="$(uname -r)" + +# kernel image, defaulted to stock arch kernel +KERNEL="/boot/vmlinuz26" + +# boot message files +BOOTMESSAGE="/usr/share/mkbootcd/boot.msg" +OPTIONSBOOTMESSAGE="/usr/share/mkbootcd/options.msg" + +# menu.lst or isolinux.cfg file to use +ISOLINUXCFG="" +MENULST="" + +# Prompt on CD boot, defaulted to yes, 1=yes 0=no +PROMPT="1" + +# Name of the ISO, if empty Arch Linux is used if not set by a HOOK later +ISONAME="" + +# Timeout in seconds on CD boot, defaulted to 0, because we prompt by default +TIMEOUT="0" + +# Setting cdrecord options +DEVICE="" +SPEED="" +BLANKMODE=""
\ No newline at end of file diff --git a/extra/mkbootcd/options.msg b/extra/mkbootcd/options.msg new file mode 100644 index 000000000..300922e38 --- /dev/null +++ b/extra/mkbootcd/options.msg @@ -0,0 +1,6 @@ +------------------------------------------------------------------------------ +Arch Linux options and troubleshooting: + +- If your system hangs during the boot process, any combinations of the + boot options noapic acpi=off pci=routeirq nosmp may be useful. +------------------------------------------------------------------------------
\ No newline at end of file |