diff options
Diffstat (limited to 'helpers/lh_binary_live-installer')
-rwxr-xr-x | helpers/lh_binary_live-installer | 333 |
1 files changed, 333 insertions, 0 deletions
diff --git a/helpers/lh_binary_live-installer b/helpers/lh_binary_live-installer new file mode 100755 index 0000000..8517ceb --- /dev/null +++ b/helpers/lh_binary_live-installer @@ -0,0 +1,333 @@ +#!/bin/sh + +# lh_binary_live-installer(1) - install live-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 + +# Including common functions +LH_BASE="${LH_BASE:-/usr/share/live-helper}" + +for FUNCTION in "${LH_BASE}"/functions/*.sh +do + . "${FUNCTION}" +done + +# Setting static variables +DESCRIPTION="install live-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 +Set_defaults + +if [ "${LIVE_LIVE_INSTALLER}" != "enabled" ] +then + exit 0 +fi + +Echo_message "Begin installing live-installer..." + +# Requiring stage file +Require_stagefile .stage/bootstrap + +# Checking stage file +Check_stagefile .stage/binary_live-installer + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +# Setting destination directory +case "${LIVE_BINARY_IMAGES}" in + iso) + DESTDIR="binary/install" + DI="cdrom" + ;; + + net) + DESTDIR="tftpboot" + DI="netboot" + + Echo_error "Not supported yet (FIXME)" + exit 1 + ;; + + tar|usb-hdd) + DESTDIR="binary/install" + DI="hd-media" + + # Workaround for syslinux (<< 3.36) which doesn't support long file/path names + if [ "${LIVE_DISTRIBUTION}" = "etch" ] && [ "${LIVE_BOOTLOADER}" = "syslinux" ] + then + DESTDIR="binary" + fi + ;; +esac + +# Temporary check for broken syslinux +if [ "${LIVE_BINARY_IMAGES}" = "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 + +VMLINUZ_DI="vmlinuz" +INITRD_DI="initrd.gz" +DESTDIR_DI="${DESTDIR}" + +VMLINUZ_GI="gtk/vmlinuz" +INITRD_GI="gtk/initrd.gz" +DESTDIR_GI="${DESTDIR}/gtk" + +# Workaround for syslinux (<< 3.36) which doesn't support long file/path names +if [ "${LIVE_DISTRIBUTION}" = "etch" ] +then + if [ "${LIVE_BINARY_IMAGES}" = "tar" ] || [ "${LIVE_BINARY_IMAGES}" = "usb-hdd" ] + then + VMLINUZ_DI="vmlinuz.di" + INITRD_DI="initrddi.gz" + DESTDIR_DI="${DESTDIR}" + + VMLINUZ_GI="vmlinuz.gi" + INITRD_GI="initrdgi.gz" + DESTDIR_GI="${DESTDIR}" + fi +fi + +# Downloading debian-installer +mkdir -p "${DESTDIR_DI}" +wget --no-clobber -O "${DESTDIR}"/"${VMLINUZ_DI}" "${LIVE_MIRROR_BOOTSTRAP}"/dists/"${LIVE_DISTRIBUTION}"/main/installer-"${LIVE_ARCHITECTURE}"/current/images/"${DI}"/vmlinuz +wget --no-clobber -O "${DESTDIR}"/"${INITRD_DI}" "${LIVE_MIRROR_BOOTSTRAP}"/dists/"${LIVE_DISTRIBUTION}"/main/installer-"${LIVE_ARCHITECTURE}"/current/images/"${DI}"/initrd.gz + +# Downloading graphical-installer +if [ "${LIVE_ARCHITECTURE}" = "amd64" ] || [ "${LIVE_ARCHITECTURE}" = "i386" ] || [ "${LIVE_ARCHITECTURE}" = "powerpc" ] +then + mkdir -p "${DESTDIR_GI}" + wget --no-clobber -O "${DESTDIR}"/"${VMLINUZ_GI}" "${LIVE_MIRROR_BOOTSTRAP}"/dists/"${LIVE_DISTRIBUTION}"/main/installer-"${LIVE_ARCHITECTURE}"/current/images/"${DI}"/gtk/vmlinuz + wget --no-clobber -O "${DESTDIR}"/"${INITRD_GI}" "${LIVE_MIRROR_BOOTSTRAP}"/dists/"${LIVE_DISTRIBUTION}"/main/installer-"${LIVE_ARCHITECTURE}"/current/images/"${DI}"/gtk/initrd.gz +fi + +# 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 "${LIVE_ARCHITECTURE}" in + amd64) + DI_PACKAGES="linux-image-2.6-amd64 lilo grub" + ;; + + i386) + DI_PACKAGES="linux-image-2.6-486 linux-image-2.6-686 lilo grub" + ;; + + 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 + +Chroot "apt-get -o Dir::Cache=/binary.deb --download-only install --yes ${DI_PACKAGES}" +mv chroot/binary.deb ./ +mv chroot/var/lib/dpkg/status.tmp chroot/var/lib/dpkg/status + +# Including base debian packages +if [ -d cache/packages_bootstrap ] +then + for FILE in cache/packages_bootstrap/*.deb binary.deb/archives/*.deb + do + 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 binary/pool/main/"${LETTER}"/"${SOURCE}" + + # Move files + cp "${FILE}" binary/pool/main/"${LETTER}"/"${SOURCE}" + done +fi + +# Generating deb indices +mkdir -p binary/dists/${LIVE_DISTRIBUTION}/main/binary-${LIVE_ARCHITECTURE} + +cd binary +apt-ftparchive packages pool/main > dists/${LIVE_DISTRIBUTION}/main/binary-${LIVE_ARCHITECTURE}/Packages +gzip -9 -c dists/${LIVE_DISTRIBUTION}/main/binary-${LIVE_ARCHITECTURE}/Packages > dists/${LIVE_DISTRIBUTION}/main/binary-${LIVE_ARCHITECTURE}/Packages.gz +#apt-ftparchive sources pool/main > dists/${LIVE_DISTRIBUTION}/main/source/Sources +#gzip -9 -c dists/${LIVE_DISTRIBUTION}/main/source/Sources > dists/${LIVE_DISTRIBUTION}/main/source/Sources +cd "${OLDPWD}" + +# Fetching release +wget http://"${LIVE_MIRROR_BOOTSTRAP}"/dists/"${LIVE_DISTRIBUTION}"/main/binary-"${LIVE_ARCHITECTURE}"/Release -O binary/dists/${LIVE_DISTRIBUTION}/main/binary-${LIVE_ARCHITECTURE}/Release + +#cat > binary/dists/${LIVE_DISTRIBUTION}/main/source/Release << EOF +#Archive: stable +#Version: 4.0r0 +#Component: main +#Origin: Debian +#Label: Debian +#Architecture: source +#EOF + +mkdir binary.udeb +cd binary.udeb + +# Downloading udeb indices +wget "${LIVE_MIRROR_BOOTSTRAP}"/dists/"${LIVE_DISTRIBUTION}"/main/debian-installer/binary-"${LIVE_ARCHITECTURE}"/Packages.gz +gunzip -c Packages.gz > Packages + +# Sorting udebs +UDEBS="`awk '/Filename: / { print $2 }' Packages`" + +# Downloading udebs +for UDEB in ${UDEBS} +do + wget "${LIVE_MIRROR_BOOTSTRAP}"/${UDEB} +done + +# Including local udebs +if ls ../config/binary_local-udebs/* &> /dev/null +then + for FILE in ../config/binary_local-udebs/*.udeb + do + 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 pool/main/"${LETTER}"/"${SOURCE}" + + # Copy files + cp "${FILE}" pool/main/"${LETTER}"/"${SOURCE}" + + # Prefere local udebs over downloaded udebs + rm -f "`basename ${FILE} | awk -F_ '{ print $1 }'`"_*.udeb + done +fi + +# Excluding udebs +grep -v "^#" ${LH_BASE:-/usr/share/live-helper}/data/debian-cd/"${LIVE_DISTRIBUTION}"/udeb_exclude > exclude +grep -v "^#" ${LH_BASE:-/usr/share/live-helper}/data/debian-cd/"${LIVE_DISTRIBUTION}"/exclude-udebs > exclude +grep -v "^#" ${LH_BASE:-/usr/share/live-helper}/data/debian-cd/"${LIVE_DISTRIBUTION}"/exclude-udebs-${LIVE_ARCHITECTURE} >> exclude + +for EXCLUDE in `cat exclude` +do + rm -f "${EXCLUDE}"_*.udeb +done + +# 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/"${LIVE_DISTRIBUTION}"/main/debian-installer/binary-"${LIVE_ARCHITECTURE}" +apt-ftparchive packages pool/main > dists/"${LIVE_DISTRIBUTION}"/main/debian-installer/binary-"${LIVE_ARCHITECTURE}"/Packages +gzip -9 -c dists/${LIVE_DISTRIBUTION}/main/debian-installer/binary-${LIVE_ARCHITECTURE}/Packages > dists/${LIVE_DISTRIBUTION}/main/debian-installer/binary-${LIVE_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="${LIVE_DISTRIBUTION}" \ + -o APT::FTPArchive::Release::Version="4.0" \ + -o APT::FTPArchive::Release::Codename="${LIVE_DISTRIBUTION}" \ + -o APT::FTPArchive::Release::Date="`date -R`" \ + -o APT::FTPArchive::Release::Architectures="${LIVE_ARCHITECTURE}" \ + -o APT::FTPArchive::Release::Components="main" \ + -o APT::FTPArchive::Release::Description="Last updated: `date -R`" \ +release binary/dists/${LIVE_DISTRIBUTION} > binary/dists/${LIVE_DISTRIBUTION}/Release + +# Creating dist symlinks +for DISTRIBUTION in frozen stable testing unstable +do + ln -s ${LIVE_DISTRIBUTION} binary/dists/${DISTRIBUTION} +done + +ln -s . binary/debian + +# Creating disk info +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 ${LIVE_DISTRIBUTION} - Unofficial ${LIVE_ARCHITECTURE} LIVE Binary `date +%Y%m%d-%H:%M`" > binary/.disk/info +touch binary/.disk/mkisofs +cat > binary/.disk/udeb_include << EOF +netcfg +ethdetect +pcmcia-cs-udeb +pcmciautils-udeb +wireless-tools-udeb +live-installer +EOF + +# Creating stage file +Create_stagefile .stage/binary_debian-installer |