summaryrefslogtreecommitdiff
path: root/helpers/lh_binary_live-installer
diff options
context:
space:
mode:
Diffstat (limited to 'helpers/lh_binary_live-installer')
-rwxr-xr-xhelpers/lh_binary_live-installer333
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 000000000..8517ceb53
--- /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