2007-09-23 08:04:46 +00:00
#!/bin/sh
2010-09-02 11:12:37 +00:00
## live-build(7) - System Build Scripts
2020-03-11 09:07:21 -01:00
## Copyright (C) 2016-2020 The Debian Live team
2015-01-04 18:05:39 -01:00
## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch>
2010-09-02 11:12:37 +00:00
##
2012-07-29 23:59:00 +00:00
## This program comes with ABSOLUTELY NO WARRANTY; for details see COPYING.
2010-09-02 11:12:37 +00:00
## This is free software, and you are welcome to redistribute it
## under certain conditions; see COPYING for details.
2007-09-23 08:04:46 +00:00
2020-03-28 04:42:34 -01:00
# Prepare config for use, filling in defaults where no value provided for instance
2020-05-04 15:16:00 +00:00
#
# This function should avoid performing validation checks and failing from invalid values.
# Validation should be done through `Validate_config()`.
2020-03-28 04:42:34 -01:00
Prepare_config ( )
2007-09-23 08:04:46 +00:00
{
2020-03-28 09:06:50 -01:00
# 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 } "
2021-08-20 11:35:31 +00:00
export LB_CONFIGURATION_VERSION = " ${ LB_CONFIGURATION_VERSION :- ${ LIVE_BUILD_VERSION } } "
export LIVE_CONFIGURATION_VERSION = " ${ LB_CONFIGURATION_VERSION } " #for backwards compatibility with hooks
config: revert partial format conversion
back in v4.0~a6-1 a transition process was started to move the live-build
config to a new format. the new format was INI style, and required
parsing functions to read/write values, compared to the existing format
which was just shell script code setting variables.
this partial transition is the explanation for the existence of the
`New_configuration()` function, and understanding this is important to
understanding the purpose of it - it is not in fact intended for creating
a new configuration, it is just related to the new config format
transition.
the positives of the new format were that it was somewhat cleaner looking,
while the negative was the terrible relative efficiency.
the file `config/build` was created to hold options in this new format.
the transition was only ever completed for a handful of config options:
- architecture
- archive areas and parent archive areas
- live image name
- live image type
a 'configuration version' attribute was also saved, which is not used by
anything.
the bootstrap-mirror and parent-bootstrap-mirror attributes are pointlessly
stored in it seemingly resulting from work done in v4.0~a17-1. (they are
also stored in another config file from which the value is actually used).
it in fact seems to have been a source of confusion for Raphaël in
authoring 44b9b0a6501476de594ce3783cea5df0c141478c, since the new
`[parent]-distribution-{chroot|binary}` options it introduced were stored
both in `config/bootstrap` and in `config/build`, while only used from the
former. i expect, understandably, that he thought that `config/build` was
just an information file.
Gbp-Dch: Short
2020-04-06 15:49:08 +00:00
2011-10-13 17:50:48 +00:00
LB_SYSTEM = " ${ LB_SYSTEM :- live } "
2011-09-29 22:56:49 +00:00
2020-05-02 11:41:35 +00:00
LB_MODE = " ${ LB_MODE :- debian } "
2020-03-18 23:19:26 -01:00
LB_DERIVATIVE = "false"
2020-09-25 09:32:34 +00:00
LB_DISTRIBUTION = " ${ LB_DISTRIBUTION :- bullseye } "
2019-12-19 16:18:44 -01:00
LB_DISTRIBUTION_CHROOT = " ${ LB_DISTRIBUTION_CHROOT :- ${ LB_DISTRIBUTION } } "
LB_DISTRIBUTION_BINARY = " ${ LB_DISTRIBUTION_BINARY :- ${ LB_DISTRIBUTION_CHROOT } } "
2020-09-02 10:11:27 +00:00
# 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 } } "
2020-05-03 18:19:22 +00:00
# Set UTC option for use with `date` where applicable
if [ " ${ LB_UTC_TIME } " = "true" ] ; then
DATE_UTC_OPTION = "--utc"
else
DATE_UTC_OPTION = ""
fi
2021-08-20 11:35:31 +00:00
export LB_IMAGE_NAME = " ${ LB_IMAGE_NAME :- live -image } "
export LB_IMAGE_TYPE = " ${ LB_IMAGE_TYPE :- iso -hybrid } "
2020-04-06 17:46:47 +00:00
#for backwards compatibility with hooks
2021-08-20 11:35:31 +00:00
export LIVE_IMAGE_NAME = " ${ LB_IMAGE_NAME } "
export LIVE_IMAGE_TYPE = " ${ LB_IMAGE_TYPE } "
config: revert partial format conversion
back in v4.0~a6-1 a transition process was started to move the live-build
config to a new format. the new format was INI style, and required
parsing functions to read/write values, compared to the existing format
which was just shell script code setting variables.
this partial transition is the explanation for the existence of the
`New_configuration()` function, and understanding this is important to
understanding the purpose of it - it is not in fact intended for creating
a new configuration, it is just related to the new config format
transition.
the positives of the new format were that it was somewhat cleaner looking,
while the negative was the terrible relative efficiency.
the file `config/build` was created to hold options in this new format.
the transition was only ever completed for a handful of config options:
- architecture
- archive areas and parent archive areas
- live image name
- live image type
a 'configuration version' attribute was also saved, which is not used by
anything.
the bootstrap-mirror and parent-bootstrap-mirror attributes are pointlessly
stored in it seemingly resulting from work done in v4.0~a17-1. (they are
also stored in another config file from which the value is actually used).
it in fact seems to have been a source of confusion for Raphaël in
authoring 44b9b0a6501476de594ce3783cea5df0c141478c, since the new
`[parent]-distribution-{chroot|binary}` options it introduced were stored
both in `config/bootstrap` and in `config/build`, while only used from the
former. i expect, understandably, that he thought that `config/build` was
just an information file.
Gbp-Dch: Short
2020-04-06 15:49:08 +00:00
if [ -z " ${ LB_ARCHITECTURE } " ] ; then
2020-05-01 02:23:39 +00:00
if command -v dpkg >/dev/null; then
config: revert partial format conversion
back in v4.0~a6-1 a transition process was started to move the live-build
config to a new format. the new format was INI style, and required
parsing functions to read/write values, compared to the existing format
which was just shell script code setting variables.
this partial transition is the explanation for the existence of the
`New_configuration()` function, and understanding this is important to
understanding the purpose of it - it is not in fact intended for creating
a new configuration, it is just related to the new config format
transition.
the positives of the new format were that it was somewhat cleaner looking,
while the negative was the terrible relative efficiency.
the file `config/build` was created to hold options in this new format.
the transition was only ever completed for a handful of config options:
- architecture
- archive areas and parent archive areas
- live image name
- live image type
a 'configuration version' attribute was also saved, which is not used by
anything.
the bootstrap-mirror and parent-bootstrap-mirror attributes are pointlessly
stored in it seemingly resulting from work done in v4.0~a17-1. (they are
also stored in another config file from which the value is actually used).
it in fact seems to have been a source of confusion for Raphaël in
authoring 44b9b0a6501476de594ce3783cea5df0c141478c, since the new
`[parent]-distribution-{chroot|binary}` options it introduced were stored
both in `config/bootstrap` and in `config/build`, while only used from the
former. i expect, understandably, that he thought that `config/build` was
just an information file.
Gbp-Dch: Short
2020-04-06 15:49:08 +00:00
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
2021-08-20 11:35:31 +00:00
export LB_ARCHITECTURE
config: revert partial format conversion
back in v4.0~a6-1 a transition process was started to move the live-build
config to a new format. the new format was INI style, and required
parsing functions to read/write values, compared to the existing format
which was just shell script code setting variables.
this partial transition is the explanation for the existence of the
`New_configuration()` function, and understanding this is important to
understanding the purpose of it - it is not in fact intended for creating
a new configuration, it is just related to the new config format
transition.
the positives of the new format were that it was somewhat cleaner looking,
while the negative was the terrible relative efficiency.
the file `config/build` was created to hold options in this new format.
the transition was only ever completed for a handful of config options:
- architecture
- archive areas and parent archive areas
- live image name
- live image type
a 'configuration version' attribute was also saved, which is not used by
anything.
the bootstrap-mirror and parent-bootstrap-mirror attributes are pointlessly
stored in it seemingly resulting from work done in v4.0~a17-1. (they are
also stored in another config file from which the value is actually used).
it in fact seems to have been a source of confusion for Raphaël in
authoring 44b9b0a6501476de594ce3783cea5df0c141478c, since the new
`[parent]-distribution-{chroot|binary}` options it introduced were stored
both in `config/bootstrap` and in `config/build`, while only used from the
former. i expect, understandably, that he thought that `config/build` was
just an information file.
Gbp-Dch: Short
2020-04-06 15:49:08 +00:00
# For backwards compat with custom hooks and conditional includes
2021-08-20 11:35:31 +00:00
export LB_ARCHITECTURES = " ${ LB_ARCHITECTURE } "
config: revert partial format conversion
back in v4.0~a6-1 a transition process was started to move the live-build
config to a new format. the new format was INI style, and required
parsing functions to read/write values, compared to the existing format
which was just shell script code setting variables.
this partial transition is the explanation for the existence of the
`New_configuration()` function, and understanding this is important to
understanding the purpose of it - it is not in fact intended for creating
a new configuration, it is just related to the new config format
transition.
the positives of the new format were that it was somewhat cleaner looking,
while the negative was the terrible relative efficiency.
the file `config/build` was created to hold options in this new format.
the transition was only ever completed for a handful of config options:
- architecture
- archive areas and parent archive areas
- live image name
- live image type
a 'configuration version' attribute was also saved, which is not used by
anything.
the bootstrap-mirror and parent-bootstrap-mirror attributes are pointlessly
stored in it seemingly resulting from work done in v4.0~a17-1. (they are
also stored in another config file from which the value is actually used).
it in fact seems to have been a source of confusion for Raphaël in
authoring 44b9b0a6501476de594ce3783cea5df0c141478c, since the new
`[parent]-distribution-{chroot|binary}` options it introduced were stored
both in `config/bootstrap` and in `config/build`, while only used from the
former. i expect, understandably, that he thought that `config/build` was
just an information file.
Gbp-Dch: Short
2020-04-06 15:49:08 +00:00
LB_ARCHIVE_AREAS = " ${ LB_ARCHIVE_AREAS :- main } "
LB_PARENT_ARCHIVE_AREAS = " ${ LB_PARENT_ARCHIVE_AREAS :- ${ LB_ARCHIVE_AREAS } } "
2021-08-20 11:35:31 +00:00
export LB_ARCHIVE_AREAS = " $( echo " ${ LB_ARCHIVE_AREAS } " | tr "," " " ) "
export LB_PARENT_ARCHIVE_AREAS = " $( echo " ${ LB_PARENT_ARCHIVE_AREAS } " | tr "," " " ) "
config: revert partial format conversion
back in v4.0~a6-1 a transition process was started to move the live-build
config to a new format. the new format was INI style, and required
parsing functions to read/write values, compared to the existing format
which was just shell script code setting variables.
this partial transition is the explanation for the existence of the
`New_configuration()` function, and understanding this is important to
understanding the purpose of it - it is not in fact intended for creating
a new configuration, it is just related to the new config format
transition.
the positives of the new format were that it was somewhat cleaner looking,
while the negative was the terrible relative efficiency.
the file `config/build` was created to hold options in this new format.
the transition was only ever completed for a handful of config options:
- architecture
- archive areas and parent archive areas
- live image name
- live image type
a 'configuration version' attribute was also saved, which is not used by
anything.
the bootstrap-mirror and parent-bootstrap-mirror attributes are pointlessly
stored in it seemingly resulting from work done in v4.0~a17-1. (they are
also stored in another config file from which the value is actually used).
it in fact seems to have been a source of confusion for Raphaël in
authoring 44b9b0a6501476de594ce3783cea5df0c141478c, since the new
`[parent]-distribution-{chroot|binary}` options it introduced were stored
both in `config/bootstrap` and in `config/build`, while only used from the
former. i expect, understandably, that he thought that `config/build` was
just an information file.
Gbp-Dch: Short
2020-04-06 15:49:08 +00:00
2020-03-18 23:19:26 -01:00
LB_BACKPORTS = " ${ LB_BACKPORTS :- false } "
2019-12-19 16:18:44 -01:00
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 } } "
else
LB_PARENT_DISTRIBUTION_CHROOT = " ${ LB_PARENT_DISTRIBUTION_CHROOT :- ${ LB_DISTRIBUTION_CHROOT } } "
LB_PARENT_DISTRIBUTION_BINARY = " ${ LB_PARENT_DISTRIBUTION_BINARY :- ${ LB_DISTRIBUTION_BINARY } } "
fi
LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION = " ${ LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION :- ${ LB_PARENT_DISTRIBUTION_CHROOT } } "
2007-09-23 08:04:46 +00:00
2010-09-07 13:11:20 +00:00
LB_APT = " ${ LB_APT :- apt } "
2012-05-31 11:12:13 +00:00
LB_APT_HTTP_PROXY = " ${ LB_APT_HTTP_PROXY } "
2020-03-28 09:06:50 -01:00
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 } "
2007-09-23 08:04:46 +00:00
2020-09-25 09:08:40 +00:00
APT_OPTIONS = " ${ APT_OPTIONS :- --yes -o Acquire : : Retries =5 } "
APTITUDE_OPTIONS = " ${ APTITUDE_OPTIONS :- --assume-yes -o Acquire : : Retries =5 } "
2008-02-21 18:03:57 -01:00
2011-07-21 15:48:17 +00:00
BZIP2_OPTIONS = " ${ BZIP2_OPTIONS :- -6 } "
GZIP_OPTIONS = " ${ GZIP_OPTIONS :- -6 } "
2020-03-28 09:06:50 -01:00
LZIP_OPTIONS = " ${ LZIP_OPTIONS :- -6 } "
LZMA_OPTIONS = " ${ LZMA_OPTIONS :- -6 } "
XZ_OPTIONS = " ${ XZ_OPTIONS :- -6 } "
2009-09-11 07:39:13 +00:00
2010-06-21 20:26:11 +00:00
if gzip --help | grep -qs "\-\-rsyncable"
2009-09-11 07:39:13 +00:00
then
2020-12-13 17:23:20 -01:00
GZIP_OPTIONS = " $( echo ${ GZIP_OPTIONS } | sed -E -e 's|[ ]?--rsyncable||' ) --rsyncable "
2009-09-11 07:39:13 +00:00
fi
2010-09-07 13:11:20 +00:00
LB_CACHE = " ${ LB_CACHE :- true } "
2015-01-07 20:42:39 -01:00
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
2020-03-28 02:31:15 -01:00
LB_CACHE_STAGES = " $( echo " ${ LB_CACHE_STAGES } " | tr "," " " ) "
2007-09-23 08:04:46 +00:00
2010-09-07 13:11:20 +00:00
LB_DEBCONF_FRONTEND = " ${ LB_DEBCONF_FRONTEND :- noninteractive } "
LB_DEBCONF_PRIORITY = " ${ LB_DEBCONF_PRIORITY :- critical } "
2007-09-23 08:04:50 +00:00
2012-10-08 18:00:41 +00:00
case " ${ LB_SYSTEM } " in
live)
2015-05-03 13:49:57 +00:00
LB_INITRAMFS = " ${ LB_INITRAMFS :- live -boot } "
2010-12-27 16:12:36 -01:00
; ;
2012-10-08 18:00:41 +00:00
normal)
LB_INITRAMFS = " ${ LB_INITRAMFS :- none } "
2010-12-27 16:12:36 -01:00
; ;
esac
2007-09-23 08:05:10 +00:00
2011-06-13 18:38:44 +00:00
LB_INITRAMFS_COMPRESSION = " ${ LB_INITRAMFS_COMPRESSION :- gzip } "
2020-03-18 23:19:26 -01:00
case " ${ LB_SYSTEM } " in
live)
LB_INITSYSTEM = " ${ LB_INITSYSTEM :- systemd } "
2012-10-28 09:42:57 -01:00
; ;
2020-03-18 23:19:26 -01:00
normal)
LB_INITSYSTEM = " ${ LB_INITSYSTEM :- none } "
2011-02-14 14:04:16 -01:00
; ;
2011-02-10 21:31:21 -01:00
esac
2011-02-09 09:37:21 -01:00
2020-04-01 09:58:47 +00:00
if [ " ${ LB_ARCHITECTURE } " = "i386" ] && [ " ${ CURRENT_IMAGE_ARCHITECTURE } " = "amd64" ]
2011-07-20 06:54:54 +00:00
then
2012-12-19 10:04:36 -01:00
# Use linux32 when building amd64 images on i386
2011-07-20 16:10:39 +00:00
_LINUX32 = "linux32"
else
_LINUX32 = ""
2011-07-20 06:54:54 +00:00
fi
2020-03-28 08:49:19 -01:00
# Mirrors:
2020-03-19 00:37:59 -01:00
# *_MIRROR_BOOTSTRAP: to fetch packages from
2020-03-28 14:07:06 -01:00
# *_MIRROR_CHROOT: to fetch packages from
2020-03-19 00:37:59 -01:00
# *_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 } } "
2020-03-28 14:07:06 -01:00
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
2020-03-19 00:37:59 -01:00
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 } } "
2007-09-23 08:04:46 +00:00
2020-03-19 00:37:59 -01:00
LB_MIRROR_BINARY = " ${ LB_MIRROR_BINARY :- http : //deb.debian.org/debian/ } "
LB_PARENT_MIRROR_BINARY = " ${ LB_PARENT_MIRROR_BINARY :- ${ LB_MIRROR_BINARY } } "
2007-09-23 08:04:46 +00:00
2020-03-19 00:37:59 -01:00
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
2020-03-18 23:19:26 -01:00
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 } } "
2010-03-04 11:22:15 -01:00
2010-09-07 13:11:20 +00:00
LB_CHROOT_FILESYSTEM = " ${ LB_CHROOT_FILESYSTEM :- squashfs } "
2007-09-23 08:05:10 +00:00
2016-12-02 13:10:19 -01:00
LB_UNION_FILESYSTEM = " ${ LB_UNION_FILESYSTEM :- overlay } "
2007-09-23 08:05:13 +00:00
2010-09-07 13:11:20 +00:00
LB_INTERACTIVE = " ${ LB_INTERACTIVE :- false } "
2007-09-23 08:04:48 +00:00
2015-05-03 13:53:27 +00:00
LB_KEYRING_PACKAGES = " ${ LB_KEYRING_PACKAGES :- debian -archive-keyring } "
2007-09-23 08:05:10 +00:00
2020-03-28 09:55:25 -01:00
# first, handle existing LB_LINUX_FLAVOURS for backwards compatibility
if [ -n " ${ LB_LINUX_FLAVOURS } " ] ; then
LB_LINUX_FLAVOURS_WITH_ARCH = " ${ LB_LINUX_FLAVOURS } "
fi
2020-04-01 09:58:47 +00:00
case " ${ LB_ARCHITECTURE } " in
2015-02-03 19:22:30 -01:00
arm64)
2017-12-15 16:22:57 -01:00
LB_LINUX_FLAVOURS_WITH_ARCH = " ${ LB_LINUX_FLAVOURS_WITH_ARCH :- arm64 } "
2015-02-03 19:22:30 -01:00
; ;
2010-12-27 16:12:36 -01:00
armel)
2015-05-03 13:53:27 +00:00
# armel will have special images: one rootfs image and many additional kernel images.
# therefore we default to all available armel flavours
2017-12-15 16:22:57 -01:00
LB_LINUX_FLAVOURS_WITH_ARCH = " ${ LB_LINUX_FLAVOURS_WITH_ARCH :- marvell } "
2010-12-27 16:12:36 -01:00
; ;
2010-02-17 12:57:12 -01:00
2012-01-12 09:42:09 -01:00
armhf)
2015-05-03 13:53:27 +00:00
# armhf will have special images: one rootfs image and many additional kernel images.
# therefore we default to all available armhf flavours
2017-12-15 16:22:57 -01:00
LB_LINUX_FLAVOURS_WITH_ARCH = " ${ LB_LINUX_FLAVOURS_WITH_ARCH :- armmp armmp-lpae } "
2012-01-12 09:42:09 -01:00
; ;
2010-12-27 16:12:36 -01:00
amd64)
2017-12-15 16:22:57 -01:00
LB_LINUX_FLAVOURS_WITH_ARCH = " ${ LB_LINUX_FLAVOURS_WITH_ARCH :- amd64 } "
2010-12-27 16:12:36 -01:00
; ;
2007-09-23 08:04:46 +00:00
2010-12-27 16:12:36 -01:00
i386)
2020-02-10 14:48:49 -01:00
LB_LINUX_FLAVOURS_WITH_ARCH = " ${ LB_LINUX_FLAVOURS_WITH_ARCH :- 686 -pae } "
2010-12-27 16:12:36 -01:00
; ;
2007-09-23 08:04:46 +00:00
2010-12-27 16:12:36 -01:00
ia64)
2020-03-18 23:19:26 -01:00
LB_LINUX_FLAVOURS_WITH_ARCH = " ${ LB_LINUX_FLAVOURS_WITH_ARCH :- itanium } "
2010-12-27 16:12:36 -01:00
; ;
2008-09-03 09:02:30 +00:00
2010-12-27 16:12:36 -01:00
powerpc)
2020-03-18 23:19:26 -01:00
LB_LINUX_FLAVOURS_WITH_ARCH = " ${ LB_LINUX_FLAVOURS_WITH_ARCH :- powerpc64 powerpc } "
2010-12-27 16:12:36 -01:00
; ;
2009-04-15 20:07:26 +00:00
2020-05-30 21:11:45 +00:00
ppc64el)
LB_LINUX_FLAVOURS_WITH_ARCH = " ${ LB_LINUX_FLAVOURS_WITH_ARCH :- powerpc64le } "
; ;
2021-11-14 16:22:41 -01:00
riscv64)
LB_LINUX_FLAVOURS_WITH_ARCH = " ${ LB_LINUX_FLAVOURS_WITH_ARCH :- riscv64 } "
; ;
2013-10-15 10:20:42 +00:00
s390x)
2020-03-18 23:19:26 -01:00
LB_LINUX_FLAVOURS_WITH_ARCH = " ${ LB_LINUX_FLAVOURS_WITH_ARCH :- s390x } "
2010-12-27 16:12:36 -01:00
; ;
2007-09-23 08:04:46 +00:00
2010-12-27 16:12:36 -01:00
*)
2020-04-01 09:58:47 +00:00
Echo_error " Architecture(s) ${ LB_ARCHITECTURE } not yet supported (FIXME) "
2010-12-27 16:12:36 -01:00
exit 1
; ;
esac
2007-09-23 08:04:46 +00:00
2017-12-15 16:22:57 -01:00
LB_LINUX_FLAVOURS = ""
for FLAVOUR in ${ LB_LINUX_FLAVOURS_WITH_ARCH }
do
ARCH_FILTERED_FLAVOUR = " $( echo ${ FLAVOUR } | awk -F':' '{print $1}' ) "
2020-01-22 13:00:06 -01:00
LB_LINUX_FLAVOURS = " ${ LB_LINUX_FLAVOURS : + $LB_LINUX_FLAVOURS } ${ ARCH_FILTERED_FLAVOUR } "
2017-12-15 16:22:57 -01:00
done
2015-05-03 13:53:27 +00:00
LB_LINUX_PACKAGES = " ${ LB_LINUX_PACKAGES :- linux -image } "
2007-09-23 08:04:46 +00:00
2020-03-28 09:06:50 -01:00
LB_BINARY_FILESYSTEM = " ${ LB_BINARY_FILESYSTEM :- fat32 } "
2019-12-19 16:18:44 -01:00
case " ${ LB_PARENT_DISTRIBUTION_BINARY } " in
2021-01-08 08:32:01 -01:00
sid| unstable)
2011-03-21 18:36:50 -01:00
LB_SECURITY = " ${ LB_SECURITY :- false } "
; ;
*)
LB_SECURITY = " ${ LB_SECURITY :- true } "
; ;
esac
2007-09-23 08:04:46 +00:00
2019-12-19 16:18:44 -01:00
case " ${ LB_PARENT_DISTRIBUTION_BINARY } " in
2021-01-08 08:32:01 -01:00
sid| unstable)
2012-09-20 14:53:03 +00:00
LB_UPDATES = " ${ LB_UPDATES :- false } "
2011-03-21 18:36:50 -01:00
; ;
*)
2012-09-20 14:53:03 +00:00
LB_UPDATES = " ${ LB_UPDATES :- true } "
2011-03-21 18:36:50 -01:00
; ;
esac
2010-03-06 15:23:59 -01:00
2020-04-01 09:58:47 +00:00
case " ${ LB_ARCHITECTURE } " in
2010-12-27 16:12:36 -01:00
amd64| i386)
2020-04-06 17:46:47 +00:00
LB_IMAGE_TYPE = " ${ LB_IMAGE_TYPE :- iso -hybrid } "
2010-02-18 15:34:29 -01:00
; ;
*)
2020-04-06 17:46:47 +00:00
LB_IMAGE_TYPE = " ${ LB_IMAGE_TYPE :- iso } "
2010-02-18 15:34:29 -01:00
; ;
esac
2007-09-23 08:05:10 +00:00
2020-05-04 15:12:45 +00:00
case " ${ LB_ARCHITECTURE } " in
amd64| i386)
LB_BOOTLOADER_BIOS = " ${ LB_BOOTLOADER_BIOS :- syslinux } "
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
2007-09-23 08:05:10 +00:00
fi
2016-01-18 02:04:00 -01:00
2020-03-18 13:46:58 -01:00
LB_CHECKSUMS = " ${ LB_CHECKSUMS :- sha256 } "
2007-11-12 21:00:48 -01:00
2012-10-04 18:13:25 +00:00
LB_COMPRESSION = " ${ LB_COMPRESSION :- none } "
2011-01-01 22:36:20 -01:00
2012-07-18 17:09:16 +00:00
LB_ZSYNC = " ${ LB_ZSYNC :- true } "
2010-09-07 13:11:20 +00:00
LB_BUILD_WITH_CHROOT = " ${ LB_BUILD_WITH_CHROOT :- true } "
2007-09-23 08:05:15 +00:00
2010-10-28 07:51:55 +00:00
LB_BUILD_WITH_TMPFS = " ${ LB_BUILD_WITH_TMPFS :- false } "
2015-01-05 15:53:53 -01:00
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
2007-09-23 08:04:48 +00:00
2021-03-21 10:32:54 -01:00
# 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
2011-02-14 10:29:25 -01:00
LB_DEBIAN_INSTALLER_DISTRIBUTION = " ${ LB_DEBIAN_INSTALLER_DISTRIBUTION :- ${ LB_DISTRIBUTION } } "
2020-03-19 00:40:22 -01:00
LB_DEBIAN_INSTALLER_GUI = " ${ LB_DEBIAN_INSTALLER_GUI :- true } "
2009-09-02 05:39:13 +00:00
2010-09-07 13:11:20 +00:00
if [ -z " ${ LB_DEBIAN_INSTALLER_PRESEEDFILE } " ]
2008-08-12 20:04:25 +00:00
then
2012-10-22 18:30:41 +00:00
if Find_files config/debian-installer/preseed.cfg
2008-08-12 20:04:25 +00:00
then
2010-09-07 13:11:20 +00:00
LB_DEBIAN_INSTALLER_PRESEEDFILE = "/preseed.cfg"
2008-08-12 20:04:25 +00:00
fi
2012-10-22 18:30:41 +00:00
if Find_files config/debian-installer/*.cfg && [ ! -e config/debian-installer/preseed.cfg ]
2008-08-12 20:04:25 +00:00
then
2012-10-22 18:30:41 +00:00
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."
2008-08-12 20:04:25 +00:00
fi
fi
2012-10-04 12:26:44 +00:00
case " ${ LB_INITRAMFS } " in
live-boot)
2014-04-30 05:16:32 +00:00
LB_BOOTAPPEND_LIVE = " ${ LB_BOOTAPPEND_LIVE :- boot =live components quiet splash } "
2015-01-28 03:23:09 -01:00
LB_BOOTAPPEND_LIVE_FAILSAFE = " ${ LB_BOOTAPPEND_LIVE_FAILSAFE :- boot =live components memtest noapic noapm nodma nomce nolapic nomodeset nosmp nosplash vga=788 } "
2012-10-04 12:26:44 +00:00
; ;
2012-10-08 18:00:41 +00:00
none)
2012-10-08 18:01:30 +00:00
LB_BOOTAPPEND_LIVE = " ${ LB_BOOTAPPEND_LIVE :- quiet splash } "
2015-01-28 03:23:09 -01:00
LB_BOOTAPPEND_LIVE_FAILSAFE = " ${ LB_BOOTAPPEND_LIVE_FAILSAFE :- memtest noapic noapm nodma nomce nolapic nomodeset nosmp nosplash vga=788 } "
2012-10-04 12:24:36 +00:00
; ;
esac
2020-02-20 05:58:11 -01:00
local _LB_BOOTAPPEND_PRESEED
2010-09-07 13:11:20 +00:00
if [ -n " ${ LB_DEBIAN_INSTALLER_PRESEEDFILE } " ]
2008-08-12 20:04:25 +00:00
then
2020-04-06 17:46:47 +00:00
case " ${ LB_IMAGE_TYPE } " in
2020-03-28 04:13:11 -01:00
iso| iso-hybrid)
2010-09-07 13:11:20 +00:00
_LB_BOOTAPPEND_PRESEED = " file=/cdrom/install/ ${ LB_DEBIAN_INSTALLER_PRESEEDFILE } "
2008-08-12 20:04:25 +00:00
; ;
2020-03-28 04:13:11 -01:00
hdd)
2015-05-03 13:53:27 +00:00
_LB_BOOTAPPEND_PRESEED = " file=/hd-media/install/ ${ LB_DEBIAN_INSTALLER_PRESEEDFILE } "
2008-08-12 20:11:18 +00:00
; ;
2012-07-18 17:11:55 +00:00
netboot)
2010-09-07 13:11:20 +00:00
case " ${ LB_DEBIAN_INSTALLER_PRESEEDFILE } " in
2008-08-12 20:21:40 +00:00
*://*)
2010-09-07 13:11:20 +00:00
_LB_BOOTAPPEND_PRESEED = " file= ${ LB_DEBIAN_INSTALLER_PRESEEDFILE } "
2008-08-12 20:21:40 +00:00
; ;
*)
2010-09-07 13:11:20 +00:00
_LB_BOOTAPPEND_PRESEED = " file=/ ${ LB_DEBIAN_INSTALLER_PRESEEDFILE } "
2008-08-12 20:21:40 +00:00
; ;
esac
2008-08-12 20:04:25 +00:00
; ;
2020-03-28 04:13:11 -01:00
tar)
; ;
2008-08-12 20:04:25 +00:00
esac
fi
2010-09-07 13:11:20 +00:00
if [ -n ${ _LB_BOOTAPPEND_PRESEED } ]
2009-11-13 07:27:00 -01:00
then
2010-09-07 13:11:20 +00:00
LB_BOOTAPPEND_INSTALL = " ${ LB_BOOTAPPEND_INSTALL } ${ _LB_BOOTAPPEND_PRESEED } "
2009-11-13 07:27:00 -01:00
fi
2008-08-12 20:04:25 +00:00
2010-09-07 13:11:20 +00:00
LB_BOOTAPPEND_INSTALL = " $( echo ${ LB_BOOTAPPEND_INSTALL } | sed -e 's/[ \t]*$//' ) "
2010-02-17 10:23:34 -01:00
2020-03-19 00:39:28 -01:00
LB_ISO_APPLICATION = " ${ LB_ISO_APPLICATION :- Debian Live } "
2020-05-03 17:02:04 +00:00
LB_ISO_PREPARER = " ${ LB_ISO_PREPARER :- live -build @LB_VERSION@; https : //salsa.debian.org/live-team/live-build } "
2020-03-18 23:19:26 -01:00
LB_ISO_PUBLISHER = " ${ LB_ISO_PUBLISHER :- Debian Live project; https : //wiki.debian.org/DebianLive; debian-live@lists.debian.org } "
2020-12-13 16:33:54 -01:00
# 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@ } "
2007-09-23 08:04:52 +00:00
2020-03-19 00:39:28 -01:00
LB_HDD_LABEL = " ${ LB_HDD_LABEL :- DEBIAN_LIVE } "
2013-04-02 11:59:38 +00:00
LB_HDD_SIZE = " ${ LB_HDD_SIZE :- auto } "
2011-09-28 09:37:56 +00:00
2013-03-13 19:28:12 -01:00
LB_MEMTEST = " ${ LB_MEMTEST :- none } "
2020-02-20 07:25:26 -01:00
if [ " ${ LB_MEMTEST } " = "false" ] ; then
LB_MEMTEST = "none"
2020-03-28 09:10:44 -01:00
Echo_warning "A value of 'false' for option LB_MEMTEST is deprecated, please use 'none' in future."
2020-02-20 07:25:26 -01:00
fi
2007-09-23 08:04:46 +00:00
2020-04-01 09:58:47 +00:00
case " ${ LB_ARCHITECTURE } " in
2020-03-18 23:19:26 -01:00
amd64| i386)
2020-03-28 09:06:50 -01:00
if [ " ${ LB_DEBIAN_INSTALLER } " != "none" ] ; then
2020-03-18 23:19:26 -01:00
LB_LOADLIN = " ${ LB_LOADLIN :- true } "
else
LB_LOADLIN = " ${ LB_LOADLIN :- false } "
fi
2012-09-29 11:20:21 +00:00
; ;
*)
2020-03-18 23:19:26 -01:00
LB_LOADLIN = " ${ LB_LOADLIN :- false } "
2012-09-29 11:20:21 +00:00
; ;
esac
2020-04-01 09:58:47 +00:00
case " ${ LB_ARCHITECTURE } " in
2020-03-18 23:19:26 -01:00
amd64| i386)
2020-03-28 09:06:50 -01:00
if [ " ${ LB_DEBIAN_INSTALLER } " != "none" ] ; then
2020-03-18 23:19:26 -01:00
LB_WIN32_LOADER = " ${ LB_WIN32_LOADER :- true } "
else
LB_WIN32_LOADER = " ${ LB_WIN32_LOADER :- false } "
fi
2010-12-27 16:12:36 -01:00
; ;
2008-08-14 19:33:56 +00:00
2010-12-27 16:12:36 -01:00
*)
2020-03-18 23:19:26 -01:00
LB_WIN32_LOADER = " ${ LB_WIN32_LOADER :- false } "
2010-12-27 16:12:36 -01:00
; ;
esac
2008-08-14 19:33:56 +00:00
2011-01-01 22:36:20 -01:00
LB_NET_TARBALL = " ${ LB_NET_TARBALL :- true } "
2008-02-26 17:57:41 -01:00
2018-03-16 18:30:50 -01:00
LB_ONIE = " ${ LB_ONIE :- false } "
LB_ONIE_KERNEL_CMDLINE = " ${ LB_ONIE_KERNEL_CMDLINE :- } "
2015-05-03 13:53:27 +00:00
LB_FIRMWARE_CHROOT = " ${ LB_FIRMWARE_CHROOT :- true } "
LB_FIRMWARE_BINARY = " ${ LB_FIRMWARE_BINARY :- true } "
2012-04-26 17:52:15 +00:00
2011-06-08 10:30:29 +00:00
LB_SWAP_FILE_SIZE = " ${ LB_SWAP_FILE_SIZE :- 512 } "
2018-02-27 18:28:33 -01:00
LB_UEFI_SECURE_BOOT = " ${ LB_UEFI_SECURE_BOOT :- auto } "
2010-09-07 13:11:20 +00:00
LB_SOURCE = " ${ LB_SOURCE :- false } "
LB_SOURCE_IMAGES = " ${ LB_SOURCE_IMAGES :- tar } "
2020-03-28 03:37:17 -01:00
LB_SOURCE_IMAGES = " $( echo " ${ LB_SOURCE_IMAGES } " | tr "," " " ) "
2020-03-28 04:31:22 -01:00
2020-03-28 08:49:19 -01:00
# Foreign/port bootstrapping
2020-04-01 10:25:56 +00:00
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 updated your config."
fi
LB_BOOTSTRAP_QEMU_ARCHITECTURE = " ${ LB_BOOTSTRAP_QEMU_ARCHITECTURE :- } "
2020-03-28 04:31:22 -01:00
LB_BOOTSTRAP_QEMU_EXCLUDE = " ${ LB_BOOTSTRAP_QEMU_EXCLUDE :- } "
LB_BOOTSTRAP_QEMU_STATIC = " ${ LB_BOOTSTRAP_QEMU_STATIC :- } "
2007-09-23 08:04:46 +00:00
}
2007-11-11 12:14:25 -01:00
2020-03-28 04:37:14 -01:00
Validate_config ( )
2007-11-11 12:14:25 -01:00
{
2020-03-28 07:46:40 -01:00
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 ( )
{
2020-03-28 07:37:06 -01:00
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_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
2020-05-03 18:19:22 +00:00
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
2020-03-28 07:37:06 -01:00
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
2020-03-28 11:01:03 -01:00
if ! In_list " ${ LB_APT } " apt apt-get aptitude; then
2020-03-28 07:37:06 -01:00
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
2020-04-06 17:46:47 +00:00
if ! In_list " ${ LB_IMAGE_TYPE } " iso iso-hybrid hdd tar netboot; then
2020-03-28 07:46:40 -01:00
Echo_error "You have specified an invalid value for --binary-image."
2020-03-28 07:08:11 -01:00
exit 1
fi
2013-03-13 20:15:47 -01:00
2020-05-04 15:12:45 +00:00
if [ -z " ${ LB_BOOTLOADER_BIOS } " ] && [ -z " ${ LB_BOOTLOADER_EFI } " ] ; then
2020-03-28 07:37:06 -01:00
Echo_warning "You have specified no bootloaders; I predict that you will experience some problems!"
2020-05-04 15:12:45 +00:00
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
2020-03-28 07:37:06 -01:00
local BOOTLOADER
2020-05-04 13:28:37 +00:00
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
2020-03-28 07:37:06 -01:00
done
2020-05-04 13:28:37 +00:00
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
2020-03-28 07:37:06 -01:00
fi
local CACHE_STAGE
for CACHE_STAGE in ${ LB_CACHE_STAGES } ; do
2022-01-17 13:35:09 -01:00
if ! In_list " ${ CACHE_STAGE } " bootstrap chroot rootfs; then
2020-03-28 07:37:06 -01:00
Echo_warning "The following is not a valid stage: '%s'" " ${ CACHE_STAGE } "
fi
done
2021-03-21 10:32:54 -01:00
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
2020-03-28 07:37:06 -01:00
fi
2022-01-17 13:33:48 -01:00
if ! In_list " ${ LB_CHROOT_FILESYSTEM } " ext2 ext3 ext4 squashfs jffs2 none plain; then
2020-03-28 07:37:06 -01:00
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
2020-03-28 07:08:11 -01:00
if echo ${ LB_HDD_LABEL } | grep -qs ' ' ; then
2020-03-28 07:37:06 -01:00
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; then
Echo_error "You have specified an invalid value for LB_INITRAMFS (--initramfs)."
exit 1
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)."
2020-03-28 07:46:40 -01:00
exit 1
fi
if [ " $( echo \" ${ LB_ISO_APPLICATION } \" | wc -c) " -gt 128 ] ; then
2020-03-28 07:37:06 -01:00
Echo_warning "You have specified a value of LB_ISO_APPLICATION (--iso-application) that is too long; the maximum length is 128 characters."
2020-03-28 07:46:40 -01:00
fi
if [ " $( echo \" ${ LB_ISO_PREPARER } \" | wc -c) " -gt 128 ] ; then
2020-03-28 07:37:06 -01:00
Echo_warning "You have specified a value of LB_ISO_PREPARER (--iso-preparer) that is too long; the maximum length is 128 characters."
2020-03-28 07:46:40 -01:00
fi
if [ " $( echo \" ${ LB_ISO_PUBLISHER } \" | wc -c) " -gt 128 ] ; then
2020-03-28 07:37:06 -01:00
Echo_warning "You have specified a value of LB_ISO_PUBLISHER (--iso-publisher) that is too long; the maximum length is 128 characters."
2020-03-28 07:46:40 -01:00
fi
if [ " $( eval " echo \" ${ LB_ISO_VOLUME } \" " | wc -c) " -gt 32 ] ; then
2020-03-28 07:37:06 -01:00
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
2020-03-28 07:46:40 -01:00
fi
}
# Check option combinations and other extra stuff
Validate_config_dependencies ( )
{
2020-05-01 02:23:39 +00:00
if [ " ${ LB_BINARY_FILESYSTEM } " = "ntfs" ] && ! command -v ntfs-3g >/dev/null; then
2020-03-28 07:46:40 -01:00
Echo_error "Using ntfs as the binary filesystem is currently only supported if ntfs-3g is installed on the host system."
2013-02-15 09:58:14 -01:00
exit 1
fi
2020-11-11 09:21:34 -01:00
if [ " ${ LB_DEBIAN_INSTALLER } " != "none" ] && [ " ${ LB_DEBIAN_INSTALLER } " != "live" ] ; then
2009-12-13 19:17:45 -01:00
# d-i true, no caching
2020-03-28 02:31:15 -01:00
if ! In_list "bootstrap" ${ LB_CACHE_STAGES } || [ " ${ LB_CACHE } " != "true" ] || [ " ${ LB_CACHE_PACKAGES } " != "true" ]
2008-08-07 19:06:39 +00:00
then
2010-09-07 13:11:20 +00:00
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."
2008-08-07 19:06:39 +00:00
fi
fi
2008-09-07 14:41:36 +00:00
2020-05-04 13:39:55 +00:00
if In_list "syslinux" $LB_BOOTLOADERS ; then
2014-04-27 10:35:58 +00:00
# syslinux + fat or ntfs, or extlinux + ext[234] or btrfs
2020-03-28 07:08:11 -01:00
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
2008-09-07 14:41:36 +00:00
fi
2009-01-14 18:30:21 -01:00
2020-03-28 07:17:28 -01:00
if In_list "grub-pc" ${ LB_BOOTLOADERS } || In_list "grub-efi" ${ LB_BOOTLOADERS } || In_list "grub-legacy" ${ LB_BOOTLOADERS } ; then
2020-04-06 17:46:47 +00:00
if In_list " ${ LB_IMAGE_TYPE } " hdd netboot; then
2020-03-28 07:17:28 -01:00
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
2021-04-07 07:10:29 +00:00
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 the other scripts in live-build
2021-11-14 18:09:44 -01:00
export http_proxy = " ${ LAST_SEEN_PROXY_VALUE } "
2021-04-07 07:10:29 +00:00
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 ( )
{
2021-11-14 18:09:44 -01:00
local NAME = " ${ 1 } "
local VALUE = " ${ 2 } "
2021-04-07 07:10:29 +00:00
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
2021-11-14 18:09:44 -01:00
LAST_SEEN_PROXY_NAME = " ${ NAME } "
LAST_SEEN_PROXY_VALUE = " ${ VALUE } "
2021-04-07 07:10:29 +00:00
fi
2007-11-11 12:14:25 -01:00
}