Codebase list live-build / cc76d80 scripts / build / binary_package-lists
cc76d80

Tree @cc76d80 (Download .tar.gz)

binary_package-lists @cc76d80raw · history · blame

#!/bin/sh

## live-build(7) - System Build Scripts
## Copyright (C) 2006-2015 Daniel Baumann <[email protected]>
##
## 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="$(Echo 'install local packages into binary')"
HELP=""
USAGE="${PROGRAM} [--force]"

Arguments "${@}"

# Reading configuration files
Read_conffiles config/all config/common config/bootstrap config/chroot config/binary config/source
Set_defaults

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_cache cache/packages.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_cache cache/packages.chroot

	# Creating stage file
	Create_stagefile .build/binary_package-lists
fi