873 lines
23 KiB
Bash
Executable File
873 lines
23 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
## live-build(7) - System Build Scripts
|
|
## Copyright (C) 2006-2012 Daniel Baumann <daniel@debian.org>
|
|
##
|
|
## 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 debian-installer 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
|
|
|
|
if [ "${_DEBUG}" = "true" ]
|
|
then
|
|
WGET_OPTIONS="${WGET_OPTIONS} --verbose"
|
|
elif [ "${_QUIET}" = "true" ]
|
|
then
|
|
WGET_OPTIONS="${WGET_OPTIONS} --quiet"
|
|
else
|
|
WGET_OPTIONS="${WGET_OPTIONS} --no-verbose"
|
|
fi
|
|
|
|
# Check d-i configuration
|
|
case "${LB_DEBIAN_INSTALLER}" in
|
|
true|cdrom|netinst|netboot|businesscard|live)
|
|
;;
|
|
|
|
false)
|
|
exit 0
|
|
;;
|
|
|
|
*)
|
|
Echo_error "debian-installer flavour %s not supported." "${LB_DEBIAN_INSTALLER}"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
Echo_message "Begin installing debian-installer..."
|
|
|
|
# Requiring stage file
|
|
Require_stagefile .build/config .build/bootstrap
|
|
|
|
# Checking stage file
|
|
Check_stagefile .build/binary_debian-installer
|
|
|
|
# Checking lock file
|
|
Check_lockfile .lock
|
|
|
|
# Creating lock file
|
|
Create_lockfile .lock
|
|
|
|
# Checking depends
|
|
Check_package chroot/usr/bin/wget wget
|
|
Check_package chroot/usr/bin/apt-ftparchive apt-utils
|
|
|
|
# Restoring cache
|
|
Restore_cache cache/packages.binary
|
|
|
|
# Installing depends
|
|
Install_package
|
|
|
|
# Setting destination directory
|
|
case "${LB_BINARY_IMAGES}" in
|
|
netboot)
|
|
DESTDIR="tftpboot/debian-install/${LB_ARCHITECTURES}"
|
|
;;
|
|
|
|
hdd*|tar)
|
|
DESTDIR="binary/install"
|
|
;;
|
|
|
|
*)
|
|
DESTDIR="binary/install"
|
|
;;
|
|
esac
|
|
|
|
# Set d-i image type
|
|
case "${LB_DEBIAN_INSTALLER}" in
|
|
businesscard|netboot|netinst)
|
|
DI_IMAGE_TYPE="netboot"
|
|
;;
|
|
*)
|
|
case "${LB_BINARY_IMAGES}" in
|
|
netboot)
|
|
DI_IMAGE_TYPE="netboot"
|
|
;;
|
|
|
|
*)
|
|
DI_IMAGE_TYPE="cdrom"
|
|
;;
|
|
esac
|
|
;;
|
|
esac
|
|
|
|
# Set architecture-specific variables
|
|
case "${LB_ARCHITECTURES}" in
|
|
armel)
|
|
DEFAULT_FLAVOUR="$(echo ${LH_LINUX_FLAVOURS} | awk '{ print $1 }')"
|
|
case "${DI_IMAGE_TYPE}" in
|
|
cdrom)
|
|
DI_REMOTE_BASE="${DEFAULT_FLAVOUR}/cdrom"
|
|
;;
|
|
|
|
netboot)
|
|
DI_REMOTE_BASE="${DEFAULT_FLAVOUR}/netboot"
|
|
;;
|
|
esac
|
|
|
|
DI_REMOTE_KERNEL="vmlinuz"
|
|
DI_REMOTE_BASE_GTK="${DI_REMOTE_BASE}/gtk"
|
|
;;
|
|
|
|
powerpc)
|
|
case "${DI_IMAGE_TYPE}" in
|
|
cdrom)
|
|
DI_REMOTE_BASE="${LB_ARCHITECTURES}/cdrom"
|
|
;;
|
|
|
|
netboot)
|
|
DI_REMOTE_BASE="${LB_ARCHITECTURES}/netboot"
|
|
;;
|
|
esac
|
|
|
|
DI_REMOTE_KERNEL="vmlinux"
|
|
DI_REMOTE_BASE_GTK="${DI_REMOTE_BASE}/gtk"
|
|
;;
|
|
|
|
sparc)
|
|
DEFAULT_FLAVOUR="$(echo ${LB_LINUX_FLAVOURS} | awk '{ print $1 }')"
|
|
DI_REMOTE_KERNEL="$(basename chroot/boot/vmlinuz-*${DEFAULT_FLAVOUR})"
|
|
DI_REMOTE_BASE_GTK="none"
|
|
|
|
DI_REMOTE_BASE="cdrom"
|
|
;;
|
|
*)
|
|
case "${DI_IMAGE_TYPE}" in
|
|
netboot)
|
|
DI_REMOTE_BASE="netboot/debian-installer/${LB_ARCHITECTURES}"
|
|
DI_REMOTE_BASE_GTK="netboot/gtk/debian-installer/${LB_ARCHITECTURES}"
|
|
DI_REMOTE_KERNEL="linux"
|
|
;;
|
|
|
|
cdrom)
|
|
DI_REMOTE_BASE="cdrom"
|
|
DI_REMOTE_BASE_GTK="cdrom/gtk"
|
|
DI_REMOTE_KERNEL="vmlinuz"
|
|
;;
|
|
esac
|
|
;;
|
|
esac
|
|
|
|
Check_multiarchitectures
|
|
|
|
Install_file() {
|
|
local FILE
|
|
FILE="${1}"
|
|
|
|
local ARCHIVE_AREA
|
|
ARCHIVE_AREA="$(dpkg -I ${FILE} | awk '/^.*Section: / { print $2 }')"
|
|
|
|
if echo "${ARCHIVE_AREA}" | grep -qs '/'
|
|
then
|
|
ARCHIVE_AREA="$(echo ${ARCHIVE_AREA} | awk -F/ '{ print $1 }')"
|
|
else
|
|
ARCHIVE_AREA="main"
|
|
fi
|
|
|
|
local TARGET
|
|
TARGET="${2}/${ARCHIVE_AREA}"
|
|
|
|
SOURCE="$(dpkg -f ${FILE} Source | 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
|
|
|
|
# Install directory
|
|
mkdir -p "${TARGET}"/"${LETTER}"/"${SOURCE}"
|
|
|
|
# Move files
|
|
cp "${FILE}" "${TARGET}"/"${LETTER}"/"${SOURCE}"
|
|
}
|
|
|
|
# Set absolute directory for caching; we require it when we call Download_file
|
|
# from a non-standard cwd.
|
|
_LB_CACHE_DIR="$(pwd)/cache/binary_debian-installer"
|
|
|
|
Download_file () {
|
|
local _LB_TARGET
|
|
_LB_TARGET="${1}"
|
|
|
|
local _LB_URL
|
|
_LB_URL="${2}"
|
|
|
|
_LB_CACHE_FILE="${_LB_CACHE_DIR}/$(echo "${_LB_URL}" | sed 's|/|_|g')"
|
|
|
|
if [ ! -f "${_LB_CACHE_FILE}" ]
|
|
then
|
|
mkdir -p ${_LB_CACHE_DIR}
|
|
if ! wget ${WGET_OPTIONS} -O "${_LB_CACHE_FILE}" "${_LB_URL}"
|
|
then
|
|
rm -f "${_LB_CACHE_FILE}"
|
|
|
|
Echo_error "Could not download file: %s" "${_LB_URL}"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
if [ "$(stat --printf %d "${_LB_CACHE_DIR}")" = "$(stat --printf %d ./)" ]
|
|
then
|
|
CP_OPTIONS="-l"
|
|
fi
|
|
|
|
cp -f ${CP_OPTIONS} -- "${_LB_CACHE_FILE}" "${_LB_TARGET}"
|
|
}
|
|
|
|
VMLINUZ_DI="vmlinuz"
|
|
INITRD_DI="initrd.gz"
|
|
DESTDIR_DI="${DESTDIR}"
|
|
|
|
VMLINUZ_GI="gtk/vmlinuz"
|
|
INITRD_GI="gtk/initrd.gz"
|
|
DESTDIR_GI="${DESTDIR}/gtk"
|
|
|
|
case "${LB_DERIVATIVE}" in
|
|
false)
|
|
if [ "${LB_DEBIAN_INSTALLER_DISTRIBUTION}" = "daily" ]
|
|
then
|
|
# FIXME: variable name should be decupled from derivatves
|
|
LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION="sid"
|
|
|
|
# Debian Installer daily builds
|
|
URL="http://d-i.debian.org/daily-images/${LB_ARCHITECTURES}/daily/"
|
|
else
|
|
URL="${LB_MIRROR_DEBIAN_INSTALLER}/dists/${LB_DEBIAN_INSTALLER_DISTRIBUTION}/main/installer-${LB_ARCHITECTURES}/current/images/"
|
|
fi
|
|
;;
|
|
|
|
true)
|
|
if [ "${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}" = "daily" ]
|
|
then
|
|
LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION="sid"
|
|
|
|
# Debian Installer daily builds
|
|
URL="http://d-i.debian.org/daily-images/${LB_ARCHITECTURES}/daily/"
|
|
else
|
|
URL="${LB_PARENT_MIRROR_DEBIAN_INSTALLER}/dists/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/main/installer-${LB_ARCHITECTURES}/current/images/"
|
|
fi
|
|
|
|
if [ "${LB_MODE}" = "progress" ]
|
|
then
|
|
# FIXME: normal derivatives probably don't rebuild d-i,
|
|
# but progress does.
|
|
URL="${LB_MIRROR_DEBIAN_INSTALLER}/dists/${LB_DEBIAN_INSTALLER_DISTRIBUTION}/main/installer-${LB_ARCHITECTURES}/current/images/"
|
|
fi
|
|
;;
|
|
esac
|
|
|
|
mkdir -p "${DESTDIR_DI}"
|
|
|
|
if [ "${LB_ARCHITECTURES}" = "sparc" ] && [ "${DI_IMAGE_TYPE}" = "netboot" ]
|
|
then
|
|
# There are no prepared kernel/initrd pairs for sparc netboot so we
|
|
# must unpack them from a mini.iso
|
|
Download_file mini.iso ${URL}/mini.iso
|
|
|
|
mkdir mini.tmp
|
|
${LB_ROOT_COMMAND} mount -o loop -t iso9660 mini.iso mini.tmp
|
|
|
|
cp mini.tmp/boot/vmlinuz-${DEFAULT_FLAVOUR} "${DESTDIR}"/"${VMLINUZ_DI}"
|
|
cp mini.tmp/boot/initrd.gz "${DESTDIR}"/"${INITRD_DI}"
|
|
|
|
${LB_ROOT_COMMAND} umount mini.tmp
|
|
rm -rf mini.tmp mini.iso
|
|
else
|
|
# Downloading debian-installer
|
|
Download_file "${DESTDIR}"/"${VMLINUZ_DI}" ${URL}/${DI_REMOTE_BASE}/${DI_REMOTE_KERNEL}
|
|
Download_file "${DESTDIR}"/"${INITRD_DI}" ${URL}/${DI_REMOTE_BASE}/initrd.gz
|
|
|
|
# Downloading graphical-installer
|
|
DOWNLOAD_GTK_INSTALLER=0
|
|
if [ "${LB_DEBIAN_INSTALLER_GUI}" = "true" ]
|
|
then
|
|
case "${LB_ARCHITECTURES}" in
|
|
amd64|i386)
|
|
DOWNLOAD_GTK_INSTALLER=1
|
|
;;
|
|
|
|
powerpc)
|
|
if [ "${LB_DEBIAN_INSTALLER}" = "netboot" ]
|
|
then
|
|
DOWNLOAD_GTK_INSTALLER=1
|
|
fi
|
|
;;
|
|
esac
|
|
fi
|
|
|
|
if [ ${DOWNLOAD_GTK_INSTALLER} -eq 1 ]
|
|
then
|
|
mkdir -p "${DESTDIR_GI}"
|
|
Download_file "${DESTDIR}"/"${VMLINUZ_GI}" ${URL}/${DI_REMOTE_BASE_GTK}/${DI_REMOTE_KERNEL}
|
|
Download_file "${DESTDIR}"/"${INITRD_GI}" ${URL}/${DI_REMOTE_BASE_GTK}/initrd.gz
|
|
fi
|
|
fi
|
|
|
|
# Only download additional packages if appropriate
|
|
if [ "${DI_IMAGE_TYPE}" != "netboot" ]
|
|
then
|
|
# Downloading additional packages
|
|
mkdir -p chroot/binary.deb/archives/partial
|
|
|
|
mv chroot/var/lib/dpkg/status chroot/var/lib/dpkg/status.tmp
|
|
touch chroot/var/lib/dpkg/status
|
|
|
|
case "${LB_ARCHITECTURES}" in
|
|
amd64)
|
|
DI_REQ_PACKAGES="lilo grub grub-pc"
|
|
|
|
case "${LB_MODE}" in
|
|
ubuntu|kubuntu)
|
|
DI_PACKAGES="${DI_REQ_PACKAGES} linux-generic"
|
|
;;
|
|
|
|
*)
|
|
DI_PACKAGES="${DI_REQ_PACKAGES} linux-image-2.6-amd64"
|
|
;;
|
|
esac
|
|
;;
|
|
|
|
i386)
|
|
DI_REQ_PACKAGES="elilo lilo grub grub-pc"
|
|
|
|
case "${LB_MODE}" in
|
|
ubuntu|kubuntu)
|
|
case "${LB_DISTRIBUTION}" in
|
|
precise)
|
|
DI_PACKAGES="${DI_REQ_PACKAGES} linux-generic-pae"
|
|
;;
|
|
*)
|
|
DI_PACKAGES="${DI_REQ_PACKAGES} linux-generic"
|
|
;;
|
|
esac
|
|
;;
|
|
|
|
*)
|
|
DI_PACKAGES="${DI_REQ_PACKAGES} linux-image-2.6-486 linux-image-2.6-686"
|
|
;;
|
|
esac
|
|
;;
|
|
|
|
sparc)
|
|
DI_REQ_PACKAGES="silo"
|
|
case "${LB_MODE}" in
|
|
ubuntu|kubuntu)
|
|
DI_PACKAGES="${DI_REQ_PACKAGES} linux-sparc64"
|
|
;;
|
|
|
|
*)
|
|
DI_PACKAGES="${DI_REQ_PACKAGES} linux-image-2.6-sparc64 linux-image-2.6-sparc64-smp"
|
|
;;
|
|
esac
|
|
;;
|
|
|
|
powerpc)
|
|
DI_REQ_PACKAGES="yaboot"
|
|
case "${LB_MODE}" in
|
|
ubuntu|kubuntu)
|
|
DI_PACKAGES="${DI_REQ_PACKAGES} linux-image-powerpc-smp linux-image-powerpc64-smp"
|
|
;;
|
|
|
|
*)
|
|
DI_PACKAGES="${DI_REQ_PACKAGES} linux-image-2.6-powerpc linux-image-2.6-powerpc64 linux-image-2.6-powerpc-smp"
|
|
;;
|
|
esac
|
|
;;
|
|
esac
|
|
|
|
DI_PACKAGES="${DI_PACKAGES} busybox cryptsetup mdadm lvm2"
|
|
|
|
case "${LB_MODE}" in
|
|
debian)
|
|
DI_REQ_PACKAGES="${DI_REQ_PACKAGES} console-setup keyboard-configuration kbd"
|
|
DI_PACKAGES="${DI_PACKAGES} console-setup keyboard-configuration kbd"
|
|
;;
|
|
esac
|
|
|
|
# Include firmware packages
|
|
if [ "${LB_FIRMWARE_BINARY}" = "true" ]
|
|
then
|
|
# Assumption: firmware packages install files into /lib/firmware
|
|
|
|
# Get all firmware packages names
|
|
mkdir -p cache/contents.binary
|
|
wget ${WGET_OPTIONS} ${LB_PARENT_MIRROR_CHROOT}/dists/${LB_PARENT_DISTRIBUTION}/Contents-${LB_ARCHITECTURES}.gz -O - | gunzip -c > cache/contents.binary/contents.${LB_PARENT_DISTRIBUTION}.${LB_ARCHITECTURES}
|
|
|
|
FIRMWARE_PACKAGES=""
|
|
FIRMWARE_PACKAGES="$(awk '/^lib\/firmware/ { print $2 }' cache/contents.binary/contents.${LB_PARENT_DISTRIBUTION}.${LB_ARCHITECTURES} | sort -u)"
|
|
|
|
if [ "${LB_DERIVATIVE}" = "true" ]
|
|
then
|
|
wget {WGET_OPTIONS} ${LB_MIRROR_CHROOT}/dists/${LB_DISTRIBUTION}/Contents-${LB_ARCHITECTURES}.gz -O - | gunzip -c > cache/contents.binary/contents.${LB_DISTRIBUTION}.${LB_ARCHITECTURES}
|
|
|
|
FIRMWARE_PACKAGES="${FIRMWARE_PACKAGES} $(awk '/^lib\/firmware/ { print $2 }' cache/contents.binary/contents.${LB_DISTRIBUTION}.${LB_ARCHITECTURES} | sort -u)"
|
|
fi
|
|
|
|
# Filter out contrib packages if contrib is not enabled
|
|
if ! echo ${LB_ARCHIVE_AREAS} | grep -qs contrib
|
|
then
|
|
_FIRMWARE_PACKAGES=""
|
|
|
|
for _PACKAGE in ${FIRMWARE_PACKAGES}
|
|
do
|
|
_FIRMWARE_PACKAGES="${_FIRMWARE_PACKAGES} $(echo ${_PACKAGE} | sed -e 's|^contrib/.*$||')"
|
|
done
|
|
|
|
FIRMWARE_PACKAGES="${_FIRMWARE_PACKAGES}"
|
|
fi
|
|
|
|
# Filter out non-free packages if non-free is not enabled
|
|
if ! echo ${LB_ARCHIVE_AREAS} | grep -qs non-free
|
|
then
|
|
_FIRMWARE_PACKAGES=""
|
|
|
|
for _PACKAGE in ${FIRMWARE_PACKAGES}
|
|
do
|
|
_FIRMWARE_PACKAGES="${_FIRMWARE_PACKAGES} $(echo ${_PACKAGE} | sed -e 's|^non-free/.*$||')"
|
|
done
|
|
|
|
FIRMWARE_PACKAGES="${_FIRMWARE_PACKAGES}"
|
|
|
|
else
|
|
# Manually add firmware-linux/non-free meta package
|
|
FIRMWARE_PACKAGES="${FIRMWARE_PACKAGES} firmware-linux"
|
|
fi
|
|
|
|
# Drop section and keep package names only
|
|
for _PACKAGE in ${FIRMWARE_PACKAGES}
|
|
do
|
|
DI_FIRMWARE_PACKAGES="${DI_FIRMWARE_PACKAGES} $(echo ${_PACKAGE} | awk -F/ '{ print $NF }')"
|
|
done
|
|
fi
|
|
|
|
# Set apt command prefix
|
|
_LB_APT_COMMAND="apt-get ${APT_OPTIONS} -o Dir::Cache=/binary.deb -o APT::Install-Recommends=false --download-only"
|
|
|
|
if [ "${LB_DEBIAN_INSTALLER}" = "live" ]
|
|
then
|
|
# We don't want to duplicate .debs of packages in binary/pool that are already
|
|
# installed to target/ via live-installer.
|
|
#
|
|
# However, we need to force various packages' inclusion in binary/pool as
|
|
# d-i does not support (for example) re-installing grub from target/ - the grub
|
|
# .debs must actually exist.
|
|
|
|
# Modify dpkg status to show the required packages are not installed.
|
|
cp chroot/var/lib/dpkg/status.tmp chroot/var/lib/dpkg/status
|
|
for PACKAGE in ${DI_REQ_PACKAGES}
|
|
do
|
|
awk -v f=0 '
|
|
f == 1 { print "Status: purge ok not-installed"; f=0; next }
|
|
/Package: '"${PACKAGE}"'/ { f=1; }
|
|
{ print }
|
|
' chroot/var/lib/dpkg/status > chroot/var/lib/dpkg/status.awk
|
|
mv chroot/var/lib/dpkg/status.awk chroot/var/lib/dpkg/status
|
|
done
|
|
|
|
# Download .deb's that we just marked as "purged" which caused broken dependencies
|
|
Chroot chroot ${_LB_APT_COMMAND} -f dist-upgrade
|
|
|
|
# Revert dpkg status file
|
|
mv chroot/var/lib/dpkg/status.tmp chroot/var/lib/dpkg/status
|
|
|
|
# Download .debs of the required packages
|
|
Chroot chroot ${_LB_APT_COMMAND} install ${DI_PACKAGES} ${DI_FIRMWARE_PACKAGES} ${DI_REQ_PACKAGES}
|
|
else
|
|
# Download .debs of the required packages
|
|
Chroot chroot ${_LB_APT_COMMAND} install ${DI_PACKAGES} ${DI_FIRMWARE_PACKAGES}
|
|
|
|
# Revert dpkg status file
|
|
mv chroot/var/lib/dpkg/status.tmp chroot/var/lib/dpkg/status
|
|
fi
|
|
|
|
mv chroot/binary.deb ./
|
|
|
|
for _ARCHIVE_AREA in $(echo ${LB_PARENT_ARCHIVE_AREAS} ${LB_ARCHIVE_AREAS})
|
|
do
|
|
mkdir -p binary/pool/${_ARCHIVE_AREA}
|
|
done
|
|
|
|
if Find_files binary.deb/archives/*.deb
|
|
then
|
|
for FILE in binary.deb/archives/*.deb
|
|
do
|
|
Install_file "${FILE}" "binary/pool"
|
|
done
|
|
fi
|
|
|
|
if [ "${LB_DEBIAN_INSTALLER}" != "live" ]
|
|
then
|
|
# Including base debian packages
|
|
if ls cache/packages.bootstrap/*.deb > /dev/null 2>&1
|
|
then
|
|
for FILE in cache/packages.bootstrap/*.deb
|
|
do
|
|
Install_file "${FILE}" "binary/pool"
|
|
done
|
|
else
|
|
Echo_error "Could not find packages in cache/packages.bootstrap."
|
|
Echo_error "You selected values of LB_CACHE, LB_CACHE_PACKAGES, LB_CACHE_STAGES and LB_DEBIAN_INSTALLER which will result in 'bootstrap' packages not being cached - these are required when integrating the Debian Installer."
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
# Including local debs
|
|
if Find_files config/packages.binary/*_"${LB_ARCHITECTURES}".deb || Find_files config/packages/*_"${LB_ARCHITECTURES}".deb
|
|
then
|
|
for FILE in config/packages.binary/*_"${LB_ARCHITECTURES}".deb config/packages/*_"${LB_ARCHITECTURES}".deb
|
|
do
|
|
if [ -e "${FILE}" ]
|
|
then
|
|
Install_file "${FILE}" "binary/pool"
|
|
fi
|
|
done
|
|
fi
|
|
|
|
if Find_files config/packages.binary/*_all.deb || Find_files config/packages/*_all.deb
|
|
then
|
|
for FILE in config/packages.binary/*_all.deb config/packages/*_all.deb
|
|
do
|
|
if [ -e "${FILE}" ]
|
|
then
|
|
Install_file "${FILE}" "binary/pool"
|
|
fi
|
|
done
|
|
fi
|
|
|
|
# Generating deb indices
|
|
for _ARCHIVE_AREA in $(cd binary/pool && ls)
|
|
do
|
|
mkdir -p binary/dists/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/${_ARCHIVE_AREA}/binary-${LB_ARCHITECTURES}
|
|
|
|
mv binary chroot/root
|
|
echo "cd /root/binary && apt-ftparchive packages pool/${_ARCHIVE_AREA} > dists/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/${_ARCHIVE_AREA}/binary-${LB_ARCHITECTURES}/Packages" > chroot/binary.sh
|
|
Chroot chroot "sh binary.sh"
|
|
rm -f chroot/binary.sh
|
|
mv chroot/root/binary ./
|
|
|
|
gzip -9 -c binary/dists/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/${_ARCHIVE_AREA}/binary-${LB_ARCHITECTURES}/Packages > binary/dists/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/${_ARCHIVE_AREA}/binary-${LB_ARCHITECTURES}/Packages.gz
|
|
|
|
# Fetching release
|
|
Download_file binary/dists/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/${_ARCHIVE_AREA}/binary-${LB_ARCHITECTURES}/Release "${LB_PARENT_MIRROR_CHROOT}"/dists/"${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}"/${_ARCHIVE_AREA}/binary-"${LB_ARCHITECTURES}"/Release
|
|
done
|
|
|
|
# Symlink firmware packages to /firmware
|
|
if [ -n "${DI_FIRMWARE_PACKAGES}" ]
|
|
then
|
|
mkdir -p binary/firmware
|
|
cd binary/firmware
|
|
|
|
for _PACKAGE in ${DI_FIRMWARE_PACKAGES}
|
|
do
|
|
for _FILE in $(find ../pool -name "${_PACKAGE}_*.deb")
|
|
do
|
|
ln -s ${_FILE} ./
|
|
done
|
|
done
|
|
|
|
cd "${OLDPWD}"
|
|
fi
|
|
|
|
# Udeb handling
|
|
mkdir binary.udeb
|
|
cd binary.udeb
|
|
|
|
# Downloading udeb indices
|
|
Download_file Packages.gz "${LB_PARENT_MIRROR_CHROOT}"/dists/"${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}"/main/debian-installer/binary-"${LB_ARCHITECTURES}"/Packages.gz
|
|
gunzip -c Packages.gz > Packages
|
|
|
|
if [ "${LB_DERIVATIVE}" = "true" ]
|
|
then
|
|
Download_file Packages.derivative.gz "${LB_MIRROR_CHROOT}"/dists/"${LB_DEBIAN_INSTALLER_DISTRIBUTION}"/main/debian-installer/binary-"${LB_ARCHITECTURES}"/Packages.gz
|
|
gunzip -c Packages.derivative.gz > Packages.derivative
|
|
fi
|
|
|
|
# Sorting udebs
|
|
if [ "${LB_DERIVATIVE}" = true ]
|
|
then
|
|
UDEBS="$(awk '/Filename: / { print $2 }' Packages.derivative)"
|
|
fi
|
|
|
|
UDEBS="${UDEBS} $(awk '/Filename: / { print $2 }' Packages)"
|
|
|
|
# Downloading udebs packages
|
|
Echo_message "Downloading udebs..."
|
|
|
|
if [ "${LB_DERIVATIVE}" = "true" ]
|
|
then
|
|
Echo_message "Building in derivative mode in debian+ layout.. a lot of 404 errors are ok here."
|
|
fi
|
|
|
|
for UDEB in ${UDEBS}
|
|
do
|
|
if [ -f ../cache/packages.binary_debian-installer.udeb/"$(basename ${UDEB})" ]
|
|
then
|
|
# Copying cached udebs
|
|
cp ../cache/packages.binary_debian-installer.udeb/"$(basename ${UDEB})" ./
|
|
else
|
|
# Downloading udebs
|
|
if ! ls "$(basename ${UDEB} | awk -F_ '{ print $1 }')"_* > /dev/null 2>&1
|
|
then
|
|
wget ${WGET_OPTIONS} "${LB_MIRROR_CHROOT}"/${UDEB} || wget ${WGET_OPTIONS} "${LB_PARENT_MIRROR_CHROOT}"/${UDEB}
|
|
fi
|
|
fi
|
|
done
|
|
|
|
# Caching udebs
|
|
rm -rf ../cache/packages.binary_debian-installer.udeb
|
|
mkdir -p ../cache/packages.binary_debian-installer.udeb
|
|
cp *.udeb ../cache/packages.binary_debian-installer.udeb
|
|
|
|
# Including local udebs
|
|
if Find_files ../config/packages.binary/*_"${LB_ARCHITECTURES}".udeb || Find_files ../config/packages/*_"${LB_ARCHITECTURES}".udeb
|
|
then
|
|
for FILE in ../config/packages.binary/*_"${LB_ARCHITECTURES}".udeb ../config/packages/*_"${LB_ARCHITECTURES}".udeb
|
|
do
|
|
if [ -e "${FILE}" ]
|
|
then
|
|
Install_file "${FILE}" "pool"
|
|
|
|
# Prefer local udebs over downloaded udebs
|
|
rm -f "$(basename ${FILE} | awk -F_ '{ print $1 }')"_*.udeb
|
|
fi
|
|
done
|
|
fi
|
|
|
|
if Find_files ../config/packages.binary/*_all.udeb || Find_files ../config/packages/*_all.udeb
|
|
then
|
|
for FILE in ../config/packages.binary/*_all.udeb ../config/packages/*_all.udeb
|
|
do
|
|
if [ -e "${FILE}" ]
|
|
then
|
|
Install_file "${FILE}" "pool"
|
|
|
|
# Prefer local udebs over downloaded udebs
|
|
rm -f "$(basename ${FILE} | awk -F_ '{ print $1 }')"_*.udeb
|
|
fi
|
|
done
|
|
fi
|
|
|
|
# Excluding udebs
|
|
for LOCATION in "${LIVE_BUILD}/data/debian-cd" /usr/share/live/build/data/debian-cd
|
|
do
|
|
if [ -e "${LOCATION}" ]
|
|
then
|
|
grep -v "^#" "${LOCATION}/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/udeb_exclude" > exclude || true
|
|
grep -v "^#" "${LOCATION}/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/exclude-udebs" >> exclude || true
|
|
grep -v "^#" "${LOCATION}/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/exclude-udebs-${LB_ARCHITECTURES}" >> exclude || true
|
|
|
|
continue
|
|
fi
|
|
done
|
|
|
|
# Local exclude file
|
|
if [ -e ../config/debian-installer/udeb_exclude ]
|
|
then
|
|
cat ../config/debian-installer/udeb_exclude >> exclude
|
|
fi
|
|
|
|
# Excluding udebs from excludes because we want them to be in the image on purpose
|
|
sed -i -e 's|di-utils-exit-installer||' exclude # used for live-installer-launcher
|
|
|
|
while read EXCLUDE
|
|
do
|
|
if [ "${LB_DEBIAN_INSTALLER}" = "live" ] && [ "${EXCLUDE}" = "live-installer" ]
|
|
then
|
|
continue
|
|
fi
|
|
|
|
rm -f ${EXCLUDE}_*.udeb
|
|
done < exclude
|
|
|
|
# Moving udebs
|
|
for UDEB in ${UDEBS}
|
|
do
|
|
if [ -f "$(basename ${UDEB})" ]
|
|
then
|
|
mkdir -p $(dirname ${UDEB})
|
|
mv "$(basename ${UDEB})" "$(dirname ${UDEB})"
|
|
fi
|
|
done
|
|
|
|
# Creating udeb indices
|
|
mkdir -p dists/"${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}"/main/debian-installer/binary-"${LB_ARCHITECTURES}"
|
|
cd "${OLDPWD}"
|
|
|
|
mv binary.udeb chroot/root
|
|
echo "cd /root/binary.udeb && apt-ftparchive packages pool/main > dists/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/main/debian-installer/binary-${LB_ARCHITECTURES}/Packages" > chroot/binary.sh
|
|
Chroot chroot "sh binary.sh"
|
|
rm -f chroot/binary.sh
|
|
mv chroot/root/binary.udeb ./
|
|
|
|
cd binary.udeb
|
|
gzip -9 -c dists/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/main/debian-installer/binary-${LB_ARCHITECTURES}/Packages > dists/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/main/debian-installer/binary-${LB_ARCHITECTURES}/Packages.gz
|
|
|
|
rm -f Packages* exclude
|
|
find . | cpio -dmpu "${OLDPWD}"/binary
|
|
cd "${OLDPWD}"
|
|
|
|
rm -rf binary.udeb
|
|
rm -rf binary.deb
|
|
|
|
# Generating release file
|
|
mv binary chroot/root
|
|
|
|
eval _VERSION="$`echo RELEASE_${LB_PARENT_DISTRIBUTION}`"
|
|
|
|
case "${LB_PARENT_DISTRIBUTION}" in
|
|
sid)
|
|
_SUITE="unstable"
|
|
;;
|
|
|
|
*)
|
|
_SUITE="${LB_PARENT_DISTRIBUTION}"
|
|
;;
|
|
esac
|
|
|
|
cat > chroot/binary.sh << EOF
|
|
cd /root/binary && apt-ftparchive \
|
|
-o APT::FTPArchive::Release::Origin="Debian" \
|
|
-o APT::FTPArchive::Release::Label="Debian" \
|
|
-o APT::FTPArchive::Release::Suite="${_SUITE}" \
|
|
-o APT::FTPArchive::Release::Version="${_VERSION}" \
|
|
-o APT::FTPArchive::Release::Codename="${LB_PARENT_DISTRIBUTION}" \
|
|
-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_DEBIAN_INSTALLER_DISTRIBUTION} > dists/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/Release
|
|
EOF
|
|
|
|
Chroot chroot "sh binary.sh"
|
|
rm -f chroot/binary.sh
|
|
mv chroot/root/binary ./
|
|
|
|
DISTRIBUTIONS="stable testing unstable"
|
|
|
|
if [ "${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}" != "${LB_PARENT_DISTRIBUTION}" ]
|
|
then
|
|
DISTRIBUTIONS="${DISTRIBUTIONS} ${LB_PARENT_DISTRIBUTION}"
|
|
fi
|
|
|
|
case "${LB_BINARY_IMAGES}" in
|
|
hdd)
|
|
case "${LB_BINARY_FILESYSTEM}" in
|
|
fat*|ntfs)
|
|
# Creating dist directories
|
|
for DISTRIBUTION in ${DISTRIBUTIONS}
|
|
do
|
|
cp -a binary/dists/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION} binary/dists/${DISTRIBUTION}
|
|
done
|
|
;;
|
|
esac
|
|
;;
|
|
|
|
*)
|
|
# Creating dist symlinks
|
|
for DISTRIBUTION in ${DISTRIBUTIONS}
|
|
do
|
|
ln -s ${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION} binary/dists/${DISTRIBUTION}
|
|
done
|
|
|
|
ln -s . binary/debian
|
|
;;
|
|
esac
|
|
|
|
# Including preseeding files
|
|
if Find_files config/debian-installer/*.cfg
|
|
then
|
|
cp config/debian-installer/*.cfg binary/install
|
|
fi
|
|
fi
|
|
|
|
Repack_initrd()
|
|
{
|
|
local TARGET_INITRD
|
|
local INCLUDE_PATH
|
|
TARGET_INITRD="${1}"
|
|
INCLUDE_PATH="${2}"
|
|
REPACK_TMPDIR="unpacked-initrd"
|
|
|
|
if [ -d "${INCLUDE_PATH}" ]
|
|
then
|
|
INCLUDE_PATH=$(readlink -f ${INCLUDE_PATH})
|
|
fi
|
|
|
|
# cpio does not have a "extract to directory", so we must change directory
|
|
mkdir -p ${REPACK_TMPDIR}
|
|
cd ${REPACK_TMPDIR}
|
|
|
|
gzip -d < ../${TARGET_INITRD} | cpio -i --make-directories --no-absolute-filenames
|
|
if [ ! -d "${INCLUDE_PATH}" ]
|
|
then
|
|
# Invoked the old way, just copy the preseeds
|
|
cp ../config/debian-installer/*.cfg .
|
|
else
|
|
# New way, include target directory content in the initrd
|
|
REPACK_TMPDIR_ABS="${PWD}"
|
|
cd "${INCLUDE_PATH}"
|
|
find -print0 | cpio -pumd0 --no-preserve-owner "${REPACK_TMPDIR_ABS}/"
|
|
cd "${OLDPWD}"
|
|
fi
|
|
find -print0 | cpio -H newc -o0 | gzip -9 > ../${TARGET_INITRD}
|
|
|
|
cd ..
|
|
rm -rf ${REPACK_TMPDIR}
|
|
}
|
|
|
|
# Preseed d-i by repacking the initrd in certain situations
|
|
if [ "${DI_IMAGE_TYPE}" = "netboot" ] && [ -e config/debian-installer/preseed.cfg ]
|
|
then
|
|
Repack_initrd "${DESTDIR}"/"${INITRD_DI}"
|
|
|
|
if [ -e "${DESTDIR}"/"${INITRD_GI}" ]
|
|
then
|
|
Repack_initrd "${DESTDIR}"/"${INITRD_GI}"
|
|
fi
|
|
fi
|
|
|
|
# Include content of config/includes.debian-installer if exists and not empty
|
|
if [ -d config/includes.debian-installer ] && [ -n "$(ls -A config/includes.debian-installer)" ]
|
|
then
|
|
Repack_initrd "${DESTDIR}"/"${INITRD_DI}" config/includes.debian-installer
|
|
|
|
if [ -e "${DESTDIR}"/"${INITRD_GI}" ]
|
|
then
|
|
Repack_initrd "${DESTDIR}"/"${INITRD_GI}" config/includes.debian-installer
|
|
fi
|
|
fi
|
|
|
|
# Saving cache
|
|
Save_cache cache/packages.binary
|
|
|
|
# Removing depends
|
|
Remove_package
|
|
|
|
# Creating stage file
|
|
Create_stagefile .build/binary_debian-installer
|