3
# lh_binary_syslinux(1) - installs syslinux into binary
4
# Copyright (C) 2006-2010 Daniel Baumann <daniel@debian.org>
6
# live-helper comes with ABSOLUTELY NO WARRANTY; for details see COPYING.
7
# This is free software, and you are welcome to redistribute it
8
# under certain conditions; see COPYING for details.
12
# Including common functions
13
. "${LH_BASE:-/usr/share/live-helper}"/live-helper.sh
15
# Setting static variables
16
DESCRIPTION="$(Echo 'installs syslinux into binary')"
18
USAGE="${PROGRAM} [--force]"
22
# Reading configuration files
23
Read_conffiles config/all config/common config/bootstrap config/chroot config/binary config/source
26
if [ "${LH_BOOTLOADER}" != "syslinux" ]
31
Echo_message "Begin installing syslinux..."
33
# Requiring stage file
34
Require_stagefile .stage/config .stage/bootstrap
37
Check_stagefile .stage/binary_syslinux
39
# Checking syslinux templates
40
Check_templates syslinux
49
Check_architecture amd64 i386
50
Check_crossarchitecture
53
Check_package chroot/usr/bin/syslinux syslinux
56
Restore_cache cache/packages_binary
66
echo "${VALUE}" | iconv -f utf-8 -t latin1
69
Syslinux_memtest_entry ()
72
MENULABEL="$(Utf8_to_latin1 "${2}")"
75
MEMTEST="${MEMTEST}\nlabel ${LABEL}\n"
77
# Write the menu label if the syslinux menu is being use
78
MEMTEST="${MEMTEST}\tmenu label ${MENULABEL}\n"
79
MEMTEST="${MEMTEST}\tkernel ${LIVE_KERNEL_PATH}/${KERNEL}\n"
80
MEMTEST="$(/bin/echo ${MEMTEST} | sed -e 's|//|/|g')"
83
Syslinux_live_entry ()
86
MENULABEL="$(Utf8_to_latin1 "${2}")"
92
case "${LH_BINARY_IMAGES}" in
94
NUMBER="$(ls -1 ${KERNEL_PATH} | grep 'vmlinuz[0-9]\+$' | wc -l)"
95
NUMBER="$((${NUMBER} +1))"
97
# Do not add numbering to filenames if first kernel/initrd
98
if [ "${NUMBER}" = "1" ]
103
# Note: ISOLINUX will not find the kernel if the name ends in ".img".
104
if [ -e ${KERNEL_PATH}/${KERNEL} ]
106
mv ${KERNEL_PATH}/${KERNEL} ${KERNEL_PATH}/vmlinuz${NUMBER}
109
if [ -e ${KERNEL_PATH}/${INITRD} ]
111
mv ${KERNEL_PATH}/${INITRD} ${KERNEL_PATH}/initrd${NUMBER}.img
114
KERNEL=vmlinuz${NUMBER}
115
INITRD=initrd${NUMBER}.img
120
LINUX_LIVE="${LINUX_LIVE}\nlabel ${LABEL}\n"
122
# Write the menu label if the syslinux menu is being use
123
if [ -n "${MENULABEL}" ]
125
LINUX_LIVE="${LINUX_LIVE}\tmenu label ${MENULABEL}\n"
128
LINUX_LIVE="${LINUX_LIVE}\tkernel ${LIVE_KERNEL_PATH}/${KERNEL}\n"
129
LINUX_LIVE="${LINUX_LIVE}\tappend initrd=${LIVE_KERNEL_PATH}/${INITRD} boot=${INITFS} live-config ${LH_BOOTAPPEND_LIVE} ${APPEND}\n"
132
LINUX_LIVE="${LINUX_LIVE}\nlabel ${LABEL}failsafe\n"
134
# Write the menu label if the syslinux menu is being use
135
if [ -n "${MENULABEL}" ]
137
LINUX_LIVE="${LINUX_LIVE}\tmenu label ${MENULABEL} (failsafe)\n"
140
LINUX_LIVE="${LINUX_LIVE}\tkernel ${LIVE_KERNEL_PATH}/${KERNEL}\n"
141
LINUX_LIVE="${LINUX_LIVE}\tappend initrd=${LIVE_KERNEL_PATH}/${INITRD} boot=${INITFS} live-config ${LH_BOOTAPPEND_LIVE} ${APPEND} ${FAILSAFE}\n"
144
Syslinux_install_entry ()
151
# Boot in quiet mode where appropriate
154
for TYPE in Install Expert Rescue Auto
158
TAPPEND="${APPEND} ${QAPPEND}"
162
TAPPEND="priority=low ${APPEND}"
166
TAPPEND="rescue/enable=true ${APPEND} ${QAPPEND}"
170
TAPPEND="auto=true priority=critical ${APPEND} ${QAPPEND}"
183
LINUX_INSTALL="${LINUX_INSTALL}\nlabel $(echo "${TYPE}" | tr A-Z a-z)${TYPE_SUFFIX}\n"
184
LINUX_INSTALL="${LINUX_INSTALL}\tmenu label ${LABEL} ${TYPE}\n"
185
LINUX_INSTALL="${LINUX_INSTALL}\tkernel ${LIVE_INSTALL_KERNEL_PATH}/${KERNEL}\n"
186
LINUX_INSTALL="${LINUX_INSTALL}\tappend initrd=${LIVE_INSTALL_KERNEL_PATH}/${INITRD} ${TAPPEND} ${LH_BOOTAPPEND_INSTALL}\n"
190
Copy_syslinux_templates ()
192
cp -r "${TEMPLATES}"/common/* ${SCREEN_PATH}
194
if [ "${LH_SYSLINUX_MENU}" = "false" ]
196
cp "${TEMPLATES}"/normal/* ${SCREEN_PATH}
198
cp "${TEMPLATES}"/menu/* ${SCREEN_PATH}
200
case "${LH_SYSLINUX_MENU}" in
202
MENUMODULE="gfxboot.c32"
206
MENUMODULE="menu.c32"
210
MENUMODULE="vesamenu.c32"
214
if [ -z "${LH_SYSLINUX_CFG}" ]
216
MENUMODULE=$(grep 'menu.c32' ${TEMPLATES}/menu/syslinux.cfg | sed 's|default\s*.*/\(.*menu.c32\)$|\1|g')
218
LH_SYSLINUX_CFG="${LH_SYSLINUX_CFG:-${TEMPLATES}/menu/syslinux.cfg}"
223
case "${LH_BUILD_WITH_CHROOT}" in
225
cp chroot/usr/lib/syslinux/"${MENUMODULE}" ${DATA_PATH}
228
cp /usr/lib/syslinux/"${MENUMODULE}" ${DATA_PATH}
233
if ls "${TEMPLATES}/${LH_LANGUAGE}"/* > /dev/null 2>&1
235
cp -r "${TEMPLATES}"/"${LH_LANGUAGE}"/* ${SCREEN_PATH}
237
if ls "${TEMPLATES}"/en/* > /dev/null 2>&1
239
cp -r "${TEMPLATES}"/en/* ${SCREEN_PATH}
243
if ls ${SCREEN_PATH}/*.live > /dev/null 2>&1
245
for FILE in ${SCREEN_PATH}/*.live
247
mv ${FILE} $(dirname ${FILE})/$(basename ${FILE} .live)
251
if [ "${LH_DEBIAN_INSTALLER}" != "false" ]
253
if ls ${SCREEN_PATH}/*.install > /dev/null 2>&1
255
for FILE in ${SCREEN_PATH}/*.install
257
mv ${FILE} $(dirname ${FILE})/$(basename ${FILE} .install)
261
case "${LH_ARCHITECTURE}" in
263
if ls ${SCREEN_PATH}/*.install.g-i > /dev/null 2>&1
265
for FILE in ${SCREEN_PATH}/*.install.g-i
267
mv ${FILE} $(dirname ${FILE})/$(basename ${FILE} .install.g-i)
273
rm -f ${SCREEN_PATH}/*.install.g-i
277
rm -f ${SCREEN_PATH}/*.install*
280
if [ "${LH_SYSLINUX_MENU}" != "false" ]
282
rm -f ${DATA_PATH}/boot.txt
285
# Copying custom splash screen
286
if [ "${LH_SYSLINUX_SPLASH}" = "none" ]
290
rm -f ${SCREEN_PATH}/splash.rle
291
rm -f ${DATA_PATH}/splash.png
293
if [ "${LH_SYSLINUX_MENU}" = "false" ]
295
SPLASH="${LIVE_DATA_PATH}/splash.rle"
297
SPLASH="${LIVE_DATA_PATH}/splash.png"
300
if [ -n "${LH_SYSLINUX_SPLASH}" ]
302
if [ ! -e "${LH_SYSLINUX_SPLASH}" ]
304
Echo_error "%s doen't exist" "${LH_SYSLINUX_SPLASH}"
307
rm -f ${SCREEN_PATH}/splash.rle
308
rm -f ${DATA_PATH}/splash.png
309
cp -f "${LH_SYSLINUX_SPLASH}" ${DATA_PATH}/$(basename ${SPLASH})
315
Configure_syslinux_templates ()
317
templates="$(find ${SYSLINUX_PATH} -type f -name '*.cfg' -o -name '*.txt')"
319
for template_file in ${templates}
321
sed -i -e "s|{\$LINUX_LIVE}|${LINUX_LIVE}|" \
322
-e "s|{\$LINUX_INSTALL}|${LINUX_INSTALL}|" \
323
-e "s|{\$MEMTEST}|${MEMTEST}|" \
324
-e "s|{\$LIVE_SCREEN_PATH}|${LIVE_SCREEN_PATH}|" \
325
-e "s|{\$LIVE_DATA_PATH}|${LIVE_DATA_PATH}|" \
326
-e "s|{\$LIVE_KERNEL_PATH}|${LIVE_KERNEL_PATH}|" \
327
-e "s|{\$SPLASH}|${SPLASH}|" \
328
-e "s|{\$LH_DISTRIBUTION}|${LH_DISTRIBUTION}|" \
329
-e "s|{\$LH_DATE}|$(date +%Y%m%d)|" \
330
-e "s|{\$LH_MEDIA}|${MEDIA}|" \
331
-e "s|{\$LH_VERSION}|${VERSION}|" \
332
-e "s|{\$LH_SYSLINUX_TIMEOUT}|${LH_SYSLINUX_TIMEOUT}0|" \
336
case "${LH_BINARY_IMAGES}" in
338
if [ -f "${SYSLINUX_PATH}/exithelp.cfg" ]
340
sed -i -e "s|config isolinux.cfg|config syslinux.cfg|" "${SYSLINUX_PATH}"/exithelp.cfg
345
if [ -f "${SCREEN_PATH}/exithelp.cfg" ]
347
sed -i -e "s|config isolinux.cfg|config ${LIVE_KERNEL_PATH}/pxelinux.cfg/default|" "${SCREEN_PATH}"/exithelp.cfg
353
# Setting up common variables
354
case "${LH_INITRAMFS}" in
364
# Setting boot method specific variables
365
case "${LH_BINARY_IMAGES}" in
367
SYSLINUX_PATH="binary/isolinux"
368
KERNEL_PATH="binary/${INITFS}"
369
SCREEN_PATH="${SYSLINUX_PATH}"
370
DATA_PATH="${SCREEN_PATH}"
371
LIVE_KERNEL_PATH="/${INITFS}"
372
LIVE_INSTALL_KERNEL_PATH="/install"
373
LIVE_SCREEN_PATH="/isolinux"
374
LIVE_DATA_PATH="${LIVE_SCREEN_PATH}"
379
SYSLINUX_PATH="tftpboot"
380
KERNEL_PATH="${SYSLINUX_PATH}/debian-live/${LH_ARCHITECTURE}"
381
SCREEN_PATH="${SYSLINUX_PATH}/debian-live/${LH_ARCHITECTURE}/boot-screens"
382
DATA_PATH="${SCREEN_PATH}"
383
LIVE_KERNEL_PATH="debian-live/${LH_ARCHITECTURE}"
384
LIVE_INSTALL_KERNEL_PATH="debian-install/${LH_ARCHITECTURE}"
385
LIVE_SCREEN_PATH="debian-live/${LH_ARCHITECTURE}/boot-screens"
386
LIVE_DATA_PATH="${LIVE_SCREEN_PATH}"
391
SYSLINUX_PATH="binary/syslinux"
392
KERNEL_PATH="binary/${INITFS}"
393
SCREEN_PATH="${SYSLINUX_PATH}"
394
DATA_PATH="${SCREEN_PATH}"
395
LIVE_KERNEL_PATH="/${INITFS}"
396
LIVE_INSTALL_KERNEL_PATH="/install"
397
LIVE_SCREEN_PATH="/syslinux"
398
LIVE_DATA_PATH="${LIVE_SCREEN_PATH}"
403
Check_multiarchitecture
405
# Creating directories
406
mkdir -p "${KERNEL_PATH}"
407
mkdir -p "${SCREEN_PATH}"
408
mkdir -p "${DATA_PATH}"
410
# Setting boot parameters
411
case "${LH_ENCRYPTION}" in
415
LH_BOOTAPPEND_LIVE="${LH_BOOTAPPEND_LIVE} encryption=${LH_ENCRYPTION}"
419
if [ -n "${LH_USERNAME}" ]
421
case "${LH_INITRAMFS}" in
423
LH_BOOTAPPEND_LIVE="${LH_BOOTAPPEND_LIVE} username=${LH_USERNAME}"
427
if [ "${LH_USERNAME}" != "user" ]
429
LH_BOOTAPPEND_LIVE="${LH_BOOTAPPEND_LIVE} username=${LH_USERNAME}"
435
if [ -n "${LH_HOSTNAME}" ]
437
case "${LH_INITRAMFS}" in
439
LH_BOOTAPPEND_LIVE="${LH_BOOTAPPEND_LIVE} hostname=${LH_HOSTNAME}"
443
if [ "${LH_HOSTNAME}" != "debian" ]
445
LH_BOOTAPPEND_LIVE="${LH_BOOTAPPEND_LIVE} hostname=${LH_HOSTNAME}"
451
if [ "${LH_UNION_FILESYSTEM}" != "aufs" ]
453
LH_BOOTAPPEND_LIVE="${LH_BOOTAPPEND_LIVE} union=${LH_UNION_FILESYSTEM}"
456
if [ "${LH_EXPOSED_ROOT}" != "false" ]
458
LH_BOOTAPPEND_LIVE="${LH_BOOTAPPEND_LIVE} exposedroot"
461
if [ "${LH_BINARY_IMAGES}" = "net" ]
463
case "${LH_NET_ROOT_FILESYSTEM}" in
465
LH_BOOTAPPEND_LIVE="${LH_BOOTAPPEND_LIVE} netboot=nfs nfsroot=${LH_NET_ROOT_SERVER}:${LH_NET_ROOT_PATH}"
469
LH_BOOTAPPEND_LIVE="${LH_BOOTAPPEND_LIVE} netboot=cifs nfsroot=//${LH_NET_ROOT_SERVER}${LH_NET_ROOT_PATH}"
473
Echo_error "Unsupported net filesystem"
478
if [ -n "${LH_NET_ROOT_MOUNTOPTIONS}" ]
480
LH_BOOTAPPEND_LIVE="${LH_BOOTAPPEND_LIVE} nfsopts=${LH_NET_ROOT_MOUNTOPTIONS}"
484
if [ -n "${LH_NET_COW_PATH}" ]
486
case "${LH_NET_COW_FILESYSTEM}" in
488
if [ -n "${LH_NET_COW_MOUNTOPTIONS}" ]
490
LH_NET_COW_MOUNTOPTIONS=",${LH_NET_COW_MOUNTOPTIONS}"
493
LH_BOOTAPPEND_LIVE="${LH_BOOTAPPEND_LIVE} nfscow=${LH_NET_COW_SERVER}:${LH_NET_COW_PATH}${LH_NET_COW_MOUNTOPTIONS}"
497
Echo_error "Unsupported net filesystem"
503
LH_BOOTAPPEND_LIVE="$(echo ${LH_BOOTAPPEND_LIVE} | sed -e 's| ||')"
505
# Parameters are listed at: linux/Documentation/kernel-parameters.txt
506
FAILSAFE="noapic noapm nodma nomce nolapic nomodeset nosmp vga=normal"
508
# Moving kernels into place
509
if [ "binary/${INITFS}" != "${KERNEL_PATH}" ]
511
mv binary/${INITFS}/vmlinuz* ${KERNEL_PATH}
512
mv binary/${INITFS}/initrd* ${KERNEL_PATH}
514
if [ "${LH_MEMTEST}" != "false" ] && [ "${LH_MEMTEST}" != "none" ]
516
mv binary/${INITFS}/memtest ${KERNEL_PATH}
521
DEFAULT_FLAVOUR="$(echo ${LH_LINUX_FLAVOURS} | awk '{ print $1 }')"
522
DEFAULT_KERNEL="$(basename chroot/boot/vmlinuz-*${DEFAULT_FLAVOUR})"
523
DEFAULT_INITRD="initrd.img-$(echo ${DEFAULT_KERNEL} | sed -e 's|vmlinuz-||')"
525
Syslinux_live_entry "live" "${LH_SYSLINUX_MENU_LIVE_ENTRY}" "${DEFAULT_KERNEL}" "${DEFAULT_INITRD}"
527
if [ "$(echo ${LH_LINUX_FLAVOURS} | wc -w)" -gt "1" ]
529
for FLAVOUR in ${LH_LINUX_FLAVOURS}
531
if [ "${FLAVOUR}" != "${DEFAULT_FLAVOUR}" ]
533
FLAVOUR_KERNEL="$(basename chroot/boot/vmlinuz-*${FLAVOUR})"
534
FLAVOUR_INITRD="initrd.img-$(echo ${FLAVOUR_KERNEL} | sed -e 's|vmlinuz-||')"
535
Syslinux_live_entry "live-${FLAVOUR}" "${LH_SYSLINUX_MENU_LIVE_ENTRY} ${FLAVOUR}" "${FLAVOUR_KERNEL}" "${FLAVOUR_INITRD}"
540
# Only needed for non-vesamenu, non-gfxboot syslinux
541
case "${LH_SYSLINUX_MENU}" in
543
# Adding syslinux hardcoded default label entry
544
Syslinux_live_entry "linux" "" "${DEFAULT_KERNEL}" "${DEFAULT_INITRD}"
548
# Assembling debian-installer configuration
549
if [ "${LH_DEBIAN_INSTALLER}" != "false" ]
552
INITRD_DI="initrd.gz"
553
APPEND_DI="vga=normal"
555
VMLINUZ_GI="gtk/vmlinuz"
556
INITRD_GI="gtk/initrd.gz"
557
APPEND_GI="video=vesa:ywrap,mtrr vga=788"
559
if [ -f "binary/${LIVE_INSTALL_KERNEL_PATH}/${VMLINUZ_DI}" ] && [ -f "binary/${LIVE_INSTALL_KERNEL_PATH}/${INITRD_DI}" ]
561
Syslinux_install_entry "Text" "${VMLINUZ_DI}" "${INITRD_DI}" "${APPEND_DI}"
564
if [ -f "binary/${LIVE_INSTALL_KERNEL_PATH}/${VMLINUZ_GI}" ] && [ -f "binary/${LIVE_INSTALL_KERNEL_PATH}/${INITRD_GI}" ]
566
Syslinux_install_entry "GUI" "${VMLINUZ_GI}" "${INITRD_GI}" "${APPEND_GI}"
570
# Assembling memtest configuration
571
if [ -f "${KERNEL_PATH}"/memtest ]
573
Syslinux_memtest_entry "memtest" "${LH_SYSLINUX_MENU_MEMTEST_ENTRY}" "memtest"
576
# Copy templates to base syslinux directory
577
Copy_syslinux_templates
579
# Fill in templates with created values
580
Configure_syslinux_templates
582
# Configure syslinux setup per boot method
583
case "${LH_BINARY_IMAGES}" in
585
case "${LH_BUILD_WITH_CHROOT}" in
587
cp chroot/usr/lib/syslinux/isolinux.bin ${SCREEN_PATH}
590
cp /usr/lib/syslinux/isolinux.bin ${SCREEN_PATH}
594
mv ${SCREEN_PATH}/syslinux.cfg ${SCREEN_PATH}/isolinux.cfg
596
# Copying configuration file
597
if [ -n "${LH_SYSLINUX_CFG}" ]
599
cp "${LH_SYSLINUX_CFG}" ${SCREEN_PATH}/isolinux.cfg
604
case "${LH_BUILD_WITH_CHROOT}" in
606
cp chroot/usr/lib/syslinux/pxelinux.0 ${KERNEL_PATH}
609
cp /usr/lib/syslinux/pxelinux.0 ${KERNEL_PATH}
613
mkdir -p ${KERNEL_PATH}/pxelinux.cfg
614
ln -s ${LIVE_KERNEL_PATH}/pxelinux.cfg ${SYSLINUX_PATH}/pxelinux.cfg
615
ln -s ${LIVE_KERNEL_PATH}/pxelinux.0 ${SYSLINUX_PATH}/pxelinux.0
617
# Adjusting include pathes
618
for FILE in ${SCREEN_PATH}/*.cfg
620
sed -i -e "s|^include |include ${LIVE_SCREEN_PATH}/|g" "${FILE}"
623
sed -i -e "s| f| ${LIVE_SCREEN_PATH}/f|g" ${SCREEN_PATH}/prompt.cfg
625
mv ${SCREEN_PATH}/syslinux.cfg ${KERNEL_PATH}/pxelinux.cfg/default
627
# Copying configuration file
628
if [ -n "${LH_SYSLINUX_CFG}" ]
630
cp "${LH_SYSLINUX_CFG}" ${KERNEL_PATH}/pxelinux.cfg/default
635
case "${LH_BUILD_WITH_CHROOT}" in
637
cp chroot/usr/lib/syslinux/isolinux.bin ${SCREEN_PATH}/syslinux.bin
640
cp /usr/lib/syslinux/isolinux.bin ${SCREEN_PATH}/syslinux.bin
644
# Copying configuration file
645
if [ -n "${LH_SYSLINUX_CFG}" ]
647
cp "${LH_SYSLINUX_CFG}" ${SCREEN_PATH}/syslinux.cfg
653
Save_cache cache/packages_binary
658
# Creating stage file
659
Create_stagefile .stage/binary_syslinux