#!/bin/sh # make-live(1) - utility to build Debian Live systems # Copyright (C) 2006-2007 Daniel Baumann # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # # On Debian systems, the complete text of the GNU General Public License # can be found in /usr/share/common-licenses/GPL file. set -e # Source common functions for FUNCTION in /usr/share/live-helper/functions/*.sh do . ${FUNCTION} done # Set static variables PROGRAM="`basename ${0}`" DESCRIPTION="utility to build Debian Live systems" USAGE="${PROGRAM} [config] [--mode MODE] [--config CONFIG] [--apt apt|aptitude] [--apt-ftpproxy URL] [--apt-httpproxy URL] [--binary-indices enabled|disabled] [--apt-pdiffs enabled|disabled] [--apt-recommends enabled|disabled] [--apt-secure enabled|disabled] [--bootstrap cdebootstrap|deboostrap] [--cache enabled|disabled] [--debconf-frontend dialog|readline|noninteractive] [--debconf-priority low|medium|high|critical] [--debconf-nowarnings yes|no] [--genisoimage genisoimage|mkisofs] [--losetup losetup|losetup.org] [--tasksel aptitude|tasksel] [-r|--root DIRECTORY] [-a|--architecture ARCHITECTURE] [-d|--distribution stable|testing|unstable|etch|lenny|sid] [--distribution-config DIRECTORY] [-f|--bootstrap-flavour minimal|standard] [-m|--mirror-bootstrap URL] [--mirror-bootstrap-security URL] [--mirror-binary URL] [--mirror-binary-security URL] [--sections SECTION|\"SECTIONS\"] [--interactive shell|x11|xnest] [-k|--linux-flavour FLAVOUR] [--linux-packages PACKAGE|\"PACKAGES\"] [--keyring-packages PACKAGE|\"PACKAGES\"] [--hooks \"COMMAND\"|\"COMMANDS\"] [-l|--language LANGUAGE] [--packages PACKAGE|\"PACKAGES\"] [-p|--packages-lists LIST|\"LISTS\"] [--tasks TASK|\"TASKS\"] [--security enabled|disabled] [--symlinks enabled|disabled] [--sysvinit enabled|disabled] [--bootappend BOOT_PARAMETER|\"BOOT_PARAMETERS\"] [-e|--encryption ALGORITHM] [--username NAME] [--hostname NAME] [--chroot-filesystem ext2|plain|squashfs] [--memtest memtest86|memtest86+] [--iso-volume STRING] [--net-server HOSTNAME|IP] [--net-path DIRECTORY] [--source enabled|disabled] [--bootloader grub|syslinux] [--grub-splash FILE] [--syslinux-splash FILE] [-b|--binary-images hdd|iso|usb-hdd|net] [-s|--source-images generic|hdd|iso|usb-hdd|net] [--includes PATH] [--templates PATH] [--breakpoints] [--debug] [--force] [--quiet] [--verbose] [--root-command sudo]" HELP="Lists: gnome, gnome-core, gnome-desktop, gnome-full, gnome-junior, gnustep, kde, kde-core, kde-desktop, kde-extra, kde-full, kde-junior, mini, minimal, minimal-net, rescue, standard, standard-x11, xfce, xfce-desktop, xfce-junior" Local_arguments () { ARGUMENTS="`getopt --longoptions mode:,config:,apt:,apt-ftpproxy:,apt-httpproxy:,binary-indices:,apt-pdiffs:,apt-recommends:,apt-secure:,bootstrap:,cache:,debconf-frontend:,debconf-priority:,debconf-nowarnings:,genisoimage:,losetup:,tasksel:,root:,architecture:,distribution:,distribution-config:,flavour:,mirror-bootstrap:,mirror-bootstrap-security:,mirror-binary:,mirror-binary-security:,sections:,interactive:,kernel:,kernel-packages:,keyring-packages:,hooks:,language:,packages:,packages-lists:,tasks:,security:,symlinks:,sysvinit:,bootappend:,encryption:,username:,hostname:,chroot-filesystem:,memtest:,iso-volume:,server-address:,server-path:,source:,bootloader:,grub-splash:,syslinux-splash:,binary-images:,binary-source:,includes:,templates:,help,usage,version,force,breakpoints,debug,quiet,verbose,root-command:,initramfs: --name=${PROGRAM} --options r:a:d:f:m:k:l:p:e:b:s:huv --shell sh -- "${@}"`" if [ "${?}" != "0" ] then echo "Terminating." >&2 exit 1 fi if [ "${1}" = "config" ] then CONFIG="true" fi eval set -- "${ARGUMENTS}" while true do case "${1}" in # common --mode) LH_MODE="${2}"; shift 2 ;; --config) LH_CONFIG="${2}"; shift 2 ;; --apt) LH_APT="${2}"; shift 2 ;; --apt-ftpproxy) LH_APT_FTPPROXY="${2}"; shift 2 ;; --apt-httpproxy) LH_APT_HTTPPROXY="${2}"; shift 2 ;; --binary-indices) LH_BINARY_INDICES="${2}"; shift 2 ;; --apt-pdiffs) LH_APT_PDIFFS="${2}"; shift 2 ;; --apt-recommends) LH_APT_RECOMMENDS="${2}"; shift 2 ;; --apt-secure) LH_APT_SECURE="${2}"; shift 2 ;; --bootstrap) LH_BOOTSTRAP="${2}"; shift 2 ;; --cache) LH_CACHE="${2}"; shift 2 ;; --debconf-frontend) LH_DEBCONF_FRONTEND="${2}"; shift 2 ;; --debconf-priority) LH_DEBCONF_PRIORITY="${2}"; shift 2 ;; --debconf-nowarnings) LH_DEBCONF_NOWARNINGS="${2}"; shift 2 ;; --genisoimage) LH_GENISOIMAGE="${2}"; shift 2 ;; --losetup) LH_LOSETUP="${2}"; shift 2 ;; --tasksel) LH_TASKSEL="${2}"; shift 2 ;; -r|--root) LIVE_ROOT="${2}"; shift 2 ;; --root-command) LIVE_ROOT_COMMAND="${2}"; shift 2 ;; # bootstrap -a|--architecture) LIVE_ARCHITECTURE="${2}"; shift 2 ;; -d|--distribution) LIVE_DISTRIBUTION="${2}"; shift 2 export LIVE_DISTRIBUTION ;; --distribution-config) LIVE_DISTRIBUTION_CONFIG="${2}"; shift 2 ;; -f|--bootstrap-flavour) LIVE_BOOTSTRAP_FLAVOUR="${2}"; shift 2 ;; -m|--mirror-bootstrap) LIVE_MIRROR_BOOTSTRAP="${2}"; shift 2 ;; --mirror-bootstrap-security) LIVE_MIRROR_BOOTSTRAP_SECURITY="${2}"; shift 2 ;; --mirror-binary) LIVE_MIRROR_BINARY="${2}"; shift 2 ;; --mirror-binary-security) LIVE_MIRROR_BINARY_SECURITY="${2}"; shift 2 ;; --sections) LIVE_SECTIONS="${2}"; shift 2 ;; # chroot --interactive) LIVE_INTERACTIVE="${2}"; shift 2 ;; --initramfs) LH_INITRAMFS="${2}"; shift 2 ;; -k|--linux-flavours) LIVE_LINUX_FLAVOURS="${2}"; shift 2 ;; --linux-packages) LIVE_LINUX_PACKAGES="${2}"; shift 2 ;; --keyring-packages) LIVE_KEYRING_PACKAGS="${2}"; shift 2 ;; --hooks) LIVE_HOOKS="${2}"; shift 2 ;; -l|--language) LIVE_LANGUAGE="${2}"; shift 2 ;; --packages) LIVE_PACKAGES="${2}"; shift 2 ;; -p|--packages-lists) LIVE_PACKAGES_LISTS="${2}"; shift 2 ;; --tasks) LIVE_TASKS="${2}"; shift 2 ;; --security) LIVE_SECURITY="${2}"; shift 2 ;; --symlinks) LIVE_SYMLINKS="${2}"; shift 2 ;; --sysvinit) LIVE_SYSVINIT="${2}"; shift 2 ;; # image --bootappend) LIVE_BOOTAPPEND="${2}"; shift 2 ;; -e|--encryption) LIVE_ENCRYPTION="${2}"; shift 2 ;; --username) LIVE_USERNAME="${2}"; shift 2 ;; --hostname) LIVE_HOSTNAME="${2}"; shift 2 ;; --chroot-filesystem) LIVE_CHROOT_FILESYSTEM="${2}"; shift 2 ;; --memtest) LIVE_MEMTEST="${2}"; shift 2 ;; --iso-volume) LIVE_ISO_VOLUME="${2}"; shift 2 ;; --net-server) LIVE_NET_SERVER="${2}"; shift 2 ;; --net-path) LIVE_NET_PATH="${2}"; shift 2 ;; --source) LIVE_SOURCE="${2}"; shift 2 ;; --bootloader) LIVE_BOOTLOADER="${2}"; shift 2 ;; --grub-splash) LIVE_GRUB_SPLASH="${2}"; shift 2 ;; --syslinux-splash) LIVE_SYSLINUX_SPLASH="${2}"; shift 2 ;; -b|--binary-images) LIVE_BINARY_IMAGES="${2}"; shift 2 ;; -s|--source-images) LIVE_SOURCE_IMAGES="${2}"; shift 2 ;; --includes) LIVE_INCLUDES="${2}"; shift 2 ;; --templates) LIVE_TEMPLATES="${2}"; shift 2 ;; # other -h|--help) Help; shift ;; -u|--usage) Usage; shift ;; -v|--version) Version; shift ;; --breakpoints) LH_BREAKPOINTS="enabled"; shift ;; --debug) LH_DEBUG="enabled"; shift ;; --force) LH_FORCE="enabled"; shift ;; --quiet) LH_QUIET="enabled"; shift ;; --verbose) LH_VERBOSE="enabled"; shift ;; --) shift; break ;; *) echo "Internal error." exit 1 ;; esac done } Main () { Local_arguments "${@}" Set_defaults if [ -z "${ROOT}" ] then ROOT="${LIVE_ROOT}" fi # Source existing configuration Read_conffile "${ROOT}"/config/common Read_conffile "${ROOT}"/config/bootstrap Read_conffile "${ROOT}"/config/chroot Read_conffile "${ROOT}"/config/image Local_arguments "${@}" # Configuring (this is really shit!) LH_MODE="${LH_MODE}" LH_CONFIG="${LH_CONFIG}" LH_APT="${LH_APT}" LH_APT_FTPPROXY="${LH_APT_FTPPROXY}" LH_APT_HTTPPROXY="${LH_APT_HTTPPROXY}" LH_BINARY_INDICES="${LH_BINARY_INDICES}" LH_APT_PDIFFS="${LH_APT_PDIFFS}" LH_APT_RECOMMENDS="${LH_APT_RECOMMENDS}" LH_APT_SECURE="${LH_APT_SECURE}" LH_BOOTSTRAP="${LH_BOOTSTRAP}" LH_CACHE="${LH_CACHE}" LH_DEBCONF_FRONTEND="${LH_DEBCONF_FRONTEND}" LH_DEBCONF_PRIORITY="${LH_DEBCONF_PRIORITY}" LH_DEBCONF_NOWARNINGS="${LH_DEBCONF_NOWARNINGS}" LH_GENISOIMAGE="${LH_GENISOIMAGE}" LH_LOSETUP="${LH_LOSETUP}" LH_TASKSEL="${LH_TASKSEL}" LIVE_ROOT="${LIVE_ROOT}" LIVE_ARCHITECTURE="${LIVE_ARCHITECTURE}" LIVE_DISTRIBUTION="${LIVE_DISTRIBUTION}" LIVE_DISTRIBUTION_CONFIG="${LIVE_DISTRIBUTION_CONFIG}" LIVE_BOOTSTRAP_FLAVOUR="${LIVE_BOOTSTRAP_FLAVOUR}" LIVE_MIRROR_BOOTSTRAP="${LIVE_MIRROR_BOOTSTRAP}" LIVE_MIRROR_BOOTSTRAP_SECURITY="${LIVE_MIRROR_BOOTSTRAP_SECURITY}" LIVE_MIRROR_BINARY="${LIVE_MIRROR_BINARY}" LIVE_MIRROR_BINARY_SECURITY="${LIVE_MIRROR_BINARY_SECURITY}" LIVE_SECTIONS="${LIVE_SECTIONS}" LIVE_INTERACTIVE="${LIVE_INTERACTIVE}" LIVE_LINUX_FLAVOURS="${LIVE_LINUX_FLAVOURS}" LIVE_LINUX_PACKAGES="${LIVE_LINUX_PACKAGES}" LIVE_KEYRING_PACKAGES="${LIVE_KEYRING_PACKAGES}" LIVE_HOOKS="${LIVE_HOOKS}" LIVE_LANGUAGE="${LIVE_LANGUAGE}" LIVE_PACKAGES="${LIVE_PACKAGES}" LIVE_PACKAGES_LISTS="${LIVE_PACKAGES_LISTS}" LIVE_TASKS="${LIVE_TASKS}" LIVE_SECURITY="${LIVE_SECURITY}" LIVE_SYMLINKS="${LIVE_SYMLINKS}" LIVE_SYSVINIT="${LIVE_SYSVINIT}" LIVE_BOOTAPPEND="${LIVE_BOOTAPPEND}" LIVE_ENCRYPTION="${LIVE_ENCRYPTION}" LIVE_USERNAME="${LIVE_USERNAME}" LIVE_HOSTNAME="${LIVE_HOSTNAME}" LIVE_CHROOT_FILESYSTEM="${LIVE_CHROOT_FILESYSTEM}" LIVE_MEMTEST="${LIVE_MEMTEST}" LIVE_ISO_VOLUME="${LIVE_ISO_VOLUME}" LIVE_NET_SERVER="${LIVE_NET_SERVER}" LIVE_NET_PATH="${LIVE_NET_PATH}" LIVE_SOURCE="${LIVE_SOURCE}" LIVE_BOOTLOADER="${LIVE_BOOTLOADER}" LIVE_GRUB_SPLASH="${LIVE_GRUB_SPLASH}" LIVE_SYSLINUX_SPLASH="${LIVE_SYSLINUX_SPLASH}" LIVE_BINARY_IMAGES="${LIVE_BINARY_IMAGES}" LIVE_SOURCE_IMAGES="${LIVE_SOURCE_IMAGES}" LIVE_INCLUDES="${LIVE_INCLUDES}" LIVE_TEMPLATES="${LIVE_TEMPLATES}" LH_ROOT_COMMAND="${LH_ROOT_COMMAND}" LH_INITRAMFS="${LH_INITRAMFS}" lh_config newconfig if [ "${LH_BREAKPOINTS}" = "enabled" ] then OPTIONS="${OPTIONS} --breakpoints" fi if [ "${LH_DEBUG}" = "enabled" ] then OPTIONS="${OPTIONS} --debug" fi if [ "${LH_FORCE}" = "enabled" ] then OPTIONS="${OPTIONS} --force" fi if [ "${LH_QUIET}" = "enabled" ] then OPTIONS="${OPTIONS} --quiet" fi if [ "${LH_VERBOSE}" = "enabled" ] then OPTIONS="${OPTIONS} --verbose" fi # Building if [ -z "${CONFIG}" ] then cd "${LIVE_ROOT}" && lh_build "${OPTIONS}" fi } trap "if [ -f ${ROOT}/chroot/proc/version ]; then umount ${ROOT}/chroot/proc; fi; \ if [ -f ${ROOT}/chroot/sys/kernel ]; then umount ${ROOT}/chroot/sys; fi; exit" \ 0 1 2 3 9 15 Main "${@}"