live-build/scripts/build/chroot_firmware

106 lines
2.6 KiB
Plaintext
Raw Normal View History

#!/bin/sh
## live-build(7) - System Build Scripts
## 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.
set -e
# Including common functions
[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh
# Setting static variables
DESCRIPTION="Schedule kernel packages for installation"
HELP=""
USAGE="${PROGRAM} [--force]"
Arguments "${@}"
# Reading configuration files
Read_conffiles config/all config/common config/bootstrap config/chroot config/binary config/source
Set_defaults
if [ "${LB_FIRMWARE_CHROOT}" != "true" ]
then
exit 0
fi
# Requiring stage file
Require_stagefile .build/config .build/bootstrap
# Checking stage file
Check_stagefile .build/chroot_firmware
# Checking lock file
Check_lockfile .lock
# Creating lock file
Create_lockfile .lock
# Checking depends
Check_package host /usr/bin/wget wget
# Diverting update-initramfs
#case "${LB_INITRAMFS}" in
# live-boot)
# mv chroot/usr/sbin/update-initramfs chroot/usr/sbin/update-initramfs.live-build
# ;;
#esac
# Include firmware packages
# Get all firmware packages names
mkdir -p cache/contents.chroot
FIRMWARE_PACKAGES=""
Firmware_List_From_Contents "${LB_PARENT_MIRROR_CHROOT}" "${LB_PARENT_DISTRIBUTION_CHROOT}" "${LB_PARENT_ARCHIVE_AREAS}"
firmware: fix possible duplication in firmware package lists (inefficiency) where multiple archive areas are used, the code here on each loop is: 1) fetching the archive area contents file (compressed) 2) **appending** the output to that of the previous loop 3) searching the file for firmware references, adding to the list since it appends rather than replaces, entries found in each loop get re-added on each subsequent loop, resulting in duplication in the resulting list below I evaluate the possible solutions to explain why I chose the one I chose, however the reader should not waste too much time worrying about whether one of the other solution would have actually been better because things are changed significantly in further commits shortly! possible solutions: a) switching to output (>) rather than append (>>), but this might fail against an existing file b) removing the file on each loop, but this will complicate any future caching improvements that might be made here (currently the files are always deleted and thus downloaded fresh) c) allow the appending, evaluating the complete file after the loop solution C warrants consideration of disk space consumption; currently the compressed 'main' archive (for sid on amd64) expands to 592.3 MB (feb-2020), 'contrib' is 3.1 MB, and 'non-free' is 18.5 MB. solution C was chosen here; the difference of accumulated file size vs. max-single was minor enough to not be of particular concern (~613 vs. ~592 MB). Gbp-Dch: Short Closes: #952906
2020-02-10 17:49:34 -01:00
if echo ${LB_PARENT_ARCHIVE_AREAS} | grep -qs "non-free"
then
# Manually add firmware-linux/non-free meta package
if [ "${LB_DERIVATIVE}" != "true" ]
then
FIRMWARE_PACKAGES="${FIRMWARE_PACKAGES} firmware-linux"
else
case "${LB_DERIVATIVE_IS_BASED_ON}" in
debian)
FIRMWARE_PACKAGES="${FIRMWARE_PACKAGES} firmware-linux"
;;
*)
;;
esac
fi
fi
if [ "${LB_DERIVATIVE}" = "true" ]
then
# FIXME: account for the fact that PARENT_DISTRIBUTION and DISTRIBUTION might be the same (to not have overlapping cache files for contents).
Firmware_List_From_Contents "${LB_MIRROR_CHROOT}" "${LB_DISTRIBUTION_CHROOT}" "${LB_ARCHIVE_AREAS}"
fi
# Drop section and keep package names only
for _PACKAGE in ${FIRMWARE_PACKAGES}
do
echo $(echo ${_PACKAGE} | awk -F/ '{ print $NF }') >> chroot/root/packages.chroot
done
# Some known licenses required to be accepted
if echo ${LB_PARENT_ARCHIVE_AREAS} | grep -qs "non-free"
then
cat >> chroot/root/packages.chroot.cfg << EOF
firmware-ivtv firmware-ivtv/license/accepted boolean true
firmware-ipw2x00 firmware-ipw2x00/license/accepted boolean true
EOF
fi
# Creating stage file
Create_stagefile .build/chroot_firmware