mirror of
https://github.com/archlinuxarm/PKGBUILDs.git
synced 2024-11-08 22:45:43 +00:00
143 lines
5.7 KiB
Bash
Executable file
143 lines
5.7 KiB
Bash
Executable file
#! /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}
|