110 lines
3.7 KiB
Bash
Executable File
110 lines
3.7 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
## live-build(7) - System Build Scripts
|
|
## Copyright (C) 2016-2023 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.
|
|
|
|
# Updates FIRMWARE_PACKAGES with list of packages determined from specified
|
|
# archive areas of specified distro, based upon reading archive content file.
|
|
#
|
|
# Shared by chroot_firmware and installer_debian-installer
|
|
#
|
|
# Assumption: firmware packages install files into /lib/firmware
|
|
Firmware_List_From_Contents () {
|
|
local MIRROR_CHROOT="${1}"
|
|
local DISTRO_CHROOT="${2}"
|
|
local ARCHIVE_AREAS="${3}"
|
|
local HAS_X86_ARCH=0
|
|
local HAS_ARM_ARCH=0
|
|
|
|
local _ARCHIVE_AREA
|
|
for _ARCHIVE_AREA in ${ARCHIVE_AREAS}
|
|
do
|
|
local CONTENTS_FILEDIR="cache/contents.chroot/${DISTRO_CHROOT}/${_ARCHIVE_AREA}"
|
|
mkdir -p "${CONTENTS_FILEDIR}"
|
|
|
|
local _ARCH
|
|
for _ARCH in all ${LB_ARCHITECTURE}
|
|
do
|
|
local CONTENTS_URL="${MIRROR_CHROOT}/dists/${DISTRO_CHROOT}/${_ARCHIVE_AREA}/Contents-${_ARCH}.gz"
|
|
local CONTENTS_FILE="${CONTENTS_FILEDIR}/contents-${_ARCH}.gz"
|
|
|
|
# Purge from cache if not wanting to use from cache, ensuring fresh copy
|
|
if [ "${LB_CACHE}" != "true" ]
|
|
then
|
|
rm -f "${CONTENTS_FILE}"
|
|
fi
|
|
|
|
# If not cached, download
|
|
if [ ! -e "${CONTENTS_FILE}" ]
|
|
then
|
|
# Contents-all.gz does not exist in Buster and other older versions
|
|
if ! wget --quiet --spider ${WGET_OPTIONS} "${CONTENTS_URL}"; then
|
|
continue
|
|
fi
|
|
wget ${WGET_OPTIONS} "${CONTENTS_URL}" -O "${CONTENTS_FILE}"
|
|
fi
|
|
|
|
local PACKAGES
|
|
PACKAGES="$(gunzip -c "${CONTENTS_FILE}" | awk '/^(usr\/)?lib\/firmware/ { print $2 }' | sort -u )"
|
|
FIRMWARE_PACKAGES="${FIRMWARE_PACKAGES} ${PACKAGES}"
|
|
|
|
# Don't waste disk space, if not making use of caching
|
|
if [ "${LB_CACHE}" != "true" ]
|
|
then
|
|
rm -f "${CONTENTS_FILE}"
|
|
fi
|
|
|
|
case "${_ARCH}" in
|
|
arm64 | armel | armhf)
|
|
HAS_ARM_ARCH=1
|
|
;;
|
|
amd64 | i386)
|
|
HAS_X86_ARCH=1
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Clean up the cache directory, if no files are present
|
|
rmdir --ignore-fail-on-non-empty "cache/contents.chroot/${DISTRO_CHROOT}/${_ARCHIVE_AREA}"
|
|
rmdir --ignore-fail-on-non-empty "cache/contents.chroot/${DISTRO_CHROOT}"
|
|
rmdir --ignore-fail-on-non-empty "cache/contents.chroot"
|
|
done
|
|
|
|
# Blocklist firmware which does not match the requested architectures #1035382
|
|
# See https://salsa.debian.org/images-team/debian-cd/-/blob/master/tasks/bookworm/exclude-firmware
|
|
|
|
# Filter out firmware packages that are only useful with non-free drivers
|
|
BLOCKLIST_FIRMWARE="firmware-nvidia-gsp firmware-nvidia-tesla-gsp"
|
|
# Exclude ARM firmware when no ARM is requested
|
|
if [ ${HAS_ARM_ARCH} -eq 0 ]
|
|
then
|
|
BLOCKLIST_FIRMWARE="${BLOCKLIST_FIRMWARE} arm-trusted-firmware-tools crust-firmware firmware-qcom-soc firmware-samsung firmware-ti-connectivity raspi-firmware"
|
|
fi
|
|
# Exclude x86 firmware when no x86 is requested
|
|
if [ ${HAS_X86_ARCH} -eq 0 ]
|
|
then
|
|
BLOCKLIST_FIRMWARE="${BLOCKLIST_FIRMWARE} amd64-microcode firmware-intel-sound firmware-sof-signed intel-microcode"
|
|
fi
|
|
|
|
# Deduplicate the list and prepare for easier manipulation by having each package on its own line
|
|
local _FIRMWARE_PACKAGES_FILE=tmp_firmware_packages.txt
|
|
echo ${FIRMWARE_PACKAGES} | tr " " "\n" | sort -u > ${_FIRMWARE_PACKAGES_FILE}
|
|
|
|
# Remove the blocklisted firmware packages
|
|
# FIRMWARE_PACKAGES has section names and BLOCKLIST_FIRMWARE (intentionally) does not
|
|
local _REMOVEME
|
|
for _REMOVEME in ${BLOCKLIST_FIRMWARE}
|
|
do
|
|
sed -i -e "/\/${_REMOVEME}$/d" ${_FIRMWARE_PACKAGES_FILE}
|
|
done
|
|
|
|
# Reassemble the filtered list
|
|
FIRMWARE_PACKAGES=$(cat ${_FIRMWARE_PACKAGES_FILE})
|
|
rm -f ${_FIRMWARE_PACKAGES_FILE}
|
|
}
|