#!/bin/sh # lh_binary_live-installer(1) - install live-installer into binary # Copyright (C) 2006-2007 Daniel Baumann # # 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