937 lines
33 KiB
Bash
Executable File
937 lines
33 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
## live-build(7) - System Build Scripts
|
|
## Copyright (C) 2016-2020 The Debian Live team
|
|
## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch>
|
|
##
|
|
## This program comes with ABSOLUTELY NO WARRANTY; for details see COPYING.
|
|
## This is free software, and you are welcome to redistribute it
|
|
## under certain conditions; see COPYING for details.
|
|
|
|
|
|
# Prepare config for use, filling in defaults where no value provided for instance
|
|
#
|
|
# This function should avoid performing validation checks and failing from invalid values.
|
|
# Validation should be done through `Validate_config()`.
|
|
Prepare_config ()
|
|
{
|
|
# Colouring is re-evaluated here just incase a hard coded override was given in the saved config
|
|
case "${_COLOR}" in
|
|
true)
|
|
_COLOR_OUT="true"
|
|
_COLOR_ERR="true"
|
|
;;
|
|
false)
|
|
_COLOR_OUT="false"
|
|
_COLOR_ERR="false"
|
|
;;
|
|
auto)
|
|
;;
|
|
esac
|
|
_BREAKPOINTS="${_BREAKPOINTS:-false}"
|
|
_DEBUG="${_DEBUG:-false}"
|
|
_FORCE="${_FORCE:-false}"
|
|
_QUIET="${_QUIET:-false}"
|
|
_VERBOSE="${_VERBOSE:-false}"
|
|
|
|
export LB_CONFIGURATION_VERSION="${LB_CONFIGURATION_VERSION:-${LIVE_BUILD_VERSION}}"
|
|
export LIVE_CONFIGURATION_VERSION="${LB_CONFIGURATION_VERSION}" #for backwards compatibility with hooks
|
|
|
|
LB_SYSTEM="${LB_SYSTEM:-live}"
|
|
|
|
LB_MODE="${LB_MODE:-debian}"
|
|
LB_DERIVATIVE="false"
|
|
LB_DISTRIBUTION="${LB_DISTRIBUTION:-testing}"
|
|
LB_DISTRIBUTION_CHROOT="${LB_DISTRIBUTION_CHROOT:-${LB_DISTRIBUTION}}"
|
|
LB_DISTRIBUTION_BINARY="${LB_DISTRIBUTION_BINARY:-${LB_DISTRIBUTION_CHROOT}}"
|
|
|
|
# Do a reproducible build, i.e. is SOURCE_DATE_EPOCH already set?
|
|
_REPRODUCIBLE="${SOURCE_DATE_EPOCH:-false}"
|
|
if [ "${_REPRODUCIBLE}" != "false" ]; then
|
|
_REPRODUCIBLE=true
|
|
fi
|
|
# For a reproducible build, use UTC per default, otherwise the local time
|
|
_UTC_TIME_DEFAULT=${_REPRODUCIBLE}
|
|
|
|
# The current time: for a unified timestamp throughout the building process
|
|
export SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH:-$(date '+%s')}"
|
|
|
|
LB_UTC_TIME="${LB_UTC_TIME:-${_UTC_TIME_DEFAULT}}"
|
|
# Set UTC option for use with `date` where applicable
|
|
if [ "${LB_UTC_TIME}" = "true" ]; then
|
|
DATE_UTC_OPTION="--utc"
|
|
else
|
|
DATE_UTC_OPTION=""
|
|
fi
|
|
|
|
export LB_IMAGE_NAME="${LB_IMAGE_NAME:-live-image}"
|
|
export LB_IMAGE_TYPE="${LB_IMAGE_TYPE:-iso-hybrid}"
|
|
#for backwards compatibility with hooks
|
|
export LIVE_IMAGE_NAME="${LB_IMAGE_NAME}"
|
|
export LIVE_IMAGE_TYPE="${LB_IMAGE_TYPE}"
|
|
|
|
if [ -z "${LB_ARCHITECTURE}" ]; then
|
|
if command -v dpkg >/dev/null; then
|
|
LB_ARCHITECTURE="$(dpkg --print-architecture)"
|
|
else
|
|
case "$(uname -m)" in
|
|
x86_64)
|
|
LB_ARCHITECTURE="amd64"
|
|
;;
|
|
|
|
i?86)
|
|
LB_ARCHITECTURE="i386"
|
|
;;
|
|
|
|
*)
|
|
Echo_error "Unable to determine current architecture"
|
|
exit 1
|
|
;;
|
|
esac
|
|
fi
|
|
fi
|
|
export LB_ARCHITECTURE
|
|
# For backwards compat with custom hooks and conditional includes
|
|
export LB_ARCHITECTURES="${LB_ARCHITECTURE}"
|
|
|
|
LB_ARCHIVE_AREAS="${LB_ARCHIVE_AREAS:-main}"
|
|
LB_PARENT_ARCHIVE_AREAS="${LB_PARENT_ARCHIVE_AREAS:-${LB_ARCHIVE_AREAS}}"
|
|
export LB_ARCHIVE_AREAS="$(echo "${LB_ARCHIVE_AREAS}" | tr "," " ")"
|
|
export LB_PARENT_ARCHIVE_AREAS="$(echo "${LB_PARENT_ARCHIVE_AREAS}" | tr "," " ")"
|
|
|
|
LB_BACKPORTS="${LB_BACKPORTS:-false}"
|
|
if [ -n "$LB_PARENT_DISTRIBUTION" ]; then
|
|
LB_PARENT_DISTRIBUTION_CHROOT="${LB_PARENT_DISTRIBUTION_CHROOT:-${LB_PARENT_DISTRIBUTION}}"
|
|
LB_PARENT_DISTRIBUTION_BINARY="${LB_PARENT_DISTRIBUTION_BINARY:-${LB_PARENT_DISTRIBUTION}}"
|
|
LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION="${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION:-${LB_PARENT_DISTRIBUTION}}"
|
|
else
|
|
LB_PARENT_DISTRIBUTION_CHROOT="${LB_PARENT_DISTRIBUTION_CHROOT:-${LB_DISTRIBUTION_CHROOT}}"
|
|
LB_PARENT_DISTRIBUTION_BINARY="${LB_PARENT_DISTRIBUTION_BINARY:-${LB_DISTRIBUTION_BINARY}}"
|
|
LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION="${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION:-${LB_DEBIAN_INSTALLER_DISTRIBUTION}}"
|
|
fi
|
|
|
|
LB_APT="${LB_APT:-apt}"
|
|
LB_APT_HTTP_PROXY="${LB_APT_HTTP_PROXY}"
|
|
LB_APT_RECOMMENDS="${LB_APT_RECOMMENDS:-true}"
|
|
LB_APT_SECURE="${LB_APT_SECURE:-true}"
|
|
LB_APT_SOURCE_ARCHIVES="${LB_APT_SOURCE_ARCHIVES:-true}"
|
|
LB_APT_INDICES="${LB_APT_INDICES:-true}"
|
|
|
|
APT_OPTIONS="${APT_OPTIONS:---yes -o Acquire::Retries=5}"
|
|
APTITUDE_OPTIONS="${APTITUDE_OPTIONS:---assume-yes -o Acquire::Retries=5}"
|
|
|
|
BZIP2_OPTIONS="${BZIP2_OPTIONS:--6}"
|
|
GZIP_OPTIONS="${GZIP_OPTIONS:--6}"
|
|
LZIP_OPTIONS="${LZIP_OPTIONS:--6}"
|
|
LZMA_OPTIONS="${LZMA_OPTIONS:--6}"
|
|
XZ_OPTIONS="${XZ_OPTIONS:--6}"
|
|
|
|
if gzip --help | grep -qs "\-\-rsyncable"
|
|
then
|
|
GZIP_OPTIONS="$(echo ${GZIP_OPTIONS} | sed -E -e 's|[ ]?--rsyncable||') --rsyncable"
|
|
fi
|
|
|
|
LB_CACHE="${LB_CACHE:-true}"
|
|
if [ "${LB_CACHE}" = "false" ]
|
|
then
|
|
LB_CACHE_INDICES="false"
|
|
LB_CACHE_PACKAGES="false"
|
|
LB_CACHE_STAGES="bootstrap" #bootstrap caching currently required for process to work
|
|
else
|
|
LB_CACHE_INDICES="${LB_CACHE_INDICES:-false}"
|
|
LB_CACHE_PACKAGES="${LB_CACHE_PACKAGES:-true}"
|
|
LB_CACHE_STAGES="${LB_CACHE_STAGES:-bootstrap}"
|
|
fi
|
|
LB_CACHE_STAGES="$(echo "${LB_CACHE_STAGES}" | tr "," " ")"
|
|
|
|
LB_DEBCONF_FRONTEND="${LB_DEBCONF_FRONTEND:-noninteractive}"
|
|
LB_DEBCONF_PRIORITY="${LB_DEBCONF_PRIORITY:-critical}"
|
|
|
|
case "${LB_SYSTEM}" in
|
|
live)
|
|
LB_INITRAMFS="${LB_INITRAMFS:-live-boot}"
|
|
;;
|
|
|
|
normal)
|
|
LB_INITRAMFS="${LB_INITRAMFS:-none}"
|
|
;;
|
|
esac
|
|
|
|
LB_INITRAMFS_COMPRESSION="${LB_INITRAMFS_COMPRESSION:-gzip}"
|
|
|
|
case "${LB_SYSTEM}" in
|
|
live)
|
|
LB_INITSYSTEM="${LB_INITSYSTEM:-systemd}"
|
|
;;
|
|
|
|
normal)
|
|
LB_INITSYSTEM="${LB_INITSYSTEM:-none}"
|
|
;;
|
|
esac
|
|
|
|
if [ "${LB_ARCHITECTURE}" = "i386" ] && [ "${CURRENT_IMAGE_ARCHITECTURE}" = "amd64" ]
|
|
then
|
|
# Use linux32 when building amd64 images on i386
|
|
_LINUX32="linux32"
|
|
else
|
|
_LINUX32=""
|
|
fi
|
|
|
|
# Mirrors:
|
|
# *_MIRROR_BOOTSTRAP: to fetch packages from
|
|
# *_MIRROR_CHROOT: to fetch packages from
|
|
# *_MIRROR_CHROOT_SECURITY: security mirror to fetch packages from
|
|
# *_MIRROR_BINARY: mirror which ends up in the image
|
|
# *_MIRROR_BINARY_SECURITY: security mirror which ends up in the image
|
|
# *_MIRROR_DEBIAN_INSTALLER: to fetch installer from
|
|
if [ "${LB_MODE}" = "debian" ]; then
|
|
LB_MIRROR_BOOTSTRAP="${LB_MIRROR_BOOTSTRAP:-http://deb.debian.org/debian/}"
|
|
LB_PARENT_MIRROR_BOOTSTRAP="${LB_PARENT_MIRROR_BOOTSTRAP:-${LB_MIRROR_BOOTSTRAP}}"
|
|
fi
|
|
LB_MIRROR_CHROOT="${LB_MIRROR_CHROOT:-${LB_MIRROR_BOOTSTRAP}}"
|
|
LB_PARENT_MIRROR_CHROOT="${LB_PARENT_MIRROR_CHROOT:-${LB_PARENT_MIRROR_BOOTSTRAP}}"
|
|
if [ "${LB_MODE}" = "debian" ]; then
|
|
LB_MIRROR_CHROOT_SECURITY="${LB_MIRROR_CHROOT_SECURITY:-http://security.debian.org/}"
|
|
LB_PARENT_MIRROR_CHROOT_SECURITY="${LB_PARENT_MIRROR_CHROOT_SECURITY:-${LB_MIRROR_CHROOT_SECURITY}}"
|
|
|
|
LB_MIRROR_BINARY="${LB_MIRROR_BINARY:-http://deb.debian.org/debian/}"
|
|
LB_PARENT_MIRROR_BINARY="${LB_PARENT_MIRROR_BINARY:-${LB_MIRROR_BINARY}}"
|
|
|
|
LB_MIRROR_BINARY_SECURITY="${LB_MIRROR_BINARY_SECURITY:-http://security.debian.org/}"
|
|
LB_PARENT_MIRROR_BINARY_SECURITY="${LB_PARENT_MIRROR_BINARY_SECURITY:-${LB_MIRROR_BINARY_SECURITY}}"
|
|
fi
|
|
LB_MIRROR_DEBIAN_INSTALLER="${LB_MIRROR_DEBIAN_INSTALLER:-${LB_MIRROR_CHROOT}}"
|
|
LB_PARENT_MIRROR_DEBIAN_INSTALLER="${LB_PARENT_MIRROR_DEBIAN_INSTALLER:-${LB_PARENT_MIRROR_CHROOT}}"
|
|
|
|
LB_CHROOT_FILESYSTEM="${LB_CHROOT_FILESYSTEM:-squashfs}"
|
|
|
|
LB_UNION_FILESYSTEM="${LB_UNION_FILESYSTEM:-overlay}"
|
|
|
|
LB_INTERACTIVE="${LB_INTERACTIVE:-false}"
|
|
|
|
LB_KEYRING_PACKAGES="${LB_KEYRING_PACKAGES:-debian-archive-keyring}"
|
|
|
|
# first, handle existing LB_LINUX_FLAVOURS for backwards compatibility
|
|
if [ -n "${LB_LINUX_FLAVOURS}" ]; then
|
|
LB_LINUX_FLAVOURS_WITH_ARCH="${LB_LINUX_FLAVOURS}"
|
|
fi
|
|
case "${LB_ARCHITECTURE}" in
|
|
arm64)
|
|
LB_LINUX_FLAVOURS_WITH_ARCH="${LB_LINUX_FLAVOURS_WITH_ARCH:-arm64}"
|
|
;;
|
|
|
|
armel)
|
|
# armel will have special images: one rootfs image and many additional kernel images.
|
|
# therefore we default to all available armel flavours
|
|
LB_LINUX_FLAVOURS_WITH_ARCH="${LB_LINUX_FLAVOURS_WITH_ARCH:-marvell}"
|
|
;;
|
|
|
|
armhf)
|
|
# armhf will have special images: one rootfs image and many additional kernel images.
|
|
# therefore we default to all available armhf flavours
|
|
LB_LINUX_FLAVOURS_WITH_ARCH="${LB_LINUX_FLAVOURS_WITH_ARCH:-armmp armmp-lpae}"
|
|
;;
|
|
|
|
amd64)
|
|
LB_LINUX_FLAVOURS_WITH_ARCH="${LB_LINUX_FLAVOURS_WITH_ARCH:-amd64}"
|
|
;;
|
|
|
|
i386)
|
|
LB_LINUX_FLAVOURS_WITH_ARCH="${LB_LINUX_FLAVOURS_WITH_ARCH:-686-pae}"
|
|
;;
|
|
|
|
ia64)
|
|
LB_LINUX_FLAVOURS_WITH_ARCH="${LB_LINUX_FLAVOURS_WITH_ARCH:-itanium}"
|
|
;;
|
|
|
|
powerpc)
|
|
LB_LINUX_FLAVOURS_WITH_ARCH="${LB_LINUX_FLAVOURS_WITH_ARCH:-powerpc64 powerpc}"
|
|
;;
|
|
|
|
ppc64el)
|
|
LB_LINUX_FLAVOURS_WITH_ARCH="${LB_LINUX_FLAVOURS_WITH_ARCH:-powerpc64le}"
|
|
;;
|
|
|
|
riscv64)
|
|
LB_LINUX_FLAVOURS_WITH_ARCH="${LB_LINUX_FLAVOURS_WITH_ARCH:-riscv64}"
|
|
;;
|
|
|
|
s390x)
|
|
LB_LINUX_FLAVOURS_WITH_ARCH="${LB_LINUX_FLAVOURS_WITH_ARCH:-s390x}"
|
|
;;
|
|
|
|
*)
|
|
Echo_error "Architecture(s) ${LB_ARCHITECTURE} not yet supported (FIXME)"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
LB_LINUX_FLAVOURS=""
|
|
for FLAVOUR in ${LB_LINUX_FLAVOURS_WITH_ARCH}
|
|
do
|
|
ARCH_FILTERED_FLAVOUR="$(echo ${FLAVOUR} | awk -F':' '{print $1}')"
|
|
LB_LINUX_FLAVOURS="${LB_LINUX_FLAVOURS:+$LB_LINUX_FLAVOURS }${ARCH_FILTERED_FLAVOUR}"
|
|
done
|
|
|
|
LB_LINUX_PACKAGES="${LB_LINUX_PACKAGES:-linux-image}"
|
|
|
|
LB_BINARY_FILESYSTEM="${LB_BINARY_FILESYSTEM:-fat32}"
|
|
|
|
case "${LB_PARENT_DISTRIBUTION_BINARY}" in
|
|
sid|unstable)
|
|
LB_SECURITY="${LB_SECURITY:-false}"
|
|
LB_UPDATES="${LB_UPDATES:-false}"
|
|
LB_PROPOSED_UPDATES="${LB_PROPOSED_UPDATES:-false}"
|
|
;;
|
|
|
|
*)
|
|
LB_SECURITY="${LB_SECURITY:-true}"
|
|
LB_UPDATES="${LB_UPDATES:-true}"
|
|
LB_PROPOSED_UPDATES="${LB_PROPOSED_UPDATES:-false}"
|
|
;;
|
|
esac
|
|
|
|
case "${LB_ARCHITECTURE}" in
|
|
amd64|i386)
|
|
LB_IMAGE_TYPE="${LB_IMAGE_TYPE:-iso-hybrid}"
|
|
;;
|
|
|
|
*)
|
|
LB_IMAGE_TYPE="${LB_IMAGE_TYPE:-iso}"
|
|
;;
|
|
esac
|
|
|
|
case "${LB_ARCHITECTURE}" in
|
|
amd64|i386)
|
|
if [ "${LB_INITRAMFS}" = "dracut-live" ]; then
|
|
LB_BOOTLOADER_BIOS="${LB_BOOTLOADER_BIOS:-grub-pc}"
|
|
else
|
|
LB_BOOTLOADER_BIOS="${LB_BOOTLOADER_BIOS:-syslinux}"
|
|
fi
|
|
if ! In_list "${LB_IMAGE_TYPE}" hdd netboot; then
|
|
LB_BOOTLOADER_EFI="${LB_BOOTLOADER_EFI:-grub-efi}"
|
|
fi
|
|
;;
|
|
arm64)
|
|
if ! In_list "${LB_IMAGE_TYPE}" hdd netboot; then
|
|
LB_BOOTLOADER_EFI="${LB_BOOTLOADER_EFI:-grub-efi}"
|
|
fi
|
|
;;
|
|
esac
|
|
# Command line option combines BIOS and EFI selection in one.
|
|
# Also, need to support old config files that held `LB_BOOTLOADERS`.
|
|
# Note that this function does not perform validation, so none is done here.
|
|
if [ -n "${LB_BOOTLOADERS}" ]; then
|
|
LB_BOOTLOADERS="$(echo "${LB_BOOTLOADERS}" | tr "," " ")"
|
|
unset LB_BOOTLOADER_BIOS
|
|
unset LB_BOOTLOADER_EFI
|
|
local BOOTLOADER
|
|
for BOOTLOADER in $LB_BOOTLOADERS; do
|
|
case "${BOOTLOADER}" in
|
|
grub-legacy|grub-pc|syslinux)
|
|
LB_BOOTLOADER_BIOS="${BOOTLOADER}"
|
|
;;
|
|
grub-efi)
|
|
LB_BOOTLOADER_EFI="${BOOTLOADER}"
|
|
;;
|
|
esac
|
|
done
|
|
fi
|
|
|
|
LB_CHECKSUMS="${LB_CHECKSUMS:-sha256}"
|
|
|
|
LB_COMPRESSION="${LB_COMPRESSION:-none}"
|
|
|
|
LB_ZSYNC="${LB_ZSYNC:-false}"
|
|
|
|
LB_BUILD_WITH_CHROOT="${LB_BUILD_WITH_CHROOT:-true}"
|
|
|
|
LB_BUILD_WITH_TMPFS="${LB_BUILD_WITH_TMPFS:-false}"
|
|
|
|
LB_DEBIAN_INSTALLER="${LB_DEBIAN_INSTALLER:-none}"
|
|
if [ "${LB_DEBIAN_INSTALLER}" = "false" ]
|
|
then
|
|
LB_DEBIAN_INSTALLER="none"
|
|
Echo_warning "A value of 'false' for option LB_DEBIAN_INSTALLER is deprecated, please use 'none' in future."
|
|
fi
|
|
if [ "${LB_DEBIAN_INSTALLER}" = "true" ]
|
|
then
|
|
LB_DEBIAN_INSTALLER="netinst"
|
|
Echo_warning "A value of 'true' for option LB_DEBIAN_INSTALLER is deprecated, please use 'netinst' in future."
|
|
fi
|
|
|
|
# cdrom-checker in d-i requires a md5 checksum file
|
|
if [ "${LB_DEBIAN_INSTALLER}" != "none" ]
|
|
then
|
|
if [ "${LB_CHECKSUMS}" = "none" ]
|
|
then
|
|
LB_CHECKSUMS="md5"
|
|
else
|
|
if ! In_list md5 ${LB_CHECKSUMS}; then
|
|
LB_CHECKSUMS=${LB_CHECKSUMS}" md5"
|
|
fi
|
|
fi
|
|
fi
|
|
|
|
LB_DEBIAN_INSTALLER_DISTRIBUTION="${LB_DEBIAN_INSTALLER_DISTRIBUTION:-${LB_DISTRIBUTION}}"
|
|
LB_DEBIAN_INSTALLER_GUI="${LB_DEBIAN_INSTALLER_GUI:-true}"
|
|
|
|
if [ -z "${LB_DEBIAN_INSTALLER_PRESEEDFILE}" ]
|
|
then
|
|
if Find_files config/debian-installer/preseed.cfg
|
|
then
|
|
LB_DEBIAN_INSTALLER_PRESEEDFILE="/preseed.cfg"
|
|
fi
|
|
|
|
if Find_files config/debian-installer/*.cfg && [ ! -e config/debian-installer/preseed.cfg ]
|
|
then
|
|
Echo_warning "You have placed some preseeding files into config/debian-installer but you didn't specify the default preseeding file through LB_DEBIAN_INSTALLER_PRESEEDFILE. This means that debian-installer will not take up a preseeding file by default."
|
|
fi
|
|
fi
|
|
|
|
LB_ISO_APPLICATION="${LB_ISO_APPLICATION:-Debian Live}"
|
|
LB_ISO_PREPARER="${LB_ISO_PREPARER:-live-build @LB_VERSION@; https://salsa.debian.org/live-team/live-build}"
|
|
LB_ISO_PUBLISHER="${LB_ISO_PUBLISHER:-Debian Live project; https://wiki.debian.org/DebianLive; debian-live@lists.debian.org}"
|
|
# The string @ISOVOLUME_TS@ must have the same length as the output of `date +%Y%m%d-%H:%M`
|
|
LB_ISO_VOLUME="${LB_ISO_VOLUME:-Debian ${LB_DISTRIBUTION} @ISOVOLUME_TS@}"
|
|
|
|
case "${LB_INITRAMFS}" in
|
|
live-boot)
|
|
LB_BOOTAPPEND_LIVE="${LB_BOOTAPPEND_LIVE:-boot=live components quiet splash}"
|
|
LB_BOOTAPPEND_LIVE_FAILSAFE="${LB_BOOTAPPEND_LIVE_FAILSAFE:-boot=live components memtest noapic noapm nodma nomce nosmp nosplash vga=788}"
|
|
;;
|
|
|
|
dracut-live)
|
|
# Replace all spaces with underscore for the CD label
|
|
LB_ISO_VOLUME="$(echo "${LB_ISO_VOLUME}" | tr " " "_")"
|
|
LB_BOOTAPPEND_LIVE="${LB_BOOTAPPEND_LIVE:-boot=live components quiet splash rd.live.image root=live:CDLABEL=${LB_ISO_VOLUME} rd.live.dir=live rd.live.squashimg=filesystem.squashfs}"
|
|
LB_BOOTAPPEND_LIVE_FAILSAFE="${LB_BOOTAPPEND_LIVE_FAILSAFE:-boot=live components memtest noapic noapm nodma nomce nosmp nosplash vga=788 rd.live.image root=live:CDLABEL=${LB_ISO_VOLUME} rd.live.dir=live rd.live.squashimg=filesystem.squashfs}"
|
|
;;
|
|
|
|
none)
|
|
LB_BOOTAPPEND_LIVE="${LB_BOOTAPPEND_LIVE:-quiet splash}"
|
|
LB_BOOTAPPEND_LIVE_FAILSAFE="${LB_BOOTAPPEND_LIVE_FAILSAFE:-memtest noapic noapm nodma nomce nosmp nosplash vga=788}"
|
|
;;
|
|
esac
|
|
|
|
local _LB_BOOTAPPEND_PRESEED
|
|
if [ -n "${LB_DEBIAN_INSTALLER_PRESEEDFILE}" ]
|
|
then
|
|
case "${LB_IMAGE_TYPE}" in
|
|
iso|iso-hybrid)
|
|
_LB_BOOTAPPEND_PRESEED="file=/cdrom/install/${LB_DEBIAN_INSTALLER_PRESEEDFILE}"
|
|
;;
|
|
|
|
hdd)
|
|
_LB_BOOTAPPEND_PRESEED="file=/hd-media/install/${LB_DEBIAN_INSTALLER_PRESEEDFILE}"
|
|
;;
|
|
|
|
netboot)
|
|
case "${LB_DEBIAN_INSTALLER_PRESEEDFILE}" in
|
|
*://*)
|
|
_LB_BOOTAPPEND_PRESEED="file=${LB_DEBIAN_INSTALLER_PRESEEDFILE}"
|
|
;;
|
|
|
|
*)
|
|
_LB_BOOTAPPEND_PRESEED="file=/${LB_DEBIAN_INSTALLER_PRESEEDFILE}"
|
|
;;
|
|
esac
|
|
;;
|
|
|
|
tar)
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
if [ -n ${_LB_BOOTAPPEND_PRESEED} ]
|
|
then
|
|
LB_BOOTAPPEND_INSTALL="${LB_BOOTAPPEND_INSTALL} ${_LB_BOOTAPPEND_PRESEED}"
|
|
fi
|
|
|
|
LB_BOOTAPPEND_INSTALL="$(echo ${LB_BOOTAPPEND_INSTALL} | sed -e 's/[ \t]*$//')"
|
|
|
|
LB_HDD_LABEL="${LB_HDD_LABEL:-DEBIAN_LIVE}"
|
|
LB_HDD_SIZE="${LB_HDD_SIZE:-auto}"
|
|
|
|
LB_MEMTEST="${LB_MEMTEST:-none}"
|
|
if [ "${LB_MEMTEST}" = "false" ]; then
|
|
LB_MEMTEST="none"
|
|
Echo_warning "A value of 'false' for option LB_MEMTEST is deprecated, please use 'none' in future."
|
|
fi
|
|
|
|
case "${LB_ARCHITECTURE}" in
|
|
amd64|i386)
|
|
if [ "${LB_DEBIAN_INSTALLER}" != "none" ]; then
|
|
LB_LOADLIN="${LB_LOADLIN:-true}"
|
|
else
|
|
LB_LOADLIN="${LB_LOADLIN:-false}"
|
|
fi
|
|
;;
|
|
|
|
*)
|
|
LB_LOADLIN="${LB_LOADLIN:-false}"
|
|
;;
|
|
esac
|
|
|
|
LB_WIN32_LOADER="${LB_WIN32_LOADER:-false}"
|
|
|
|
LB_NET_TARBALL="${LB_NET_TARBALL:-true}"
|
|
|
|
LB_ONIE="${LB_ONIE:-false}"
|
|
LB_ONIE_KERNEL_CMDLINE="${LB_ONIE_KERNEL_CMDLINE:-}"
|
|
|
|
LB_FIRMWARE_CHROOT="${LB_FIRMWARE_CHROOT:-true}"
|
|
LB_FIRMWARE_BINARY="${LB_FIRMWARE_BINARY:-true}"
|
|
|
|
LB_SWAP_FILE_SIZE="${LB_SWAP_FILE_SIZE:-512}"
|
|
|
|
LB_UEFI_SECURE_BOOT="${LB_UEFI_SECURE_BOOT:-auto}"
|
|
|
|
LB_SOURCE="${LB_SOURCE:-false}"
|
|
LB_SOURCE_IMAGES="${LB_SOURCE_IMAGES:-tar}"
|
|
LB_SOURCE_IMAGES="$(echo "${LB_SOURCE_IMAGES}" | tr "," " ")"
|
|
|
|
# Foreign/port bootstrapping
|
|
if [ -n "${LB_BOOTSTRAP_QEMU_ARCHITECTURES}" ]; then
|
|
LB_BOOTSTRAP_QEMU_ARCHITECTURE="${LB_BOOTSTRAP_QEMU_ARCHITECTURES}"
|
|
unset LB_BOOTSTRAP_QEMU_ARCHITECTURES
|
|
Echo_warning "LB_BOOTSTRAP_QEMU_ARCHITECTURES was renamed to LB_BOOTSTRAP_QEMU_ARCHITECTURE, please update your config."
|
|
fi
|
|
LB_BOOTSTRAP_QEMU_ARCHITECTURE="${LB_BOOTSTRAP_QEMU_ARCHITECTURE:-}"
|
|
LB_BOOTSTRAP_QEMU_EXCLUDE="${LB_BOOTSTRAP_QEMU_EXCLUDE:-}"
|
|
LB_BOOTSTRAP_QEMU_STATIC="${LB_BOOTSTRAP_QEMU_STATIC:-}"
|
|
}
|
|
|
|
Validate_config ()
|
|
{
|
|
Validate_config_permitted_values
|
|
Validate_config_dependencies
|
|
}
|
|
|
|
# Check values are individually permitted, including:
|
|
# - value in list of available values
|
|
# - string lengths within permitted ranges
|
|
Validate_config_permitted_values ()
|
|
{
|
|
if [ "${LB_APT_INDICES}" != "true" ] && [ "${LB_APT_INDICES}" != "false" ]; then
|
|
Echo_error "Value for LB_APT_INDICES (--apt-indices) can only be 'true' or 'false'!"
|
|
exit 1
|
|
fi
|
|
if [ "${LB_APT_RECOMMENDS}" != "true" ] && [ "${LB_APT_RECOMMENDS}" != "false" ]; then
|
|
Echo_error "Value for LB_APT_RECOMMENDS (--apt-recommends) can only be 'true' or 'false'!"
|
|
exit 1
|
|
fi
|
|
if [ "${LB_APT_SECURE}" != "true" ] && [ "${LB_APT_SECURE}" != "false" ]; then
|
|
Echo_error "Value for LB_APT_SECURE (--apt-secure) can only be 'true' or 'false'!"
|
|
exit 1
|
|
fi
|
|
if [ "${LB_APT_SOURCE_ARCHIVES}" != "true" ] && [ "${LB_APT_SOURCE_ARCHIVES}" != "false" ]; then
|
|
Echo_error "Value for LB_APT_SOURCE_ARCHIVES (--apt-source-archives) can only be 'true' or 'false'!"
|
|
exit 1
|
|
fi
|
|
if [ "${LB_BACKPORTS}" != "true" ] && [ "${LB_BACKPORTS}" != "false" ]; then
|
|
Echo_error "Value for LB_BACKPORTS (--backports) can only be 'true' or 'false'!"
|
|
exit 1
|
|
fi
|
|
if [ "${LB_BUILD_WITH_CHROOT}" != "true" ] && [ "${LB_BUILD_WITH_CHROOT}" != "false" ]; then
|
|
Echo_error "Value for LB_BUILD_WITH_CHROOT (--build-with-chroot) can only be 'true' or 'false'!"
|
|
exit 1
|
|
fi
|
|
if [ "${LB_CACHE}" != "true" ] && [ "${LB_CACHE}" != "false" ]; then
|
|
Echo_error "Value for LB_CACHE (--cache) can only be 'true' or 'false'!"
|
|
exit 1
|
|
fi
|
|
if [ "${LB_CACHE_INDICES}" != "true" ] && [ "${LB_CACHE_INDICES}" != "false" ]; then
|
|
Echo_error "Value for LB_CACHE_INDICES (--cache-indices) can only be 'true' or 'false'!"
|
|
exit 1
|
|
fi
|
|
if [ "${LB_CACHE_PACKAGES}" != "true" ] && [ "${LB_CACHE_PACKAGES}" != "false" ]; then
|
|
Echo_error "Value for LB_CACHE_PACKAGES (--cache-packages) can only be 'true' or 'false'!"
|
|
exit 1
|
|
fi
|
|
if [ "${LB_DEBIAN_INSTALLER_GUI}" != "true" ] && [ "${LB_DEBIAN_INSTALLER_GUI}" != "false" ]; then
|
|
Echo_error "Value for LB_DEBIAN_INSTALLER_GUI (--debian-installer-gui) can only be 'true' or 'false'!"
|
|
exit 1
|
|
fi
|
|
if [ "${LB_FIRMWARE_BINARY}" != "true" ] && [ "${LB_FIRMWARE_BINARY}" != "false" ]; then
|
|
Echo_error "Value for LB_FIRMWARE_BINARY (--firmware-binary) can only be 'true' or 'false'!"
|
|
exit 1
|
|
fi
|
|
if [ "${LB_FIRMWARE_CHROOT}" != "true" ] && [ "${LB_FIRMWARE_CHROOT}" != "false" ]; then
|
|
Echo_error "Value for LB_FIRMWARE_CHROOT (--firmware-chroot) can only be 'true' or 'false'!"
|
|
exit 1
|
|
fi
|
|
if [ "${LB_LOADLIN}" != "true" ] && [ "${LB_LOADLIN}" != "false" ]; then
|
|
Echo_error "Value for LB_LOADLIN (--loadlin) can only be 'true' or 'false'!"
|
|
exit 1
|
|
fi
|
|
if [ "${LB_NET_TARBALL}" != "true" ] && [ "${LB_NET_TARBALL}" != "false" ]; then
|
|
Echo_error "Value for LB_NET_TARBALL (--net-tarball) can only be 'true' or 'false'!"
|
|
exit 1
|
|
fi
|
|
if [ "${LB_ONIE}" != "true" ] && [ "${LB_ONIE}" != "false" ]; then
|
|
Echo_error "Value for LB_ONIE (--onie) can only be 'true' or 'false'!"
|
|
exit 1
|
|
fi
|
|
if [ "${LB_PROPOSED_UPDATES}" != "true" ] && [ "${LB_PROPOSED_UPDATES}" != "false" ]; then
|
|
Echo_error "Value for LB_PROPOSED_UPDATES (--proposed-updates) can only be 'true' or 'false'!"
|
|
exit 1
|
|
fi
|
|
if [ "${LB_SECURITY}" != "true" ] && [ "${LB_SECURITY}" != "false" ]; then
|
|
Echo_error "Value for LB_SECURITY (--security) can only be 'true' or 'false'!"
|
|
exit 1
|
|
fi
|
|
if [ "${LB_SOURCE}" != "true" ] && [ "${LB_SOURCE}" != "false" ]; then
|
|
Echo_error "Value for LB_SOURCE (--source) can only be 'true' or 'false'!"
|
|
exit 1
|
|
fi
|
|
if [ "${LB_UPDATES}" != "true" ] && [ "${LB_UPDATES}" != "false" ]; then
|
|
Echo_error "Value for LB_UPDATES (--updates) can only be 'true' or 'false'!"
|
|
exit 1
|
|
fi
|
|
if [ "${LB_UTC_TIME}" != "true" ] && [ "${LB_UTC_TIME}" != "false" ]; then
|
|
Echo_error "Value for LB_UTC_TIME (--utc-time) can only be 'true' or 'false'!"
|
|
exit 1
|
|
fi
|
|
if [ "${LB_WIN32_LOADER}" != "true" ] && [ "${LB_WIN32_LOADER}" != "false" ]; then
|
|
Echo_error "Value for LB_WIN32_LOADER (--win32-loader) can only be 'true' or 'false'!"
|
|
exit 1
|
|
fi
|
|
if [ "${LB_ZSYNC}" != "true" ] && [ "${LB_ZSYNC}" != "false" ]; then
|
|
Echo_error "Value for LB_ZSYNC (--zsync) can only be 'true' or 'false'!"
|
|
exit 1
|
|
fi
|
|
|
|
if ! In_list "${LB_APT}" apt apt-get aptitude; then
|
|
Echo_error "You have specified an invalid value for LB_APT (--apt)."
|
|
exit 1
|
|
fi
|
|
|
|
if ! In_list "${LB_BINARY_FILESYSTEM}" fat16 fat32 ext2 ext3 ext4 ntfs; then
|
|
Echo_error "You have specified an invalid value for LB_BINARY_FILESYSTEM (--binary-filesystem)."
|
|
exit 1
|
|
fi
|
|
|
|
if ! In_list "${LB_IMAGE_TYPE}" iso iso-hybrid hdd tar netboot; then
|
|
Echo_error "You have specified an invalid value for --binary-image."
|
|
exit 1
|
|
fi
|
|
|
|
if [ -z "${LB_BOOTLOADER_BIOS}" ] && [ -z "${LB_BOOTLOADER_EFI}" ]; then
|
|
Echo_warning "You have specified no bootloaders; I predict that you will experience some problems!"
|
|
fi
|
|
if [ -n "${LB_BOOTLOADER_BIOS}" ] && ! In_list "${LB_BOOTLOADER_BIOS}" grub-legacy grub-pc syslinux; then
|
|
Echo_error "You have specified an invalid BIOS bootloader."
|
|
exit 1
|
|
fi
|
|
if [ -n "${LB_BOOTLOADER_EFI}" ] && ! In_list "${LB_BOOTLOADER_EFI}" grub-efi; then
|
|
Echo_error "You have specified an invalid EFI bootloader."
|
|
exit 1
|
|
fi
|
|
if [ -n "${LB_BOOTLOADERS}" ]; then
|
|
local BOOTLOADER
|
|
local BOOTLOADERS_BIOS=0
|
|
local BOOTLOADERS_EFI=0
|
|
for BOOTLOADER in $LB_BOOTLOADERS; do
|
|
# Note, multiple instances of the same bootloader should be rejected,
|
|
# to avoid issues (e.g. in `binary_iso` bootloader handling).
|
|
case "${BOOTLOADER}" in
|
|
grub-legacy|grub-pc|syslinux)
|
|
BOOTLOADERS_BIOS=$(( $BOOTLOADERS_BIOS + 1 ))
|
|
;;
|
|
grub-efi)
|
|
BOOTLOADERS_EFI=$(( $BOOTLOADERS_EFI + 1 ))
|
|
;;
|
|
*)
|
|
Echo_error "The following is not a valid bootloader: '%s'" "${BOOTLOADER}"
|
|
exit 1
|
|
;;
|
|
esac
|
|
done
|
|
if [ $BOOTLOADERS_BIOS -ge 2 ]; then
|
|
Echo_error "Invalid bootloader selection. Multiple BIOS instances specified."
|
|
exit 1
|
|
fi
|
|
if [ $BOOTLOADERS_EFI -ge 2 ]; then
|
|
Echo_error "Invalid bootloader selection. Multiple EFI instances specified."
|
|
exit 1
|
|
fi
|
|
if [ $BOOTLOADERS_BIOS -eq 0 ] && [ $BOOTLOADERS_EFI -eq 0 ]; then
|
|
Echo_warning "You have specified no bootloaders; I predict that you will experience some problems!"
|
|
fi
|
|
fi
|
|
|
|
local CACHE_STAGE
|
|
for CACHE_STAGE in ${LB_CACHE_STAGES}; do
|
|
if ! In_list "${CACHE_STAGE}" bootstrap chroot rootfs; then
|
|
Echo_warning "The following is not a valid stage: '%s'" "${CACHE_STAGE}"
|
|
fi
|
|
done
|
|
|
|
local CHECKSUM
|
|
if [ "${LB_CHECKSUMS}" != "none" ]; then
|
|
for CHECKSUM in ${LB_CHECKSUMS}; do
|
|
if ! In_list "${CHECKSUM}" md5 sha1 sha224 sha256 sha384 sha512; then
|
|
Echo_error "You have specified an invalid value for LB_CHECKSUMS (--checksums): '%s'" "${CHECKSUM}"
|
|
exit 1
|
|
fi
|
|
done
|
|
fi
|
|
|
|
if ! In_list "${LB_CHROOT_FILESYSTEM}" ext2 ext3 ext4 squashfs jffs2 none plain; then
|
|
Echo_error "You have specified an invalid value for LB_CHROOT_FILESYSTEM (--chroot-filesystem)."
|
|
exit 1
|
|
fi
|
|
|
|
if ! In_list "${LB_COMPRESSION}" bzip2 gzip lzip xz none; then
|
|
Echo_error "You have specified an invalid value for LB_COMPRESSION (--compression)."
|
|
exit 1
|
|
fi
|
|
|
|
if ! In_list "${LB_DEBCONF_FRONTEND}" dialog editor noninteractive readline; then
|
|
Echo_error "You have specified an invalid value for LB_DEBCONF_FRONTEND (--debconf-frontend)."
|
|
exit 1
|
|
fi
|
|
|
|
if ! In_list "${LB_DEBCONF_PRIORITY}" low medium high critical; then
|
|
Echo_error "You have specified an invalid value for LB_DEBCONF_PRIORITY (--debconf-priority)."
|
|
exit 1
|
|
fi
|
|
|
|
if ! In_list "${LB_DEBIAN_INSTALLER}" cdrom netinst netboot businesscard live none; then
|
|
Echo_error "You have specified an invalid value for LB_DEBIAN_INSTALLER (--debian-installer)."
|
|
exit 1
|
|
fi
|
|
|
|
if echo ${LB_HDD_LABEL} | grep -qs ' '; then
|
|
Echo_error "Whitespace is not currently supported in HDD labels (LB_HDD_LABEL; --hdd-label)."
|
|
exit 1
|
|
fi
|
|
|
|
if ! In_list "${LB_INITRAMFS}" none live-boot dracut-live; then
|
|
Echo_error "You have specified an invalid value for LB_INITRAMFS (--initramfs)."
|
|
exit 1
|
|
fi
|
|
|
|
if [ "${LB_INITRAMFS}" = "dracut-live" ]; then
|
|
if [ "${LB_DM_VERITY}" = "true" ]; then
|
|
Echo_error "Currently unsupported/untested: dm_verity and dracut."
|
|
exit 1
|
|
fi
|
|
if [ "${LB_BOOTLOADER_BIOS}" = "grub-legacy" ]; then
|
|
Echo_error "Currently unsupported/untested: grub-legacy and dracut."
|
|
exit 1
|
|
fi
|
|
if [ "${LB_BOOTLOADER_BIOS}" = "syslinux" ]; then
|
|
Echo_error "Currently unsupported/untested: syslinux and dracut."
|
|
exit 1
|
|
fi
|
|
if ! In_list "${LB_IMAGE_TYPE}" iso iso-hybrid; then
|
|
# The boot=live:CDLABEL requires a CD medium
|
|
Echo_error "Currently unsupported/untested: image type ${LB_IMAGE_TYPE} and dracut."
|
|
exit 1
|
|
fi
|
|
if [ "${LB_INITRAMFS_COMPRESSION}" != "gzip" ]; then
|
|
Echo_error "Currently unsupported/untested: compression ${LB_INITRAMFS_COMPRESSION} and dracut."
|
|
exit 1
|
|
fi
|
|
if [ "${LB_CHROOT_FILESYSTEM}" != "squashfs" ]; then
|
|
Echo_error "Currently unsupported/untested: chroot filesystem ${LB_CHROOT_FILESYSTEM} and dracut."
|
|
exit 1
|
|
fi
|
|
if [ "${LB_INITSYSTEM}" != systemd ]; then
|
|
Echo_error "Currently unsupported/untested: init system ${LB_INITSYSTEM} and dracut."
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
if ! In_list "${LB_INITRAMFS_COMPRESSION}" bzip2 gzip lzma; then
|
|
Echo_error "You have specified an invalid value for LB_INITRAMFS_COMPRESSION (--initramfs-compression)."
|
|
exit 1
|
|
fi
|
|
|
|
if ! In_list "${LB_INITSYSTEM}" sysvinit systemd none; then
|
|
Echo_error "You have specified an invalid value for LB_INITSYSTEM (--initsystem)."
|
|
exit 1
|
|
fi
|
|
|
|
if ! In_list "${LB_INTERACTIVE}" true shell x11 xnest false; then
|
|
Echo_error "You have specified an invalid value for LB_INTERACTIVE (--interactive)."
|
|
exit 1
|
|
fi
|
|
|
|
if [ "$(echo -n "${LB_ISO_APPLICATION}" | wc -c)" -gt 128 ]; then
|
|
Echo_warning "You have specified a value of LB_ISO_APPLICATION (--iso-application) that is too long; the maximum length is 128 characters."
|
|
fi
|
|
|
|
if [ "$(echo -n "${LB_ISO_PREPARER}" | sed -e "s/@LB_VERSION@/${VERSION}/" | wc -c)" -gt 128 ]; then
|
|
Echo_warning "You have specified a value of LB_ISO_PREPARER (--iso-preparer) that is too long; the maximum length is 128 characters."
|
|
fi
|
|
|
|
if [ "$(echo -n "${LB_ISO_PUBLISHER}" | wc -c)" -gt 128 ]; then
|
|
Echo_warning "You have specified a value of LB_ISO_PUBLISHER (--iso-publisher) that is too long; the maximum length is 128 characters."
|
|
fi
|
|
|
|
if [ "$(echo -n "${LB_ISO_VOLUME}" | sed -e "s/@ISOVOLUME_TS@/$(date $DATE_UTC_OPTION -d@${SOURCE_DATE_EPOCH} +%Y%m%d-%H:%M)/" | wc -c)" -gt 32 ]; then
|
|
Echo_warning "You have specified a value of LB_ISO_VOLUME (--iso-volume) that is too long; the maximum length is 32 characters."
|
|
fi
|
|
|
|
if ! In_list "${LB_MEMTEST}" memtest86+ memtest86 none; then
|
|
Echo_error "You have specified an invalid value for LB_MEMTEST (--memtest)."
|
|
exit 1
|
|
fi
|
|
|
|
if ! In_list "${LB_SOURCE_IMAGES}" iso netboot tar hdd; then
|
|
Echo_error "You have specified an invalid value for LB_SOURCE_IMAGES (--source-images)."
|
|
exit 1
|
|
fi
|
|
|
|
if ! In_list "${LB_SYSTEM}" live normal; then
|
|
Echo_error "You have specified an invalid value for LB_SYSTEM (--system)."
|
|
exit 1
|
|
fi
|
|
|
|
if ! In_list "${LB_UEFI_SECURE_BOOT}" auto enable disable; then
|
|
Echo_error "You have specified an invalid value for LB_UEFI_SECURE_BOOT (--uefi-secure-boot)."
|
|
exit 1
|
|
fi
|
|
|
|
if [ -n "${LB_BOOTSTRAP_QEMU_ARCHITECTURE}" ]; then
|
|
if [ -z "${LB_BOOTSTRAP_QEMU_STATIC}" ]; then
|
|
Echo_error "You have not specified the qemu-static binary for ${LB_BOOTSTRAP_QEMU_ARCHITECTURE} (--bootstrap-qemu-static)"
|
|
exit 1
|
|
fi
|
|
if [ ! -e "${LB_BOOTSTRAP_QEMU_STATIC}" ]; then
|
|
Echo_error "The qemu-static binary (${LB_BOOTSTRAP_QEMU_STATIC}) for ${LB_BOOTSTRAP_QEMU_ARCHITECTURE} was not found on the host"
|
|
exit 1
|
|
fi
|
|
|
|
if [ ! -x "${LB_BOOTSTRAP_QEMU_STATIC}" ]; then
|
|
Echo_error "The qemu-static binary (${LB_BOOTSTRAP_QEMU_STATIC}) for ${LB_BOOTSTRAP_QEMU_ARCHITECTURE} is not executable on the host"
|
|
exit 1
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Check option combinations and other extra stuff
|
|
Validate_config_dependencies ()
|
|
{
|
|
if [ "${LB_BINARY_FILESYSTEM}" = "ntfs" ] && ! command -v ntfs-3g >/dev/null; then
|
|
Echo_error "Using ntfs as the binary filesystem is currently only supported if ntfs-3g is installed on the host system."
|
|
exit 1
|
|
fi
|
|
|
|
if [ "${LB_DEBIAN_INSTALLER}" != "none" ] && [ "${LB_DEBIAN_INSTALLER}" != "live" ]; then
|
|
# d-i true, no caching
|
|
if ! In_list "bootstrap" ${LB_CACHE_STAGES} || [ "${LB_CACHE}" != "true" ] || [ "${LB_CACHE_PACKAGES}" != "true" ]
|
|
then
|
|
Echo_warning "You have selected values of LB_CACHE, LB_CACHE_PACKAGES, LB_CACHE_STAGES and LB_DEBIAN_INSTALLER which will result in 'bootstrap' packages not being cached. This configuration is potentially unsafe as the bootstrap packages are re-used when integrating the Debian Installer."
|
|
fi
|
|
fi
|
|
|
|
if In_list "syslinux" $LB_BOOTLOADERS; then
|
|
# syslinux + fat or ntfs, or extlinux + ext[234] or btrfs
|
|
if ! In_list "${LB_BINARY_FILESYSTEM}" fat16 fat32 ntfs ext2 ext3 ext4 btrfs; then
|
|
Echo_warning "You have selected values of LB_BOOTLOADERS and LB_BINARY_FILESYSTEM which are incompatible - the syslinux family only support FAT, NTFS, ext[234] or btrfs filesystems."
|
|
fi
|
|
fi
|
|
|
|
if In_list "grub-pc" ${LB_BOOTLOADERS} || In_list "grub-efi" ${LB_BOOTLOADERS} || In_list "grub-legacy" ${LB_BOOTLOADERS}; then
|
|
if In_list "${LB_IMAGE_TYPE}" hdd netboot; then
|
|
Echo_error "You have selected an invalid combination of bootloaders and live image type; the grub-* bootloaders are not compatible with hdd and netboot types."
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
Validate_http_proxy
|
|
}
|
|
|
|
# Retrieve the proxy settings from the host. Check whether conflicts are present with the command line arguments
|
|
Validate_http_proxy ()
|
|
{
|
|
local HOST_AUTO_APT_PROXY=""
|
|
local HOST_AUTO_APT_PROXY_LEGACY=""
|
|
local HOST_FIXED_APT_PROXY=""
|
|
|
|
# Fetch the proxy, using the various ways the http proxy can be set in apt
|
|
if command -v apt-config >/dev/null; then
|
|
local APT_CONFIG_OPTIONS
|
|
# apt-config only understands --option (-o) and --config-file (-c) of ${APT_OPTIONS}
|
|
# Don't report errors when additional options are provided and don't add additional quotes
|
|
APT_CONFIG_OPTIONS=$(getopt --quiet --unquoted --options 'c:o:' --long 'config-file:,option:' -- ${APT_OPTIONS} || true)
|
|
|
|
# The apt configuration `Acquire::http::Proxy-Auto-Detect` (and the legacy `Acquire::http::ProxyAutoDetect`)
|
|
# If the script fails, or the result of the script is `DIRECT` or an empty line, it is considered to be not set (https://sources.debian.org/src/apt/2.3.9/apt-pkg/contrib/proxy.cc/)
|
|
local AUTOPROXY
|
|
eval "$(apt-config ${APT_CONFIG_OPTIONS} shell AUTOPROXY Acquire::http::Proxy-Auto-Detect)"
|
|
if [ -x "${AUTOPROXY}" ]; then
|
|
HOST_AUTO_APT_PROXY="$(${AUTOPROXY} || echo '')"
|
|
if [ "${HOST_AUTO_APT_PROXY}" = "DIRECT" ]; then
|
|
HOST_AUTO_APT_PROXY=""
|
|
fi
|
|
fi
|
|
# Also check the legacy ProxyAutoDetect
|
|
eval "$(apt-config ${APT_CONFIG_OPTIONS} shell AUTOPROXY Acquire::http::ProxyAutoDetect)"
|
|
if [ -x "$AUTOPROXY" ]; then
|
|
HOST_AUTO_APT_PROXY_LEGACY="$(${AUTOPROXY} || echo '')"
|
|
if [ "${HOST_AUTO_APT_PROXY_LEGACY}" = "DIRECT" ]; then
|
|
HOST_AUTO_APT_PROXY_LEGACY=""
|
|
fi
|
|
fi
|
|
|
|
# The apt configuration `Acquire::http::proxy::URL-host` (https://sources.debian.org/src/apt/2.3.9/methods/http.cc/)
|
|
# If set to `DIRECT`, it is considered to be not set
|
|
# This configuration allows you to specify different proxies for specific URLs
|
|
# This setup is too complex for the purpose of live-build and will silently be ignored
|
|
|
|
# The apt configuration `Acquire::http::Proxy`
|
|
eval "$(apt-config ${APT_CONFIG_OPTIONS} shell HOST_FIXED_APT_PROXY Acquire::http::Proxy)"
|
|
fi
|
|
|
|
|
|
# Report all detected settings in debug mode
|
|
Echo_debug "Detected proxy settings:"
|
|
Echo_debug "--apt-http-proxy: ${LB_APT_HTTP_PROXY}"
|
|
Echo_debug "HOST Auto APT PROXY: ${HOST_AUTO_APT_PROXY}"
|
|
Echo_debug "HOST Auto APT PROXY (legacy): ${HOST_AUTO_APT_PROXY_LEGACY}"
|
|
Echo_debug "HOST Fixed APT PROXY: ${HOST_FIXED_APT_PROXY}"
|
|
# The environment variable 'http_proxy' is used when no apt option is set
|
|
Echo_debug "HOST http_proxy: ${http_proxy}"
|
|
# The environment variable 'no_proxy' contains a list of domains that must not be handled by a proxy,
|
|
# it overrides all previous settings by apt and 'http_proxy'
|
|
Echo_debug "HOST no_proxy: ${no_proxy}"
|
|
|
|
# Check whether any of the provided proxy values conflicts with another
|
|
local LAST_SEEN_PROXY_NAME=""
|
|
local LAST_SEEN_PROXY_VALUE=""
|
|
Validate_http_proxy_source "apt configuration option Acquire::http::Proxy-Auto-Detect" "${HOST_AUTO_APT_PROXY}"
|
|
Validate_http_proxy_source "apt configuration option Acquire::http::ProxyAutoDetect" "${HOST_AUTO_APT_PROXY_LEGACY}"
|
|
Validate_http_proxy_source "apt configuration option Acquire::http::Proxy" "${HOST_FIXED_APT_PROXY}"
|
|
Validate_http_proxy_source "environment variable http_proxy" "${http_proxy}"
|
|
Validate_http_proxy_source "command line option --apt-http-proxy" "${LB_APT_HTTP_PROXY}"
|
|
|
|
# This is the value to use for the other scripts in live-build
|
|
export http_proxy="${LAST_SEEN_PROXY_VALUE}"
|
|
if [ ! -z "${http_proxy}" ]; then
|
|
Echo_message "Using http proxy: ${http_proxy}"
|
|
fi
|
|
}
|
|
|
|
# Check whether a proxy setting conflicts with a previously set proxy setting
|
|
Validate_http_proxy_source ()
|
|
{
|
|
local NAME="${1}"
|
|
local VALUE="${2}"
|
|
|
|
if [ ! -z "${VALUE}" ]; then
|
|
if [ ! -z "${LAST_SEEN_PROXY_VALUE}" ]; then
|
|
if [ "${VALUE}" != "${LAST_SEEN_PROXY_VALUE}" ]; then
|
|
Echo_error "Inconsistent proxy configuration: the value for ${NAME} (${VALUE}) differs from the value for ${LAST_SEEN_PROXY_NAME} (${LAST_SEEN_PROXY_VALUE})"
|
|
exit 1
|
|
fi
|
|
fi
|
|
LAST_SEEN_PROXY_NAME="${NAME}"
|
|
LAST_SEEN_PROXY_VALUE="${VALUE}"
|
|
fi
|
|
}
|