#!/bin/sh ## live-build(7) - System Build Scripts ## Copyright (C) 2016-2020 The Debian Live team ## Copyright (C) 2006-2015 Daniel Baumann ## ## 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="Install local packages into binary" USAGE="${PROGRAM} [--force]" # Processing arguments and configuration files Init_config_data "${@}" Echo_message "Begin installing local package lists..." # Requiring stage file Require_stagefile .build/config .build/bootstrap # Checking stage file Check_stagefile .build/binary_package-lists # Checking lock file Check_lockfile .lock # Creating lock file Create_lockfile .lock case "${LB_MODE}" in progress-linux) DISTS="installer/dists" POOL="installer/pool" ;; *) DISTS="dists" POOL="pool" ;; esac if ls config/package-lists/*.list > /dev/null 2>&1 || \ ls config/package-lists/*.list.binary > /dev/null 2>&1 then # Check depends Check_package host /usr/bin/apt-ftparchive apt-utils Check_package chroot /usr/bin/grep-aptavail dctrl-tools # Restoring cache Restore_package_cache chroot # Installing depends Install_package if [ -e "${LIVE_BUILD}/share/bin/Packages" ] then cp "${LIVE_BUILD}/share/bin/Packages" chroot/bin else cp /usr/share/live/build/bin/Packages chroot/bin fi mkdir -p chroot/binary.deb/archives/partial for LIST in config/package-lists/*.list \ config/package-lists/*.list.binary do if [ -e "${LIST}" ] then # Generate package list Expand_packagelist "${LIST}" "config/package-lists" > chroot/root/"$(basename ${LIST})" # Downloading additional packages Chroot chroot "xargs --no-run-if-empty --arg-file=/root/$(basename ${LIST}) apt-get ${APT_OPTIONS} -o Dir::Cache=/binary.deb -o Dir::State::status=/dev/null --download-only install" # Remove package list rm chroot/root/"$(basename ${LIST})" fi done for FILE in chroot/binary.deb/archives/*.deb do if [ ! -e ${FILE} ]; then break # Do nothing if the package lists were empty... fi SOURCE="$(dpkg -f ${FILE} Source | awk '{ print $1 }')" SECTION="$(dpkg -f ${FILE} Section | awk '{ print $1 }')" if [ -z "${SOURCE}" ] then SOURCE="$(basename ${FILE} | awk -F_ '{ print $1 }')" fi case "${SOURCE}" in lib?*) LETTER="$(echo ${SOURCE} | sed 's|\(....\).*|\1|')" ;; *) LETTER="$(echo ${SOURCE} | sed 's|\(.\).*|\1|')" ;; esac if echo "${SECTION}" | grep -qs contrib then SECTION="contrib" elif echo "${SECTION}" | grep -qs non-free then SECTION="non-free" else SECTION="main" fi # Install directory mkdir -p binary/${POOL}/${SECTION}/"${LETTER}"/"${SOURCE}" # Move files mv "${FILE}" binary/${POOL}/${SECTION}/"${LETTER}"/"${SOURCE}" done if [ -e chroot/etc/os-release ]; then _VERSION="$(. chroot/etc/os-release && echo ${VERSION_ID})" fi if [ -n "${_VERSION}" ]; then _LB_APT_VERSION_OPT='-o APT::FTPArchive::Release::Version="'"${_VERSION}"'"' fi cd binary for SECTION in ${POOL}/* do if [ ! -d "${SECTION}" ]; then break # Do nothing if the package lists were empty... fi SECTION="$(basename ${SECTION})" mkdir -p ${DISTS}/${LB_PARENT_DISTRIBUTION_BINARY}/${SECTION}/binary-${LB_ARCHITECTURES} apt-ftparchive packages ${POOL}/${SECTION} > ${DISTS}/${LB_PARENT_DISTRIBUTION_BINARY}/${SECTION}/binary-${LB_ARCHITECTURES}/Packages gzip -9 -c ${DISTS}/${LB_PARENT_DISTRIBUTION_BINARY}/${SECTION}/binary-${LB_ARCHITECTURES}/Packages > ${DISTS}/${LB_PARENT_DISTRIBUTION_BINARY}/${SECTION}/binary-${LB_ARCHITECTURES}/Packages.gz done if [ -d dists/${LB_PARENT_DISTRIBUTION_BINARY} ]; then apt-ftparchive \ -o APT::FTPArchive::Release::Origin="Debian" \ -o APT::FTPArchive::Release::Label="Debian" \ -o APT::FTPArchive::Release::Suite="${LB_PARENT_DISTRIBUTION_BINARY}" \ ${_LB_APT_VERSION_OPT} \ -o APT::FTPArchive::Release::Codename="${LB_PARENT_DISTRIBUTION_BINARY}" \ -o APT::FTPArchive::Release::Date="$(date -R)" \ -o APT::FTPArchive::Release::Architectures="${LB_ARCHITECTURES}" \ -o APT::FTPArchive::Release::Components="${LB_PARENT_ARCHIVE_AREAS}" \ -o APT::FTPArchive::Release::Description="Last updated: $(date -R)" \ release dists/${LB_PARENT_DISTRIBUTION_BINARY} \ > dists/${LB_PARENT_DISTRIBUTION_BINARY}/Release fi cd "${OLDPWD}" rm -f chroot/bin/Packages rm -rf chroot/binary.deb # Removing depends Remove_package # Saving cache Save_package_cache chroot # Creating stage file Create_stagefile .build/binary_package-lists fi