live-build/helpers/lh_binary_debian-installer

456 lines
11 KiB
Plaintext
Raw Normal View History

2007-09-23 08:04:52 +00:00
#!/bin/sh
# lh_binary_debian-installer(1) - install debian-installer into binary
2008-03-06 14:43:00 -01:00
# Copyright (C) 2006-2008 Daniel Baumann <daniel@debian.org>
2007-09-23 08:04:52 +00:00
#
# live-helper 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
2007-09-23 08:05:11 +00:00
# Including common functions
LH_BASE="${LH_BASE:-/usr/share/live-helper}"
for FUNCTION in "${LH_BASE}"/functions/*.sh
2007-09-23 08:04:52 +00:00
do
2007-09-23 08:05:11 +00:00
. "${FUNCTION}"
2007-09-23 08:04:52 +00:00
done
2007-09-23 08:05:11 +00:00
# Setting static variables
2007-09-23 08:04:52 +00:00
DESCRIPTION="install debian-installer into binary"
HELP=""
USAGE="${PROGRAM} [--force]"
Arguments "${@}"
# Reading configuration files
Read_conffile config/common
Read_conffile config/bootstrap
Read_conffile config/chroot
Read_conffile config/binary
Read_conffile config/source
2007-09-23 08:05:18 +00:00
Read_conffile "${LH_CONFIG}"
2007-09-23 08:04:52 +00:00
Set_defaults
if [ "${LH_QUIET}" = "enabled" ]
then
WGET_OPTIONS="${WGET_OPTIONS} --quiet"
fi
# Check d-i configuration
2007-09-23 08:05:17 +00:00
case "${LH_DEBIAN_INSTALLER}" in
enabled|cdrom|netinst|netboot|businesscard|live)
2007-09-23 08:05:15 +00:00
;;
2007-09-23 08:05:21 +00:00
disabled)
exit 0
;;
2007-09-23 08:05:13 +00:00
*)
2007-09-23 08:05:17 +00:00
Echo_error "debian-installer flavor ${LH_DEBIAN_INSTALLER} not supported."
2007-09-23 08:05:13 +00:00
exit 1
;;
esac
2007-09-23 08:04:52 +00:00
2007-09-23 08:05:11 +00:00
Echo_message "Begin installing debian-installer..."
2007-09-23 08:04:52 +00:00
# Requiring stage file
Require_stagefile .stage/bootstrap
# Checking stage file
Check_stagefile .stage/binary_debian-installer
# Checking lock file
Check_lockfile .lock
# Creating lock file
Create_lockfile .lock
# Setting destination directory
2007-09-23 08:05:17 +00:00
case "${LH_BINARY_IMAGES}" in
2007-09-23 08:04:52 +00:00
iso)
DESTDIR="binary/install"
;;
net)
DESTDIR="tftpboot/debian-install/${LH_ARCHITECTURE}"
2007-09-23 08:04:52 +00:00
;;
2007-09-23 08:05:11 +00:00
tar|usb-hdd)
2007-09-23 08:05:12 +00:00
DESTDIR="binary/install"
2007-09-23 08:05:09 +00:00
# Workaround for syslinux (<< 3.36) which doesn't support long file/path names
2007-09-23 08:05:17 +00:00
if [ "${LH_DISTRIBUTION}" = "etch" ] && [ "${LH_BOOTLOADER}" = "syslinux" ]
2007-09-23 08:05:09 +00:00
then
2007-09-23 08:05:12 +00:00
DESTDIR="binary"
2007-09-23 08:05:09 +00:00
fi
2007-09-23 08:04:52 +00:00
;;
esac
# Setting remote d-i directories
case "${LH_BINARY_IMAGES}" in
net)
DI_REMOTE_BASE="netboot/debian-installer/${LH_ARCHITECTURE}"
DI_REMOTE_BASE_GTK="netboot/gtk/debian-installer/${LH_ARCHITECTURE}"
DI_REMOTE_KERNEL="linux"
;;
*)
DI_REMOTE_BASE="cdrom"
DI_REMOTE_BASE_GTK="cdrom/gtk"
DI_REMOTE_KERNEL="vmlinuz"
;;
esac
2007-09-23 08:05:14 +00:00
Check_multiarchitecture
2007-09-23 08:04:52 +00:00
2007-09-23 08:05:12 +00:00
VMLINUZ_DI="vmlinuz"
INITRD_DI="initrd.gz"
DESTDIR_DI="${DESTDIR}"
VMLINUZ_GI="gtk/vmlinuz"
INITRD_GI="gtk/initrd.gz"
DESTDIR_GI="${DESTDIR}/gtk"
2007-09-23 08:04:52 +00:00
Install_file() {
local FILE="${1}"
2008-01-15 18:42:28 -01:00
local TARGET="${2}"
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
2008-01-15 18:42:28 -01:00
mkdir -p "${TARGET}"/"${LETTER}"/"${SOURCE}"
# Move files
2008-01-15 18:42:28 -01:00
cp "${FILE}" "${TARGET}"/"${LETTER}"/"${SOURCE}"
}
2007-09-23 08:05:09 +00:00
# Workaround for syslinux (<< 3.36) which doesn't support long file/path names
2007-09-23 08:05:17 +00:00
if [ "${LH_DISTRIBUTION}" = "etch" ]
2007-09-23 08:05:09 +00:00
then
2007-09-23 08:05:17 +00:00
if [ "${LH_BINARY_IMAGES}" = "tar" ] || [ "${LH_BINARY_IMAGES}" = "usb-hdd" ]
2007-09-23 08:05:09 +00:00
then
2007-09-23 08:05:12 +00:00
VMLINUZ_DI="vmlinuz.di"
INITRD_DI="initrddi.gz"
DESTDIR_DI="${DESTDIR}"
VMLINUZ_GI="vmlinuz.gi"
INITRD_GI="initrdgi.gz"
DESTDIR_GI="${DESTDIR}"
2007-09-23 08:05:09 +00:00
fi
fi
2007-09-23 08:04:52 +00:00
2007-09-23 08:05:21 +00:00
if [ "${LH_DEBIAN_INSTALLER_DAILY}" = "enabled" ]
then
# Debian Installer daily builds
case "${LH_ARCHITECTURE}" in
alpha)
URL="http://people.debian.org/~vorlon/d-i/alpha/daily/"
;;
2007-09-23 08:05:14 +00:00
2007-09-23 08:05:21 +00:00
amd64)
URL="http://people.debian.org/~aba/d-i/images/daily/"
;;
2007-09-23 08:05:14 +00:00
2007-09-23 08:05:21 +00:00
arm)
URL="http://people.debian.org/~kmuto/d-i/images/daily/"
;;
2007-09-23 08:05:14 +00:00
2007-09-23 08:05:21 +00:00
hppa)
URL="http://people.debian.org/~kyle/d-i/hppa/daily/"
;;
2007-09-23 08:05:14 +00:00
2007-09-23 08:05:21 +00:00
i386)
URL="http://people.debian.org/~joeyh/d-i/images/daily/"
;;
2007-09-23 08:05:14 +00:00
2007-09-23 08:05:21 +00:00
ia64)
URL="http://people.debian.org/~dannf/d-i/images/daily/"
;;
2007-09-23 08:05:14 +00:00
2007-09-23 08:05:21 +00:00
m68k)
URL="http://people.debian.org/~smarenka/d-i/images-m68k/daily/"
;;
2007-09-23 08:05:14 +00:00
2007-09-23 08:05:21 +00:00
mips)
URL="http://people.debian.org/~ths/d-i/mips/images/daily/"
;;
2007-09-23 08:05:14 +00:00
2007-09-23 08:05:21 +00:00
mipsel)
URL="http://people.debian.org/~ths/d-i/mipsel/images/daily/"
;;
2007-09-23 08:05:14 +00:00
2007-09-23 08:05:21 +00:00
powerpc)
URL="http://people.debian.org/~wouter/d-i/powerpc/daily/"
;;
2007-09-23 08:05:14 +00:00
2007-09-23 08:05:21 +00:00
s390)
URL="http://lophos.multibuild.org/d-i/images/daily/"
;;
2007-09-23 08:05:14 +00:00
2007-09-23 08:05:21 +00:00
sparc)
URL="http://people.debian.org/~stappers/d-i/images/daily/"
;;
2007-09-23 08:05:14 +00:00
2007-09-23 08:05:21 +00:00
*)
Echo_error "No daily-builds found for your architecture."
exit 1
;;
esac
else
URL="${LH_MIRROR_CHROOT}/dists/${LH_DISTRIBUTION}/main/installer-${LH_ARCHITECTURE}/current/images/"
2007-09-23 08:05:21 +00:00
fi
2007-09-23 08:05:14 +00:00
2007-09-23 08:05:12 +00:00
# Downloading debian-installer
mkdir -p "${DESTDIR_DI}"
wget ${WGET_OPTIONS} -O "${DESTDIR}"/"${VMLINUZ_DI}" ${URL}/${DI_REMOTE_BASE}/${DI_REMOTE_KERNEL}
wget ${WGET_OPTIONS} -O "${DESTDIR}"/"${INITRD_DI}" ${URL}/${DI_REMOTE_BASE}/initrd.gz
2007-09-23 08:05:12 +00:00
2007-09-23 08:04:52 +00:00
# Downloading graphical-installer
2007-09-23 08:05:17 +00:00
if [ "${LH_ARCHITECTURE}" = "amd64" ] || [ "${LH_ARCHITECTURE}" = "i386" ] || [ "${LH_ARCHITECTURE}" = "powerpc" ]
2007-09-23 08:04:52 +00:00
then
2007-09-23 08:05:12 +00:00
mkdir -p "${DESTDIR_GI}"
wget ${WGET_OPTIONS} -O "${DESTDIR}"/"${VMLINUZ_GI}" ${URL}/${DI_REMOTE_BASE_GTK}/${DI_REMOTE_KERNEL}
wget ${WGET_OPTIONS} -O "${DESTDIR}"/"${INITRD_GI}" ${URL}/${DI_REMOTE_BASE_GTK}/initrd.gz
2007-09-23 08:04:52 +00:00
fi
# Only download additional packages if appropriate
case "${LH_DEBIAN_INSTALLER}" in
enabled|cdrom|netinst)
case "${LH_BINARY_IMAGES}" in
net)
DI_PACKAGE_POOL="no"
;;
*)
DI_PACKAGE_POOL="yes"
;;
esac
;;
*)
DI_PACKAGE_POOL="no"
;;
esac
if [ "${DI_PACKAGE_POOL}" = "yes" ]
then
2007-09-23 08:05:13 +00:00
# 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
2007-09-23 08:04:52 +00:00
2007-09-23 08:05:17 +00:00
case "${LH_ARCHITECTURE}" in
2007-09-23 08:05:13 +00:00
amd64)
DI_PACKAGES="linux-image-2.6-amd64 lilo grub"
;;
2007-09-23 08:04:52 +00:00
2007-09-23 08:05:13 +00:00
i386)
DI_PACKAGES="linux-image-2.6-486 linux-image-2.6-686 elilo lilo grub"
;;
2007-09-23 08:04:52 +00:00
2007-09-23 08:05:13 +00:00
powerpc)
DI_PACKAGES="linux-image-2.6-powerpc linux-image-2.6-powerpc64 linux-image-2.6-powerpc-smp linux-image-2.6-prep yaboot" # FIXME bootloader?
;;
esac
DI_PACKAGES="${DI_PACKAGES} cryptsetup lvm2"
2007-09-23 08:04:52 +00:00
Chroot "apt-get ${APT_OPTIONS} -o Dir::Cache=/binary.deb --download-only install ${DI_PACKAGES}"
2007-09-23 08:05:13 +00:00
mv chroot/binary.deb ./
mv chroot/var/lib/dpkg/status.tmp chroot/var/lib/dpkg/status
if ls binary.deb/archives/*.deb > /dev/null 2>&1
then
for FILE in binary.deb/archives/*.deb
do
Install_file "${FILE}" "binary/pool/main"
done
fi
2007-09-23 08:04:52 +00:00
# Including base debian packages
if [ -d cache/packages_bootstrap ]
then
for FILE in cache/packages_bootstrap/*.deb
do
Install_file "${FILE}" "binary/pool/main"
done
else
Echo_error "E: Could not find cache/packages_bootstrap"
exit 1
fi
2007-09-23 08:04:52 +00:00
# Including local debs
if ls ../config/binary_local-debs/*_"${LH_ARCHITECTURE}".udeb > /dev/null 2>&1
then
for FILE in ../config/binary_local-debs/*_"${LH_ARCHITECTURE}".deb
do
Install_file "${FILE}" "binary/pool/main"
done
fi
if ls ../config/binary_local-debs/*_all.udeb > /dev/null 2>&1
then
for FILE in ../config/binary_local-debs/*_all.deb
do
Install_file "${FILE}" "binary/pool/main"
done
fi
2007-09-23 08:05:13 +00:00
# Generating deb indices
mkdir -p binary/dists/${LH_DISTRIBUTION}/main/binary-${LH_ARCHITECTURE}
2007-09-23 08:04:52 +00:00
cd binary
apt-ftparchive packages pool/main > dists/${LH_DISTRIBUTION}/main/binary-${LH_ARCHITECTURE}/Packages
gzip -9 -c dists/${LH_DISTRIBUTION}/main/binary-${LH_ARCHITECTURE}/Packages > dists/${LH_DISTRIBUTION}/main/binary-${LH_ARCHITECTURE}/Packages.gz
cd "${OLDPWD}"
2007-09-23 08:05:12 +00:00
# Fetching release
wget ${WGET_OPTIONS} "${LH_MIRROR_CHROOT}"/dists/"${LH_DISTRIBUTION}"/main/binary-"${LH_ARCHITECTURE}"/Release -O binary/dists/${LH_DISTRIBUTION}/main/binary-${LH_ARCHITECTURE}/Release
2007-09-23 08:04:52 +00:00
mkdir binary.udeb
cd binary.udeb
2007-09-23 08:05:12 +00:00
# Downloading udeb indices
wget ${WGET_OPTIONS} "${LH_MIRROR_CHROOT}"/dists/"${LH_DISTRIBUTION}"/main/debian-installer/binary-"${LH_ARCHITECTURE}"/Packages.gz
gunzip -c Packages.gz > Packages
2007-09-23 08:05:12 +00:00
# Sorting udebs
UDEBS="$(awk '/Filename: / { print $2 }' Packages)"
2007-09-23 08:05:12 +00:00
# Downloading udebs
for UDEB in ${UDEBS}
do
if [ -f ../cache/packages_debian-installer.udeb/"$(basename ${UDEB})" ]
then
# Copying cached udebs
cp ../cache/packages_debian-installer.udeb/"$(basename ${UDEB})" ./
else
# Downloading udebs
wget ${WGET_OPTIONS} "${LH_MIRROR_CHROOT}"/${UDEB}
fi
done
# Caching udebs
rm -rf ../cache/packages_debian-installer.udeb
mkdir -p ../cache/packages_debian-installer.udeb
cp *.udeb ../cache/packages_debian-installer.udeb
# Including local udebs
if ls ../config/binary_local-udebs/*_"${LH_ARCHITECTURE}".udeb > /dev/null 2>&1
2007-09-23 08:05:13 +00:00
then
for FILE in ../config/binary_local-udebs/*_"${LH_ARCHITECTURE}".udeb
do
Install_file "${FILE}" "pool/main"
# Prefer local udebs over downloaded udebs
rm -f "$(basename ${FILE} | awk -F_ '{ print $1 }')"_*.udeb
done
2007-09-23 08:05:13 +00:00
fi
if ls ../config/binary_local-udebs/*_all.udeb > /dev/null 2>&1
then
for FILE in ../config/binary_local-udebs/*_all.udeb
do
Install_file "${FILE}" "pool/main"
2007-09-23 08:05:12 +00:00
# Prefer local udebs over downloaded udebs
rm -f "$(basename ${FILE} | awk -F_ '{ print $1 }')"_*.udeb
done
fi
2007-09-23 08:05:13 +00:00
# Excluding udebs
grep -v "^#" "${LH_BASE}"/data/debian-cd/"${LH_DISTRIBUTION}"/udeb_exclude > exclude
grep -v "^#" "${LH_BASE}"/data/debian-cd/"${LH_DISTRIBUTION}"/exclude-udebs >> exclude
grep -v "^#" "${LH_BASE}"/data/debian-cd/"${LH_DISTRIBUTION}"/exclude-udebs-${LH_ARCHITECTURE} >> exclude
2007-09-23 08:05:12 +00:00
# Local exclude file
if [ -e ../config/binary_debian-installer/udeb_exclude ]
then
cat ../config/binary_debian-installer/udeb_exclude >> exclude
fi
2007-09-23 08:05:12 +00:00
for EXCLUDE in $(cat exclude)
do
rm -f "${EXCLUDE}"_*.udeb
done
2007-09-23 08:05:12 +00:00
# Enable live-installer
if [ "${LH_DEBIAN_INSTALLER}" = "live" ]
then
# Remove local udebs
rm -f pool/main/b/base-installer/bootstrap-base_*.udeb
# Remove d-i udebs
rm -f bootstrap-base_*.udeb
fi
2007-09-23 08:05:12 +00:00
# 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/"${LH_DISTRIBUTION}"/main/debian-installer/binary-"${LH_ARCHITECTURE}"
apt-ftparchive packages pool/main > dists/"${LH_DISTRIBUTION}"/main/debian-installer/binary-"${LH_ARCHITECTURE}"/Packages
gzip -9 -c dists/${LH_DISTRIBUTION}/main/debian-installer/binary-${LH_ARCHITECTURE}/Packages > dists/${LH_DISTRIBUTION}/main/debian-installer/binary-${LH_ARCHITECTURE}/Packages.gz
rm -f Packages* exclude
find . | cpio -dmpu "${OLDPWD}"/binary
cd "${OLDPWD}"
rm -rf binary.udeb
rm -rf binary.deb
# Generating release file
apt-ftparchive \
-o APT::FTPArchive::Release::Origin="Debian" \
-o APT::FTPArchive::Release::Label="Debian" \
-o APT::FTPArchive::Release::Suite="${LH_DISTRIBUTION}" \
-o APT::FTPArchive::Release::Version="4.0" \
-o APT::FTPArchive::Release::Codename="${LH_DISTRIBUTION}" \
-o APT::FTPArchive::Release::Date="$(date -R)" \
-o APT::FTPArchive::Release::Architectures="${LH_ARCHITECTURE}" \
-o APT::FTPArchive::Release::Components="main" \
-o APT::FTPArchive::Release::Description="Last updated: $(date -R)" \
release binary/dists/${LH_DISTRIBUTION} > binary/dists/${LH_DISTRIBUTION}/Release
# Creating dist symlinks
for DISTRIBUTION in frozen stable testing unstable
do
ln -s ${LH_DISTRIBUTION} binary/dists/${DISTRIBUTION}
done
2007-09-23 12:05:10 +00:00
if [ "${LH_BINARY_IMAGES}" != "usb-hdd" ]
2007-09-23 08:05:12 +00:00
then
ln -s . binary/debian
2007-09-23 08:05:12 +00:00
fi
2007-09-23 08:04:52 +00:00
# Including preseeding files
if [ -e config/binary_debian-installer/preseed*.cfg ]
then
cp config/binary_debian-installer/preseed*.cfg binary/install
fi
fi
2007-09-23 08:04:52 +00:00
# Creating stage file
Create_stagefile .stage/binary_debian-installer