-Q skip netboot package build
-r <release_name> release name
-s <suite> Debian suite/release, like: stable, testing, unstable
+ -S <script_directory> place of scripts (defaults to /usr/share/grml-live/scripts)
-t <template_directory> place of the templates
-u update existing chroot instead of rebuilding it from scratch
-U <username> arrange output to be owned by specified username
fi
# source main configuration file:
-LIVE_CONF=/etc/grml/grml-live.conf
+[ -z "$LIVE_CONF" ] && LIVE_CONF='/etc/grml/grml-live.conf'
if ! [ -r "$LIVE_CONF" ] ; then
ewarn "Configuration file $LIVE_CONF can not be read, ignoring"
else
# }}}
# command line parsing {{{
-while getopts "a:C:c:d:D:e:g:i:I:o:r:s:t:U:v:AbBFhnNqQuVz" opt; do
+while getopts "a:C:c:d:D:e:g:i:I:o:r:s:S:t:U:v:AbBFhnNqQuVz" opt; do
case "$opt" in
a) ARCH="$OPTARG" ;;
A) CLEAN_ARTIFACTS=1 ;;
Q) SKIP_NETBOOT=1 ;;
r) RELEASENAME="$OPTARG" ;;
s) SUITE="$OPTARG" ;;
+ S) SCRIPTS_DIRECTORY="$OPTARG";;
t) TEMPLATE_DIRECTORY="$OPTARG";;
v) VERSION="$OPTARG" ;;
F) FORCE=1 ;;
[ -n "$SQUASHFS_EXCLUDES_FILE" ] || SQUASHFS_EXCLUDES_FILE="${GRML_FAI_CONFIG}/config/grml/squashfs-excludes"
[ -n "$SUITE" ] || SUITE='testing'
[ -n "$TEMPLATE_DIRECTORY" ] || TEMPLATE_DIRECTORY='/usr/share/grml-live/templates'
+[ -n "$SCRIPTS_DIRECTORY" ] || SCRIPTS_DIRECTORY='/usr/share/grml-live/scripts'
[ -n "$USERNAME" ] || USERNAME='grml'
[ -n "$VERSION" ] || VERSION='0.0.1'
fi
# copy _required_ isolinux files
- for file in ifcpu64.c32 isolinux.bin vesamenu.c32; do
- copy_addon_file "${file}" /usr/lib/syslinux isolinux
- done
+ if [ -d "${CHROOT_OUTPUT}/usr/lib/ISOLINUX" ] ; then
+ copy_addon_file isolinux.bin /usr/lib/ISOLINUX isolinux
+ copy_addon_file ifcpu64.c32 /usr/lib/syslinux/modules/bios/ isolinux
+ copy_addon_file ldlinux.c32 /usr/lib/syslinux/modules/bios/ isolinux
+ copy_addon_file libcom32.c32 /usr/lib/syslinux/modules/bios/ isolinux
+ copy_addon_file libutil.c32 /usr/lib/syslinux/modules/bios/ isolinux
+ copy_addon_file vesamenu.c32 /usr/lib/syslinux/modules/bios/ isolinux
+ else # syslinux versions <= 3:4.05+dfsg-6+deb8u1
+ copy_addon_file isolinux.bin /usr/lib/syslinux isolinux
+ copy_addon_file ifcpu64.c32 /usr/lib/syslinux isolinux
+ copy_addon_file vesamenu.c32 /usr/lib/syslinux isolinux
+ fi
# *always* copy files to output directory so the variables
# get adjusted according to the build.
copy_addon_file ipxe.lkrn /usr/lib/ipxe addons
copy_addon_file pci.ids /usr/share/misc addons
copy_addon_file memtest86+.bin /boot addons
+
+ # since syslinux(-common) v3:6.03~pre1+dfsg-4 the files are in a
+ # different directory :(
+ if [ -d "${CHROOT_OUTPUT}/usr/lib/syslinux/modules/bios/" ] ; then
+ syslinux_modules_dir=/usr/lib/syslinux/modules/bios/
+ else
+ syslinux_modules_dir=/usr/lib/syslinux
+ fi
for file in memdisk chain.c32 hdt.c32 mboot.c32 menu.c32; do
- copy_addon_file "${file}" /usr/lib/syslinux addons
+ copy_addon_file "${file}" "${syslinux_modules_dir}" addons
done
# make memtest filename FAT16/8.3 compatible
echo "source /boot/grub/footer.cfg" >> "${BUILD_OUTPUT}"/boot/grub/loopback.cfg
# copy grub files from target
- cp -a "${CHROOT_OUTPUT}"/usr/lib/grub/*-pc/*.mod "${BUILD_OUTPUT}"/boot/grub/
- cp -a "${CHROOT_OUTPUT}"/usr/lib/grub/*-pc/*.o "${BUILD_OUTPUT}"/boot/grub/
- cp -a "${CHROOT_OUTPUT}"/usr/lib/grub/*-pc/*.lst "${BUILD_OUTPUT}"/boot/grub/
+ mkdir -p "${BUILD_OUTPUT}"/boot/grub/i386-pc/
+ cp -a "${CHROOT_OUTPUT}"/usr/lib/grub/*-pc/*.mod "${BUILD_OUTPUT}"/boot/grub/i386-pc/
+ cp -a "${CHROOT_OUTPUT}"/usr/lib/grub/*-pc/*.o "${BUILD_OUTPUT}"/boot/grub/i386-pc/
+ cp -a "${CHROOT_OUTPUT}"/usr/lib/grub/*-pc/*.lst "${BUILD_OUTPUT}"/boot/grub/i386-pc/
cp -a "${CHROOT_OUTPUT}"/usr/share/grub/ascii.pf2 "${BUILD_OUTPUT}"/boot/grub/
cp -a "${CHROOT_OUTPUT}"/boot/grub/core.img "${BUILD_OUTPUT}"/boot/grub/
cp -a "${CHROOT_OUTPUT}"/boot/grub/grub.img "${BUILD_OUTPUT}"/boot/grub/
+ # copy modules for UEFI grub
+ mkdir -p "${BUILD_OUTPUT}"/boot/grub/x86_64-efi/
+ cp -a "${CHROOT_OUTPUT}"/usr/lib/grub/x86_64-efi/*.{mod,lst} "${BUILD_OUTPUT}"/boot/grub/x86_64-efi/
+
if ! [ -d "${TEMPLATE_DIRECTORY}"/GRML ] ; then
log "Error: ${TEMPLATE_DIRECTORY}/GRML does not exist. Exiting."
eerror "Error: ${TEMPLATE_DIRECTORY}/GRML does not exist. Exiting." ; eend 1
# make a 2048-byte bootsector for El Torito
dd if=/dev/zero of=boot/grub/toriboot.bin bs=512 count=4 2>/dev/null
# those are in 2048-byte sectors, so 1 16 matches 4 63 below
- echo 1 16 | mksh /usr/share/grml-live/scripts/bootgrub.mksh -B 11 | \
+ echo 1 16 | mksh "${SCRIPTS_DIRECTORY}/bootgrub.mksh" -B 11 | \
dd of=boot/grub/toriboot.bin conv=notrunc 2>/dev/null
fi
log "$MKISOFS -V '${GRML_NAME} ${VERSION}' -publisher 'grml-live | grml.org' -l -r -J $BOOT_ARGS -o ${ISO_OUTPUT}/${ISO_NAME} ."
log "Creating hybrid ISO file with manifold/grub2 method"
einfo "Creating hybrid ISO file with manifold/grub2 method"
# 512 bytes: MBR, partition table, load GRUB 2
- echo 4 63 | mksh /usr/share/grml-live/scripts/bootgrub.mksh -A -M 4:0x96 -g $cyls:16:32
+ echo 4 63 | mksh "${SCRIPTS_DIRECTORY}/bootgrub.mksh" -A -M 4:0x96 -g $cyls:16:32
else
log "Creating hybrid ISO file with manifold method"
einfo "Creating hybrid ISO file with manifold method"
# read only one but 2048-byte sized (scale: << 2) sector
echo $bootoff $bootoff | \
- mksh /usr/share/grml-live/scripts/bootilnx.mksh -A -M 4:0x96 -g $cyls:16:32 -S 2
+ mksh ${SCRIPTS_DIRECTORY}/bootilnx.mksh -A -M 4:0x96 -g $cyls:16:32 -S 2
fi | dd of="${ISO_OUTPUT}/${ISO_NAME}" conv=notrunc 2>/dev/null
eend $?
fi
mkdir -p "$NETBOOT"
- if ! [ -r "${CHROOT_OUTPUT}/usr/lib/syslinux/pxelinux.0" ] ; then
- ewarn "File /usr/lib/syslinux/pxelinux.0 not found in build chroot." ; eend 0
+ # since syslinux v3:6.03~pre1+dfsg-4 the pxelinux.0 has been split into a
+ # separate pxelinux package
+ if [ -d "${CHROOT_OUTPUT}/usr/lib/PXELINUX/" ] ; then
+ local pxelinux_dir=/usr/lib/PXELINUX
+ else
+ local pxelinux_dir=/usr/lib/syslinux
+ fi
+
+ if ! [ -r "${CHROOT_OUTPUT}/${pxelinux_dir}/pxelinux.0" ] ; then
+ ewarn "File ${pxelinux_dir}/pxelinux.0 not found in build chroot." ; eend 0
eindent
- einfo "Install syslinux[-common] package in chroot to get a netboot package."
+ einfo "Install syslinux[-common]/pxelinux package in chroot to get a netboot package."
eoutdent
return 0
fi
cp "${CHROOT_OUTPUT}"/boot/vmlinuz-* "$WORKING_DIR"/vmlinuz
cp "${CHROOT_OUTPUT}"/boot/initrd.img-* "$WORKING_DIR"/initrd.img
- cp "${CHROOT_OUTPUT}"/usr/lib/syslinux/pxelinux.0 "${WORKING_DIR}/pxelinux.0"
+ cp "${CHROOT_OUTPUT}/${pxelinux_dir}/pxelinux.0" "${WORKING_DIR}/pxelinux.0"
mkdir -p "${WORKING_DIR}/pxelinux.cfg"
if [ -r "${BUILD_OUTPUT}/boot/isolinux/netboot.cfg" ] ; then