diff options
Diffstat (limited to 'helpers/lh_binary_debian-installer')
| -rwxr-xr-x | helpers/lh_binary_debian-installer | 247 | 
1 files changed, 247 insertions, 0 deletions
| diff --git a/helpers/lh_binary_debian-installer b/helpers/lh_binary_debian-installer new file mode 100755 index 0000000..6d6d784 --- /dev/null +++ b/helpers/lh_binary_debian-installer @@ -0,0 +1,247 @@ +#!/bin/sh + +# lh_binary_debian-installer(1) - install debian-installer into binary +# Copyright (C) 2006-2007 Daniel Baumann <daniel@debian.org> +# +# 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 + +# Source common functions +for FUNCTION in /usr/share/live-helper/functions/*.sh +do +	. ${FUNCTION} +done + +# Set static variables +DESCRIPTION="install debian-installer into binary" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +Echo_debug "Init ${PROGRAM}" + +# Reading configuration files +Read_conffile config/common +Read_conffile config/bootstrap +Read_conffile config/chroot +Read_conffile config/binary +Read_conffile config/source +Set_defaults + +if [ "${LIVE_DEBIAN_INSTALLER}" != "enabled" ] +then +	exit 0 +fi + +Breakpoint "binary_debian-installer: Init" + +# 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 +case "${LIVE_BINARY_IMAGE}" in +	iso) +		DESTDIR="binary/install" +		DESTDIR_INSTALLER="cdrom" +		;; + +	net) +		DESTDIR="tftpboot" +		DESTDIR_INSTALLER="netboot" + +		Echo_error "Not supported yet (FIXME)" +		exit 1 +		;; + +	usb-hdd|hdd) +		DESTDIR="binary" +		DESTDIR_INSTALLER="hd-media" +		;; +esac + +# Temporary check for broken syslinux +if [ "${LIVE_BINARY_IMAGE}" = "iso" ] +then +	# Assemble multi-arch +	if [ -n "${MULTIARCH}" ] +	then +		case "${LIVE_ARCHITECTURE}" in +			amd64) +				DESTDIR="${DESTDIR}.amd" +				;; + +			i386) +				DESTDIR="${DESTDIR}.386" +				;; + +			powerpc) +				DESTDIR="${DESTDIR}.ppc" +				;; +		esac +	fi +fi + +# Downloading debian-installer +mkdir -p "${DESTDIR}" + +wget --no-clobber -O "${DESTDIR}"/vmlinuz "${LIVE_MIRROR_BUILD}"/dists/"${LIVE_DISTRIBUTION}"/main/installer-"${LIVE_ARCHITECTURE}"/current/images/"${DESTDIR_INSTALLER}"/vmlinuz +wget --no-clobber -O "${DESTDIR}"/initrd.gz "${LIVE_MIRROR_BUILD}"/dists/"${LIVE_DISTRIBUTION}"/main/installer-"${LIVE_ARCHITECTURE}"/current/images/"${DESTDIR_INSTALLER}"/initrd.gz + +# Downloading graphical-installer +if [ "${LIVE_ARCHITECTURE}" = "amd64" ] || [ "${LIVE_ARCHITECTURE}" = "i386" ] || [ "${LIVE_ARCHITECTURE}" = "powerpc" ] +then +	mkdir -p "${DESTDIR}"/gtk + +	wget --no-clobber -O "${DESTDIR}"/gtk/vmlinuz "${LIVE_MIRROR_BUILD}"/dists/"${LIVE_DISTRIBUTION}"/main/installer-"${LIVE_ARCHITECTURE}"/current/images/"${DESTDIR_INSTALLER}"/gtk/vmlinuz +	wget --no-clobber -O "${DESTDIR}"/gtk/initrd.gz "${LIVE_MIRROR_BUILD}"/dists/"${LIVE_DISTRIBUTION}"/main/installer-"${LIVE_ARCHITECTURE}"/current/images/"${DESTDIR_INSTALLER}"/gtk/initrd.gz +fi + +# Downloading udebs +mkdir -p binary/dists/"${LIVE_DISTRIBUTION}"/main/debian-installer/binary-"${LIVE_ARCHITECTURE}" +cd binary/dists/"${LIVE_DISTRIBUTION}"/main/debian-installer/binary-"${LIVE_ARCHITECTURE}" +wget "${LIVE_MIRROR_BUILD}"/dists/"${LIVE_DISTRIBUTION}"/main/debian-installer/binary-"${LIVE_ARCHITECTURE}"/Packages.gz +gunzip -c Packages.gz > Packages +cd "${OLDPWD}" + +for DISTRIBUTION in frozen stable testing unstable +do +	ln -s ${LIVE_DISTRIBUTION} binary/dists/${DISTRIBUTION} +done + +DEBS="`awk '/Filename: / { print $2 }' binary/dists/${LIVE_DISTRIBUTION}/main/debian-installer/binary-${LIVE_ARCHITECTURE}/Packages`" +UDEBS="`echo ${DEBS} | grep '.*.udeb'`" + +rm -f packages.di + +for UDEB in ${UDEBS} +do +	mkdir -p binary/`dirname ${UDEB}` +	cd binary/`dirname ${UDEB}` +	wget "${LIVE_MIRROR_BUILD}"/${UDEB} +	cd "${OLDPWD}" +done + +# Downloading debs +if [ -d cache/packages_bootstrap ] +then +	for FILE in cache/packages_bootstrap/*.deb +	do +		SOURCE="`dpkg -f ${FILE} Source`" + +		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 binary/pool/main/"${LETTER}"/"${SOURCE}" + +		# Move files +		cp "${FILE}" binary/pool/main/"${LETTER}"/"${SOURCE}" +	done +fi + +mkdir -p binary/dists/${LIVE_DISTRIBUTION}/main/binary-${LIVE_ARCHITECTURE} + +cat > binary/dists/${LIVE_DISTRIBUTION}/main/binary-${LIVE_ARCHITECTURE}/Release << EOF +Archive: ${LIVE_DISTRIBUTION} +Component: main +Origin: Debian +Label: Debian +Architecture: ${LIVE_ARCHITECTURE} +EOF + +mkdir -p cache/indices_debian-installer + +cat > cache/indices_debian-installer/archive << EOF +Dir +{ +	ArchiveDir	"binary"; +	// OverrideDir	""; +	// CacheDir	""; +	FileListDir	"cache/indices_debian-installer"; +}; + +Default +{ +	Packages::Compress	". gzip"; +	// Packages::Extension	".deb"; +	// Sources::Extensions	".dsc"; +	// Contents::Compress	"gzip"; +	// DeLinkLimit		"0"; +	// FileMode		"0644"; +}; + +TreeDefault +{ +	// MaxContentsChange +	// ContentsAge +	Directory		"dists/\$(DIST)/\$(SECTION)/binary-\$(ARCH)/"; +	Packages		"dists/\$(DIST)/\$(SECTION)/binary-\$(ARCH)/Packages"; +	InternalPrefix		"dists/\$(DIST)/\$(SECTION)/"; +	Contents		"dists/\$(DIST)/Contents-\$(ARCH)"; +	// Contents::Header +	// BinCacheDB		"cache.\$(DIST).\$(SECTION).\$(ARCH)"; +	// FileList		"filelist.\$(DIST).\$(SECTION).\$(ARCH)"; +	FileList		"filelist"; +	// BinOverride		"override.\$(DIST).\$(SECTION)"; +}; + +tree "${LIVE_DISTRIBUTION}" +{ +	Sections	"main"; +	Architectures	"${LIVE_ARCHITECTURE}"; +}; +EOF + +cd binary +find pool -name "*.deb" | sort > ../cache/indices_debian-installer/filelist +cd "${OLDPWD}" + +cat > cache/indices_debian-installer/release << EOF +APT::FTPArchive::Release::Origin	"Debian"; +APT::FTPArchive::Release::Label		"Debian"; +APT::FTPArchive::Release::Suite		"${LIVE_DISTRIBUTION}"; +APT::FTPArchive::Release::Version	"4.0"; +APT::FTPArchive::Release::Codename	"${LIVE_DISTRIBUTION}"; +APT::FTPArchive::Release::Date		"`date -R`"; +APT::FTPArchive::Release::Architectures	"${LIVE_ARCHITECTURE}"; +APT::FTPArchive::Release::Components	"main"; +EOF + +apt-ftparchive generate cache/indices_debian-installer/archive +apt-ftparchive -c cache/indices_debian-installer/release -o APT::FTPArchive::Release::Description="Last updated: `date -R`" release binary/dists/${LIVE_DISTRIBUTION} > binary/dists/${LIVE_DISTRIBUTION}/Release + +mkdir binary/.disk +echo "main" > binary/.disk/base_components +touch binary/.disk/base_installable +echo "not_complete" > binary/.disk/cd_type +#echo "Debian GNU/Linux 4.0 r0 \"Etch\" - Official i386 NETINST Binary-1 20070407-11:29" > binary/.disk/info +echo "Debian GNU/Linux ${LIVE_DISTRIBUTION} - Unofficial ${LIVE_ARCHITECTURE} NETINST Binary-1 `date +%Y%m%d-%H:%M`" > binary/.disk/info +touch binary/.disk/mkisofs + +# Creating stage file +Create_stagefile .stage/binary_debian-installer | 
