diff options
Diffstat (limited to 'system-build/scripts')
69 files changed, 11281 insertions, 0 deletions
diff --git a/system-build/scripts/build.sh b/system-build/scripts/build.sh new file mode 100755 index 0000000..abeb29c --- /dev/null +++ b/system-build/scripts/build.sh @@ -0,0 +1,45 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## 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 3 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, see <http://www.gnu.org/licenses/>. +## +## The complete text of the GNU General Public License +## can be found in /usr/share/common-licenses/GPL-3 file. + + +set -e + +if [ -e local/live-build ] +then + LIVE_BUILD="${LIVE_BUILD:-${PWD}/local/live-build}" + export LIVE_BUILD +fi + +for _DIRECTORY in "${LIVE_BUILD}/functions" /usr/share/live/build/functions +do + if [ -e "${_DIRECTORY}" ] + then + for _FILE in "${_DIRECTORY}"/*.sh + do + if [ -e "${_FILE}" ] + then + . "${_FILE}" + fi + done + + break + fi +done diff --git a/system-build/scripts/build/binary b/system-build/scripts/build/binary new file mode 100755 index 0000000..551431d --- /dev/null +++ b/system-build/scripts/build/binary @@ -0,0 +1,106 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Automatically populating config tree +if [ -x auto/config ] && [ ! -e .build/config ] +then + Echo_message "Automatically populating config tree." + lb config +fi + +# Setting static variables +DESCRIPTION="$(Echo 'build binary images')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +# Setup cleanup function +Setup_cleanup + +# Preparing root filesystem +lb binary_chroot ${@} + +if [ "${LB_BUILD_WITH_CHROOT}" = "true" ] +then + # Configuring chroot + lb chroot_devpts install ${@} + lb chroot_proc install ${@} + lb chroot_selinuxfs install ${@} + lb chroot_sysfs install ${@} + lb chroot_hosts install ${@} + lb chroot_resolv install ${@} + lb chroot_hostname install ${@} + lb chroot_sysv-rc install ${@} + lb chroot_apt install-binary ${@} + lb chroot_archives chroot install ${@} +fi + +# Building root filesystem +lb binary_rootfs ${@} +lb binary_manifest ${@} + +# Prepare images +lb binary_package-lists ${@} +lb binary_linux-image ${@} +lb binary_memtest ${@} +lb binary_grub-legacy ${@} +lb binary_grub-pc ${@} +lb binary_loopback_cfg ${@} +lb binary_syslinux ${@} +lb binary_disk ${@} +lb binary_loadlin ${@} +lb binary_win32-loader ${@} +lb binary_includes ${@} +lb binary_hooks ${@} +lb binary_checksums ${@} + +if [ "${LB_BUILD_WITH_CHROOT}" != "true" ] +then + lb chroot_devpts install ${@} + lb chroot_proc install ${@} + lb chroot_selinuxfs install ${@} + lb chroot_sysfs install ${@} +fi + +# Building images +lb binary_iso ${@} +lb binary_netboot ${@} +lb binary_tar ${@} +lb binary_hdd ${@} + +lb binary_zsync ${@} + +if [ "${LB_BUILD_WITH_CHROOT}" = "true" ] +then + # Deconfiguring chroot + rm -f .build/chroot_archives + lb chroot_apt remove ${@} + lb chroot_hostname remove ${@} + lb chroot_resolv remove ${@} + lb chroot_hosts remove ${@} + lb chroot_sysv-rc remove ${@} + lb chroot_dpkg remove ${@} + lb chroot_debianchroot remove ${@} +fi + +lb chroot_sysfs remove ${@} +lb chroot_selinuxfs remove ${@} +lb chroot_proc remove ${@} +lb chroot_devpts remove ${@} diff --git a/system-build/scripts/build/binary_checksums b/system-build/scripts/build/binary_checksums new file mode 100755 index 0000000..a64334e --- /dev/null +++ b/system-build/scripts/build/binary_checksums @@ -0,0 +1,96 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'create binary checksums')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +if [ "${LB_CHECKSUMS}" = "none" ] +then + exit 0 +fi + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +# Checking stage file +Check_stagefile .build/binary_checksums + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +for CHECKSUM in ${LB_CHECKSUMS} +do + case "${LB_MODE}" in + progress-linux) + CHECKSUMS="$(echo ${CHECKSUM} | tr [a-z] [A-Z])SUMS" + ;; + + *) + CHECKSUMS="${CHECKSUM}sum.txt" + ;; + esac + + Echo_message "Begin creating binary ${CHECKSUMS}..." + + # Remove old checksums + if [ -f binary/${CHECKSUMS} ] + then + rm -f binary/${CHECKSUMS} + fi + + # Calculating checksums + cd binary + find . -type f \ + \! -path './isolinux/isolinux.bin' \ + \! -path './boot/boot.bin' \ + \! -path './boot/grub/stage2_eltorito' \ + \! -path './*SUMS' \ + \! -path './*sum.txt' \ + -print0 | sort -z | xargs -0 ${CHECKSUM}sum > ../${CHECKSUMS} + +cat > ${CHECKSUMS} << EOF +## This file contains the list of ${CHECKSUM} checksums of all files on this +## medium. +## +## You can verify them automatically with the 'verify-checksums' boot parameter, +## or, manually with: '${CHECKSUM}sum -c ${CHECKSUMS}'. +## +## +EOF + + cat ../${CHECKSUMS} >> ${CHECKSUMS} + rm -f ../${CHECKSUMS} + + cd "${OLDPWD}" +done + +# File list +cd binary +find . | sed -e 's|^.||g' | grep "^/" | sort > ../${LIVE_IMAGE_NAME}-${LB_ARCHITECTURES}.contents +cd "${OLDPWD}" + +# Creating stage file +Create_stagefile .build/binary_checksums diff --git a/system-build/scripts/build/binary_chroot b/system-build/scripts/build/binary_chroot new file mode 100755 index 0000000..d809b7f --- /dev/null +++ b/system-build/scripts/build/binary_chroot @@ -0,0 +1,101 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'copy chroot into chroot')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +Echo_message "Begin copying chroot..." + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +# Checking stage file +Check_stagefile .build/binary_chroot + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +# Normally, virtual filesystems are not mounted here, but people tend to be lazy +if [ -f chroot/proc/version ] +then + umount chroot/proc +fi + +if [ -d chroot/sys/kernel ] +then + umount chroot/sys +fi + +if [ "${LB_BUILD_WITH_CHROOT}" = "false" ] +then + exit 0 +fi + +if [ "${LB_CACHE}" = "true" ] && Find_files cache/binary_rootfs/filesystem* +then + exit 0 +fi + +Echo_message "This may take a while." + +# Removing old chroot +rm -rf chroot/chroot +rm -rf chroot.tmp + +# Copying new chroot +if [ -d cache/bootstrap ] && [ "${LB_CHROOT_FILESYSTEM}" != "none" ] && [ "${LB_CHROOT_FILESYSTEM}" != "plain" ] +then + mv chroot chroot.tmp + cp -a cache/bootstrap chroot + touch chroot/chroot.cache +else + cp -a chroot chroot.tmp +fi + +mv chroot.tmp chroot/chroot + +# Handling chroot excludes +if [ -f config/rootfs/excludes ] && [ "${LB_CHROOT_FILESYSTEM}" != "squashfs" ] +then + case "${LB_BUILD_WITH_CHROOT}" in + true) + cp config/rootfs/excludes chroot/chroot/excludes + # Not using Chroot() here because we want explicitly /bin/bash (for the time being) + chroot chroot/chroot /usr/bin/env -i xargs --arg-file=/excludes -I FILE bash -c 'rm -rf FILE' + rm -f chroot/chroot/excludes + ;; + + false) + cp config/rootfs/excludes chroot/excludes + # Not using Chroot() here because we want explicitly /bin/bash (for the time being) + chroot chroot /usr/bin/env -i xargs --arg-file=/excludes -I FILE bash -c 'rm -rf FILE' + rm -f chroot/excludes + ;; + esac +fi + +# Creating stage file +Create_stagefile .build/binary_chroot diff --git a/system-build/scripts/build/binary_disk b/system-build/scripts/build/binary_disk new file mode 100755 index 0000000..7ddcc35 --- /dev/null +++ b/system-build/scripts/build/binary_disk @@ -0,0 +1,175 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'install disk information into binary')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +case "${LIVE_IMAGE_TYPE}" in + iso*|hdd*) + ;; + *) + exit 0 + ;; +esac + +Echo_message "Begin installing disk information..." + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +# Checking stage file +Check_stagefile .build/binary_disk + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +mkdir -p binary/.disk + +ARCHITECTURE="$(echo ${LB_ARCHITECTURES} | sed -e 's| |/|g')" +DISTRIBUTION="$(echo ${LB_DISTRIBUTION} | cut -b 1 | tr '[a-z]' '[A-Z]')" +DISTRIBUTION="${DISTRIBUTION}$(echo ${LB_DISTRIBUTION} | cut -b 2-)" + +if [ -e chroot/etc/os-release ] +then + VERSION="$(. chroot/etc/os-release && echo ${VERSION_ID})" +fi + +VERSION="${VERSION:-none}" + +case "${LB_MODE}" in + debian) + TITLE="Debian GNU/Linux" + STRING="Official Snapshot ${ARCHITECTURE}" + TRACE="project/trace/ftp-master.debian.org" + ;; + + progress-linux) + TITLE="Progress Linux" + STRING="${VERSION} (${DISTRIBUTION}) - ${ARCHITECTURE}" + TRACE="project/trace/archive-master.progress-linux.org" + ;; + + *) + TITLE="Debian GNU/Linux" + STRING="Snapshot ${ARCHITECTURE}" + TRACE="" + ;; +esac + +if [ -n "${TRACE}" ] +then + case "${LB_DERIVATIVE}" in + true) + echo "$(echo ${LB_PARENT_MIRROR_BOOTSTRAP} | awk -F:// '{ print $2 }'): $(wget -q ${LB_PARENT_MIRROR_BOOTSTRAP}/${TRACE} -O - | head -n 1)" \ + > binary/.disk/archive_trace + + echo "$(echo ${LB_MIRROR_BOOTSTRAP} | awk -F:// '{ print $2 }'): $(wget -q ${LB_MIRROR_BOOTSTRAP}/${TRACE} -O - | head -n 1)" \ + >> binary/.disk/archive_trace + ;; + + false) + echo "$(wget -q ${LB_PARENT_MIRROR_BOOTSTRAP}/${TRACE} -O - | head -n 1)" \ + > binary/.disk/archive_trace + ;; + esac +fi + +case "${LB_DEBIAN_INSTALLER}" in + cdrom) + echo "main" > binary/.disk/base_components + + touch binary/.disk/base_installable + + echo "full_cd" > binary/.disk/cd_type + + echo "${TITLE} ${VERSION} \"${DISTRIBUTION}\" - ${STRING} LIVE/CD Binary $(date +%Y%m%d-%H:%M)" > binary/.disk/info + + for LOCATION in "${LIVE_BUILD}/data/debian-cd" /usr/share/live/build/data/debian-cd + do + if [ -e "${LOCATION}" ] + then + cp "${LOCATION}/${LB_PARENT_DISTRIBUTION}/${LB_ARCHITECTURES}_udeb_include" binary/.disk/udeb_include + + continue + fi + done + ;; + + true|netinst|live) + echo "main" > binary/.disk/base_components + + touch binary/.disk/base_installable + + if [ "${LB_DEBIAN_INSTALLER}" = "live" ] + then + echo "live" > binary/.disk/cd_type + echo "${TITLE} ${VERSION} \"${DISTRIBUTION}\" - ${STRING} LIVE/INSTALL Binary $(date +%Y%m%d-%H:%M)" > binary/.disk/info + else + echo "not_complete" > binary/.disk/cd_type + echo "${TITLE} ${VERSION} \"${DISTRIBUTION}\" - ${STRING} LIVE/NETINST Binary $(date +%Y%m%d-%H:%M)" > binary/.disk/info + fi + + for LOCATION in "${LIVE_BUILD}/data/debian-cd" /usr/share/live/build/data/debian-cd + do + if [ -e "${LOCATION}" ] + then + cp "${LOCATION}/${LB_PARENT_DISTRIBUTION}/${LB_ARCHITECTURES}_netinst_udeb_include" binary/.disk/udeb_include + + continue + fi + done + + if [ "${LB_DEBIAN_INSTALLER}" = "live" ] + then + echo "live-installer" >> binary/.disk/udeb_include + fi + ;; + + businesscard) + echo "main" > binary/.disk/base_components + + echo "not_complete" > binary/.disk/cd_type + + echo "${TITLE} ${VERSION} \"${DISTRIBUTION}\" - ${STRING} LIVE/BC Binary $(date +%Y%m%d-%H:%M)" > binary/.disk/info + + for LOCATION in "${LIVE_BUILD}/data/debian-cd" /usr/share/live/build/data/debian-cd + do + if [ -e "${LOCATION}" ] + then + cp "${LOCATION}/${LB_PARENT_DISTRIBUTION}/${LB_ARCHITECTURES}_businesscard_udeb_include" binary/.disk/udeb_include + + continue + fi + done + ;; + + false) + echo "${TITLE} ${VERSION} \"${DISTRIBUTION}\" - ${STRING} LIVE Binary $(date +%Y%m%d-%H:%M)" > binary/.disk/info + ;; +esac + +# Creating stage file +Create_stagefile .build/binary_disk diff --git a/system-build/scripts/build/binary_grub-legacy b/system-build/scripts/build/binary_grub-legacy new file mode 100755 index 0000000..a9fb74b --- /dev/null +++ b/system-build/scripts/build/binary_grub-legacy @@ -0,0 +1,288 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'installs grub-legacy into binary')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +FOUND_MYSELF="" +IFS="," +for BOOTLOADER in ${LB_BOOTLOADERS} +do + + case ${BOOTLOADER} in + "grub-legacy" ) + FOUND_MYSELF="True" + break ;; + esac + +done + +if [ -z ${FOUND_MYSELF} ] ; then + exit 0 +fi + +Echo_message "Begin installing grub-legacy..." + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +# Checking stage file +Check_stagefile .build/binary_grub-legacy + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +# Check architecture +Check_architectures amd64 i386 +Check_crossarchitectures + +# Checking depends +Check_package chroot /usr/sbin/grub grub-legacy + +# Restoring cache +Restore_cache cache/packages.binary + +# Installing depends +Install_package + +# Local functions +Grub_live_entry () +{ + LABEL="${1}" + KERNEL="${2}" + INITRD="${3}" + APPEND="${4}" + + LINUX_LIVE="${LINUX_LIVE}\ntitle\t\tDebian GNU/Linux - ${LABEL}" + LINUX_LIVE="${LINUX_LIVE}\nkernel\t\t/${KERNEL} ${INITFS:+boot=${INITFS} }config LB_BOOTAPPEND_LIVE ${APPEND}" + LINUX_LIVE="${LINUX_LIVE}\ninitrd\t\t/${INITRD}" +} + +Grub_install_entry () +{ + LABEL="${1}" + KERNEL="${2}" + INITRD="${3}" + APPEND="${4}" + + QAPPEND="quiet" + + for TYPE in Install Expert Rescue Auto + do + case "${TYPE}" in + Install) + TAPPEND="${APPEND} ${QAPPEND}" + ;; + + Expert) + TAPPEND="priority=low ${APPEND}" + ;; + + Rescue) + TAPPEND="rescue/enable=true ${APPEND} ${QAPPEND}" + ;; + + Auto) + TAPPEND="auto=true priority=critical ${APPEND} ${QAPPEND}" + ;; + esac + + case "${LABEL}" in + Text) + TYPE_SUFFIX="" + ;; + GUI) + TYPE_SUFFIX="gui" + ;; + esac + + + LINUX_INSTALL="${LINUX_INSTALL}\ntitle\t\t${LABEL} ${TYPE}" + LINUX_INSTALL="${LINUX_INSTALL}\nkernel\t\t/${KERNEL} ${TAPPEND} ${LB_BOOTAPPEND_INSTALL}" + LINUX_INSTALL="${LINUX_INSTALL}\ninitrd\t\t/${INITRD}" + done +} + +if [ -e "config/bootloaders/grub-legacy" ] +then + # Internal local copy + _SOURCE="config/bootloaders/grub-legacy" +else + # Internal system copy + if [ -n "${LIVE_BUILD}" ] + then + _SOURCE="${LIVE_BUILD}/share/bootloaders/grub-legacy" + else + _SOURCE="/usr/share/live/build/bootloaders/grub-legacy" + fi +fi + +case "${LB_INITRAMFS}" in + system-boot) + INITFS="live" + ;; + + *) + INITFS="" + ;; +esac + +# Setting destination directory +case "${LIVE_IMAGE_TYPE}" in + iso*|tar) + case "${LB_INITRAMFS}" in + system-boot) + DESTDIR_LIVE="binary/live" + ;; + + *) + DESTDIR_LIVE="binary/boot" + ;; + esac + + DESTDIR_INSTALL="binary/install" + ;; + + hdd*|netboot) + Echo_warning "Bootloader in this image type not yet supported by live-build." + Echo_warning "This would produce a not bootable image, aborting (FIXME)." + exit 1 + ;; +esac + +Check_multiarchitectures + +# Creating directory +mkdir -p "${DESTDIR_LIVE}" + +# Setting boot parameters +if [ "${LB_UNION_FILESYSTEM}" != "aufs" ] +then + LB_BOOTAPPEND_LIVE="${LB_BOOTAPPEND_LIVE} union=${LB_UNION_FILESYSTEM}" +fi + +if [ -n "${LB_NET_COW_PATH}" ] +then + Echo_error "Net cow not yet supported on grub-legacy" + exit 1 +fi + +LB_BOOTAPPEND_LIVE="$(echo ${LB_BOOTAPPEND_LIVE} | sed -e 's| ||')" + +# Assembling kernel configuration + +# Default entries +DEFAULT_FLAVOUR="$(echo ${LB_LINUX_FLAVOURS} | awk '{ print $1 }')" +DEFAULT_KERNEL="$(basename chroot/boot/vmlinuz-*${DEFAULT_FLAVOUR})" +DEFAULT_INITRD="initrd.img-$(echo ${DEFAULT_KERNEL} | sed -e 's|vmlinuz-||')" + +Grub_live_entry "live" "$(basename ${DESTDIR_LIVE})/${DEFAULT_KERNEL}" "$(basename ${DESTDIR_LIVE})/${DEFAULT_INITRD}" + +if [ "${LB_BOOTAPPEND_FAILSAFE}" != "none" ] +then + Grub_live_entry "live (fail-safe mode)" "$(basename ${DESTDIR_LIVE})/${DEFAULT_KERNEL}" "$(basename ${DESTDIR_LIVE})/${DEFAULT_INITRD}" "${LB_BOOTAPPEND_FAILSAFE}" +fi + +for KERNEL in chroot/boot/vmlinuz-* +do + VERSION="$(basename ${KERNEL} | sed -e 's|vmlinuz-||')" + + Grub_live_entry "live, kernel ${VERSION}" "$(basename ${DESTDIR_LIVE})/$(basename ${KERNEL})" "$(basename ${DESTDIR_LIVE})/initrd.img-${VERSION}" + Grub_live_entry "live, kernel ${VERSION} (fail-safe mode)" "$(basename ${DESTDIR_LIVE})/$(basename ${KERNEL})" "$(basename ${DESTDIR_LIVE})/initrd.img-${VERSION}" "${LB_BOOTAPPEND_FAILSAFE}" +done + +LINUX_LIVE="$(/bin/echo ${LINUX_LIVE} | sed -e 's|binary||g' -e 's|//|/|g')" + +# Assembling debian-installer configuration +if [ "${LB_DEBIAN_INSTALLER}" != "false" ] +then + LINUX_LIVE="title\t\tLive:\nroot\n\n${LINUX_LIVE}" + LINUX_INSTALL="title\t\tInstaller:\nroot" + + VMLINUZ_DI="install/vmlinuz" + INITRD_DI="install/initrd.gz" + APPEND_DI="vga=normal" + + VMLINUZ_GI="install/gtk/vmlinuz" + INITRD_GI="install/gtk/initrd.gz" + APPEND_GI="video=vesa:ywrap,mtrr vga=788" + + if [ -f "binary/${VMLINUZ_DI}" ] && [ -f "binary/${INITRD_DI}" ] + then + Grub_install_entry "Text" "${VMLINUZ_DI}" "${INITRD_DI}" "${APPEND_DI}" + fi + + if [ -f "binary/${VMLINUZ_GI}" ] && [ -f "binary/${INITRD_GI}" ] + then + Grub_install_entry "GUI" "${VMLINUZ_GI}" "${INITRD_GI}" "${APPEND_GI}" + fi +fi + +LINUX_INSTALL="$(/bin/echo ${LINUX_INSTALL} | sed -e 's|binary||g' -e 's|//|/|g')" + +# Assembling memtest configuration +if [ -f "${DESTDIR_LIVE}"/memtest ] +then + MEMTEST="title\t\tOther:\nroot" + MEMTEST="${MEMTEST}\n\ntitle\t\t${LB_MEMTEST}\nkernel\t\t/$(basename ${DESTDIR_LIVE})/memtest" + MEMTEST="$(/bin/echo ${MEMTEST} | sed -e 's|//|/|g')" +fi + +# Copying templates +mkdir -p binary/boot/grub +cp -r "${_SOURCE}"/* binary/boot/grub + +case ${LIVE_IMAGE_TYPE} in + iso*) + FILES="chroot/usr/lib/grub/*/stage2_eltorito" + ;; + + hdd*|tar) + FILES="chroot/usr/lib/grub/*/stage1 chroot/usr/lib/grub/*/e2fs_stage1_5 chroot/usr/lib/grub/*/stage2" + ;; +esac + +if [ "${LB_BUILD_WITH_CHROOT}" = "false" ] +then + FILES="$(echo ${FILES} | sed -e 's|chroot||g')" +fi + +# Copying grub +cp ${FILES} binary/boot/grub + +sed -i -e "s|LINUX_LIVE|${LINUX_LIVE}|" -e "s|LINUX_INSTALL|${LINUX_INSTALL}|" -e "s|MEMTEST|${MEMTEST}|" binary/boot/grub/menu.lst +sed -i -e "s#LB_BOOTAPPEND_INSTALL#${LB_BOOTAPPEND_INSTALL}#" -e "s#LB_BOOTAPPEND_LIVE#${LB_BOOTAPPEND_LIVE}#" binary/boot/grub/menu.lst + +sed -i -e 's|\ $||g' binary/boot/grub/menu.lst + +# Saving cache +Save_cache cache/packages.binary + +# Removing depends +Remove_package + +# Creating stage file +Create_stagefile .build/binary_grub diff --git a/system-build/scripts/build/binary_grub-pc b/system-build/scripts/build/binary_grub-pc new file mode 100755 index 0000000..f3a6450 --- /dev/null +++ b/system-build/scripts/build/binary_grub-pc @@ -0,0 +1,263 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'installs grub-pc into binary')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +FOUND_MYSELF="" +OLDIFS="$IFS" +IFS="," +for BOOTLOADER in ${LB_BOOTLOADERS} +do + + case ${BOOTLOADER} in + "grub-pc" ) + FOUND_MYSELF="True" + break ;; + esac + +done +IFS="$OLDIFS" + +if [ -z ${FOUND_MYSELF} ] ; then + exit 0 +fi + +Echo_message "Begin installing grub-pc..." + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +# Checking stage file +Check_stagefile .build/binary_grub + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +# Check architecture +Check_architectures amd64 i386 +Check_crossarchitectures + +# Checking depends +Check_package chroot /usr/bin/grub-mkimage grub-pc + +# Restoring cache +Restore_cache cache/packages.binary + +# Installing depends +Install_package + +# Local functions +Grub_live_entry () +{ + LABEL="${1}" + KERNEL="${2}" + INITRD="${3}" + APPEND="${4}" + + LINUX_LIVE="${LINUX_LIVE}\nmenuentry \"Debian GNU/Linux - ${LABEL}\" {" + LINUX_LIVE="${LINUX_LIVE}\nlinux\t\t/${KERNEL} ${INITFS:+boot=${INITFS} }config LB_BOOTAPPEND_LIVE ${APPEND}" + LINUX_LIVE="${LINUX_LIVE}\ninitrd\t\t/${INITRD}" + LINUX_LIVE="${LINUX_LIVE}\n}" +} + +Grub_install_entry () +{ + LABEL="${1}" + KERNEL="${2}" + INITRD="${3}" + APPEND="${4}" + + if [ "${LABEL}" != "rescue" ] && [ "${LABEL}" != "rescuegui" ] + then + APPEND="${APPEND} quiet" + fi + + LINUX_INSTALL="${LINUX_INSTALL}\nmenuentry \"Debian GNU/Linux - ${LABEL}\" {" + LINUX_INSTALL="${LINUX_INSTALL}\nlinux\t\t/${KERNEL} ${APPEND} LB_BOOTAPPEND_INSTALL" + LINUX_INSTALL="${LINUX_INSTALL}\ninitrd\t\t/${INITRD}" + LINUX_INSTALL="${LINUX_INSTALL}\n}" +} + +if [ -e "config/bootloaders/grub-pc" ] +then + # Internal local copy + _SOURCE="config/bootloaders/grub-pc" +else + # Internal system copy + if [ -n "${LIVE_BUILD}" ] + then + _SOURCE="${LIVE_BUILD}/share/bootloaders/grub-pc" + else + _SOURCE="/usr/share/live/build/bootloaders/grub-pc" + fi +fi + +case "${LB_INITRAMFS}" in + system-boot) + INITFS="live" + ;; + + *) + INITFS="" + ;; +esac + +# Setting destination directory +case "${LIVE_IMAGE_TYPE}" in + iso*|tar) + case "${LB_INITRAMFS}" in + system-boot) + DESTDIR_LIVE="binary/live" + ;; + + *) + DESTDIR_LIVE="binary/live" + ;; + esac + + DESTDIR_INSTALL="binary/install" + ;; + + hdd*|netboot) + Echo_warning "Bootloader in this image type not yet supported by live-build." + Echo_warning "This would produce a not bootable image, aborting (FIXME)." + exit 1 + ;; +esac + +Check_multiarchitectures + +# Creating directory +mkdir -p "${DESTDIR_LIVE}" + +# Setting boot parameters +if [ "${LB_UNION_FILESYSTEM}" != "aufs" ] +then + LB_BOOTAPPEND_LIVE="${LB_BOOTAPPEND_LIVE} union=${LB_UNION_FILESYSTEM}" +fi + +if [ -n "${LB_NET_COW_PATH}" ] +then + Echo_error "Net cow not yet supported on grub" + exit 1 +fi + +LB_BOOTAPPEND_LIVE="$(echo ${LB_BOOTAPPEND_LIVE} | sed -e 's| ||')" + +# Assembling kernel configuration + +# Default entries +DEFAULT_FLAVOUR="$(echo ${LB_LINUX_FLAVOURS} | awk '{ print $1 }')" +DEFAULT_KERNEL="$(basename chroot/boot/vmlinuz-*${DEFAULT_FLAVOUR})" +DEFAULT_INITRD="initrd.img-$(echo ${DEFAULT_KERNEL} | sed -e 's|vmlinuz-||')" + +Grub_live_entry "live" "$(basename ${DESTDIR_LIVE})/${DEFAULT_KERNEL}" "$(basename ${DESTDIR_LIVE})/${DEFAULT_INITRD}" + +if [ "${LB_BOOTAPPEND_FAILSAFE}" != "none" ] +then + Grub_live_entry "live (fail-safe mode)" "$(basename ${DESTDIR_LIVE})/${DEFAULT_KERNEL}" "$(basename ${DESTDIR_LIVE})/${DEFAULT_INITRD}" "${LB_BOOTAPPEND_FAILSAFE}" +fi + +for KERNEL in chroot/boot/vmlinuz-* +do + VERSION="$(basename ${KERNEL} | sed -e 's|vmlinuz-||')" + + Grub_live_entry "live, kernel ${VERSION}" "$(basename ${DESTDIR_LIVE})/$(basename ${KERNEL})" "$(basename ${DESTDIR_LIVE})/initrd.img-${VERSION}" + Grub_live_entry "live, kernel ${VERSION} (fail-safe mode)" "$(basename ${DESTDIR_LIVE})/$(basename ${KERNEL})" "$(basename ${DESTDIR_LIVE})/initrd.img-${VERSION}" "${LB_BOOTAPPEND_FAILSAFE}" +done + +LINUX_LIVE="$(/bin/echo ${LINUX_LIVE} | sed -e 's|binary||g' -e 's|//|/|g')" + +# Assembling debian-installer configuration +if [ "${LB_DEBIAN_INSTALLER}" != "false" ] +then + LINUX_LIVE="#\t \"Live\"\n${LINUX_LIVE}" + LINUX_INSTALL="#\t \"Installer\"\n" + + VMLINUZ_DI="install/vmlinuz" + INITRD_DI="install/initrd.gz" + APPEND_DI="vga=normal" + + VMLINUZ_GI="install/gtk/vmlinuz" + INITRD_GI="install/gtk/initrd.gz" + APPEND_GI="video=vesa:ywrap,mtrr vga=788" + + Grub_install_entry "install" "${VMLINUZ_DI}" "${INITRD_DI}" "${APPEND_DI}" + Grub_install_entry "installgui" "${VMLINUZ_GI}" "${INITRD_GI}" "${APPEND_GI}" + Grub_install_entry "expert" "${VMLINUZ_DI}" "${INITRD_DI}" "priority=low ${APPEND_DI}" + Grub_install_entry "expertgui" "${VMLINUZ_GI}" "${INITRD_GI}" "priority=low ${APPEND_GI}" + Grub_install_entry "rescue" "${VMLINUZ_DI}" "${INITRD_DI}" "rescue/enable=true ${APPEND_DI}" + Grub_install_entry "rescuegui" "${VMLINUZ_GI}" "${INITRD_GI}" "rescue/enable=true ${APPEND_GI}" + Grub_install_entry "auto" "${VMLINUZ_DI}" "${INITRD_DI}" "auto=true priority=critical ${APPEND_DI}" + Grub_install_entry "autogui" "${VMLINUZ_GI}" "${INITRD_GI}" "auto=true priority=critical ${APPEND_GI}" +fi + +LINUX_INSTALL="$(/bin/echo ${LINUX_INSTALL} | sed -e 's|binary||g' -e 's|//|/|g')" + +# Assembling memtest configuration +if [ -f "${DESTDIR_LIVE}"/memtest ] +then + MEMTEST="#\t \"Other\"\n" + MEMTEST="${MEMTEST}\nmenuentry\t\"${LB_MEMTEST}\" {\nlinux16\t$(basename ${DESTDIR_LIVE})/memtest\n}" + MEMTEST="$(/bin/echo ${MEMTEST} | sed -e 's|//|/|g')" +fi + +# Copying templates +mkdir -p binary/boot/grub/i386-pc +cp -r "${_SOURCE}"/* binary/boot/grub + +case ${LIVE_IMAGE_TYPE} in + iso*) + FILES="chroot/usr/lib/grub/i386-pc/*.mod chroot/usr/lib/grub/i386-pc/*.lst chroot/usr/lib/grub/i386-pc/efiemu??.o chroot/usr/share/grub/*.pf2" + ;; + + hdd*|tar) + FILES="chroot/usr/lib/grub/i386-pc/*" + ;; +esac + +if [ "${LB_BUILD_WITH_CHROOT}" = "false" ] +then + FILES="$(echo ${FILES} | sed -e 's|chroot||g')" +fi + +# Copying grub +cp ${FILES} binary/boot/grub/i386-pc + +sed -i -e "s|LINUX_LIVE|${LINUX_LIVE}|" -e "s|LINUX_INSTALL|${LINUX_INSTALL}|" -e "s|MEMTEST|${MEMTEST}|" binary/boot/grub/grub.cfg +sed -i -e "s#LB_BOOTAPPEND_INSTALL#${LB_BOOTAPPEND_INSTALL}#" -e "s#LB_BOOTAPPEND_LIVE#${LB_BOOTAPPEND_LIVE}#" binary/boot/grub/grub.cfg + +sed -i -e 's|\ $||g' binary/boot/grub/grub.cfg + +# Saving cache +Save_cache cache/packages.binary + +# Removing depends +Remove_package + +# Creating stage file +Create_stagefile .build/binary_grub diff --git a/system-build/scripts/build/binary_hdd b/system-build/scripts/build/binary_hdd new file mode 100755 index 0000000..1e7489c --- /dev/null +++ b/system-build/scripts/build/binary_hdd @@ -0,0 +1,348 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'build binary image')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +if ! In_list hdd "${LIVE_IMAGE_TYPE}" +then + exit 0 +fi + +Echo_message "Begin building binary hdd image..." + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap .build/chroot_proc + +# Checking stage file +Check_stagefile .build/binary_hdd + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +# Checking depends +case "${LB_BINARY_FILESYSTEM}" in + fat*) + Check_package chroot /sbin/mkdosfs dosfstools + ;; + + ntfs) + Check_package chroot /sbin/mkfs.nfts ntfs-3g + ;; +esac + +Check_package chroot /usr/share/doc/mtools mtools +Check_package chroot /sbin/parted parted + +echo "${LB_BOOTLOADERS}" | \ +while IFS="," read -r BOOTLOADER +do + case "${BOOTLOADER}" in + grub) + Check_package chroot /usr/sbin/grub grub + ;; + esac +done + +LB_PRIMARY_BOOTLOADER=$(echo "${LB_BOOTLOADERS}" | awk -F, '{ print $1 }') + +case ${LB_PRIMARY_BOOTLOADER} in + syslinux) + case ${LB_BINARY_FILESYSTEM} in + fat*|ntfs) + _BOOTLOADER=syslinux + ;; + ext[234]|btrfs) + _BOOTLOADER=extlinux + ;; + *) + Echo_error "syslinux/extlinux doesn't support ${LB_BINARY_FILESYSTEM}" + exit 1 + ;; + esac + Check_package chroot /usr/bin/${_BOOTLOADER} ${_BOOTLOADER} + ;; +esac + +# Restoring cache +Restore_cache cache/packages.binary + +# Installing depends +Install_package + +# Remove old binary +if [ -f ${LIVE_iMAGE_NAME}.img ] +then + rm -f ${LIVE_iMAGE_NAME}.img +fi + +# Enforce fat32 if we find individual files bigger than 2GB +if [ "${LB_BINARY_FILESYSTEM}" = "fat16" ] && [ -n "$(find binary -size +1999M)" ] +then + Echo_warning "FAT16 doesn't support files larger than 2GB, automatically enforcing FAT32." + + LB_BINARY_FILESYSTEM="fat32" + export LB_BINARY_FILESYSTEM +fi + +# Enforce fat32 if we have images in total bigger than 2GB +if [ "${LB_BINARY_FILESYSTEM}" = "fat16" ] && [ "$(du -s binary | awk '{ print $1 }')" -gt "1900000" ] +then + Echo_warning "FAT16 doesn't support partitions larger than 2GB, automatically enforcing FAT32" + + LB_BINARY_FILESYSTEM="fat32" + export LB_BINARY_FILESYSTEM +fi + +# Enforce ntfs if we find individual files bigger than 4GB +if [ "${LB_BINARY_FILESYSTEM}" = "fat32" ] && [ -n "$(find binary -size +3999M)" ] +then + Echo_warning "FAT32 doesn't support files larger than 4GB, automatically enforcing NTFS." + + LB_BINARY_FILESYSTEM="ntfs" + export LB_BINARY_FILESYSTEM +fi + +# Everything which comes here needs to be cleaned up, +if [ "$LB_HDD_SIZE" = "auto" ]; +then + DU_DIM="$(du -ms binary | cut -f1)" + REAL_DIM="$(Calculate_partition_size ${DU_DIM} ${LB_BINARY_FILESYSTEM})" +else + REAL_DIM=$LB_HDD_SIZE +fi + +dd if=/dev/zero of=chroot/binary.img bs=1024k count=0 seek=${REAL_DIM} +FREELO="$(${LB_LOSETUP} -f)" +if [ ! -b chroot/${FREELO} ] +then + MAKEDEV="true" + + mv chroot/dev chroot/dev.tmp + find /dev | cpio -dmpu chroot +fi + +echo "!!! The following error/warning messages can be ignored !!!" +Losetup $FREELO chroot/binary.img 0 + +PARTITION_TABLE_TYPE="msdos" + +case "${LB_BINARY_FILESYSTEM}" in + ext2|ext3|ext4) + PARTITION_TYPE="ext2" + ;; + + fat16|fat32) + PARTITION_TYPE="${LB_BINARY_FILESYSTEM}" + ;; + + ntfs) + PARTITION_TYPE="NTFS" + ;; + + *) + Echo_error "Unsupported binary filesystem %s" "${LB_BINARY_FILESYSTEM}" + exit 1 + ;; +esac + +case "${LB_BUILD_WITH_CHROOT}" in + true) + Chroot chroot "parted -s ${FREELO} mklabel ${PARTITION_TABLE_TYPE}" || true + if [ "x${LB_HDD_PARTITION_START}" = "x" ]; + then + Chroot chroot "parted -a optimal -s ${FREELO} mkpart primary\ + ${PARTITION_TYPE} 0% 100%" || true + else + Echo_message "using partition start at ${LB_HDD_PARTITION_START}" + Chroot chroot "parted -s ${FREELO} mkpart primary ${PARTITION_TYPE}\ + ${LB_HDD_PARTITION_START} 100%" || true + fi + Chroot chroot "parted -s ${FREELO} set 1 boot on" || true + Chroot chroot "parted -s ${FREELO} set 1 lba off" || true + + if [ "${LB_PRIMARY_BOOTLOADER}" = "syslinux" ] + then + dd if=chroot/usr/lib/SYSLINUX/mbr.bin of=${FREELO} bs=440 count=1 + fi + ;; + + false) + parted -s ${FREELO} mklabel ${PARTITION_TABLE_TYPE} || true + if [ "x${LB_HDD_PARTITION_START}" = "x" ]; + then + parted -a optimal -s ${FREELO} mkpart primary ${PARTITION_TYPE}\ + 0% 100% || true + else + Echo_message "using partition start at ${LB_HDD_PARTITION_START}" + parted -s ${FREELO} mkpart primary ${PARTITION_TYPE}\ + ${LB_HDD_PARTITION_START} 100% || true + fi + parted -s "${FREELO}" set 1 boot on || true + parted -s "${FREELO}" set 1 lba off || true + + if [ "${LB_PRIMARY_BOOTLOADER}" = "syslinux" ] + then + dd if=/usr/lib/SYSLINUX/mbr.bin of=${FREELO} bs=440 count=1 + fi + ;; +esac + +Lodetach ${FREELO} + +FREELO="$(${LB_LOSETUP} -f)" +Losetup $FREELO chroot/binary.img 1 + +case "${LB_BINARY_FILESYSTEM}" in + ext2|ext3|ext4) + MKFS="${LB_BINARY_FILESYSTEM}" + MKFS_OPTIONS="-L ${LB_HDD_LABEL} -m 0 -O ^64bit" + MOUNT_OPTIONS="" + ;; + + fat16) + MKFS="vfat" + MKFS_OPTIONS="-F 16 -n ${LB_HDD_LABEL}" + MOUNT_OPTIONS="" + ;; + + fat32) + MKFS="vfat" + MKFS_OPTIONS="-F 32 -n ${LB_HDD_LABEL}" + MOUNT_OPTIONS="" + ;; + + ntfs) + MKFS="ntfs" + MKFS_OPTIONS="-L ${LB_HDD_LABEL}" + MOUNT_OPTIONS="-t ntfs-3g" + ;; +esac + +case "${LB_BUILD_WITH_CHROOT}" in + true) + Chroot chroot "mkfs.${MKFS} ${MKFS_OPTIONS} ${FREELO}" + ;; + + false) + mkfs.${MKFS} ${MKFS_OPTIONS} ${FREELO} + ;; +esac + +case "${LB_BINARY_FILESYSTEM}" in + fat*) + CP_OPTIONS="-r -L" + ;; + + *) + CP_OPTIONS="-a" + ;; +esac + +Echo_message "Copying binary contents into image..." + +mkdir -p chroot/binary.tmp +mount ${MOUNT_OPTIONS} ${FREELO} chroot/binary.tmp +cp -T ${CP_OPTIONS} binary/ chroot/binary.tmp + +FIXME() +{ +if [ "${LB_PRIMARY_BOOTLOADER}" = "grub" ] +then + +cat > chroot/grub.sh << EOF +cd binary.tmp +grub --batch << EOM +find /live/vmlinuz +EOM +EOF + + rootpartition="$(Chroot chroot 'sh grub.sh' 2>/dev/null | grep -A 1 'find /live/vmlinuz' | grep -v 'find /live/vmlinuz')" + hdddev="$(echo $rootpartition | sed -e 's|,[[:digit:]]||')" + echo "Root partition is $rootpartition, device is: $hdddev" + + echo "WAITING..." && read WAIT + +#cat > chroot/grub.sh << EOF +#grub --batch << EOM +#root $rootpartition +#setup $hdddev +#EOM +#EOF + +#Chroot chroot "sh grub.sh" + + rm -f chroot/grub.sh +fi +} + +case "${_BOOTLOADER}" in + syslinux) + _SYSLINUX_INSTALLER="syslinux ${FREELO}" + ;; + extlinux) + _SYSLINUX_INSTALLER="extlinux --install /binary.tmp/boot/extlinux" + ;; + *) + _SYSLINUX_INSTALLER="" + ;; +esac + +if [ -n "${_SYSLINUX_INSTALLER}" ] +then + case "${LB_BUILD_WITH_CHROOT}" in + true) + Chroot chroot "${_SYSLINUX_INSTALLER}" + ;; + false) + ${_SYSLINUX_INSTALLER} + ;; + esac +fi + +umount chroot/binary.tmp +rmdir chroot/binary.tmp + +Lodetach ${FREELO} + +echo "!!! The above error/warning messages can be ignored !!!" + +if [ -n "${MAKEDEV}" ] +then + rm -rf chroot/dev + mv chroot/dev.tmp chroot/dev +fi + +mv chroot/binary.img ${LIVE_IMAGE_NAME}-${LB_ARCHITECTURES}.img + +# Saving cache +Save_cache cache/packages.binary + +# Removing depends +Remove_package + +# Creating stage file +Create_stagefile .build/binary_hdd diff --git a/system-build/scripts/build/binary_hooks b/system-build/scripts/build/binary_hooks new file mode 100755 index 0000000..0458ce9 --- /dev/null +++ b/system-build/scripts/build/binary_hooks @@ -0,0 +1,81 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'execute hooks in binary')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +Echo_message "Begin executing hooks..." + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +# Checking stage file +Check_stagefile .build/binary_hooks + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +## Processing distribution hooks + +# Running hooks +for _HOOK in ${LB_BINARY_HOOKS} +do + for LOCATION in "${LIVE_BUILD}/hooks" /usr/share/live/build/hooks + do + for FILE in "${LOCATION}"/????-"${_HOOK}".binary + do + if [ -e "${FILE}" ] + then + cd binary + "${FILE}" || { Echo_error "${_HOOK} failed (exit non-zero). You should check for errors."; exit 1 ;} + cd "${OLDPWD}" + fi + done + done +done + +## Processing local hooks +for HOOK in config/hooks/normal/*.binary config/hooks/live/*.binary +do + if [ ! -e "${HOOK}" ] + then + continue + fi + + # Making hook executable + if [ ! -x "${HOOK}" ] + then + chmod +x "${HOOK}" + fi + + # Executing hook + cd binary + ../"${HOOK}" || { Echo_error "${HOOK} failed (exit non-zero). You should check for errors."; exit 1 ;} + cd "${OLDPWD}" +done + +# Creating stage file +Create_stagefile .build/binary_hooks diff --git a/system-build/scripts/build/binary_includes b/system-build/scripts/build/binary_includes new file mode 100755 index 0000000..48bb6e5 --- /dev/null +++ b/system-build/scripts/build/binary_includes @@ -0,0 +1,57 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'copy files into binary')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +Echo_message "Begin copying binary includes..." + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +# Checking stage file +Check_stagefile .build/includes.binary + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +if Find_files config/includes.binary/ +then + # Copying includes + cd config/includes.binary + find . | cpio -dmpu --no-preserve-owner "${OLDPWD}"/binary + cd "${OLDPWD}" + + # Removing symlinks + case "${LIVE_IMAGE_TYPE}" in + hdd*) + find binary -type l | xargs rm -f + ;; + esac + + # Creating stage file + Create_stagefile .build/binary_includes +fi diff --git a/system-build/scripts/build/binary_iso b/system-build/scripts/build/binary_iso new file mode 100755 index 0000000..bd659a2 --- /dev/null +++ b/system-build/scripts/build/binary_iso @@ -0,0 +1,220 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'build iso binary image')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +case "${LIVE_IMAGE_TYPE}" in + iso) + IMAGE="${LIVE_IMAGE_NAME}-${LB_ARCHITECTURES}.iso" + ;; + + iso-hybrid) + IMAGE="${LIVE_IMAGE_NAME}-${LB_ARCHITECTURES}.hybrid.iso" + ;; + + *) + exit 0 + ;; +esac + +Echo_message "Begin building binary iso image..." + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +# Checking stage file +Check_stagefile .build/binary_iso + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +# Checking depends +Check_package chroot /usr/bin/xorriso xorriso +Check_package chroot /usr/lib/ISOLINUX/isohdpfx.bin isolinux + +# Restoring cache +Restore_cache cache/packages.binary + +# Installing depends +Install_package + +# Remove old iso image +if [ -f ${IMAGE} ] +then + rm -f ${IMAGE} +fi + +# Handle xorriso generic options +XORRISO_OPTIONS="-R -r -J -joliet-long -l -cache-inodes -iso-level 3" + +# Handle xorriso live-build specific options +if [ "${LIVE_IMAGE_TYPE}" = "iso-hybrid" ] +then + XORRISO_OPTIONS="${XORRISO_OPTIONS} -isohybrid-mbr /usr/lib/ISOLINUX/isohdpfx.bin -partition_offset 16" +fi + +if [ "${_QUIET}" = "true" ] +then + XORRISO_OPTIONS="${XORRISO_OPTIONS} -quiet" +fi + +if [ "${_VERBOSE}" = "true" ] +then + XORRISO_OPTIONS="${XORRISO_OPTIONS} -v" +fi + +if [ -n "${LB_ISO_APPLICATION}" ] && [ "${LB_ISO_APPLICATION}" != "none" ] +then + XORRISO_OPTIONS="${XORRISO_OPTIONS} -A \"${LB_ISO_APPLICATION}\"" +fi + +if [ -n "${LB_ISO_PREPARER}" ] && [ "${LB_ISO_PREPARER}" != "none" ] +then + XORRISO_OPTIONS="${XORRISO_OPTIONS} -p \"${LB_ISO_PREPARER}\"" +fi + +if [ -n "${LB_ISO_PUBLISHER}" ] && [ "${LB_ISO_PUBLISHER}" != "none" ] +then + XORRISO_OPTIONS="${XORRISO_OPTIONS} -publisher \"${LB_ISO_PUBLISHER}\"" +fi + +if [ -n "${LB_ISO_VOLUME}" ] && [ "${LB_ISO_VOLUME}" != "none" ] +then + XORRISO_OPTIONS="${XORRISO_OPTIONS} -V \"${LB_ISO_VOLUME}\"" +fi + +# Set an explicit modification date +XORRISO_OPTIONS="${XORRISO_OPTIONS} --modification-date=$(date --utc --date="@${SOURCE_DATE_EPOCH:-$(date +%s)}" +%Y%m%d%H%m%S00)" + +LB_PRIMARY_BOOTLOADER=$(echo "${LB_BOOTLOADERS}" | awk -F, '{ print $1 }') + +# Handle xorriso architecture specific options +case "${LB_PRIMARY_BOOTLOADER}" in + grub) + XORRISO_OPTIONS="${XORRISO_OPTIONS} -no-emul-boot -boot-load-size 4 -boot-info-table" + XORRISO_OPTIONS="${XORRISO_OPTIONS} -b boot/grub/stage2_eltorito" + XORRISO_EXCLUDE="boot/grub/stage2_eltorito" + ;; + + grub-pc) + XORRISO_OPTIONS="${XORRISO_OPTIONS} -no-emul-boot -boot-load-size 4 -boot-info-table" + XORRISO_OPTIONS="${XORRISO_OPTIONS} -b boot/grub/grub_eltorito -J" + XORRISO_EXCLUDE="boot/grub/grub_eltorito" + ;; + + syslinux) + case "${LB_MODE}" in + progress-linux) + XORRISO_OPTIONS="${XORRISO_OPTIONS} -b boot/boot.bin -c boot/boot.cat" + XORRISO_EXCLUDE="boot/boot.bin" + ;; + + *) + XORRISO_OPTIONS="${XORRISO_OPTIONS} -b isolinux/isolinux.bin -c isolinux/boot.cat" + XORRISO_EXCLUDE="isolinux/isolinux.bin" + ;; + esac + + XORRISO_OPTIONS="${XORRISO_OPTIONS} -no-emul-boot -boot-load-size 4 -boot-info-table" + ;; + + *) + Echo_warning "Bootloader on your architecture not yet supported by live-build." + Echo_warning "This will produce a most likely not bootable image (Continuing in 5 seconds)." + sleep 5 + ;; +esac + +#if [ "${LB_DEBIAN_INSTALLER}" != "live" ] +#then +# XORRISO_OPTIONS="${XORRISO_OPTIONS} -m ${XORRISO_EXCLUDE}" +#fi + +if [ "${LB_PRIMARY_BOOTLOADER}" = "grub-pc" ] +then + +cat > binary.sh << EOF +#!/bin/sh + +input_dir=/usr/lib/grub/i386-pc + +# build core.img +core_img=\$(mktemp) +grub-mkimage -d \${input_dir} -o \${core_img} -O i386-pc biosdisk iso9660 + +# build grub_eltorito image +cat \${input_dir}/cdboot.img \${core_img} > binary/boot/grub/grub_eltorito + +rm -f \${core_img} + +for file in \${input_dir}/*.mod \${input_dir}/efiemu??.o \ + \${input_dir}/command.lst \${input_dir}/moddep.lst \${input_dir}/fs.lst \ + \${input_dir}/handler.lst \${input_dir}/parttool.lst +do + if test -f "\$file" + then + cp -f "\$file" binary/boot/grub/i386-pc + fi +done +EOF + +else + echo "#!/bin/sh" > binary.sh +fi + +cat >> binary.sh << EOF + +xorriso -as mkisofs ${XORRISO_OPTIONS} -o ${IMAGE} binary +EOF + +case "${LB_BUILD_WITH_CHROOT}" in + true) + # Moving image + mv binary.sh chroot + mv binary chroot + + Chroot chroot "sh binary.sh" + + # Move image + mv chroot/binary chroot/${IMAGE} ./ + rm -f chroot/binary.sh + ;; + + false) + sh binary.sh + rm -f binary.sh + ;; +esac + +# Saving cache +Save_cache cache/packages.binary + +# Removing depends +Remove_package + +# Creating stage file +Create_stagefile .build/binary_iso diff --git a/system-build/scripts/build/binary_linux-image b/system-build/scripts/build/binary_linux-image new file mode 100755 index 0000000..34676ce --- /dev/null +++ b/system-build/scripts/build/binary_linux-image @@ -0,0 +1,85 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'install linux-image into binary')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +if [ "${LB_LINUX_PACKAGES}" = "none" ] +then + exit 0 +fi + +Echo_message "Begin install linux-image..." + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +# Checking stage file +Check_stagefile .build/binary_linux-image + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +case "${LB_INITRAMFS}" in + system-boot) + DESTDIR="binary/live" + ;; + + *) + DESTDIR="binary/boot" + ;; +esac + +case "${LB_ARCHITECTURES}" in + powerpc) + LINUX="vmlinux" + ;; + + *) + LINUX="vmlinuz" + ;; +esac + +Check_multiarchitectures + +# Creating directory +mkdir -p "${DESTDIR}" + +# Installing linux-image +cp chroot/boot/"${LINUX}"-* "${DESTDIR}" +cp chroot/boot/initrd.img-* "${DESTDIR}" + +case "${LB_INITRAMFS}" in + system-boot) + if ls chroot/usr/share/doc/*system-boot/parameters.txt > /dev/null 2>&1 + then + cp chroot/usr/share/doc/*system-boot/parameters.txt "${DESTDIR}"/parameters + fi + ;; +esac + +# Creating stage file +Create_stagefile .build/binary_linux-image diff --git a/system-build/scripts/build/binary_loadlin b/system-build/scripts/build/binary_loadlin new file mode 100755 index 0000000..1fed0a5 --- /dev/null +++ b/system-build/scripts/build/binary_loadlin @@ -0,0 +1,102 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'copy loadlin into binary')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +if [ "${LB_LOADLIN}" != "true" ] || [ "${LB_BINARY_IMAGES}" = "netboot" ] +then + exit 0 +fi + +Echo_message "Begin copying loadlin..." + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +# Checking stage file +Check_stagefile .build/binary_loadlin + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +case "${LB_ARCHITECTURES}" in + amd64|i386) + case "${LB_BUILD_WITH_CHROOT}" in + true) + # Checking depends + Check_package chroot /usr/lib/loadlin/loadlin.exe.gz loadlin + + # Restoring cache + Restore_cache cache/packages.binary + + # Installing depends + Install_package + + _PREFIX="chroot" + ;; + + false) + _PREFIX="" + ;; + esac + + # Copying loadlin + mkdir -p binary/tools + gunzip -c "${_PREFIX}/usr/lib/loadlin/loadlin.exe.gz" > binary/tools/loadlin.exe + gunzip -c "${_PREFIX}/usr/share/doc/loadlin/manual.txt.gz" > binary/tools/loadlin.txt + + case "${LB_BUILD_WITH_CHROOT}" in + true) + # Saving cache + Save_cache cache/packages.binary + + # Removing depends + Remove_package + ;; + esac + +cat > binary/install/install.bat << EOF +\tools\loadlin.exe vmlinuz initrd=initrd.gz +EOF + + if [ -e binary/install/gtk ] + then + +cat > binary/install/gtk/install.bat << EOF +\tools\loadlin.exe \install\vmlinuz initrd=initrd.gz vga=788 +EOF + + fi + + # Creating stage file + Create_stagefile .build/binary_loadlin + ;; + + *) + Echo_warning "loadlin inclusion is set to true but not compatible with your architecture, ignoring." + ;; +esac diff --git a/system-build/scripts/build/binary_loopback_cfg b/system-build/scripts/build/binary_loopback_cfg new file mode 100755 index 0000000..87c1d67 --- /dev/null +++ b/system-build/scripts/build/binary_loopback_cfg @@ -0,0 +1,341 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'installs loopback.cfg into binary')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +# We avoid checking if we need to be running this bootloader +# on purpose. The reason: You will always want to have +# a loopback.cfg file +# TODO: Add an option to be able to disable this file creation +Echo_message "Begin installing loopback.cfg..." + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +# Checking stage file +Check_stagefile .build/binary_loopback_cfg + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +# Check architecture +Check_architectures amd64 i386 +Check_crossarchitectures + +# Local functions +Grub_live_entry_commands () +{ + local KERNEL="${1}" + local INITRD="${2}" + local APPEND="${3}" + + LINUX_LIVE="${LINUX_LIVE}\nlinux\t\t/${KERNEL} ${INITFS:+boot=${INITFS} }config LB_BOOTAPPEND_LIVE ${APPEND}" + LINUX_LIVE="${LINUX_LIVE}\ninitrd\t\t/${INITRD}" +} + +Grub_live_entry () +{ + local LABEL="${1}" + local KERNEL="${2}" + local INITRD="${3}" + local APPEND="${4}" + + LINUX_LIVE="${LINUX_LIVE}\nmenuentry \"Debian GNU/Linux - ${LABEL}\" {" + Grub_live_entry_commands "${KERNEL}" "${INITRD}" "${APPEND} findiso=\${iso_path}" + LINUX_LIVE="${LINUX_LIVE}\n}" +} + +Grub_live_autodetect_entry () +{ + local LABEL="${1}" + local AMD64_KERNEL="${2}" + local AMD64_INITRD="${3}" + local _486_KERNEL="${4}" + local _486_INITRD="${5}" + local APPEND="${6}" + + LINUX_LIVE="${LINUX_LIVE}\nmenuentry \"Debian GNU/Linux - ${LABEL}\" {" + LINUX_LIVE="${LINUX_LIVE}\nif cpuid -l ; then" + Grub_live_entry_commands "${AMD64_KERNEL}" "${AMD64_INITRD}" "${APPEND} findiso=\${iso_path}" + LINUX_LIVE="${LINUX_LIVE}\nelse" + Grub_live_entry_commands "${_486_KERNEL}" "${_486_INITRD}" "${APPEND} findiso=\${iso_path}" + LINUX_LIVE="${LINUX_LIVE}\nfi" + LINUX_LIVE="${LINUX_LIVE}\n}" +} + +if [ -e "config/bootloaders/grub-pc" ] +then + # Internal local copy + _SOURCE="config/bootloaders/grub-pc" +else + # Internal system copy + if [ -n "${LIVE_BUILD}" ] + then + _SOURCE="${LIVE_BUILD}/share/bootloaders/grub-pc" + else + _SOURCE="/usr/share/live/build/bootloaders/grub-pc" + fi +fi + +case "${LB_INITRAMFS}" in + system-boot) + INITFS="live" + ;; + + *) + INITFS="" + ;; +esac + +# Assembling image specifics +case "${LIVE_IMAGE_TYPE}" in + iso*) + _BOOTLOADER="isolinux" + + case "${LB_MODE}" in + progress-linux) + _TARGET="binary/boot" + ;; + + *) + _TARGET="binary/isolinux" + ;; + esac + ;; + + netboot) + _BOOTLOADER="pxelinux" + _TARGET="tftpboot" + ;; + + hdd*|*) + case ${LB_BINARY_FILESYSTEM} in + fat*|ntfs) + _BOOTLOADER=syslinux + + case "${LB_MODE}" in + progress-linux) + _TARGET="binary/boot" + ;; + + *) + _TARGET="binary/syslinux" + ;; + esac + ;; + + ext[234]|btrfs) + _BOOTLOADER=extlinux + _TARGET="binary/boot/extlinux" + ;; + *) + Echo_error "syslinux/extlinux doesn't support ${LB_BINARY_FILESYSTEM}" + exit 1 + ;; + esac + ;; +esac + +DESTDIR_LIVE="${_TARGET}" + +Check_multiarchitectures + +# Creating directory +mkdir -p "${DESTDIR_LIVE}" + +# Setting boot parameters +if [ "${LB_UNION_FILESYSTEM}" != "aufs" ] +then + LB_BOOTAPPEND_LIVE="${LB_BOOTAPPEND_LIVE} union=${LB_UNION_FILESYSTEM}" +fi + +if [ -n "${LB_NET_COW_PATH}" ] +then + Echo_error "Net cow not yet supported on grub" + exit 1 +fi + +LB_BOOTAPPEND_LIVE="$(echo ${LB_BOOTAPPEND_LIVE} | sed -e 's| ||')" + +# Assembling kernel configuration +# If Bootloader is not syslinux that means +# binary_syslinux it's not going to rename kernel filenames in a later stage. +# We will use binary_grub2 algorithm which does not rename kernel filenames. + +FOUND_SYSLINUX="" +OLDIFS="$IFS" +IFS="," +for BOOTLOADER in ${LB_BOOTLOADERS} +do + + case ${BOOTLOADER} in + "syslinux" ) + FOUND_SYSLINUX="True" + break ;; + esac + +done +IFS="$OLDIFS" + +if [ -z ${FOUND_SYSLINUX} ] +then + + _AMD64_486_NUMBER="0" + + for _FLAVOUR in ${LB_LINUX_FLAVOURS} + do + if [ "${_FLAVOUR}" = "amd64" -o "${_FLAVOUR}" = "486" ] ; then + _AMD64_486_NUMBER="$((${_AMD64_486_NUMBER} + 1))" + fi + done + + if [ "${_AMD64_486_NUMBER}" -ge 2 ] ; then + # Default entries + AMD64_KERNEL="$(basename chroot/boot/vmlinuz-*amd64)" + AMD64_INITRD="initrd.img-$(echo ${AMD64_KERNEL} | sed -e 's|vmlinuz-||')" + _486_KERNEL="$(basename chroot/boot/vmlinuz-*486)" + _486_INITRD="initrd.img-$(echo ${_486_KERNEL} | sed -e 's|vmlinuz-||')" + + Grub_live_autodetect_entry "live (autodetect)" \ + "${INITFS}/${AMD64_KERNEL}" \ + "${INITFS}/${AMD64_INITRD}" \ + "${INITFS}/${_486_KERNEL}" \ + "${INITFS}/${_486_INITRD}" + fi + + # Default entries + DEFAULT_FLAVOUR="$(echo ${LB_LINUX_FLAVOURS} | awk '{ print $1 }')" + DEFAULT_KERNEL="$(basename chroot/boot/vmlinuz-*${DEFAULT_FLAVOUR})" + DEFAULT_INITRD="initrd.img-$(echo ${DEFAULT_KERNEL} | sed -e 's|vmlinuz-||')" + + Grub_live_entry "live" "${INITFS}/${DEFAULT_KERNEL}" "${INITFS}/${DEFAULT_INITRD}" + + if [ "${LB_BOOTAPPEND_FAILSAFE}" != "none" ] + then + Grub_live_entry "live (fail-safe mode)" "${INITFS}/${DEFAULT_KERNEL}" "${INITFS}/${DEFAULT_INITRD}" "${LB_BOOTAPPEND_FAILSAFE}" + fi + + for KERNEL in chroot/boot/vmlinuz-* + do + VERSION="$(basename ${KERNEL} | sed -e 's|vmlinuz-||')" + + Grub_live_entry "live, kernel ${VERSION}" "${INITFS}/$(basename ${KERNEL})" "${INITFS}/initrd.img-${VERSION}" + Grub_live_entry "live, kernel ${VERSION} (fail-safe mode)" "${INITFS}/$(basename ${KERNEL})" "${INITFS}/initrd.img-${VERSION}" "${LB_BOOTAPPEND_FAILSAFE}" + done +else # LB_BOOTLOADERS does not contain syslinux +# If one of the bootloader is syslinux that means +# binary_syslinux it's going to rename kernel filenames. +# We will use binary_syslinux algorithm but without renaming kernel filenames. +# That will ensure binary_syslinux will find the original kernel filenames. + #if [ -e "${_TARGET}/live.cfg.in" ] + #then + # This is all rather suboptimal.. needs prettifying at some point + _FLAVOURS="$(echo ${LB_LINUX_FLAVOURS} | wc -w)" + + case "${_FLAVOURS}" in + 1) + Grub_live_entry "live (${LB_LINUX_FLAVOURS})" "${INITFS}/vmlinuz" "${INITFS}/initrd.img" "${LB_BOOTAPPEND_LIVE}" + Grub_live_entry "live (${LB_LINUX_FLAVOURS}) (failsafe mode)" "${INITFS}/vmlinuz" "${INITFS}/initrd.img" "${LB_BOOTAPPEND_LIVE_FAILSAFE}" + ;; + + *) + _AMD64_486_NUMBER="0" + + for _FLAVOUR in ${LB_LINUX_FLAVOURS} + do + if [ "${_FLAVOUR}" = "amd64" -o "${_FLAVOUR}" = "486" ] ; then + _AMD64_486_NUMBER="$((${_AMD64_486_NUMBER} + 1))" + fi + done + + _NUMBER="0" + for _FLAVOUR in ${LB_LINUX_FLAVOURS} + do + _NUMBER="$((${_NUMBER} + 1))" + if [ "${_FLAVOUR}" = "amd64" ] ; then + AMD64_KERNEL="vmlinuz${_NUMBER}" + AMD64_INITRD="initrd${_NUMBER}.img" + fi + + if [ "${_FLAVOUR}" = "486" ] ; then + _486_KERNEL="vmlinuz${_NUMBER}" + _486_INITRD="initrd${_NUMBER}.img" + fi + done + + _NUMBER="0" + + for _FLAVOUR in ${LB_LINUX_FLAVOURS} + do + _NUMBER="$((${_NUMBER} + 1))" + + if [ "${_NUMBER}" -gt 1 ] + then + Grub_live_entry "live (${_FLAVOUR})" "${INITFS}/vmlinuz${_NUMBER}" "${INITFS}/initrd${_NUMBER}.img" "${LB_BOOTAPPEND_LIVE}" + Grub_live_entry "live (${_FLAVOUR}) (failsafe mode)" "${INITFS}/vmlinuz${_NUMBER}" "${INITFS}/initrd${_NUMBER}.img" "${LB_BOOTAPPEND_LIVE_FAILSAFE}" + + else + if [ "${_AMD64_486_NUMBER}" -ge 2 ] ; then + + Grub_live_autodetect_entry "live (autodetect)" \ + "${INITFS}/${AMD64_KERNEL}" \ + "${INITFS}/${AMD64_INITRD}" \ + "${INITFS}/${_486_KERNEL}" \ + "${INITFS}/${_486_INITRD}" + fi + + Grub_live_entry "live (${_FLAVOUR})" "${INITFS}/vmlinuz${_NUMBER}" "${INITFS}/initrd${_NUMBER}.img" "${LB_BOOTAPPEND_LIVE}" + Grub_live_entry "live (${_FLAVOUR}) (failsafe mode)" "${INITFS}/vmlinuz${_NUMBER}" "${INITFS}/initrd${_NUMBER}.img" "${LB_BOOTAPPEND_LIVE_FAILSAFE}" + fi + + done + + ;; + esac + #fi +fi +LINUX_LIVE="$(/bin/echo ${LINUX_LIVE} | sed -e 's|binary||g' -e 's|//|/|g')" + +# Assembling memtest configuration +if [ -f "${DESTDIR_LIVE}"/memtest ] +then + MEMTEST="#\t \"Other\"\n" + MEMTEST="${MEMTEST}\nmenuentry\t\"${LB_MEMTEST}\" {\nlinux16\t${INITFS}/memtest\n}" + MEMTEST="$(/bin/echo ${MEMTEST} | sed -e 's|//|/|g')" +fi + +# Copying templates +mkdir -p binary/boot/grub +cp "${_SOURCE}"/grub.cfg binary/boot/grub/loopback.cfg + +sed -i -e "s|LINUX_LIVE|${LINUX_LIVE}|" -e "s|LINUX_INSTALL||" -e "s|MEMTEST|${MEMTEST}|" binary/boot/grub/loopback.cfg +sed -i -e "s#LB_BOOTAPPEND_INSTALL##" -e "s#LB_BOOTAPPEND_LIVE#${LB_BOOTAPPEND_LIVE}#" binary/boot/grub/loopback.cfg + +sed -i -e 's|\ $||g' binary/boot/grub/loopback.cfg + +# Creating stage file +Create_stagefile .build/binary_loopback_cfg diff --git a/system-build/scripts/build/binary_manifest b/system-build/scripts/build/binary_manifest new file mode 100755 index 0000000..55c6520 --- /dev/null +++ b/system-build/scripts/build/binary_manifest @@ -0,0 +1,68 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'create manifest')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +if [ "${LB_CHROOT_FILESYSTEM}" = "none" ] +then + exit 0 +fi + +Echo_message "Begin creating manifest..." + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +# Checking stage file +Check_stagefile .build/binary_manifest + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +case "${LB_INITRAMFS}" in + system-boot) + INITFS="live" + SUFFIX="packages" + ;; + + *) + INITFS="boot" + SUFFIX="packages" + ;; +esac + +# Add filesystem.packages +cp chroot.packages.live "binary/${INITFS}/filesystem.${SUFFIX}" +echo "$(diff chroot.packages.live chroot.packages.install | awk '/^< / { print $2 }')" \ + > "binary/${INITFS}/filesystem.${SUFFIX}-remove" + +cp chroot.packages.live ${LIVE_IMAGE_NAME}-${LB_ARCHITECTURES}.packages + +cp chroot.files ${LIVE_IMAGE_NAME}-${LB_ARCHITECTURES}.files + +# Creating stage file +Create_stagefile .build/binary_manifest diff --git a/system-build/scripts/build/binary_memtest b/system-build/scripts/build/binary_memtest new file mode 100755 index 0000000..1ce4195 --- /dev/null +++ b/system-build/scripts/build/binary_memtest @@ -0,0 +1,120 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'installs a memtest into binary')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +if [ "${LB_MEMTEST}" = "false" ] || [ "${LB_MEMTEST}" = "none" ] || [ "${LB_CHROOT_FILESYSTEM}" = "none" ] +then + exit 0 +fi + +Echo_message "Begin installing memtest..." + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +# Checking stage file +Check_stagefile .build/binary_memtest + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +if [ "${LB_ARCHITECTURES}" != "amd64" ] && [ "${LB_ARCHITECTURES}" != "i386" ] +then + Echo_warning "skipping binary_memtest, foreign architecture." + exit 0 +fi + +if [ "${LB_BUILD_WITH_CHROOT}" = "true" ] +then + + if [ -f chroot/usr/sbin/grub ] && [ ! -f chroot/boot/grub/menu.lst ] + then + GRUB="yes" + + mkdir -p chroot/boot/grub + touch chroot/boot/grub/menu.lst + fi +fi + +# Checking depends +case "${LB_MEMTEST}" in + memtest86) + Check_package chroot /boot/memtest86.bin memtest86 + ;; + + memtest86+) + Check_package chroot /boot/memtest86+.bin memtest86+ + ;; +esac + +# Restoring cache +Restore_cache cache/packages.binary + +# Installing depends +Install_package + +# Setting destination directory +case "${LB_INITRAMFS}" in + system-boot) + DESTDIR="binary/live" + ;; + + *) + DESTDIR="binary/boot" + ;; +esac + +Check_multiarchitectures + +# Creating directory +mkdir -p "${DESTDIR}" + +# Installing memtest +case "${LB_BUILD_WITH_CHROOT}" in + true) + cp chroot/boot/${LB_MEMTEST}.bin "${DESTDIR}"/memtest + ;; + + false) + cp /boot/${LB_MEMTEST}.bin "${DESTDIR}"/memtest + ;; +esac + +# Saving cache +Save_cache cache/packages.binary + +# Removing depends +Remove_package + +if [ "${GRUB}" ] +then + rm -rf chroot/boot/grub +fi + +# Creating stage file +Create_stagefile .build/binary_memtest diff --git a/system-build/scripts/build/binary_netboot b/system-build/scripts/build/binary_netboot new file mode 100755 index 0000000..d8cfe51 --- /dev/null +++ b/system-build/scripts/build/binary_netboot @@ -0,0 +1,113 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'build netboot binary image')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +if ! In_list netboot "${LIVE_IMAGE_TYPE}" +then + exit 0 +fi + +if [ "${LB_NET_TARBALL}" = "false" ] +then + exit 0 +fi + +Echo_message "Begin building binary netboot image..." + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +# Checking stage file +Check_stagefile .build/binary_netboot + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +# Remove old binary +rm -f ${LIVE_IMAGE_NAME}-${LB_ARCHITECTURES}.netboot.tar ${LIVE_IMAGE_NAME}-${LB_ARCHITECTURES}.netboot.tar.gz ${LIVE_IMAGE_NAME}-${LB_ARCHITECTURES}.netboot.tar.bz2 ${LIVE_IMAGE_NAME}-${LB_ARCHITECTURES}.netboot.tar.xz ${LIVE_IMAGE_NAME}-${LB_ARCHITECTURES}.netboot.tar.xz + +# Creating image file +ROOT_DIR=$(basename ${LB_NET_ROOT_PATH}) + +if [ "${ROOT_DIR}" = "chroot" ] +then + mv chroot chroot.tmp +fi + +if [ "${ROOT_DIR}" != "binary" ] +then + mv binary ${ROOT_DIR} +fi + +mkdir binary.tmp +mv ${ROOT_DIR} tftpboot binary.tmp +cd binary.tmp + +# Moving kernel and initrd image arround +mkdir tftpboot/live +mv */live/vmlinuz* */live/initrd* tftpboot/live + +tar cf ../${LIVE_IMAGE_NAME}-${LB_ARCHITECTURES}.netboot.tar * + +case "${LB_COMPRESSION}" in + bzip2) + bzip2 ${BZIP2_OPTIONS} ../${LIVE_IMAGE_NAME}-${LB_ARCHITECTURES}.netboot.tar + ;; + + gzip) + gzip ${GZIP_OPTIONS} ../${LIVE_IMAGE_NAME}-${LB_ARCHITECTURES}.netboot.tar + ;; + + lzip) + lzip ${LZIP_OPTIONS} ../${LIVE_IMAGE_NAME}-${LB_ARCHITECTURES}.netboot.tar + ;; + + xz) + xz ${XZ_OPTIONS} ../${LIVE_IMAGE_NAME}-${LB_ARCHITECTURES}.netboot.tar + ;; + + none) + ;; +esac + +mv * ../ +cd "${OLDPWD}" +rmdir binary.tmp + +if [ "${ROOT_DIR}" != "binary" ] +then + mv ${ROOT_DIR} binary +fi + +if [ "${ROOT_DIR}" = "chroot" ] +then + mv chroot.tmp chroot +fi + +# Creating stage file +Create_stagefile .build/binary_netboot diff --git a/system-build/scripts/build/binary_package-lists b/system-build/scripts/build/binary_package-lists new file mode 100755 index 0000000..fc47154 --- /dev/null +++ b/system-build/scripts/build/binary_package-lists @@ -0,0 +1,178 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'install local packages into binary')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +Echo_message "Begin installing local package lists..." + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +# Checking stage file +Check_stagefile .build/binary_package-lists + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +case "${LB_MODE}" in + progress-linux) + DISTS="installer/dists" + POOL="installer/pool" + ;; + + *) + DISTS="dists" + POOL="pool" + ;; +esac + +if ls config/package-lists/*.list > /dev/null 2>&1 || \ + ls config/package-lists/*.list.binary > /dev/null 2>&1 +then + # Check depends + Check_package host /usr/bin/apt-ftparchive apt-utils + + case "${LB_BUILD_WITH_CHROOT}" in + true) + # Restoring cache + Restore_cache cache/packages.chroot + + # Check depends + Check_package chroot /usr/bin/grep-aptavail dctrl-tools + + # Installing depends + Install_package + ;; + + false) + Check_package host /usr/bin/grep-aptavail dctrl-tools + ;; + esac + + if [ -e "${LIVE_BUILD}/share/bin/Packages" ] + then + cp "${LIVE_BUILD}/share/bin/Packages" chroot/bin + else + cp /usr/share/live/build/bin/Packages chroot/bin + fi + + 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 + + for LIST in config/package-lists/*.list \ + config/package-lists/*.list.binary + do + if [ -e "${LIST}" ] + then + # Generate package list + Expand_packagelist "${LIST}" "config/package-lists" > chroot/root/"$(basename ${LIST})" + + # Downloading additional packages + Chroot chroot "xargs --no-run-if-empty --arg-file=/root/$(basename ${LIST}) apt-get ${APT_OPTIONS} -o Dir::Cache=/binary.deb --download-only install" + + # Remove package list + rm chroot/root/"$(basename ${LIST})" + fi + done + + for FILE in chroot/binary.deb/archives/*.deb + do + if [ ! -e ${FILE} ]; then + break # Do nothing if the package lists were empty... + fi + + SOURCE="$(dpkg -f ${FILE} Source | awk '{ print $1 }')" + SECTION="$(dpkg -f ${FILE} Section | 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 + + if echo "${SECTION}" | grep -qs contrib + then + SECTION="contrib" + elif echo "${SECTION}" | grep -qs non-free + then + SECTION="non-free" + else + SECTION="main" + fi + + # Install directory + mkdir -p binary/${POOL}/${SECTION}/"${LETTER}"/"${SOURCE}" + + # Move files + mv "${FILE}" binary/${POOL}/${SECTION}/"${LETTER}"/"${SOURCE}" + done + + cd binary + + for SECTION in ${POOL}/* + do + if [ ! -d "${SECTION}" ]; then + break # Do nothing if the package lists were empty... + fi + + SECTION="$(basename ${SECTION})" + + mkdir -p ${DISTS}/${LB_PARENT_DISTRIBUTION}/${SECTION}/binary-${LB_ARCHITECTURES} + apt-ftparchive packages ${POOL}/${SECTION} > ${DISTS}/${LB_PARENT_DISTRIBUTION}/${SECTION}/binary-${LB_ARCHITECTURES}/Packages + gzip -9 -c ${DISTS}/${LB_PARENT_DISTRIBUTION}/${SECTION}/binary-${LB_ARCHITECTURES}/Packages > ${DISTS}/${LB_PARENT_DISTRIBUTION}/${SECTION}/binary-${LB_ARCHITECTURES}/Packages.gz + done + + cd "${OLDPWD}" + + rm -f chroot/bin/Packages + + rm -rf chroot/binary.deb + mv chroot/var/lib/dpkg/status.tmp chroot/var/lib/dpkg/status + + case "${LB_BUILD_WITH_CHROOT}" in + true) + # Removing depends + Remove_package + + # Saving cache + Save_cache cache/packages.chroot + ;; + esac + + # Creating stage file + Create_stagefile .build/binary_package-lists +fi diff --git a/system-build/scripts/build/binary_rootfs b/system-build/scripts/build/binary_rootfs new file mode 100755 index 0000000..f230d17 --- /dev/null +++ b/system-build/scripts/build/binary_rootfs @@ -0,0 +1,462 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'build rootfs image')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +Echo_message "Begin building root filesystem image..." + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap .build/binary_chroot + +# Checking stage file +Check_stagefile .build/binary_rootfs + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +case "${LB_ARCHITECTURES}" in + amd64|i386) + LINUX="vmlinuz" + ;; + + powerpc) + LINUX="vmlinux" + ;; +esac + +case "${LB_INITRAMFS}" in + system-boot) + INITFS="live" + ;; + + *) + INITFS="boot" + ;; +esac + +# Creating directory +mkdir -p binary/${INITFS} + +for STAGE in ${LB_CACHE_STAGES} +do + if [ "${STAGE}" = "rootfs" ] && [ -d cache/binary_rootfs ] + then + # Removing old chroot + rm -rf binary/"${INITFS}"/filesystem.* + + # Restoring old cache + mkdir -p binary/"${INITFS}" + cp -a cache/binary_rootfs/filesystem.* binary/"${INITFS}" + + # Creating stage file + Create_stagefile .build/binary_rootfs + exit 0 + fi +done + +case "${LB_CHROOT_FILESYSTEM}" in + ext2|ext3|ext4) + # Checking depends + Check_package chroot /sbin/mkfs.${LB_CHROOT_FILESYSTEM} e2fsprogs + + # Restoring cache + Restore_cache cache/packages.binary + + # Installing depends + Install_package + + # Remove old image + if [ -f binary/${INITFS}/filesystem.${LB_CHROOT_FILESYSTEM} ] + then + rm -f binary/${INITFS}/filesystem.${LB_CHROOT_FILESYSTEM} + fi + + case "${LB_BUILD_WITH_CHROOT}" in + true) + DU_DIM="$(du -ms chroot/chroot | cut -f1)" + INODES="$(find chroot/chroot | wc -l)" + ;; + + false) + DU_DIM="$(du -ms chroot | cut -f1)" + INODES="$(find chroot | wc -l)" + ;; + esac + + REAL_DIM="$(Calculate_partition_size ${DU_DIM} ${LB_CHROOT_FILESYSTEM})" + REAL_INODES="$(Calculate_partition_size ${INODES} ${LB_CHROOT_FILESYSTEM})" + + case "${LB_BUILD_WITH_CHROOT}" in + true) + dd if=/dev/zero of=chroot/filesystem.${LB_CHROOT_FILESYSTEM} bs=1024k count=0 seek=${REAL_DIM} + + if ! Chroot chroot "test -s /etc/mtab" + then + Chroot chroot "ln -s /proc/mounts/mtab /etc/mtab" + FAKE_MTAB="true" + fi + + Chroot chroot "mkfs.${LB_CHROOT_FILESYSTEM} -F -b 1024 -N ${REAL_INODES} -m 0 filesystem.${LB_CHROOT_FILESYSTEM}" + + mkdir -p filesystem.tmp + mount -o loop chroot/filesystem.${LB_CHROOT_FILESYSTEM} filesystem.tmp + cp -a chroot/chroot/* filesystem.tmp + + if [ "${FAKE_MTAB}" = "true" ] + then + Chroot chroot "rm -f /etc/mtab" + fi + + umount filesystem.tmp + rmdir filesystem.tmp + + # Move image + mv chroot/filesystem.${LB_CHROOT_FILESYSTEM} binary/${INITFS} + + du -B 1 -s chroot/chroot | cut -f1 > binary/${INITFS}/filesystem.size + + if [ -e chroot/chroot.cache ] + then + rm -f .lock + mv chroot/chroot chroot.tmp + + lb chroot_archives binary remove ${@} + lb chroot_apt remove ${@} + lb chroot_hostname remove ${@} + lb chroot_resolv remove ${@} + lb chroot_hosts remove ${@} + lb chroot_sysv-rc remove ${@} + lb chroot_dpkg remove ${@} + lb chroot_debianchroot remove ${@} + lb chroot_sysfs remove ${@} + lb chroot_selinuxfs remove ${@} + lb chroot_proc remove ${@} + lb chroot_devpts remove ${@} + + rm -rf chroot + mv chroot.tmp chroot + + lb chroot_devpts install ${@} + lb chroot_proc install ${@} + lb chroot_selinuxfs install ${@} + lb chroot_sysfs install ${@} + lb chroot_debianchroot install ${@} + lb chroot_dpkg install ${@} + lb chroot_sysv-rc install ${@} + lb chroot_hosts install ${@} + lb chroot_resolv install ${@} + lb chroot_hostname install ${@} + lb chroot_apt install ${@} + lb chroot_archives binary install ${@} + + touch .lock + else + rm -rf chroot/chroot + + # Removing depends + Remove_package + fi + ;; + + false) + dd if=/dev/zero of=binary/${INITFS}/filesystem.${LB_CHROOT_FILESYSTEM} bs=1024k count=0 seek=${REAL_DIM} + mkfs.${LB_CHROOT_FILESYSTEM} -F -b 1024 -N ${REAL_INODES} -m 0 binary/${INITFS}/filesystem.${LB_CHROOT_FILESYSTEM} + + mkdir -p filesystem.tmp + mount -o loop binary/${INITFS}/filesystem.${LB_CHROOT_FILESYSTEM} filesystem.tmp + cp -a chroot/* filesystem.tmp + + umount filesystem.tmp + rmdir filesystem.tmp + ;; + esac + + # Saving cache + Save_cache cache/packages.binary + ;; + + jffs2) + # Checking depends + Check_package chroot /usr/sbin/mkfs.jffs2 mtd-tools + + # Restoring cache + Restore_cache cache/packages.binary + + # Installing depends + Install_package + + # Remove old jffs2 image + if [ -f binary/${INITFS}/filesystem.jffs2 ] + then + rm -f binary/${INITFS}/filesystem.jffs2 + fi + + if [ -n "${LB_JFFS2_ERASEBLOCK}" ] + then + JFFS2_OPTIONS="--eraseblock=${LB_JFFS2_ERASEBLOCK}" + fi + + case "${LB_BUILD_WITH_CHROOT}" in + true) + Chroot chroot "mkfs.jffs2 ${JFFS2_OPTIONS} --root=chroot --output filesystem.jffs2" + + # Move image + mv chroot/filesystem.jffs2 binary/${INITFS} + + if [ -e chroot/chroot.cache ] + then + rm -f .lock + mv chroot/chroot chroot.tmp + + lb chroot_archives binary remove ${@} + lb chroot_apt remove ${@} + lb chroot_hostname remove ${@} + lb chroot_resolv remove ${@} + lb chroot_hosts remove ${@} + lb chroot_sysv-rc remove ${@} + lb chroot_dpkg remove ${@} + lb chroot_debianchroot remove ${@} + lb chroot_sysfs remove ${@} + lb chroot_selinuxfs remove ${@} + lb chroot_proc remove ${@} + lb chroot_devpts remove ${@} + + rm -rf chroot + mv chroot.tmp chroot + + lb chroot_devpts install ${@} + lb chroot_proc install ${@} + lb chroot_selinuxfs install ${@} + lb chroot_sysfs install ${@} + lb chroot_debianchroot install ${@} + lb chroot_dpkg install ${@} + lb chroot_sysv-rc install ${@} + lb chroot_hosts install ${@} + lb chroot_resolv install ${@} + lb chroot_hostname install ${@} + lb chroot_apt install ${@} + lb chroot_archives binary install ${@} + + touch .lock + else + rm -rf chroot/chroot + + # Removing depends + Remove_package + fi + ;; + + false) + mkfs.jffs2 ${JFFS2_OPTIONS} --root=chroot --output binary/${INITFS}/filesystem.jffs2 + ;; + esac + + # Saving cache + Save_cache cache/packages.binary + ;; + + plain) + if [ -d binary/${INITFS}/filesystem.dir ] + then + rm -rf binary/${INITFS}/filesystem.dir + fi + + case "${LB_BUILD_WITH_CHROOT}" in + true) + mv chroot/chroot binary/${INITFS}/filesystem.dir + ;; + + false) + cp -a chroot binary/${INITFS}/filesystem.dir + ;; + esac + ;; + + squashfs) + # Checking depends + Check_package chroot /usr/share/doc/squashfs-tools squashfs-tools + + # Restoring cache + Restore_cache cache/packages.binary + + # Installing depends + Install_package + + Echo_message "Preparing squashfs image..." + Echo_message "This may take a while." + + # Remove old squashfs image + if [ -f binary/${INITFS}/filesystem.squashfs ] + then + rm -f binary/${INITFS}/filesystem.squashfs + fi + + # Remove stale squashfs image + rm -f chroot/filesystem.squashfs + + MKSQUASHFS_OPTIONS="${MKSQUASHFS_OPTIONS} -no-progress" + + if [ "${_VERBOSE}" = "true" ] + then + MKSQUASHFS_OPTIONS="${MKSQUASHFS_OPTIONS} -info" + fi + + if [ -f config/rootfs/squashfs.sort ] + then + MKSQUASHFS_OPTIONS="${MKSQUASHFS_OPTIONS} -sort squashfs.sort" + + case "${LB_BUILD_WITH_CHROOT}" in + true) + cp config/rootfs/squashfs.sort chroot + ;; + + false) + cp config/rootfs/squashfs.sort . + ;; + esac + fi + + MKSQUASHFS_OPTIONS="${MKSQUASHFS_OPTIONS} -comp xz" + + case "${LB_BUILD_WITH_CHROOT}" in + true) + if [ -e config/rootfs/excludes ] + then + cp config/rootfs/excludes chroot/excludes + + MKSQUASHFS_OPTIONS="${MKSQUASHFS_OPTIONS} -wildcards -ef /excludes" + fi + + # Create image + Chroot chroot "mksquashfs chroot filesystem.squashfs ${MKSQUASHFS_OPTIONS}" + + rm -f chroot/chroot/excludes + + du -B 1 -s chroot/chroot | cut -f1 > binary/${INITFS}/filesystem.size + + # Move image + mv chroot/filesystem.squashfs binary/${INITFS} + rm -f chroot/squashfs.sort + + if [ -e chroot/chroot.cache ] + then + rm -f .lock + mv chroot/chroot chroot.tmp + + lb chroot_archives binary remove ${@} + lb chroot_apt remove ${@} + lb chroot_hostname remove ${@} + lb chroot_resolv remove ${@} + lb chroot_hosts remove ${@} + lb chroot_sysv-rc remove ${@} + lb chroot_dpkg remove ${@} + lb chroot_debianchroot remove ${@} + lb chroot_sysfs remove ${@} + lb chroot_selinuxfs remove ${@} + lb chroot_proc remove ${@} + lb chroot_devpts remove ${@} + + rm -rf chroot + mv chroot.tmp chroot + + lb chroot_devpts install ${@} + lb chroot_proc install ${@} + lb chroot_selinuxfs install ${@} + lb chroot_sysfs install ${@} + lb chroot_debianchroot install ${@} + lb chroot_dpkg install ${@} + lb chroot_sysv-rc install ${@} + lb chroot_hosts install ${@} + lb chroot_resolv install ${@} + lb chroot_hostname install ${@} + lb chroot_apt install ${@} + lb chroot_archives binary install ${@} + + touch .lock + else + rm -rf chroot/chroot + + # Removing depends + Remove_package + fi + + chmod 0644 binary/${INITFS}/filesystem.squashfs + ;; + + false) + if [ -e config/rootfs/excludes ] + then + MKSQUASHFS_OPTIONS="${MKSQUASHFS_OPTIONS} -wildcards -ef config/rootfs/excludes" + fi + + mksquashfs chroot binary/${INITFS}/filesystem.squashfs ${MKSQUASHFS_OPTIONS} + + du -B 1 -s chroot | cut -f1 > binary/${INITFS}/filesystem.size + ;; + esac + + # Saving cache + Save_cache cache/packages.binary + ;; + + none) + if [ -d binary ] + then + rm -rf binary + fi + + case "${LB_BUILD_WITH_CHROOT}" in + true) + mv chroot/chroot binary + ;; + + false) + Echo_message "This may take a while." + cp -a chroot binary + ;; + esac + ;; + +esac + +for STAGE in ${LB_CACHE_STAGES} +do + if [ "${STAGE}" = "rootfs" ] + then + rm -rf cache/binary_rootfs + + mkdir -p cache/binary_rootfs + + if [ "${LB_CHROOT_FILESYSTEM}" != "none" ] + then + cp -a binary/"${INITFS}"/filesystem.* cache/binary_rootfs + fi + fi +done + +# Creating stage file +Create_stagefile .build/binary_rootfs diff --git a/system-build/scripts/build/binary_syslinux b/system-build/scripts/build/binary_syslinux new file mode 100755 index 0000000..3224d21 --- /dev/null +++ b/system-build/scripts/build/binary_syslinux @@ -0,0 +1,349 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'installs syslinux into binary')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +FOUND_MYSELF="" +OLDIFS="$IFS" +IFS="," +for BOOTLOADER in ${LB_BOOTLOADERS} +do + + case ${BOOTLOADER} in + "syslinux" ) + FOUND_MYSELF="True" + break ;; + esac + +done +IFS="$OLDIFS" + +if [ -z ${FOUND_MYSELF} ] ; then + exit 0 +fi + +Echo_message "Begin installing syslinux..." + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +# Checking stage file +Check_stagefile .build/binary_syslinux + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +# Check architecture +Check_architectures amd64 i386 +Check_crossarchitectures + +case "${LB_INITRAMFS}" in + *) + _INITRAMFS="live" + ;; +esac + +# Assembling image specifics +case "${LIVE_IMAGE_TYPE}" in + iso*) + _BOOTLOADER="isolinux" + + case "${LB_MODE}" in + progress-linux) + _TARGET="binary/boot" + ;; + + *) + _TARGET="binary/isolinux" + ;; + esac + ;; + + netboot) + _BOOTLOADER="pxelinux" + _TARGET="tftpboot" + ;; + + hdd*|*) + case ${LB_BINARY_FILESYSTEM} in + fat*|ntfs) + _BOOTLOADER=syslinux + + case "${LB_MODE}" in + progress-linux) + _TARGET="binary/boot" + ;; + + *) + _TARGET="binary/syslinux" + ;; + esac + ;; + + ext[234]|btrfs) + _BOOTLOADER=extlinux + _TARGET="binary/boot/extlinux" + ;; + *) + Echo_error "syslinux/extlinux doesn't support ${LB_BINARY_FILESYSTEM}" + exit 1 + ;; + esac + ;; +esac + +if [ -e "config/bootloaders/${_BOOTLOADER}" ] +then + # Internal local copy + _SOURCE="config/bootloaders/${_BOOTLOADER}" +else + # Internal system copy + if [ -n "${LIVE_BUILD}" ] + then + _SOURCE="${LIVE_BUILD}/share/bootloaders/${_BOOTLOADER}" + else + _SOURCE="/usr/share/live/build/bootloaders/${_BOOTLOADER}" + fi +fi + +# Checking depends +case "${LB_BUILD_WITH_CHROOT}" in + true) + Check_package chroot /usr/lib/$(echo ${_BOOTLOADER} | tr [a-z] [A-Z]) ${_BOOTLOADER} + Check_package chroot /usr/lib/syslinux syslinux-common + + if ls "${_SOURCE}"/*.svg* > /dev/null 2>&1 + then + Check_package chroot /usr/bin/rsvg-convert librsvg2-bin + fi + ;; + + false) + if [ ! -e "/usr/share/$(echo ${_BOOTLOADER} | tr [a-z] [A-Z])" ] + then + Echo_error "/usr/share/$(echo ${_BOOTLOADER} | tr [a-z] [A-Z])" + exit 1 + fi + + if [ ! -e /usr/lib/syslinux ] + then + # syslinux-common + Echo_error "/usr/lib/syslinux - no such directory" + exit 1 + fi + + if ls "${_SOURCE}"/*.svg* > /dev/null 2>&1 + then + if [ ! -e /usr/bin/rsvg-convert ] + then + # librsvg2-bin + Echo_error "/usr/bin/rsvg-convert - no such file" + exit 1 + fi + fi + ;; +esac + +# Restoring cache +Restore_cache cache/packages.binary + +# Installing depends +Install_package + +# Copying files +case "${LB_BUILD_WITH_CHROOT}" in + true) + mkdir -p ${_TARGET} + + # Copy in two steps since the theme can have absolute symlinks and would therefore not be dereferenced correctly + cp -a ${_SOURCE} chroot/root + Chroot chroot cp -aL /root/$(basename ${_SOURCE}) /root/$(basename ${_SOURCE}).tmp > /dev/null 2>&1 || true + cp -a chroot/root/$(basename ${_SOURCE}).tmp/* ${_TARGET} + rm -rf chroot/root/$(basename ${_SOURCE}) chroot/root/$(basename ${_SOURCE}).tmp + ;; + + false) + mkdir -p ${_TARGET} + + cp -aL ${_SOURCE}/* ${_TARGET} > /dev/null 2>&1 || true + ;; +esac + +# Configuring files +if [ -e "${_TARGET}/live.cfg.in" ] +then + # This is all rather suboptimal.. needs prettifying at some point + _FLAVOURS="$(echo ${LB_LINUX_FLAVOURS} | wc -w)" + + case "${_FLAVOURS}" in + 1) + # If multiple initrd images are being generated (by DKMS packages, etc), + # we likely only want the latest version. + mv $(ls -r1 --sort=version binary/${_INITRAMFS}/vmlinuz-* | head -n 1) binary/${_INITRAMFS}/vmlinuz + mv $(ls -r1 --sort=version binary/${_INITRAMFS}/initrd.img-* | head -n 1) binary/${_INITRAMFS}/initrd.img + + sed -e "s|@FLAVOUR@|${LB_LINUX_FLAVOURS}|g" \ + -e "s|@LINUX@|/${_INITRAMFS}/vmlinuz|g" \ + -e "s|@INITRD@|/${_INITRAMFS}/initrd.img|g" \ + "${_TARGET}/live.cfg.in" >> "${_TARGET}/live.cfg" + + rm -f "${_TARGET}/live.cfg.in" + ;; + + *) + _NUMBER="0" + + for _FLAVOUR in ${LB_LINUX_FLAVOURS} + do + _NUMBER="$((${_NUMBER} + 1))" + + mv binary/${_INITRAMFS}/vmlinuz-*-${_FLAVOUR} binary/${_INITRAMFS}/vmlinuz${_NUMBER} + mv binary/${_INITRAMFS}/initrd.img-*-${_FLAVOUR} binary/${_INITRAMFS}/initrd${_NUMBER}.img + + if [ "${_NUMBER}" -gt 1 ] + then + echo "" >> "${_TARGET}/live.cfg" + grep -v 'menu default' "${_TARGET}/live.cfg.in" >> "${_TARGET}/live.cfg" + else + cat "${_TARGET}/live.cfg.in" >> "${_TARGET}/live.cfg" + fi + + sed -i -e "s|@FLAVOUR@|${_FLAVOUR}|g" \ + -e "s|@LINUX@|/${_INITRAMFS}/vmlinuz${_NUMBER}|g" \ + -e "s|@INITRD@|/${_INITRAMFS}/initrd${_NUMBER}.img|g" \ + "${_TARGET}/live.cfg" + done + + rm -f "${_TARGET}/live.cfg.in" + ;; + esac +fi + +if [ -e chroot/etc/os-release ] +then + _VERSION="$(. chroot/etc/os-release && echo ${VERSION_ID})" +fi + +_VERSION="${_VERSION:-none}" + +_DISTRIBUTION="${LB_DISTRIBUTION}" +_ARCHITECTURE="${LB_ARCHITECTURES}" + +_DATE=$(date -R) +_YEAR="$(date +%Y)" +_MONTH="$(date +%m)" +_DAY="$(date +%d)" +_HOUR="$(date +%H)" +_MINUTE="$(date +%M)" +_SECOND="$(date +%S)" + +_LINUX_VERSIONS="$(for _LINUX in chroot/boot/vmlinuz-* ; do chroot chroot apt-cache policy $(basename ${_LINUX} | sed -e 's|vmlinuz-|linux-image-|') | awk '/Installed: / { print $2 }' ; done | sort -Vru | tr "\n" " ")" + +_SYSTEM_BUILD_VERSION="$(lb --version)" +_SYSTEM_BOOT_VERSION="$(chroot chroot apt-cache policy open-infrastructure-system-boot | awk '/Installed: / { print $2 }')" +_SYSTEM_CONFIG_VERSION="$(chroot chroot apt-cache policy open-infrastructure-system-config | awk '/Installed: / { print $2 }')" + +case "${LB_MODE}" in + progress-linux) + _PROJECT="Progress Linux" + ;; + + *) + _PROJECT="Debian GNU/Linux" + ;; +esac + +for _FILE in "${_TARGET}"/*.cfg ${_TARGET}/*.svg +do + if [ -e "${_FILE}" ] && [ ! -d "${_FILE}" ] + then + sed -i -e "s#@APPEND_LIVE@#${LB_BOOTAPPEND_LIVE}#g" \ + -e "s#@APPEND_LIVE_FAILSAFE@#${LB_BOOTAPPEND_LIVE_FAILSAFE}#g" \ + -e "s#@APPEND_INSTALL@#${LB_BOOTAPPEND_INSTALL}#g" \ + -e "s#@APPEND_INSTALL_FAILSAFE@#${LB_BOOTAPPEND_INSTALL_FAILSAFE}#g" \ + -e "s|@PROJECT@|${_PROJECT}|g" \ + -e "s|@DISTRIBUTION@|${_DISTRIBUTION}|g" \ + -e "s|@PARENT_DISTRIBUTION@|${LB_PARENT_DISTRIBUTION}|g" \ + -e "s|@VERSION@|${_VERSION}|g" \ + -e "s|@ARCHITECTURE@|${_ARCHITECTURE}|g" \ + -e "s|@DATE@|${_DATE}|g" \ + -e "s|@YEAR@|${_YEAR}|g" \ + -e "s|@MONTH@|${_MONTH}|g" \ + -e "s|@DAY@|${_DAY}|g" \ + -e "s|@HOUR@|${_HOUR}|g" \ + -e "s|@MINUTE@|${_MINUTE}|g" \ + -e "s|@SECOND@|${_SECOND}|g" \ + -e "s|@LINUX_VERSIONS@|${_LINUX_VERSIONS}|g" \ + -e "s|@SYSTEM_BUILD_VERSION@|${_SYSTEM_BUILD_VERSION}|g" \ + -e "s|@SYSTEM_BOOT_VERSION@|${_SYSTEM_BOOT_VERSION}|g" \ + -e "s|@SYSTEM_CONFIG_VERSION@|${_SYSTEM_CONFIG_VERSION}|g" \ + "${_FILE}" + fi +done + +if [ -e "${_TARGET}/splash.svg" ] +then + case "${LB_BUILD_WITH_CHROOT}" in + true) + cp "${_TARGET}/splash.svg" chroot + Chroot chroot "rsvg-convert --format png --height 480 --width 640 splash.svg -o splash.png" + mv chroot/splash.png "${_TARGET}" + rm -f chroot/splash.svg + ;; + + false) + rsvg-convert --format png --height 480 --width 640 "${_TARGET}/splash.svg" -o "${_TARGET}/splash.png" + ;; + esac + + rm -f "${_TARGET}/splash.svg" +fi + +case "${LB_MODE}" in + progress-linux) + for _FILE in "${_TARGET}/isolinux.bin" "${_TARGET}/isolinux.cfg" "${_TARGET}/syslinux.cfg" + do + if [ -e "${_FILE}" ] + then + mv "${_FILE}" "${_TARGET}/$(echo ${_FILE} | sed -e 's|.*linux|boot|')" + fi + done + ;; +esac + +case "${LB_BUILD_WITH_CHROOT}" in + true) + # Saving cache + Save_cache cache/packages.binary + + # Removing depends + Remove_package + ;; +esac + +# Creating stage file +Create_stagefile .build/binary_syslinux diff --git a/system-build/scripts/build/binary_tar b/system-build/scripts/build/binary_tar new file mode 100755 index 0000000..2200586 --- /dev/null +++ b/system-build/scripts/build/binary_tar @@ -0,0 +1,73 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'build binary tarball')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +if ! In_list tar "${LIVE_IMAGE_TYPE}" +then + exit 0 +fi + +Echo_message "Begin building binary tarball..." + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +# Checking stage file +Check_stagefile .build/binary_tar + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +# Remove old binary +rm -f ${LIVE_IMAGE_NAME}-${LB_ARCHITECTURES}.tar.bz2 ${LIVE_IMAGE_NAME}-${LB_ARCHITECTURES}.tar.gz ${LIVE_IMAGE_NAME}-${LB_ARCHITECTURES}.tar.lz ${LIVE_IMAGE_NAME}-${LB_ARCHITECTURES}.tar + +tar cf ${LIVE_IMAGE_NAME}-${LB_ARCHITECTURES}.tar.tar binary + +case "${LB_COMPRESSION}" in + bzip2) + bzip2 ${BZIP2_OPTIONS} ${LIVE_IMAGE_NAME}-${LB_ARCHITECTURES}.tar.tar + ;; + + gzip) + gzip ${GZIP_OPTIONS} ${LIVE_IMAGE_NAME}-${LB_ARCHITECTURES}.tar.tar + ;; + + lzip) + lzip ${LZIP_OPTIONS} ${LIVE_IMAGE_NAME}-${LB_ARCHITECTURES}.tar.tar + ;; + + xz) + xz ${XZ_OPTIONS} ${LIVE_IMAGE_NAME}-${LB_ARCHITECTURES}.tar.tar + ;; + + none) + ;; +esac + +# Creating stage file +Create_stagefile .build/binary_tar diff --git a/system-build/scripts/build/binary_win32-loader b/system-build/scripts/build/binary_win32-loader new file mode 100755 index 0000000..b04103a --- /dev/null +++ b/system-build/scripts/build/binary_win32-loader @@ -0,0 +1,135 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'copy win32-loader into binary')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +if [ "${LB_WIN32_LOADER}" != "true" ] +then + exit 0 +fi + +Echo_message "Begin copying win32-loader..." + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +# Checking stage file +Check_stagefile .build/binary_win32-loader + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +case "${LB_MODE}" in + progress-linux) + RUN_LABEL="Run Progress Linux" + ;; + + *) + RUN_LABEL="Run Debian GNU/Linux" + ;; +esac + +case "${LB_ARCHITECTURES}" in + amd64|i386) + if [ "${LB_BUILD_WITH_CHROOT}" = "true" ] + then + # Checking depends + Check_package chroot /usr/share/win32/win32-loader.exe win32-loader + + # Restoring cache + Restore_cache cache/packages.binary + + # Installing depends + Install_package + + # Copying win32-loader + cp -r chroot/usr/share/win32/* binary + else + cp -r usr/share/win32/* binary + fi + + mv binary/win32-loader.exe binary/setup.exe + mv binary/win32-loader/g2ldr* binary + rmdir binary/win32-loader > /dev/null 2>&1 || true + +cat > binary/autorun.inf << EOF +[autorun] +open=setup.exe +icon=setup.exe,0 +label=${RUN_LABEL} + +[Content] +MusicFiles=false +PictureFiles=false +VideoFiles=false +EOF + + if [ "${LB_DEBIAN_INSTALLER}" != "false" ] + then + +cat > binary/win32-loader.ini << EOF +[installer] +kernel=linux +arch=${LB_ARCHITECTURES} +default_desktop=gnome +${LB_ARCHITECTURES}/linux=install/vmlinuz +${LB_ARCHITECTURES}/initrd=install/initrd.gz +EOF + + if [ -e binary/install/gtk ] + then + +cat >> binary/win32-loader.ini << EOF +${LB_ARCHITECTURES}/gtk/linux=install/vmlinuz +${LB_ARCHITECTURES}/gtk/initrd=install/gtk/initrd.gz +EOF + + fi + +cat >> binary/win32-loader.ini << EOF + +[grub] +g2ldr=g2ldr +g2ldr.mbr=g2ldr.mbr +EOF + + fi + + # Saving cache + Save_cache cache/packages.binary + + # Removing depends + Remove_package + ;; + + *) + Echo_warning "win32-loader inclusion is set to true but not compatible with your architecture, ignoring." + ;; +esac + +# Creating stage file +Create_stagefile .build/binary_win32-loader diff --git a/system-build/scripts/build/binary_zsync b/system-build/scripts/build/binary_zsync new file mode 100755 index 0000000..83fdb55 --- /dev/null +++ b/system-build/scripts/build/binary_zsync @@ -0,0 +1,130 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'build zsync control files')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +if [ "${LIVE_IMAGE_TYPE}" != "iso" ] && [ "${LIVE_IMAGE_TYPE}" != "iso-hybrid" ] +then + exit 0 +fi + +if [ "${LB_ZSYNC}" != "true" ] +then + exit 0 +fi + +Echo_message "Begin building zsync control files..." + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +# Checking stage file +Check_stagefile .build/binary_zsync + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +# Checking depends +Check_package chroot /usr/bin/zsyncmake zsync + +# Restoring cache +Restore_cache cache/packages.binary + +# Installing depends +Install_package + +case "${LIVE_IMAGE_TYPE}" in + iso) + _IMAGES="${LIVE_IMAGE_NAME}-${LB_ARCHITECTURES}.iso" + ;; + + iso-hybrid) + _IMAGES="${LIVE_IMAGE_NAME}-${LB_ARCHITECTURES}.hybrid.iso" + ;; + + hdd) + _IMAGES="${LIVE_IMAGE_NAME}-${LB_ARCHITECTURES}.img" + ;; + + net) + _IMAGES="${LIVE_IMAGE_NAME}-${LB_ARCHITECTURES}.netboot.tar*" + ;; + + tar) + _IMAGES="${LIVE_IMAGE_NAME}-${LB_ARCHITECTURES}.tar*" + ;; +esac + +for _IMAGE in ${_IMAGES} +do + if [ -e "${_IMAGE}" ] + then + case "${LB_BUILD_WITH_CHROOT}" in + true) + mv ${_IMAGE} chroot + Chroot chroot "zsyncmake -C -b 2048 -u ${_IMAGE} ${_IMAGE}" + mv chroot/${_IMAGE} chroot/${_IMAGE}.zsync ./ + ;; + + false) + zsyncmake -C -b 2048 -u "${_IMAGE}" "${_IMAGE}" + ;; + esac + + case "${LB_COMPRESSION}" in + bzip2) + bzip2 ${BZIP2_OPTIONS} ${_IMAGE}.zsync + ;; + + gzip) + gzip ${GZIP_OPTIONS} ${_IMAGE}.zsync + ;; + + lzip) + lzip ${LZIP_OPTIONS} ${_IMAGE}.zsync + ;; + + xz) + xz ${XZ_OPTIONS} ${_IMAGE}.zsync + ;; + + none) + ;; + esac + fi +done + +#CHECKSUMS + +# Saving cache +Save_cache cache/packages.binary + +# Removing depends +Remove_package + +# Creating stage file +Create_stagefile .build/binary_zsync diff --git a/system-build/scripts/build/bootstrap b/system-build/scripts/build/bootstrap new file mode 100755 index 0000000..48f2119 --- /dev/null +++ b/system-build/scripts/build/bootstrap @@ -0,0 +1,71 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Automatically populating config tree +if [ -x auto/config ] && [ ! -e .build/config ] +then + Echo_message "Automatically populating config tree." + lb config +fi + +# Setting static variables +DESCRIPTION="$(Echo 'bootstrap a Debian system')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +# Setup cleanup function +Setup_cleanup + +# Bootstrapping system +lb bootstrap_cache restore ${@} +lb bootstrap_debootstrap ${@} +lb bootstrap_archive-keys ${@} +lb bootstrap_cache save ${@} + +# Configuring chroot +lb chroot_devpts install ${@} +lb chroot_proc install ${@} +lb chroot_selinuxfs install ${@} +lb chroot_sysfs install ${@} +lb chroot_debianchroot install ${@} +lb chroot_dpkg install ${@} +lb chroot_tmpfs install ${@} +lb chroot_sysv-rc install ${@} +lb chroot_hosts install ${@} +lb chroot_resolv install ${@} +lb chroot_hostname install ${@} +lb chroot_apt install ${@} + +lb bootstrap_archives binary ${@} + +# Deconfiguring chroot +lb chroot_apt remove ${@} +lb chroot_hostname remove ${@} +lb chroot_resolv remove ${@} +lb chroot_hosts remove ${@} +lb chroot_sysv-rc remove ${@} +lb chroot_tmpfs remove ${@} +lb chroot_dpkg remove ${@} +lb chroot_debianchroot remove ${@} +lb chroot_sysfs remove ${@} +lb chroot_selinuxfs remove ${@} +lb chroot_proc remove ${@} +lb chroot_devpts remove ${@} diff --git a/system-build/scripts/build/bootstrap_archive-keys b/system-build/scripts/build/bootstrap_archive-keys new file mode 100755 index 0000000..3f4fd45 --- /dev/null +++ b/system-build/scripts/build/bootstrap_archive-keys @@ -0,0 +1,77 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'bootstrap non-Debian archive-signing-keys')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +# TODO: allow verification against user-specified keyring +# For now, we'll only validate against debian-keyring + +# TODO2: use chrooted validation rather than host system based one + +case "${LB_MODE}" in + progress-linux) + case "${LB_DISTRIBUTION}" in + artax*) + _KEYS="artax artax-backports" + ;; + + baureo*) + _KEYS="baureo baureo-backports" + ;; + + cairon*) + _KEYS="cairon cairon-backports" + ;; + esac + + _URL="${LB_MIRROR_CHROOT}/project/pgp" + ;; +esac + +for _KEY in ${_KEYS} +do + Echo_message "Fetching archive-key ${_KEY}..." + + wget -q "${_URL}/archive-key-${_KEY}.asc" -O chroot/key.asc + wget -q "${_URL}/archive-key-${_KEY}.asc.sig" -O chroot/key.asc.sig + + if [ -e /usr/bin/gpgv ] && [ -e /usr/share/keyrings/debian-keyring.gpg ] + then + Echo_message "Verifying archive-key ${_KEY} against debian-keyring..." + + /usr/bin/gpgv --quiet --keyring /usr/share/keyrings/debian-keyring.gpg chroot/key.asc.sig chroot/key.asc > /dev/null 2>&1 || { Echo_error "archive-key ${_KEY} has invalid signature."; return 1;} + else + Echo_warning "Skipping archive-key ${_KEY} verification, either gpgv or debian-keyring not available on host system..." + fi + + Echo_message "Importing archive-key ${_KEY}..." + + Chroot chroot "apt-key add key.asc" + rm -f chroot/key.asc chroot/key.asc.sig +done + +Chroot chroot "apt-get update" + +# Creating stage file +Create_stagefile .build/bootstrap_archive-keys diff --git a/system-build/scripts/build/bootstrap_archives b/system-build/scripts/build/bootstrap_archives new file mode 100755 index 0000000..4e07051 --- /dev/null +++ b/system-build/scripts/build/bootstrap_archives @@ -0,0 +1,273 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'manage /etc/apt/sources.list')" +HELP="" +USAGE="${PROGRAM} [--force]" + +_PASS="${1:-binary}" +if [ -n "${1}" ] +then + shift +fi + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +case "${LB_DERIVATIVE}" in + true) + _PARENT_FILE="sources.list.d/debian.list" + ;; + + false) + _PARENT_FILE="sources.list" + ;; +esac + +Echo_message "Configuring file /etc/apt/sources.list" + +# Checking stage file +Check_stagefile .build/chroot_archives + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +# Restoring cache +Restore_cache cache/packages.chroot + +# Configure custom sources.list + +if echo "${LB_PARENT_MIRROR_CHROOT}" | grep -q '^file:/' +then + Chroot_bind_path chroot "$(echo ${LB_PARENT_MIRROR_CHROOT} | sed -e 's|file:||')" +fi + +cat > chroot/etc/apt/${_PARENT_FILE} << EOF +deb ${LB_PARENT_MIRROR_CHROOT} ${LB_PARENT_DISTRIBUTION} ${LB_PARENT_ARCHIVE_AREAS} +EOF + +if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ] +then + echo "deb-src ${LB_PARENT_MIRROR_CHROOT} ${LB_PARENT_DISTRIBUTION} ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE} +fi + +if [ "${LB_DERIVATIVE}" = "true" ] +then + rm -f chroot/etc/apt/sources.list.d/${LB_MODE}.list + + _DISTRIBUTION="$(echo ${LB_DISTRIBUTION} | sed -e 's|-backports||')" + + echo "deb ${LB_MIRROR_CHROOT} ${_DISTRIBUTION} ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list + + if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ] + then + echo "deb-src ${LB_MIRROR_CHROOT} ${_DISTRIBUTION} ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list + fi +fi + +if [ "${LB_SECURITY}" = "true" ] +then + case "${LB_MODE}" in + debian|progress-linux) + case "${LB_PARENT_DISTRIBUTION}" in + sid) + + ;; + + *) + echo "deb ${LB_PARENT_MIRROR_CHROOT_SECURITY} ${LB_PARENT_DISTRIBUTION}/updates ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE} + + if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ] + then + echo "deb-src ${LB_PARENT_MIRROR_CHROOT_SECURITY} ${LB_PARENT_DISTRIBUTION}/updates ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE} + fi + ;; + esac + + if [ "${LB_MODE}" = progress-linux ] + then + echo "deb ${LB_MIRROR_CHROOT_SECURITY} ${_DISTRIBUTION}-security ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list + + if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ] + then + echo "deb-src ${LB_MIRROR_CHROOT_SECURITY} ${_DISTRIBUTION}-security ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list + fi + else + if [ "${LB_DERIVATIVE}" = "true" ] + then + echo "deb ${LB_MIRROR_CHROOT_SECURITY} ${_DISTRIBUTION}/updates ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list + + if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ] + then + echo "deb-src ${LB_MIRROR_CHROOT_SECURITY} ${_DISTRIBUTION}/updates ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list + fi + fi + fi + ;; + esac +fi + +if [ "${LB_UPDATES}" = "true" ] +then + echo "deb ${LB_PARENT_MIRROR_CHROOT} ${LB_PARENT_DISTRIBUTION}-updates ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE} + + if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ] + then + echo "deb-src ${LB_PARENT_MIRROR_CHROOT} ${LB_PARENT_DISTRIBUTION}-updates ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE} + fi + + if [ "${LB_DERIVATIVE}" = "true" ] + then + echo "deb ${LB_MIRROR_CHROOT} ${_DISTRIBUTION}-updates ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list + + if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ] + then + echo "deb-src ${LB_MIRROR_CHROOT} ${_DISTRIBUTION}-updates ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list + fi + fi +fi + +if [ "${LB_BACKPORTS}" = "true" ] +then + case "${LB_MODE}" in + debian) + if [ "${LB_PARENT_DISTRIBUTION}" != "sid" ] + then + echo "deb ${LB_PARENT_MIRROR_CHROOT} ${LB_PARENT_DISTRIBUTION}-backports ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE} + + if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ] + then + echo "deb-src ${LB_PARENT_MIRROR_CHROOT} ${LB_PARENT_DISTRIBUTION}-backports ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE} + fi + fi + ;; + esac + + if [ "${LB_DERIVATIVE}" = "true" ] + then + echo "deb ${LB_MIRROR_CHROOT} ${_DISTRIBUTION}-backports ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list + + if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ] + then + echo "deb-src ${LB_MIRROR_CHROOT} ${_DISTRIBUTION}-backports ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list + fi + fi +fi + +# Adding local apt sources (chroot) +for FILE in config/archives/*.list config/archives/*.list.chroot +do + if [ -e "${FILE}" ] + then + sed -e "s|@DISTRIBUTION@|${LB_DISTRIBUTION}|g" \ + -e "s|@PARENT_DISTRIBUTION@|${LB_PARENT_DISTRIBUTION}|g" \ + -e "s|@ARCHIVE_AREAS@|${LB_ARCHIVE_AREAS}|g" \ + -e "s|@PARENT_ARCHIVE_AREAS@|${LB_PARENT_ARCHIVE_AREAS}|g" \ + "${FILE}" > "chroot/etc/apt/sources.list.d/$(basename ${FILE} .chroot)" + + if [ "${_PASS}" != "source" ] && [ "${LB_APT_SOURCE_ARCHIVES}" = "false" ] + then + # Strip out source archives + sed "/^deb-src /d" "chroot/etc/apt/sources.list.d/$(basename ${FILE} .chroot)" + fi + fi +done + +# Adding local apt configuration (chroot) +for FILE in config/archives/*.conf config/archives/*.conf.chroot +do + if [ -e "${FILE}" ] + then + cp ${FILE} chroot/etc/apt/apt.conf.d/$(basename ${FILE} .chroot) + fi +done + +# Adding local apt preferences (chroot) +for FILE in config/archives/*.pref config/archives/*.pref.chroot +do + if [ -e "${FILE}" ] + then + cp ${FILE} chroot/etc/apt/preferences.d/$(basename ${FILE} .chroot) + fi +done + +# Check local archive keys +if Find_files config/archives/*.key || \ + Find_files config/archives/*.key.chroot +then + for FILE in config/archives/*.key \ + config/archives/*.key.chroot + do + if [ -e "${FILE}" ] + then + cp ${FILE} chroot/root + Chroot chroot "apt-key add /root/$(basename ${FILE})" + rm -f chroot/root/$(basename ${FILE}) + fi + done +fi + +# Check local keyring packages +if Find_files config/archives/*.deb +then + for PACKAGE in config/archives/*.deb + do + cp ${PACKAGE} chroot/root + Chroot chroot "dpkg -i /root/$(basename ${PACKAGE})" + rm -f chroot/root/$(basename ${PACKAGE}) + done +fi + +# Rebuild apt indices from scratch. +# Due to the fact that apt doesn't understand +# pinning on the fly, we need to manually remove +# the cached indices and rebuild them again. +rm -rf chroot/var/cache/apt/*.bin + +Apt chroot update + +# Installing keyring packages +if [ -n "${LB_KEYRING_PACKAGES}" ] +then + Apt chroot "install ${LB_KEYRING_PACKAGES}" +fi + +rm -rf chroot/var/cache/apt/*.bin + +Apt chroot update + +if [ "${LB_DERIVATIVE}" = "true" ] +then + Apt chroot install apt dpkg +fi + +Apt chroot "upgrade" +Apt chroot "dist-upgrade" + +# Saving cache +Save_cache cache/packages.chroot + +# Creating stage file +Create_stagefile .build/bootstrap_archives diff --git a/system-build/scripts/build/bootstrap_cache b/system-build/scripts/build/bootstrap_cache new file mode 100755 index 0000000..bef9e5e --- /dev/null +++ b/system-build/scripts/build/bootstrap_cache @@ -0,0 +1,86 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'cache bootstrap stage')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +# Check architecture +Check_crossarchitectures + +for STAGE in ${LB_CACHE_STAGES} +do + if [ "${STAGE}" = "bootstrap" ] + then + case "${1}" in + restore) + Echo_message "Restoring bootstrap stage from cache..." + + # Checking stage file + Check_stagefile .build/bootstrap_cache.restore + + if [ -d cache/bootstrap ] + then + # Checking lock file + Check_lockfile .lock + + # Creating lock file + Create_lockfile .lock + + # Removing old chroot + rm -rf chroot + + # Restoring old cache + cp -a cache/bootstrap chroot + + # Creating stage file + Create_stagefile .build/bootstrap_cache.restore + Create_stagefile .build/bootstrap + + exit 0 + fi + ;; + + save) + Echo_message "Saving bootstrap stage to cache..." + + # Checking stage file + Check_stagefile .build/bootstrap_cache.save + + # Checking lock file + Check_lockfile .lock + + # Creating lock file + Create_lockfile .lock + + rm -rf cache/bootstrap + + mkdir -p cache + + cp -a chroot cache/bootstrap + + # Creating stage file + Create_stagefile .build/bootstrap_cache.save + ;; + esac + fi +done diff --git a/system-build/scripts/build/bootstrap_debootstrap b/system-build/scripts/build/bootstrap_debootstrap new file mode 100755 index 0000000..b95475e --- /dev/null +++ b/system-build/scripts/build/bootstrap_debootstrap @@ -0,0 +1,138 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'bootstrap a Debian system with debootstrap(8)')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +if [ ! -x "$(which debootstrap 2>/dev/null)" ] +then + echo "E: debootstrap - command not found" + echo "I: debootstrap can be obtained from http://ftp.debian.org/debian/pool/main/d/debootstrap/" + echo "I: On Debian based systems, debootstrap can be installed with 'apt-get install debootstrap'." + exit 1 +fi + +# Check architecture +Check_crossarchitectures + +Echo_message "Begin bootstrapping system..." + +Check_package chroot bin/debootstrap debootstrap + +# Checking stage file +Check_stagefile .build/bootstrap +Check_stagefile .build/bootstrap_cache.restore + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +# Creating chroot directory +mkdir -p chroot + +# Setting debootstrap options +if [ -n "${LB_ARCHITECTURES}" ] +then + DEBOOTSTRAP_OPTIONS="${DEBOOTSTRAP_OPTIONS} --arch=${LB_ARCHITECTURES}" +fi + +if [ "${LB_ARCHIVE_AREAS}" != "main" ] +then + # Modify archive areas to remove leading/trailing whitespaces and replace other whitepspace with commas + DEBOOTSTRAP_OPTIONS="${DEBOOTSTRAP_OPTIONS} --components=$(echo ${LB_ARCHIVE_AREAS} | sed -e 's| |,|g')" +fi + +if [ "${_VERBOSE}" = "true" ] +then + DEBOOTSTRAP_OPTIONS="${DEBOOTSTRAP_OPTIONS} --verbose" +fi + +# If LB_APT_SECURE is false, do not check signatures of the Release file +# (requires debootstrap >= 1.0.30) +if [ "${LB_APT_SECURE}" = "false" ] && /usr/sbin/debootstrap --help | grep -qs '\-\-no-check-gpg' +then + DEBOOTSTRAP_OPTIONS="${DEBOOTSTRAP_OPTIONS} --no-check-gpg" +fi + +# Include apt-transport-https +if grep -qs '^deb https' config/archives/*.list || + grep -qs '^deb https' config/archives/*.list.* +then + DEBOOTSTRAP_OPTIONS="${DEBOOTSTRAP_OPTIONS} --include=apt-transport-https,ca-certificates" +fi + +if [ -x "/usr/sbin/debootstrap" ] +then + if [ "${LB_CACHE_PACKAGES}" = "true" ] + then + if ls cache/packages.bootstrap/*.deb > /dev/null 2>&1 + then + mkdir -p chroot/var/cache/apt/archives + cp cache/packages.bootstrap/*.deb chroot/var/cache/apt/archives + fi + + Echo_breakage "Running debootstrap (download-only)... " + debootstrap ${DEBOOTSTRAP_OPTIONS} --download-only "${LB_PARENT_DISTRIBUTION}" chroot "${LB_PARENT_MIRROR_BOOTSTRAP}" + + # Removing old cache + rm -f cache/packages.bootstrap/*.deb + + # Saving new cache + mkdir -p cache/packages.bootstrap + cp chroot/var/cache/apt/archives/*.deb cache/packages.bootstrap + fi + + Echo_breakage "Running debootstrap... " + + # Run appropriate bootstrap, i.e. foreign or regular bootstrap + if [ "${LB_BOOTSTRAP_QEMU_ARCHITECTURES}" = "${LB_ARCHITECTURES}" ]; then + + if [ -n "${LB_BOOTSTRAP_QEMU_EXCLUDE}" ] + then + DEBOOTSTRAP_OPTIONS="${DEBOOTSTRAP_OPTIONS} --exclude=$(echo ${LB_BOOTSTRAP_QEMU_EXCLUDE} | sed 's| *|,|g')" + fi + + Echo_message "Bootstrap will be foreign" + debootstrap ${DEBOOTSTRAP_OPTIONS} --foreign "${LB_PARENT_DISTRIBUTION}" chroot "${LB_PARENT_MIRROR_BOOTSTRAP}" + + Echo_message "Running debootstrap second stage under QEMU" + cp ${LB_BOOTSTRAP_QEMU_STATIC} chroot/usr/bin + Chroot chroot /bin/sh /debootstrap/debootstrap --second-stage + else + debootstrap ${DEBOOTSTRAP_OPTIONS} "${LB_PARENT_DISTRIBUTION}" chroot "${LB_PARENT_MIRROR_BOOTSTRAP}" + fi + + # Deconfiguring debootstrap configurations + rm -f chroot/etc/hosts + + # Removing bootstrap cache + rm -f chroot/var/cache/apt/archives/*.deb + + # Creating stage file + Create_stagefile .build/bootstrap +else + Echo_error "Can't process file /usr/bin/debootstrap (FIXME)" + exit 1 +fi diff --git a/system-build/scripts/build/build b/system-build/scripts/build/build new file mode 100755 index 0000000..18971ea --- /dev/null +++ b/system-build/scripts/build/build @@ -0,0 +1,84 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Automatically populating config tree +if [ -x auto/config ] && [ ! -e .build/config ] +then + Echo_message "Automatically populating config tree." + lb config +fi + +# Read meta config +if [ "${1}" != "noauto" ] && [ -x auto/build ] +then + Echo_message "Executing auto/build script." + ./auto/build "${@}" + exit ${?} +fi + +if [ "${1}" = "noauto" ] +then + shift +fi + +# Setting static variables +DESCRIPTION="$(Echo 'build a Debian Live system')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +if [ ! -d config ] +then + Echo_warning "No config/ directory; using defaults for all options" + lb config +fi + +if [ "$(pwd)" = "/" ] +then + Echo_error "Cannot build live image from the root directory (/)" + exit 1 +fi + +if echo $(pwd) | grep -qs " " +then + Echo_error "Cannot build live image from a directory containing spaces" + exit 1 +fi + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +# Checking defaults +Check_defaults + +Echo_message "live-build ${LIVE_BUILD_VERSION}" +Echo_message "Building config tree for a ${LB_MODE}/${LB_DISTRIBUTION}/${LB_ARCHITECTURES} system" + +# Bootstrapping system +lb bootstrap ${@} + +# Customizing chroot +lb chroot ${@} + +# Building installer images +lb installer ${@} + +# Building binary images +lb binary ${@} + +# Building source images +lb source ${@} diff --git a/system-build/scripts/build/chroot b/system-build/scripts/build/chroot new file mode 100755 index 0000000..d6277e6 --- /dev/null +++ b/system-build/scripts/build/chroot @@ -0,0 +1,92 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Automatically populating config tree +if [ -x auto/config ] && [ ! -e .build/config ] +then + Echo_message "Automatically populating config tree." + lb config +fi + +# Setting static variables +DESCRIPTION="$(Echo 'customize the Debian system')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +# Setup cleanup function +Setup_cleanup + +# Configuring chroot +lb chroot_cache restore ${@} +lb chroot_devpts install ${@} +lb chroot_proc install ${@} +lb chroot_selinuxfs install ${@} +lb chroot_sysfs install ${@} +lb chroot_debianchroot install ${@} +lb chroot_dpkg install ${@} +lb chroot_tmpfs install ${@} +lb chroot_sysv-rc install ${@} +lb chroot_hosts install ${@} +lb chroot_resolv install ${@} +lb chroot_hostname install ${@} +lb chroot_apt install ${@} +lb chroot_archives chroot install ${@} + +# Customizing chroot +lb chroot_linux-image ${@} +lb chroot_firmware ${@} +lb chroot_preseed ${@} + +for _PASS in install live +do + lb chroot_package-lists ${_PASS} ${@} + lb chroot_install-packages ${_PASS} ${@} + + if [ "${_PASS}" = install ] + then + Chroot chroot "dpkg-query -W" > chroot.packages.install + fi +done + +lb chroot_includes ${@} +lb chroot_hooks ${@} +lb chroot_hacks ${@} +lb chroot_interactive ${@} + +Chroot chroot "dpkg-query -W" > chroot.packages.live + +# Deconfiguring chroot +lb chroot_archives chroot remove ${@} +lb chroot_apt remove ${@} +lb chroot_hostname remove ${@} +lb chroot_resolv remove ${@} +lb chroot_hosts remove ${@} +lb chroot_sysv-rc remove ${@} +lb chroot_tmpfs remove ${@} +lb chroot_dpkg remove ${@} +lb chroot_debianchroot remove ${@} +lb chroot_sysfs remove ${@} +lb chroot_selinuxfs remove ${@} +lb chroot_proc remove ${@} +lb chroot_devpts remove ${@} +lb chroot_cache save ${@} + +Chroot chroot "ls -lR" > chroot.files diff --git a/system-build/scripts/build/chroot_apt b/system-build/scripts/build/chroot_apt new file mode 100755 index 0000000..5f7c2cc --- /dev/null +++ b/system-build/scripts/build/chroot_apt @@ -0,0 +1,315 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'manage /etc/apt/apt.conf')" +HELP="" +USAGE="${PROGRAM} {install|install-binary|remove} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +case "${1}" in + install|install-binary) + Echo_message "Configuring file /etc/apt/apt.conf" + + # Checking stage file + Check_stagefile .build/chroot_apt + + # Checking lock file + Check_lockfile .lock + + # Creating lock file + Create_lockfile .lock + + mkdir -p chroot/etc/apt/apt.conf.d + + # Configuring apt ftp proxy + if [ -n "${LB_APT_FTP_PROXY}" ] + then + echo "Acquire::ftp::Proxy \"${LB_APT_FTP_PROXY}\";" > chroot/etc/apt/apt.conf.d/00ftp-proxy + fi + + # Configuring apt http proxy + if [ -n "${LB_APT_HTTP_PROXY}" ] + then + echo "Acquire::http::Proxy \"${LB_APT_HTTP_PROXY}\";" > chroot/etc/apt/apt.conf.d/00http-proxy + fi + + # Configuring apt pipeline + if [ -n "${LB_APT_PIPELINE}" ] + then + echo "Acquire::http::Pipeline-Depth \"${LB_APT_PIPELINE}\";" > chroot/etc/apt/apt.conf.d/00pipeline + fi + + # Configuring apt recommends + case "${LB_APT_RECOMMENDS}" in + true) + echo "APT::Install-Recommends \"true\";" > chroot/etc/apt/apt.conf.d/00recommends + ;; + + false) + echo "APT::Install-Recommends \"false\";" > chroot/etc/apt/apt.conf.d/00recommends + ;; + esac + + # Configuring apt secure + case "${LB_APT_SECURE}" in + true) + echo "APT::Get::AllowUnauthenticated \"false\";" > chroot/etc/apt/apt.conf.d/00secure + ;; + + false) + echo "APT::Get::AllowUnauthenticated \"true\";" > chroot/etc/apt/apt.conf.d/00secure + ;; + esac + + # Configuring apt config + if [ -f config/apt/apt.conf ] + then + if [ -f chroot/etc/apt/apt.conf ] + then + mv chroot/etc/apt/apt.conf chroot/etc/apt/apt.conf.orig + fi + + cp config/apt/apt.conf chroot/etc/apt/apt.conf + fi + + # Configuring apt preferences + if [ -f config/apt/preferences ] + then + if [ -f chroot/etc/apt/preferences ] + then + mv chroot/etc/apt/preferences chroot/etc/apt/preferences.orig + fi + + cp config/apt/preferences chroot/etc/apt/preferences + fi + + if Find_files config/apt/*.pref + then + for _FILE in config/apt/*.pref + do + if [ -f chroot/etc/apt/preferences.d/$(basename ${_FILE}) ] + then + mv chroot/etc/apt/preferences.d/$(basename ${_FILE}) chroot/etc/apt/preferences.d/$(basename ${_FILE}).orig + fi + + cp -aL ${_FILE} chroot/etc/apt/preferences.d + done + fi + + if Find_files config/packages.chroot/*.deb || Find_files config/packages/*.deb + then + echo >> chroot/etc/apt/preferences + echo "# Added by lb_chroot_apt ${@}" >> chroot/etc/apt/preferences + echo "Package: *" >> chroot/etc/apt/preferences + echo "Pin: release o=config/packages.chroot" >> chroot/etc/apt/preferences + + case "${1}" in + install) + # Ensure local packages have priority + echo "Pin-Priority: 1001" >> chroot/etc/apt/preferences + ;; + + install-binary) + # Ensure local packages are not re-installed during lb_binary + echo "Pin-Priority: 99" >> chroot/etc/apt/preferences + + echo >> chroot/etc/apt/preferences + echo "Package: *" >> chroot/etc/apt/preferences + echo "Pin: release o=debian" >> chroot/etc/apt/preferences + echo "Pin-Priority: 99" >> chroot/etc/apt/preferences + ;; + esac + fi + + case "${LB_MODE}" in + progress-linux) + if [ ! -e chroot/etc/apt/preferences.d/progress-linux.pref ] + then + _DISTRIBUTION="$(echo ${LB_DISTRIBUTION} | sed -e 's|-backports||')" + + _ENABLE_DISTRIBUTIONS="${_DISTRIBUTION}" + _DISABLE_DISTRIBUTIONS="" + + if [ "${LB_SECURITY}" = "true" ] + then + _ENABLE_DISTRIBUTIONS="${_ENABLE_DISTRIBUTIONS} ${_DISTRIBUTION}-security" + fi + + if [ "${LB_UPDATES}" = "true" ] + then + _ENABLE_DISTRIBUTIONS="${_ENABLE_DISTRIBUTIONS} ${_DISTRIBUTION}-updates" + fi + + case "${LB_DISTRIBUTION}" in + *-backports) + if [ "${LB_BACKPORTS}" = "true" ] + then + _ENABLE_DISTRIBUTIONS="${_ENABLE_DISTRIBUTIONS} ${_DISTRIBUTION}-backports" + fi + ;; + + *) + if [ "${LB_BACKPORTS}" = "true" ] + then + _DISABLE_DISTRIBUTIONS="${_DISABLE_DISTRIBUTIONS} ${_DISTRIBUTION}-backports" + fi + ;; + esac + + for _DISTRIBUTION in ${_ENABLE_DISTRIBUTIONS} + do + +cat >> chroot/etc/apt/preferences.d/progress-linux.pref << EOF + +Package: * +Pin: release n=${_DISTRIBUTION} +Pin-Priority: 999 +EOF + + done + + for _DISTRIBUTION in ${_DISABLE_DISTRIBUTIONS} + do + +cat >> chroot/etc/apt/preferences.d/progress-linux.pref << EOF + +#Package: * +#Pin: release n=${_DISTRIBUTION} +#Pin-Priority: 999 +EOF + + done + fi + ;; + esac + + # Creating stage file + Create_stagefile .build/chroot_apt + ;; + + remove) + Echo_message "Deconfiguring file /etc/apt/apt.conf" + + # Checking lock file + Check_lockfile .lock + + # Creating lock file + Create_lockfile .lock + + # Deconfiguring apt ftp proxy + rm -f chroot/etc/apt/apt.conf.d/00ftp-proxy + + # Deconfiguring apt http proxy + rm -f chroot/etc/apt/apt.conf.d/00http-proxy + + # Deconfiguring apt pipeline + rm -f chroot/etc/apt/apt.conf.d/00pipeline + + # Deconfiguring apt recommends + if [ "${LB_APT_RECOMMENDS}" = "true" ] + then + rm -f chroot/etc/apt/apt.conf.d/00recommends + fi + + # Deconfiguring apt secure + if [ "${LB_APT_SECURE}" = "true" ] + then + rm -f chroot/etc/apt/apt.conf.d/00secure + fi + + # Configuring apt config + if [ -f config/apt/apt.conf ] + then + if [ -f chroot/etc/apt/apt.conf ] + then + mv chroot/etc/apt/apt.conf chroot/etc/apt/apt.conf.orig + fi + + cp config/apt/apt.conf chroot/etc/apt/apt.conf + + if [ -f chroot/etc/apt/apt.conf.orig ] + then + mv chroot/etc/apt/apt.conf.orig chroot/etc/apt/apt.conf + fi + fi + + # Deconfiguring apt preferences + if [ -f config/apt/preferences ] + then + if [ -f chroot/etc/apt/preferences ] + then + mv chroot/etc/apt/preferences chroot/etc/apt/preferences.orig + fi + + cp config/apt/preferences chroot/etc/apt/preferences + + if [ -f chroot/etc/apt/preferences.orig ] + then + mv chroot/etc/apt/preferences.orig chroot/etc/apt/preferences + fi + fi + + if Find_files config/apt/*.pref + then + for _FILE in config/apt/*.pref + do + if [ -f chroot/etc/apt/preferences.d/$(basename ${_FILE}) ] + then + mv chroot/etc/apt/preferences.d/$(basename ${_FILE}) chroot/etc/apt/preferences.d/$(basename ${_FILE}).orig + fi + + cp -aL ${_FILE} chroot/etc/apt/preferences.d + + if [ -f chroot/etc/apt/preferences.d/$(basename ${_FILE}).orig ] + then + mv chroot/etc/apt/preferences.d/$(basename ${_FILE}).orig chroot/etc/apt/preferences.d/$(basename ${_FILE}) + fi + done + fi + + if Find_files config/packages.chroot/*.deb || Find_files config/packages/*.deb + then + if [ -f chroot/etc/apt/preferences ] + then + # delete additions from lb_chroot_apt install|install-binary to preferences + sed -i '/# Added by lb_chroot_apt/,$d' chroot/etc/apt/preferences + # delete the last empty line + sed -i '${/^[[:blank:]]*$/d;}' chroot/etc/apt/preferences + # if the resulting preferences file is empty there was no user additions, remove it + if [ ! -s chroot/etc/apt/preferences ] + then + rm -rf chroot/etc/apt/preferences + fi + fi + + fi + + # Removing stage file + rm -f .build/chroot_apt + ;; + + *) + Usage + ;; +esac diff --git a/system-build/scripts/build/chroot_archives b/system-build/scripts/build/chroot_archives new file mode 100755 index 0000000..063f3b6 --- /dev/null +++ b/system-build/scripts/build/chroot_archives @@ -0,0 +1,675 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'manage /etc/apt/sources.list')" +HELP="" +USAGE="${PROGRAM} {install|remove} [--force]" + +_PASS="${1}" +shift + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +case "${LB_DERIVATIVE}" in + true) + _PARENT_FILE="sources.list.d/debian.list" + ;; + + false) + _PARENT_FILE="sources.list" + ;; +esac + +case "${1}" in + install) + Echo_message "Configuring file /etc/apt/sources.list" + + # Checking stage file + Check_stagefile .build/chroot_archives + + # Checking lock file + Check_lockfile .lock + + # Creating lock file + Create_lockfile .lock + + # Restoring cache + Restore_cache cache/packages.chroot + + # Configure custom sources.list + +if echo "${LB_PARENT_MIRROR_CHROOT}" | grep -q '^file:/' +then + Chroot_bind_path chroot "$(echo ${LB_PARENT_MIRROR_CHROOT} | sed -e 's|file:||')" +fi + +cat > chroot/etc/apt/${_PARENT_FILE} << EOF +deb ${LB_PARENT_MIRROR_CHROOT} ${LB_PARENT_DISTRIBUTION} ${LB_PARENT_ARCHIVE_AREAS} +EOF + + if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ] + then + echo "deb-src ${LB_PARENT_MIRROR_CHROOT} ${LB_PARENT_DISTRIBUTION} ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE} + fi + + if [ "${LB_DERIVATIVE}" = "true" ] + then + rm -f chroot/etc/apt/sources.list.d/${LB_MODE}.list + + _DISTRIBUTION="$(echo ${LB_DISTRIBUTION} | sed -e 's|-backports||')" + + echo "deb ${LB_MIRROR_CHROOT} ${_DISTRIBUTION} ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list + + if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ] + then + echo "deb-src ${LB_MIRROR_CHROOT} ${_DISTRIBUTION} ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list + fi + fi + + if [ "${LB_SECURITY}" = "true" ] + then + case "${LB_MODE}" in + debian|progress-linux) + case "${LB_PARENT_DISTRIBUTION}" in + sid) + + ;; + + *) + echo "deb ${LB_PARENT_MIRROR_CHROOT_SECURITY} ${LB_PARENT_DISTRIBUTION}/updates ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE} + + if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ] + then + echo "deb-src ${LB_PARENT_MIRROR_CHROOT_SECURITY} ${LB_PARENT_DISTRIBUTION}/updates ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE} + fi + ;; + esac + + if [ "${LB_MODE}" = progress-linux ] + then + echo "deb ${LB_MIRROR_CHROOT_SECURITY} ${_DISTRIBUTION}-security ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list + + if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ] + then + echo "deb-src ${LB_MIRROR_CHROOT_SECURITY} ${_DISTRIBUTION}-security ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list + fi + else + if [ "${LB_DERIVATIVE}" = "true" ] + then + echo "deb ${LB_MIRROR_CHROOT_SECURITY} ${_DISTRIBUTION}/updates ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list + + if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ] + then + echo "deb-src ${LB_MIRROR_CHROOT_SECURITY} ${_DISTRIBUTION}/updates ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list + fi + fi + fi + ;; + esac + fi + + if [ "${LB_UPDATES}" = "true" ] + then + echo "deb ${LB_PARENT_MIRROR_CHROOT} ${LB_PARENT_DISTRIBUTION}-updates ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE} + + if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ] + then + echo "deb-src ${LB_PARENT_MIRROR_CHROOT} ${LB_PARENT_DISTRIBUTION}-updates ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE} + fi + + if [ "${LB_DERIVATIVE}" = "true" ] + then + echo "deb ${LB_MIRROR_CHROOT} ${_DISTRIBUTION}-updates ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list + + if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ] + then + echo "deb-src ${LB_MIRROR_CHROOT} ${_DISTRIBUTION}-updates ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list + fi + fi + fi + + if [ "${LB_BACKPORTS}" = "true" ] + then + case "${LB_MODE}" in + debian) + if [ "${LB_PARENT_DISTRIBUTION}" != "sid" ] + then + echo "deb ${LB_PARENT_MIRROR_CHROOT} ${LB_PARENT_DISTRIBUTION}-backports ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE} + + if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ] + then + echo "deb-src ${LB_PARENT_MIRROR_CHROOT} ${LB_PARENT_DISTRIBUTION}-backports ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE} + fi + fi + ;; + esac + + if [ "${LB_DERIVATIVE}" = "true" ] + then + echo "deb ${LB_MIRROR_CHROOT} ${_DISTRIBUTION}-backports ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list + + if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ] + then + echo "deb-src ${LB_MIRROR_CHROOT} ${_DISTRIBUTION}-backports ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list + fi + fi + fi + + # Adding local apt sources (chroot) + for FILE in config/archives/*.list config/archives/*.list.chroot + do + if [ -e "${FILE}" ] + then + sed -e "s|@DISTRIBUTION@|${LB_DISTRIBUTION}|g" \ + -e "s|@PARENT_DISTRIBUTION@|${LB_PARENT_DISTRIBUTION}|g" \ + -e "s|@ARCHIVE_AREAS@|${LB_ARCHIVE_AREAS}|g" \ + -e "s|@PARENT_ARCHIVE_AREAS@|${LB_PARENT_ARCHIVE_AREAS}|g" \ + "${FILE}" > "chroot/etc/apt/sources.list.d/$(basename ${FILE} .chroot)" + + if [ "${_PASS}" != "source" ] && [ "${LB_APT_SOURCE_ARCHIVES}" = "false" ] + then + # Strip out source archives + sed "/^deb-src /d" "chroot/etc/apt/sources.list.d/$(basename ${FILE} .chroot)" + fi + fi + done + + # Adding local apt configuration (chroot) + for FILE in config/archives/*.conf config/archives/*.conf.chroot + do + if [ -e "${FILE}" ] + then + cp ${FILE} chroot/etc/apt/apt.conf.d/$(basename ${FILE} .chroot) + fi + done + + # Adding local apt preferences (chroot) + for FILE in config/archives/*.pref config/archives/*.pref.chroot + do + if [ -e "${FILE}" ] + then + cp ${FILE} chroot/etc/apt/preferences.d/$(basename ${FILE} .chroot) + fi + done + + # Configure local package repository + if Find_files config/packages.chroot/*.deb || Find_files config/packages/*.deb + then + rm -rf chroot/root/packages + mkdir -p chroot/root/packages + + if [ "$(stat --printf %d config/packages.chroot/)" = "$(stat --printf %d chroot/root/packages/)" ] || + [ "$(stat --printf %d config/packages/)" = "$(stat --printf %d chroot/root/packages/)" ] + then + CP_OPTIONS="-l" + fi + + # Copy packages + if Find_files config/packages.chroot/*_"${LB_ARCHITECTURES}".deb || Find_files config/packages/*_"${LB_ARCHITECTURES}".deb + then + for FILE in config/packages.chroot/*_"${LB_ARCHITECTURES}".deb config/packages/*_"${LB_ARCHITECTURES}".deb + do + if [ -L "${FILE}" ] + then + cp -L "${FILE}" chroot/root/packages + elif [ -e "${FILE}" ] + then + cp ${CP_OPTIONS} "${FILE}" chroot/root/packages + fi + done + fi + + if Find_files config/packages.chroot/*_all.deb || Find_files config/packages/*_all.deb + then + for FILE in config/packages.chroot/*_all.deb config/packages/*_all.deb + do + if [ -L "${FILE}" ] + then + cp -L "${FILE}" chroot/root/packages + elif [ -e "${FILE}" ] + then + cp ${CP_OPTIONS} "${FILE}" chroot/root/packages + fi + done + fi + + if Find_files chroot/root/packages/*.deb + then + # If we bootstrapped a minimal chroot, we need + # to install apt-utils before we have + # completed all the indices. + if [ ! -e chroot/usr/bin/apt-ftparchive ] + then + Apt chroot update + fi + + # Check depends + Check_package chroot /usr/bin/apt-ftparchive apt-utils + + # Installing depends + Install_package + + # Generate Packages and Packages.gz + echo "cd /root/packages && apt-ftparchive packages . > Packages" | Chroot chroot sh + gzip -9 -c chroot/root/packages/Packages > chroot/root/packages/Packages.gz + + # Generate Release + echo "cd /root/packages && apt-ftparchive \ + -o APT::FTPArchive::Release::Origin=config/packages.chroot \ + release . > Release" | Chroot chroot sh + + # Add to sources.list.d + echo "deb [ trusted=yes ] file:/root/packages ./" > chroot/etc/apt/sources.list.d/packages.list + + # Move top-level sources away, otherwise apt always preferes it (#644148) + if [ -e chroot/etc/apt/sources.list ] + then + mv chroot/etc/apt/sources.list chroot/etc/apt/sources.list.d/zz-sources.list + fi + + # Removing depends + Remove_package + else + Echo_warning "Local packages must be named with suffix '_all.deb' or '_\$architecture.deb'." + fi + fi + + if Find_files chroot/root/packages/*.deb + then + gunzip < chroot/root/packages/Packages.gz | awk '/^Package: / { print $2 }' \ + >> chroot/root/packages.chroot + fi + + # Update indices from cache + if [ "${LB_CACHE_INDICES}" = "true" ] && [ -d cache/indices.bootstrap ] + then + if Find_files cache/indices.bootstrap/secring.gpg* + then + cp -f cache/indices.bootstrap/secring.gpg* chroot/etc/apt + fi + + if Find_files cache/indices.bootstrap/trusted.gpg* + then + cp -rf cache/indices.bootstrap/trusted.gpg* chroot/etc/apt + fi + + if [ -f cache/indices.bootstrap/pkgcache.bin ] + then + cp -f cache/indices.bootstrap/pkgcache.bin chroot/var/cache/apt + fi + + if [ -f cache/indices.bootstrap/srcpkgcache.bin ] + then + cp -f cache/indices.bootstrap/srcpkgcache.bin chroot/var/cache/apt + fi + + if Find_files cache/indices.bootstrap/*_Packages + then + cp -f cache/indices.bootstrap/*_Packages chroot/var/lib/apt/lists + fi + + if Find_files cache/indices.bootstrap/*_Sources + then + cp -f cache/indices.bootstrap/*_Sources chroot/var/lib/apt/lists + fi + + if Find_files cache/indices.bootstrap/*Release* + then + cp -f cache/indices.bootstrap/*Release* chroot/var/lib/apt/lists + fi + else # Get fresh indices + # Check local archive keys + if Find_files config/archives/*.key || \ + Find_files config/archives/*.key.chroot + then + for FILE in config/archives/*.key \ + config/archives/*.key.chroot + do + if [ -e "${FILE}" ] + then + cp ${FILE} chroot/root + Chroot chroot "apt-key add /root/$(basename ${FILE})" + rm -f chroot/root/$(basename ${FILE}) + fi + done + fi + + # Check local keyring packages + if Find_files config/archives/*.deb + then + for PACKAGE in config/archives/*.deb + do + cp ${PACKAGE} chroot/root + Chroot chroot "dpkg -i /root/$(basename ${PACKAGE})" + rm -f chroot/root/$(basename ${PACKAGE}) + done + fi + + # Rebuild apt indices from scratch. + # Due to the fact that apt doesn't understand + # pinning on the fly, we need to manually remove + # the cached indices and rebuild them again. + rm -rf chroot/var/cache/apt/*.bin + + Apt chroot update + + # Installing keyring packages + if [ -n "${LB_KEYRING_PACKAGES}" ] + then + Apt chroot "install ${LB_KEYRING_PACKAGES}" + fi + + rm -rf chroot/var/cache/apt/*.bin + + Apt chroot update + Apt chroot "upgrade" + Apt chroot "dist-upgrade" + + if [ "${LB_CACHE_INDICES}" = "true" ] + then + mkdir -p cache/indices.bootstrap + + if Find_files chroot/etc/apt/secring.gpg* + then + cp -f chroot/etc/apt/secring.gpg* cache/indices.bootstrap + fi + + cp -rf chroot/etc/apt/trusted.gpg* cache/indices.bootstrap + + cp -f chroot/var/cache/apt/pkgcache.bin cache/indices.bootstrap + + if Find_files chroot/var/cache/apt/srcpkgcache.bin + then + cp -f chroot/var/cache/apt/srcpkgcache.bin cache/indices.bootstrap + fi + + cp -f chroot/var/lib/apt/lists/*_Packages cache/indices.bootstrap + + if Find_files chroot/var/lib/apt/lists/*_Sources + then + cp -f chroot/var/lib/apt/lists/*_Sources cache/indices.bootstrap + fi + + cp -f chroot/var/lib/apt/lists/*Release* cache/indices.bootstrap + fi + fi + + # Saving cache + Save_cache cache/packages.chroot + + # Creating stage file + Create_stagefile .build/chroot_archives + ;; + + remove) + Echo_message "Deconfiguring file /etc/apt/sources.list" + + # Checking lock file + Check_lockfile .lock + + # Creating lock file + Create_lockfile .lock + + # Restore top-level sources + if [ -e chroot/etc/apt/sources.list.d/zz-sources.list ] + then + mv chroot/etc/apt/sources.list.d/zz-sources.list chroot/etc/apt/sources.list + fi + + # Unmount local repository +if echo "${LB_PARENT_MIRROR_CHROOT}" | grep -q '^file:/' +then + Chroot_unbind_path chroot "$(echo ${LB_PARENT_MIRROR_CHROOT} | sed -e 's|file:||')" +fi + + # Configure generic indices + # Don't do anything if it's not required + if [ "${LB_PARENT_MIRROR_CHROOT}" = "${LB_PARENT_MIRROR_BINARY}" ] && \ + [ "${LB_PARENT_MIRROR_CHROOT_SECURITY}" = "${LB_PARENT_MIRROR_BINARY_SECURITY}" ] && \ + [ ! -d chroot/root/packages ] + then + # Removing stage file + rm -f .build/chroot_archives + + exit 0 + fi + + # Cleaning apt list cache + rm -rf chroot/var/lib/apt/lists + mkdir -p chroot/var/lib/apt/lists/partial + + # Configure custom sources.list + +cat > chroot/etc/apt/${_PARENT_FILE} << EOF +deb ${LB_PARENT_MIRROR_BINARY} ${LB_PARENT_DISTRIBUTION} ${LB_PARENT_ARCHIVE_AREAS} +EOF + + if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ] + then + echo "deb-src ${LB_PARENT_MIRROR_BINARY} ${LB_PARENT_DISTRIBUTION} ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE} + fi + + if [ "${LB_DERIVATIVE}" = "true" ] + then + rm -f chroot/etc/apt/sources.list.d/${LB_MODE}.list + + _DISTRIBUTION="$(echo ${LB_DISTRIBUTION} | sed -e 's|-backports||')" + + echo "deb ${LB_MIRROR_BINARY} ${_DISTRIBUTION} ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list + + if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ] + then + echo "deb-src ${LB_MIRROR_BINARY} ${_DISTRIBUTION} ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list + fi + fi + + if [ "${LB_SECURITY}" = "true" ] + then + case "${LB_MODE}" in + debian|progress-linux) + case "${LB_PARENT_DISTRIBUTION}" in + sid) + + ;; + + *) + echo "deb ${LB_PARENT_MIRROR_BINARY_SECURITY} ${LB_PARENT_DISTRIBUTION}/updates ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE} + + if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ] + then + echo "deb-src ${LB_PARENT_MIRROR_BINARY_SECURITY} ${LB_PARENT_DISTRIBUTION}/updates ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE} + fi + ;; + esac + + if [ "${LB_MODE}" = progress-linux ] + then + echo "deb ${LB_MIRROR_BINARY_SECURITY} ${_DISTRIBUTION}-security ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list + + if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ] + then + echo "deb-src ${LB_MIRROR_BINARY_SECURITY} ${_DISTRIBUTION}-security ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list + fi + else + if [ "${LB_DERIVATIVE}" = "true" ] + then + echo "deb ${LB_MIRROR_BINARY_SECURITY} ${_DISTRIBUTION}/updates ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list + + if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ] + then + echo "deb-src ${LB_MIRROR_BINARY_SECURITY} ${_DISTRIBUTION}/updates ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list + fi + fi + fi + ;; + esac + fi + + if [ "${LB_UPDATES}" = "true" ] + then + echo "deb ${LB_PARENT_MIRROR_BINARY} ${LB_PARENT_DISTRIBUTION}-updates ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE} + + if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ] + then + echo "deb-src ${LB_PARENT_MIRROR_BINARY} ${LB_PARENT_DISTRIBUTION}-updates ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE} + fi + + if [ "${LB_DERIVATIVE}" = "true" ] + then + echo "deb ${LB_MIRROR_BINARY} ${_DISTRIBUTION}-updates ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list + + if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ] + then + echo "deb-src ${LB_MIRROR_BINARY} ${_DISTRIBUTION}-updates ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list + fi + fi + fi + + if [ "${LB_BACKPORTS}" = "true" ] + then + case "${LB_MODE}" in + debian) + if [ "${LB_PARENT_DISTRIBUTION}" != "sid" ] + then + echo "deb ${LB_PARENT_MIRROR_BINARY} ${LB_PARENT_DISTRIBUTION}-backports ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE} + + if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ] + then + echo "deb-src ${LB_PARENT_MIRROR_BINARY} ${LB_PARENT_DISTRIBUTION}-backports ${LB_PARENT_ARCHIVE_AREAS}" >> chroot/etc/apt/${_PARENT_FILE} + fi + fi + ;; + esac + + if [ "${LB_DERIVATIVE}" = "true" ] + then + echo "deb ${LB_MIRROR_BINARY} ${_DISTRIBUTION}-backports ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list + + if [ "${_PASS}" = "source" ] || [ "${LB_APT_SOURCE_ARCHIVES}" = "true" ] + then + echo "deb-src ${LB_MIRROR_BINARY} ${_DISTRIBUTION}-backports ${LB_ARCHIVE_AREAS}" >> chroot/etc/apt/sources.list.d/${LB_MODE}.list + fi + fi + fi + + # Removing chroot-only apt sources + for FILE in config/archives/*.list.chroot + do + if [ -e "${FILE}" ] + then + rm -f "chroot/etc/apt/sources.list.d/$(basename ${FILE} .chroot)" + fi + done + + # Removing chroot-only apt configuration + for FILE in config/archives/*.conf.chroot + do + if [ -e "${FILE}" ] + then + rm -f "chroot/etc/apt/apt.conf.d/$(basename ${FILE} .chroot)" + fi + done + + # Removing chroot-only apt preferences + for FILE in config/archives/*.pref.chroot + do + if [ -e "${FILE}" ] + then + rm -f "chroot/etc/apt/preferences.d/$(basename ${FILE} .chroot)" + fi + done + + # Adding local apt sources (binary) + for FILE in config/archives/*.list config/archives/*.list.binary + do + if [ -e "${FILE}" ] + then + sed -e "s|@DISTRIBUTION@|${LB_DISTRIBUTION}|g" \ + -e "s|@PARENT_DISTRIBUTION@|${LB_PARENT_DISTRIBUTION}|g" \ + -e "s|@ARCHIVE_AREAS@|${LB_ARCHIVE_AREAS}|g" \ + -e "s|@PARENT_ARCHIVE_AREAS@|${LB_PARENT_ARCHIVE_AREAS}|g" \ + "${FILE}" > "chroot/etc/apt/sources.list.d/$(basename ${FILE} .binary)" + + if [ "${_PASS}" != "source" ] && [ "${LB_APT_SOURCE_ARCHIVES}" = "false" ] + then + # Strip out source archives + sed "/^deb-src /d" "chroot/etc/apt/sources.list.d/$(basename ${FILE} .binary)" + fi + fi + done + + # Adding local apt configuration (binary) + for FILE in config/archives/*.conf config/archives/*.conf.binary + do + if [ -e "${FILE}" ] + then + cp ${FILE} chroot/etc/apt/apt.conf.d/$(basename ${FILE} .binary) + fi + done + + # Adding local apt preferences (binary) + for FILE in config/archives/*.pref config/archives/*.pref.binary + do + if [ -e "${FILE}" ] + then + cp ${FILE} chroot/etc/apt/preferences.d/$(basename ${FILE} .binary) + fi + done + + # Adding local apt keys (binary) + for FILE in config/archives/*.key config/archives/*.key.binary + do + if [ -e "${FILE}" ] + then + cp ${FILE} chroot/root + Chroot chroot "apt-key add /root/$(basename ${FILE})" + rm -f chroot/root/$(basename ${FILE}) + fi + done + + # Updating indices + Apt chroot update + + # Cleaning apt package cache + rm -rf chroot/var/cache/apt + mkdir -p chroot/var/cache/apt/archives/partial + + # Cleaning apt package lists + if [ "${LB_APT_INDICES}" = "false" ] + then + rm -rf chroot/var/lib/apt/lists + mkdir -p chroot/var/lib/apt/lists/partial + fi + + # Remove local package repository + rm -f chroot/etc/apt/sources.list.d/packages.list + rm -rf chroot/root/packages + + # Removing stage file + rm -f .build/chroot_archives + ;; + + *) + Usage + ;; +esac diff --git a/system-build/scripts/build/chroot_cache b/system-build/scripts/build/chroot_cache new file mode 100755 index 0000000..96f7af2 --- /dev/null +++ b/system-build/scripts/build/chroot_cache @@ -0,0 +1,82 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'cache chroot stage')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +for STAGE in ${LB_CACHE_STAGES} +do + if [ "${STAGE}" = "chroot" ] + then + case "${1}" in + restore) + Echo_message "Restoring chroot stage from cache..." + + # Checking stage file + Check_stagefile .build/chroot_cache.restore + + if [ -d cache/chroot ] + then + # Checking lock file + Check_lockfile .lock + + # Creating lock file + Create_lockfile .lock + + # Removing old chroot + rm -rf chroot + + # Restoring old cache + cp -a cache/chroot chroot + + # Creating stage file + Create_stagefile .build/chroot_cache.restore + + exit 0 + fi + ;; + + save) + Echo_message "Saving chroot stage to cache..." + + # Checking stage file + Check_stagefile .build/chroot_cache.save + + # Checking lock file + Check_lockfile .lock + + # Creating lock file + Create_lockfile .lock + + rm -rf cache/chroot + + mkdir -p cache + + cp -a chroot cache/chroot + + # Creating stage file + Create_stagefile .build/chroot_cache.save + ;; + esac + fi +done diff --git a/system-build/scripts/build/chroot_debianchroot b/system-build/scripts/build/chroot_debianchroot new file mode 100755 index 0000000..77680f0 --- /dev/null +++ b/system-build/scripts/build/chroot_debianchroot @@ -0,0 +1,81 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'manage /etc/debian_chroot')" +HELP="" +USAGE="${PROGRAM} {install|remove} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +case "${1}" in + install) + Echo_message "Configuring file /etc/debian_chroot" + + # Checking stage file + Check_stagefile .build/chroot_debianchroot + + # Checking lock file + Check_lockfile .lock + + # Creating lock file + Create_lockfile .lock + + if [ -f chroot/etc/debian_chroot ] + then + # Save chroot file + mv chroot/etc/debian_chroot chroot/etc/debian_chroot.orig + fi + + # Create chroot file + echo "live" > chroot/etc/debian_chroot + + # Creating stage file + Create_stagefile .build/chroot_debianchroot + ;; + + remove) + Echo_message "Deconfiguring file /etc/debian_chroot" + + # Checking lock file + Check_lockfile .lock + + # Creating lock file + Create_lockfile .lock + + if [ -f chroot/etc/debian_chroot.orig ] + then + # Restore chroot file + mv chroot/etc/debian_chroot.orig chroot/etc/debian_chroot + else + # Remove chroot file + rm -f chroot/etc/debian_chroot + fi + + # Removing stage file + rm -f .build/chroot_debianchroot + ;; + + *) + Usage + ;; +esac diff --git a/system-build/scripts/build/chroot_devpts b/system-build/scripts/build/chroot_devpts new file mode 100755 index 0000000..8fb76a7 --- /dev/null +++ b/system-build/scripts/build/chroot_devpts @@ -0,0 +1,77 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'mount /dev/pts')" +HELP="" +USAGE="${PROGRAM} {install|remove} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +case "${1}" in + install) + Echo_message "Begin mounting /dev/pts..." + + # Checking stage file + Check_stagefile .build/chroot_devpts + + # Checking lock file + Check_lockfile .lock + + # Creating lock file + Create_lockfile .lock + + # Creating mountpoint + mkdir -p chroot/dev/pts + + # Mounting /dev/pts + mount devpts-live -t devpts -o gid=5,mode=620 chroot/dev/pts || true + + # Creating stage file + Create_stagefile .build/chroot_devpts + ;; + + remove) + Echo_message "Begin unmounting /dev/pts..." + + # Checking lock file + Check_lockfile .lock + + # Creating lock file + Create_lockfile .lock + + # Unmounting /dev/pts + if grep -qs "$(pwd)/chroot/dev/pts" /proc/mounts || Find_files chroot/dev/pts/* + then + umount chroot/dev/pts + else + umount -f chroot/dev/pts > /dev/null 2>&1 || true + fi + + # Removing stage file + rm -f .build/chroot_devpts + ;; + + *) + Usage + ;; +esac diff --git a/system-build/scripts/build/chroot_dpkg b/system-build/scripts/build/chroot_dpkg new file mode 100755 index 0000000..c6f1574 --- /dev/null +++ b/system-build/scripts/build/chroot_dpkg @@ -0,0 +1,105 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'manage /sbin/dpkg')" +HELP="" +USAGE="${PROGRAM} {install|remove} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +case "${1}" in + install) + Echo_message "Configuring file /sbin/start-stop-daemon" + + # Checking stage file + Check_stagefile .build/chroot_dpkg + + # Checking lock file + Check_lockfile .lock + + # Creating lock file + Create_lockfile .lock + + # Create custom start-stop-daemon program + Chroot chroot dpkg-divert --rename --quiet --add /sbin/start-stop-daemon + +cat > chroot/sbin/start-stop-daemon << EOF +#!/bin/sh + +exit 0 +EOF + + chmod 755 chroot/sbin/start-stop-daemon + + # Disable dpkg syncing + +cat > chroot/etc/dpkg/dpkg.cfg.d/live-build << EOF +force-unsafe-io +EOF + + # Manual hacks for special packages + + # Generic live-build handle for other live packages to act upon + touch chroot/.live-build + + # flash-kernel + Chroot chroot dpkg-divert --rename --quiet --add /usr/sbin/flash-kernel + ln -fs /bin/true chroot/usr/sbin/flash-kernel + + # Creating stage file + Create_stagefile .build/chroot_dpkg + ;; + + remove) + Echo_message "Deconfiguring file /sbin/start-stop-daemon" + + # Checking lock file + Check_lockfile .lock + + # Creating lock file + Create_lockfile .lock + + # Manual hacks for special packages + + # Generic live-build handle + rm -f chroot/.live-build + + # flash-kernel + rm -f chroot/usr/sbin/flash-kernel + Chroot chroot dpkg-divert --rename --quiet --remove /usr/sbin/flash-kernel + + # Remove custom start-stop-daemon program + rm -f chroot/sbin/start-stop-daemon + Chroot chroot dpkg-divert --rename --quiet --remove /sbin/start-stop-daemon + + # Remove dpkg sync configuration + rm -f chroot/etc/dpkg/dpkg.cfg.d/live-build + + # Removing stage file + rm -f .build/chroot_dpkg + ;; + + *) + Usage + ;; +esac diff --git a/system-build/scripts/build/chroot_firmware b/system-build/scripts/build/chroot_firmware new file mode 100755 index 0000000..d91f570 --- /dev/null +++ b/system-build/scripts/build/chroot_firmware @@ -0,0 +1,124 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'schedule kernel packages for installation')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +if [ "${LB_FIRMWARE_CHROOT}" != "true" ] +then + exit 0 +fi + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +# Checking stage file +Check_stagefile .build/chroot_firmware + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +# Checking depends +Check_package host /usr/bin/wget wget + +# Diverting update-initramfs +#case "${LB_INITRAMFS}" in +# system-boot) +# mv chroot/usr/sbin/update-initramfs chroot/usr/sbin/update-initramfs.live-build +# ;; +#esac + +# Include firmware packages +# Assumption: firmware packages install files into /lib/firmware + +# Get all firmware packages names +mkdir -p cache/contents.chroot + +FIRMWARE_PACKAGES="" + +_CONTENTS="$(for _PARENT_ARCHIVE_AREA in ${LB_PARENT_ARCHIVE_AREAS}; do echo ${LB_PARENT_MIRROR_CHROOT}/dists/${LB_PARENT_DISTRIBUTION}/${_PARENT_ARCHIVE_AREA}/Contents-${LB_ARCHITECTURES}.gz; done)" + +rm -f cache/contents.chroot/contents.${LB_PARENT_DISTRIBUTION}.${LB_ARCHITECTURES} + +for _CONTENT in ${_CONTENTS} +do + wget ${WGET_OPTIONS} ${_CONTENT} -O - | gunzip -c >> cache/contents.chroot/contents.${LB_PARENT_DISTRIBUTION}.${LB_ARCHITECTURES} + + FIRMWARE_PACKAGES="${FIRMWARE_PACKAGES} $(awk '/^lib\/firmware/ { print $2 }' cache/contents.chroot/contents.${LB_PARENT_DISTRIBUTION}.${LB_ARCHITECTURES} | sort -u)" +done + +if echo ${LB_PARENT_ARCHIVE_AREAS} | grep -qs "non-free" +then + # Manually add firmware-linux/non-free meta package + if [ "${LB_DERIVATIVE}" != "true" ] + then + FIRMWARE_PACKAGES="${FIRMWARE_PACKAGES} firmware-linux" + else + case "${LB_DERIVATIVE_IS_BASED_ON}" in + debian) + FIRMWARE_PACKAGES="${FIRMWARE_PACKAGES} firmware-linux" + ;; + *) + ;; + esac + fi +fi + +if [ "${LB_DERIVATIVE}" = "true" ] +then + # FIXME: account for the fact that PARENT_DISTRIBUTION and DISTRIBUTION might be the same (to not have overlapping cache files for contents). + + _CONTENTS="$(for _ARCHIVE_AREA in ${LB_ARCHIVE_AREAS}; do echo ${LB_MIRROR_CHROOT}/dists/${LB_DISTRIBUTION}/${_ARCHIVE_AREA}/Contents-${LB_ARCHITECTURES}.gz; done)" + + rm -f cache/contents.chroot/contents.${LB_DISTRIBUTION}.${LB_ARCHITECTURES} + + for _CONTENT in ${_CONTENTS} + do + wget ${WGET_OPTIONS} ${_CONTENT} -O - | gunzip -c >> cache/contents.chroot/contents.${LB_DISTRIBUTION}.${LB_ARCHITECTURES} + + FIRMWARE_PACKAGES="${FIRMWARE_PACKAGES} $(awk '/^lib\/firmware/ { print $2 }' cache/contents.chroot/contents.${LB_DISTRIBUTION}.${LB_ARCHITECTURES} | sort -u)" + done +fi + +# Drop section and keep package names only +for _PACKAGE in ${FIRMWARE_PACKAGES} +do + echo $(echo ${_PACKAGE} | awk -F/ '{ print $NF }') >> chroot/root/packages.chroot +done + +# Some known licenses required to be accepted +if echo ${LB_PARENT_ARCHIVE_AREAS} | grep -qs "non-free" +then + +cat >> chroot/root/packages.chroot.cfg << EOF +firmware-ivtv firmware-ivtv/license/accepted boolean true +firmware-ipw2x00 firmware-ipw2x00/license/accepted boolean true +EOF + +fi + +# Creating stage file +Create_stagefile .build/chroot_firmware diff --git a/system-build/scripts/build/chroot_hacks b/system-build/scripts/build/chroot_hacks new file mode 100755 index 0000000..f439ca1 --- /dev/null +++ b/system-build/scripts/build/chroot_hacks @@ -0,0 +1,128 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'execute hacks in chroot')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +Echo_message "Begin executing hacks..." + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +# Checking stage file +Check_stagefile .build/chroot_hacks + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +case "${LIVE_IMAGE_TYPE}" in + netboot) + if [ ! -f chroot/sbin/mount.cifs ] + then + Apt chroot install cifs-utils + fi + + if [ ! -d chroot/etc/initramfs-tools ] + then + mkdir chroot/etc/initramfs-tools + fi + + # Configuring initramfs for NFS + if ! grep -qs "BOOT=nfs" chroot/etc/initramfs-tools/initramfs.conf + then + echo "BOOT=nfs" >> chroot/etc/initramfs-tools/initramfs.conf + fi + + if ! grep -qs "NFSROOT=auto" chroot/etc/initramfs-tools/initramfs.conf + then + echo "NFSROOT=auto" >> chroot/etc/initramfs-tools/initramfs.conf + fi + ;; +esac + +# Update initramfs (always, because of udev rules in initrd) +case "${LB_INITRAMFS}" in + system-boot) + #UPDATE_INITRAMFS_OPTIONS="LIVE_GENERATE_UUID=1" + ;; +esac + +if [ "${LB_INITRAMFS}" != "none" ] +then + Chroot chroot "${UPDATE_INITRAMFS_OPTIONS} update-initramfs -k all -t -u" +fi + +# We probably ought to use COMPRESS= in a temporary file in +# /etc/initramfs-tools/conf.d/ instead, but it's hard to pass options that +# way. +case "${LB_INITRAMFS_COMPRESSION}" in + gzip) + ;; + + bzip2) + for INITRAMFS in $(find chroot/boot -name 'initrd*'); do + zcat "${INITRAMFS}" | bzip2 -c ${BZIP2_OPTIONS} > "${INITRAMFS}.new" + mv "${INITRAMFS}.new" "${INITRAMFS}" + echo "$(sha1sum ${INITRAMFS} | awk '{ print $1 }') /boot/$(basename ${INITRAMFS})" > chroot/var/lib/initramfs-tools/$(basename ${INITRAMFS} | sed -e 's|initrd.img-||') + done + ;; + + lzma) + for INITRAMFS in $(find chroot/boot -name 'initrd*'); do + zcat "${INITRAMFS}" | lzma -c ${LZMA_OPTIONS} > "${INITRAMFS}.new" + mv "${INITRAMFS}.new" "${INITRAMFS}" + echo "$(sha1sum ${INITRAMFS} | awk '{ print $1 }') /boot/$(basename ${INITRAMFS})" > chroot/var/lib/initramfs-tools/$(basename ${INITRAMFS} | sed -e 's|initrd.img-||') + done + ;; +esac + +case "${LB_INITRAMFS}" in + system-boot) + ID="1000" + ;; + + *) + ID="" + ;; +esac + +rm -f chroot/etc/hosts + +if [ "${LB_DEBIAN_INSTALLER}" = "live" ] +then + # This is a temporary hack to get rid of fstab; + # needs cleanup in system-boot first to proper fix. + rm -f chroot/etc/fstab + touch chroot/etc/fstab +fi + +if [ "${LB_SWAP_FILE_PATH}" ]; then + dd if=/dev/zero of="chroot/${LB_SWAP_FILE_PATH}" bs=1024k count="${LB_SWAP_FILE_SIZE}" + mkswap "chroot/${LB_SWAP_FILE_PATH}" +fi + +# Creating stage file +Create_stagefile .build/chroot_hacks diff --git a/system-build/scripts/build/chroot_hooks b/system-build/scripts/build/chroot_hooks new file mode 100755 index 0000000..af20b0d --- /dev/null +++ b/system-build/scripts/build/chroot_hooks @@ -0,0 +1,119 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'execute hooks in chroot')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +Echo_message "Begin executing hooks..." + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +# Checking stage file +Check_stagefile .build/chroot_hooks + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +## Processing distribution hooks + +# Make build config available to chroot hooks. First, make the bind +# mount and then make it read-only. This can't happen in one mount +# command, then the resulting mount will be rw (see mount(8)). Making it +# ro prevents modifications and prevents accidentally removing the +# contents of the config directory when removing the chroot. +mkdir -p chroot/live-build/config +mount -o bind config chroot/live-build/config +mount -o remount,ro,bind config chroot/live-build/config + +# Copying hooks +for _HOOK in ${LB_CHROOT_HOOKS} +do + for LOCATION in "${LIVE_BUILD}/hooks" /usr/share/live/build/hooks + do + for FILE in "${LOCATION}"/????-"${_HOOK}".chroot + do + if [ -e "${FILE}" ] + then + mkdir -p chroot/root/lb_chroot_hooks + cp "${FILE}" chroot/root/lb_chroot_hooks + fi + done + done +done + +# Running hooks +if ls chroot/root/lb_chroot_hooks/* > /dev/null 2>&1 +then + for _HOOK in chroot/root/lb_chroot_hooks/* + do + Chroot chroot "/root/lb_chroot_hooks/$(basename ${_HOOK})" || { Echo_error "${_HOOK} failed (exit non-zero). You should check for errors."; exit 1 ;} + rm -f chroot/root/lb_chroot_hooks/"$(basename ${_HOOK})" + done + + rmdir chroot/root/lb_chroot_hooks +fi + +## Processing local hooks +if ls config/hooks/normal/*.chroot config/hooks/live/*.chroot > /dev/null 2>&1 +then + # Restoring cache + Restore_cache cache/packages.chroot + + for HOOK in config/hooks/normal/*.chroot config/hooks/live/*.chroot + do + if [ ! -e "${HOOK}" ] + then + continue + fi + + # Copying hook + cp "${HOOK}" chroot/root + + # Making hook executable + if [ ! -x chroot/root/"$(basename ${HOOK})" ] + then + chmod +x chroot/root/"$(basename ${HOOK})" + fi + + # Executing hook + Chroot chroot "/root/$(basename ${HOOK})" || { Echo_error "${HOOK} failed (exit non-zero). You should check for errors."; exit 1 ;} + + # Removing hook + rm -f chroot/root/"$(basename ${HOOK})" + done + + # Saving cache + Save_cache cache/packages.chroot + + # Creating stage file + Create_stagefile .build/chroot_hooks +fi + +# Remove bind mount of build config inside chroot. +umount chroot/live-build/config +rmdir chroot/live-build/config +rmdir chroot/live-build diff --git a/system-build/scripts/build/chroot_hostname b/system-build/scripts/build/chroot_hostname new file mode 100755 index 0000000..ae191a7 --- /dev/null +++ b/system-build/scripts/build/chroot_hostname @@ -0,0 +1,91 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'manage /bin/hostname')" +HELP="" +USAGE="${PROGRAM} {install|remove} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +case "${1}" in + install) + # Checking stage file + Check_stagefile .build/chroot_hostname + + # Checking lock file + Check_lockfile .lock + + # Creating lock file + Create_lockfile .lock + + # Create hostname file + Echo_message "Configuring file /etc/hostname" + + echo "localhost.localdomain" > chroot/etc/hostname + + # Create custom hostname + Echo_message "Configuring file /bin/hostname" + + Chroot chroot dpkg-divert --rename --quiet --add /bin/hostname + +cat > chroot/bin/hostname << EOF +#!/bin/sh + +echo "localhost.localdomain" +EOF + + chmod 755 chroot/bin/hostname + + # Creating stage file + Create_stagefile .build/chroot_hostname + ;; + + remove) + Echo_message "Deconfiguring file /etc/hostname" + + # Checking lock file + Check_lockfile .lock + + # Creating lock file + Create_lockfile .lock + + # Copying hostname from includes, if existing + if [ -e config/includes.chroot/etc/hostname ] + then + cp -a config/includes.chroot/etc/hostname chroot/etc/hostname + fi + + Echo_message "Deconfiguring file /bin/hostname" + + # Remove custom hostname + rm -f chroot/bin/hostname + Chroot chroot dpkg-divert --rename --quiet --remove /bin/hostname + + # Removing stage file + rm -f .build/chroot_hostname + ;; + + *) + Usage + ;; +esac diff --git a/system-build/scripts/build/chroot_hosts b/system-build/scripts/build/chroot_hosts new file mode 100755 index 0000000..9f0da29 --- /dev/null +++ b/system-build/scripts/build/chroot_hosts @@ -0,0 +1,97 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'manage /etc/hosts')" +HELP="" +USAGE="${PROGRAM} {install|remove} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +case "${1}" in + install) + Echo_message "Configuring file /etc/hosts" + + # Checking stage file + Check_stagefile .build/chroot_hosts + + # Checking lock file + Check_lockfile .lock + + # Creating lock file + Create_lockfile .lock + + if [ -f chroot/etc/hosts ] + then + # Save hosts file + mv chroot/etc/hosts chroot/etc/hosts.orig + fi + + # Creating hosts file + +cat > chroot/etc/hosts << EOF +127.0.0.1 localhost localhost.localdomain +127.0.1.1 debian +EOF + + if [ -f /etc/hosts ] + then + # Append hosts file + #grep -e "127.0.0.1" -e "127.0.1.1" /etc/hosts >> chroot/etc/hosts + cat /etc/hosts >> chroot/etc/hosts + fi + + # Creating stage file + Create_stagefile .build/chroot_hosts + ;; + + remove) + Echo_message "Deconfiguring file /etc/hosts" + + # Checking lock file + Check_lockfile .lock + + # Creating lock file + Create_lockfile .lock + + if [ -e config/includes.chroot/etc/hosts ] + then + # Copying local hosts + cp -a config/includes.chroot/etc/hosts chroot/etc/hosts + rm -f chroot/etc/hosts.orig + elif [ -f chroot/etc/hosts.orig ] + then + # Restore hosts file + mv chroot/etc/hosts.orig chroot/etc/hosts + else + # Blank out hosts file, don't remove in case its a symlink + Truncate chroot/etc/hosts + fi + + # Removing stage file + rm -f .build/chroot_hosts + ;; + + *) + Usage + ;; +esac diff --git a/system-build/scripts/build/chroot_includes b/system-build/scripts/build/chroot_includes new file mode 100755 index 0000000..6498aa3 --- /dev/null +++ b/system-build/scripts/build/chroot_includes @@ -0,0 +1,50 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'copy files into chroot')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +Echo_message "Begin copying chroot includes..." + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +# Checking stage file +Check_stagefile .build/includes.chroot + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +if Find_files config/includes.chroot/ +then + # Copying includes + cd config/includes.chroot + find . | cpio -dmpu --no-preserve-owner "${OLDPWD}"/chroot + cd "${OLDPWD}" + + # Creating stage file + Create_stagefile .build/includes.chroot +fi diff --git a/system-build/scripts/build/chroot_install-packages b/system-build/scripts/build/chroot_install-packages new file mode 100755 index 0000000..36c0f93 --- /dev/null +++ b/system-build/scripts/build/chroot_install-packages @@ -0,0 +1,94 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'install queued packages into chroot')" +HELP="" +USAGE="${PROGRAM} [--force]" +USAGE="${PROGRAM} {install|live} [--force]" + +_PASS="${1}" +shift + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +Echo_message "Begin installing packages (${_PASS} pass)..." + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +# Checking stage file +Check_stagefile .build/chroot_install-packages.${PASS} + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +# Check for packages specified with foreign architecture +_FOREIGN_ARCHITECTURES_FILE="chroot/root/packages.foreign-architectures" +if [ -e "${_FOREIGN_ARCHITECTURES_FILE}" ] && [ -s "${_FOREIGN_ARCHITECTURES_FILE}" ] +then + _APT_ARCHITECTURES_ADDED="0" + + # Check if version of dpkg in chroot supports multiarch + if Chroot chroot dpkg --print-foreign-architectures > /dev/null 2>&1 + then + # Add foregin architectures + while read _ARCHITECTURES_LINE + do + Echo_message "Adding foreign architecture ${_ARCHITECTURES_LINE} to dpkg" + Chroot chroot dpkg --add-architecture ${_ARCHITECTURES_LINE} + + _APT_ARCHITECTURES_ADDED="1" + done < "${_FOREIGN_ARCHITECTURES_FILE}" + + # Tidy up + rm -f "${_FOREIGN_ARCHITECTURES_FILE}" + else + Echo_error "Version of dpkg in chroot does not support foreign architectures." + fi + + # Update apt if foreign architectures were added + if [ "${_APT_ARCHITECTURES_ADDED}" -ne "0" ] + then + Echo_message "Added foreign architectures, updating apt..." + Apt chroot update + fi +fi + +if [ -e chroot/root/packages.chroot ] && [ -s chroot/root/packages.chroot ] +then + # Restoring cache + Restore_cache cache/packages.chroot + + # Installing packages + Chroot chroot "xargs --arg-file=/root/packages.chroot apt-get ${APT_OPTIONS} install" + + # Tidying up + rm -f chroot/root/packages.chroot + + # Saving cache + Save_cache cache/packages.chroot + +fi + +# Creating stage file +Create_stagefile .build/chroot_install-packages.${_PASS} diff --git a/system-build/scripts/build/chroot_interactive b/system-build/scripts/build/chroot_interactive new file mode 100755 index 0000000..f21b6dd --- /dev/null +++ b/system-build/scripts/build/chroot_interactive @@ -0,0 +1,62 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'make build interactive')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +if [ "${LB_INTERACTIVE}" = "false" ] +then + exit 0 +fi + +Echo_message "Begin interactive build..." + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +# Checking stage file +Check_stagefile .build/chroot_interactive + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +case "${LB_INTERACTIVE}" in + true|shell) + Echo_message "Pausing build: starting interactive shell..." + Chroot chroot "/bin/bash --login" + ;; + x11) + Echo_message "Pausing build: starting interactive X11..." + Chroot chroot "startx" + ;; + xnest) + Echo_message "Pausing build: starting interactive Xnest..." + #Chroot chroot "" # FIXME + ;; +esac + +# Creating stage file +Create_stagefile .build/chroot_interactive diff --git a/system-build/scripts/build/chroot_linux-image b/system-build/scripts/build/chroot_linux-image new file mode 100755 index 0000000..c28cb54 --- /dev/null +++ b/system-build/scripts/build/chroot_linux-image @@ -0,0 +1,60 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'schedule kernel packages for installation')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +if [ "${LB_LINUX_PACKAGES}" = "none" ] +then + exit 0 +fi + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +# Checking stage file +Check_stagefile .build/chroot_linux-image + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +# Diverting update-initramfs +#case "${LB_INITRAMFS}" in +# system-boot) +# mv chroot/usr/sbin/update-initramfs chroot/usr/sbin/update-initramfs.live-build +# ;; +#esac + +for FLAVOUR in ${LB_LINUX_FLAVOURS} +do + for PACKAGE in ${LB_LINUX_PACKAGES} + do + echo ${PACKAGE}-${FLAVOUR} >> chroot/root/packages.chroot + done +done + +# Creating stage file +Create_stagefile .build/chroot_linux-image diff --git a/system-build/scripts/build/chroot_live-packages b/system-build/scripts/build/chroot_live-packages new file mode 100755 index 0000000..0e4f2bf --- /dev/null +++ b/system-build/scripts/build/chroot_live-packages @@ -0,0 +1,79 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'schedule live packages for installation')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +# Checking stage file +Check_stagefile .build/chroot_live-packages + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +# Queue installation of system-boot +if [ -n "${LB_INITRAMFS}" ] && [ "${LB_INITRAMFS}" != "none" ] +then + _PACKAGES="${LB_INITRAMFS}" +fi + +# Queue installation of system-config +if [ -n "${LB_INITSYSTEM}" ] && [ "${LB_INITSYSTEM}" != "none" ] +then + _PACKAGES="${_PACKAGES} system-config" +fi + +# Do initsystem specific hacks +case "${LB_INITSYSTEM}" in + systemd) + _PACKAGES="${_PACKAGES} systemd-sysv" + + if [ -e chroot/var/lib/dpkg/info/sysvinit.list ] + then + Chroot chroot "dpkg --force-remove-essential --purge sysvinit" + fi + ;; + + sysvinit) + _PACKAGES="${_PACKAGES} sysvinit" + + if [ -e chroot/var/lib/dpkg/info/systemd-sysv.list ] + then + Chroot chroot "dpkg --force-remove-essential --purge systemd systemd-sysv" + fi + ;; +esac + +# Install live packages +if [ -n "${_PACKAGES}" ] +then + Chroot chroot "apt-get ${APT_OPTIONS} install ${_PACKAGES}" + + # Creating stage file + Create_stagefile .build/chroot_live-packages +fi diff --git a/system-build/scripts/build/chroot_package-lists b/system-build/scripts/build/chroot_package-lists new file mode 100755 index 0000000..7e93e61 --- /dev/null +++ b/system-build/scripts/build/chroot_package-lists @@ -0,0 +1,120 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'queue install of package lists into chroot')" +HELP="" +USAGE="${PROGRAM} {install|live} [--force]" + +_PASS="${1}" +shift + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +Echo_message "Begin queueing installation of package lists (${_PASS} pass)..." + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +# Checking stage file +Check_stagefile .build/chroot_package-lists.${_PASS} + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +# Handling local package lists +if ! ( ls config/package-lists/*.list > /dev/null 2>&1 || \ + ls config/package-lists/*.list.chroot > /dev/null 2>&1 || \ + ls config/package-lists/*.list.chroot_${_PASS} > /dev/null 2>&1 ) +then + exit 0 +fi + +case "${LB_BUILD_WITH_CHROOT}" in + true) + # Checking depends + Check_package chroot /usr/bin/grep-aptavail dctrl-tools + + # Restoring cache + Restore_cache cache/packages.chroot + + # Installing depends + Install_package + ;; + + false) + if [ ! -e /usr/bin/grep-aptavail ]; then + # dctrl-tools + Echo_error "/usr/bin/grep-aptavail - no such file." + exit 1 + fi + ;; +esac + +if [ -e "${LIVE_BUILD}/share/bin/Packages" ] +then + cp "${LIVE_BUILD}/share/bin/Packages" chroot/bin +else + cp /usr/share/live/build/bin/Packages chroot/bin +fi + +for LIST in config/package-lists/*.list \ + config/package-lists/*.list.chroot \ + config/package-lists/*.list.chroot_${_PASS} +do + if [ -e "${LIST}" ] + then + # Generating package list + Expand_packagelist "$(basename ${LIST})" "config/package-lists" \ + | grep -v '^#' >> chroot/root/packages.chroot + fi +done + +# Discover unique package architectures in fully-expanded package list +for _PACKAGE_ARCHITECTURE in $(Discover_package_architectures "chroot/root/packages.chroot") +do + # If this is a foreign architecture, append to packages.foreign-architectures + if [ "${_PACKAGE_ARCHITECTURE}" != "${LB_ARCHITECTURES}" ] + then + Echo_message "Accepting foreign architecture: ${_PACKAGE_ARCHITECTURE}, live image architecture is: ${LB_ARCHITECTURES}" + echo "${_PACKAGE_ARCHITECTURE}" >> chroot/root/packages.foreign-architectures + fi +done + +rm -f chroot/bin/Packages + +case "${LB_BUILD_WITH_CHROOT}" in + true) + # Removing dctrl-tools again if the user has not installed it + if ! grep -qs dctrl-tools chroot/root/packages.chroot + then + # Removing depends + Remove_package + fi + + # Saving cache + Save_cache cache/packages.chroot + ;; +esac + +# Creating stage file +Create_stagefile .build/chroot_package-lists.${_PASS} diff --git a/system-build/scripts/build/chroot_preseed b/system-build/scripts/build/chroot_preseed new file mode 100755 index 0000000..53bd8df --- /dev/null +++ b/system-build/scripts/build/chroot_preseed @@ -0,0 +1,72 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'execute local preseed in chroot')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +Echo_message "Begin executing local preseeds..." + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +# Checking stage file +Check_stagefile .build/chroot_preseed + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +if ls config/preseed/*.cfg > /dev/null 2>&1 || \ + ls config/preseed/*.cfg.chroot > /dev/null 2>&1 || \ + ls chroot/root/packages.chroot.cfg > /dev/null 2>&1 +then + # Check dependency + Check_package chroot /usr/bin/debconf-set-selections debconf + + # Install dependency + Install_package + + for PRESEED in config/preseed/*.cfg config/preseed/*.cfg.chroot chroot/root/packages.chroot.cfg + do + if [ -e "${PRESEED}" ] + then + # Copying local preseed + cp "${PRESEED}" chroot/root/preseed + + Chroot chroot "debconf-set-selections /root/preseed" + + # Removing local preseed file + rm -f chroot/root/preseed + fi + done + + rm -f chroot/root/packages.chroot.cfg + + # Remove dependency + Remove_package + + # Creating stage file + Create_stagefile .build/chroot_preseed +fi diff --git a/system-build/scripts/build/chroot_proc b/system-build/scripts/build/chroot_proc new file mode 100755 index 0000000..f84c0d4 --- /dev/null +++ b/system-build/scripts/build/chroot_proc @@ -0,0 +1,81 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'mount /proc')" +HELP="" +USAGE="${PROGRAM} {install|remove} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +case "${1}" in + install) + Echo_message "Begin mounting /proc..." + + # Checking stage file + Check_stagefile .build/chroot_proc + + # Checking lock file + Check_lockfile .lock + + # Creating lock file + Create_lockfile .lock + + # Creating mountpoint + mkdir -p chroot/proc + + # Mounting /proc + mount proc-live -t proc chroot/proc + + # Creating stage file + Create_stagefile .build/chroot_proc + ;; + + remove) + Echo_message "Begin unmounting /proc..." + + # Checking lock file + Check_lockfile .lock + + # Creating lock file + Create_lockfile .lock + + # Workaround binfmt-support /proc locking + if [ -e chroot/proc/sys/fs/binfmt_misc/status ] + then + umount chroot/proc/sys/fs/binfmt_misc + fi + + # Unmounting /proc + if [ -e chroot/proc/version ] + then + umount chroot/proc + fi + + # Removing stage file + rm -f .build/chroot_proc + ;; + + *) + Usage + ;; +esac diff --git a/system-build/scripts/build/chroot_resolv b/system-build/scripts/build/chroot_resolv new file mode 100755 index 0000000..7cf55fc --- /dev/null +++ b/system-build/scripts/build/chroot_resolv @@ -0,0 +1,107 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'manage /etc/resolv.conf')" +HELP="" +USAGE="${PROGRAM} {install|remove} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +case "${1}" in + install) + Echo_message "Configuring file /etc/resolv.conf" + + # Checking stage file + Check_stagefile .build/chroot_resolv + + # Checking lock file + Check_lockfile .lock + + # Creating lock file + Create_lockfile .lock + + if [ -e chroot/etc/resolv.conf ] + then + # Save resolv file or symlink + mv chroot/etc/resolv.conf chroot/etc/resolv.conf.orig + + # Also truncate it, otherwise we'll end up with the one + # created by debootstrap in the final image. + # + # If you want to have a custom resolv.conf, please + # overwrite it with normal local_includes mechanism. + Truncate chroot/etc/resolv.conf.orig + elif [ -L chroot/etc/resolv.conf ] + then + # Move resolv.conf aside if it's a symlink (likely resolvconf) + mv chroot/etc/resolv.conf chroot/etc/resolv.conf.orig + fi + + if [ -f /etc/resolv.conf ] + then + # Copy resolv file + cp /etc/resolv.conf chroot/etc/resolv.conf + fi + + # Creating stage file + Create_stagefile .build/chroot_resolv + ;; + + remove) + Echo_message "Deconfiguring file /etc/resolv.conf" + + # Checking lock file + Check_lockfile .lock + + # Creating lock file + Create_lockfile .lock + + if [ -e config/includes.chroot/etc/resolv.conf ] + then + # Copying local resolv.conf + cp -a config/includes.chroot/etc/resolv.conf chroot/etc/resolv.conf + rm -f chroot/etc/resolv.conf.orig + elif [ -e chroot/etc/resolv.conf.orig ] || [ -L chroot/etc/resolv.conf.orig ] + then + # Restoring resolv file or symlink + mv chroot/etc/resolv.conf.orig chroot/etc/resolv.conf + else + # Truncating resolv file + Truncate chroot/etc/resolv.conf + fi + + # Clean up resolvconf's pollution + if [ -e chroot/etc/resolvconf/resolv.conf.d ] + then + rm -f chroot/etc/resolvconf/resolv.conf.d/original + rm -f chroot/etc/resolvconf/resolv.conf.d/tail + fi + + # Removing stage file + rm -f .build/chroot_resolv + ;; + + *) + Usage + ;; +esac diff --git a/system-build/scripts/build/chroot_selinuxfs b/system-build/scripts/build/chroot_selinuxfs new file mode 100755 index 0000000..66d4639 --- /dev/null +++ b/system-build/scripts/build/chroot_selinuxfs @@ -0,0 +1,78 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'mount /sys/fs/selinux')" +HELP="" +USAGE="${PROGRAM} {install|remove} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +case "${1}" in + install) + if [ -e /sys/fs/selinux/enforce ] && [ "$(cat /sys/fs/selinux/enforce)" = "1" ] + then + Echo_message "Begin mounting /sys/fs/selinux..." + + # Checking stage file + Check_stagefile .build/chroot_selinuxfs + + # Checking lock file + Check_lockfile .lock + + # Creating lock file + Create_lockfile .lock + + # Create mountpoint + mkdir -p chroot/sys/fs/selinux + + # Mounting /sys/fs/selinux + mount selinuxfs-live -t selinuxfs chroot/sys/fs/selinux + + # Creating stage file + Create_stagefile .build/chroot_selinuxfs + fi + ;; + + remove) + Echo_message "Begin unmounting /sys/fs/selinux..." + + # Checking lock file + Check_lockfile .lock + + # Creating lock file + Create_lockfile .lock + + # Unmounting /sys/fs/selinux + if [ -e chroot/sys/fs/selinux/enforce ] + then + umount chroot/sys/fs/selinux + fi + + # Removing stage file + rm -f .build/chroot_selinux + ;; + + *) + Usage + ;; +esac diff --git a/system-build/scripts/build/chroot_sysfs b/system-build/scripts/build/chroot_sysfs new file mode 100755 index 0000000..a0637f1 --- /dev/null +++ b/system-build/scripts/build/chroot_sysfs @@ -0,0 +1,75 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'mount /sys')" +HELP="" +USAGE="${PROGRAM} {install|remove} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +case "${1}" in + install) + Echo_message "Begin mounting /sys..." + + # Checking stage file + Check_stagefile .build/chroot_sysfs + + # Checking lock file + Check_lockfile .lock + + # Creating lock file + Create_lockfile .lock + + # Create mountpoint + mkdir -p chroot/sys + + # Mounting /sys + mount sysfs-live -t sysfs chroot/sys + + # Creating stage file + Create_stagefile .build/chroot_sysfs + ;; + + remove) + Echo_message "Begin unmounting /sys..." + + # Checking lock file + Check_lockfile .lock + + # Creating lock file + Create_lockfile .lock + + # Unmounting /sys + if [ -e chroot/sys/class ] + then + umount chroot/sys + fi + + # Removing stage file + rm -f .build/chroot_sysfs + ;; + + *) + Usage + ;; +esac diff --git a/system-build/scripts/build/chroot_sysv-rc b/system-build/scripts/build/chroot_sysv-rc new file mode 100755 index 0000000..a613fd4 --- /dev/null +++ b/system-build/scripts/build/chroot_sysv-rc @@ -0,0 +1,87 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'manage /usr/sbin/policy-rc.d')" +HELP="" +USAGE="${PROGRAM} {install|remove} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +case "${1}" in + install) + Echo_message "Configuring file /usr/sbin/policy-rc.d" + + # Checking stage file + Check_stagefile .build/chroot_sysv-rc + + # Checking lock file + Check_lockfile .lock + + # Creating lock file + Create_lockfile .lock + + if [ -e chroot/usr/sbin/policy-rc.d ] + then + # Save policy-rc.d file + Chroot chroot dpkg-divert --rename --quiet --add /usr/sbin/policy-rc.d + fi + + # Create policy-rc.d file +cat > chroot/usr/sbin/policy-rc.d << EOF +#!/bin/sh +echo "All runlevel operations denied by policy" >&2 +exit 101 +EOF + + chmod 0755 chroot/usr/sbin/policy-rc.d + + # Creating stage file + Create_stagefile .build/chroot_sysv-rc + ;; + + remove) + Echo_message "Deconfiguring file /usr/sbin/policy-rc.d" + + # Checking lock file + Check_lockfile .lock + + # Creating lock file + Create_lockfile .lock + + # Remove custom policy-rc.d file + rm -f chroot/usr/sbin/policy-rc.d + + if [ -e chroot/usr/sbin/policy-rc.d.distrib ] + then + # Restore policy-rc.d file + Chroot chroot dpkg-divert --rename --quiet --remove /usr/sbin/policy-rc.d + fi + + # Removing stage file + rm -f .build/chroot_sysv-rc + ;; + + *) + Usage + ;; +esac diff --git a/system-build/scripts/build/chroot_tmpfs b/system-build/scripts/build/chroot_tmpfs new file mode 100755 index 0000000..a7a1d72 --- /dev/null +++ b/system-build/scripts/build/chroot_tmpfs @@ -0,0 +1,80 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'use tmpfs to speedup the build')" +HELP="" +USAGE="${PROGRAM} {install|remove} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +if [ "${LB_BUILD_WITH_TMPFS}" != "true" ] +then + exit 0 +fi + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +case "${1}" in + install) + Echo_message "Configuring tmpfs for /var/lib/dpkg" + + # Checking stage file + Check_stagefile .build/chroot_tmpfs + + # Checking lock file + Check_lockfile .lock + + # Creating lock file + Create_lockfile .lock + + mv chroot/var/lib/dpkg chroot/var/lib/dpkg.tmp + mkdir chroot/var/lib/dpkg + mount -t tmpfs tmpfs chroot/var/lib/dpkg + mv chroot/var/lib/dpkg.tmp/* chroot/var/lib/dpkg + rm -rf chroot/var/lib/dpkg.tmp + + # Creating stage file + Create_stagefile .build/chroot_tmpfs + ;; + + remove) + Echo_message "Deconfiguring tmpfs for /var/lib/dpkg" + + # Checking lock file + Check_lockfile .lock + + # Creating lock file + Create_lockfile .lock + + mkdir -p chroot/var/lib/dpkg.tmp + mv chroot/var/lib/dpkg/* chroot/var/lib/dpkg.tmp + umount chroot/var/lib/dpkg + rm -rf chroot/var/lib/dpkg + mv chroot/var/lib/dpkg.tmp chroot/var/lib/dpkg + + # Removing stage file + rm -f .build/chroot_tmpfs + ;; + + *) + Usage + ;; +esac diff --git a/system-build/scripts/build/clean b/system-build/scripts/build/clean new file mode 100755 index 0000000..a40b51d --- /dev/null +++ b/system-build/scripts/build/clean @@ -0,0 +1,166 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Read meta config +if [ "${1}" != "noauto" ] && [ -x auto/clean ] +then + Echo_message "Executing auto/clean script." + ./auto/clean "${@}" + exit ${?} +fi + +if [ "${1}" = "noauto" ] +then + shift +fi + +# Setting static variables +DESCRIPTION="$(Echo 'clean up system build directories')" +HELP="" +USAGE="${PROGRAM} [--all] [--cache] [--chroot] [--binary] [--purge] [--remove] [--stage] [--source]" + +#Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +# Avoid cases were users accidentally nuke their config/binary +if [ ! -d config ] && [ "$(basename ${PWD})" = "config" ] +then + Echo_error "%s is not a good live-build working directory to clean." "${PWD}" + exit 1 +fi + +rm -f .lock + +if [ -z "${1}" ] +then + ARGUMENTS="--all" +else + ARGUMENTS="${@}" +fi + +for ARGUMENT in ${ARGUMENTS} +do + case "${ARGUMENT}" in + --all) + "${0}" noauto --chroot + "${0}" noauto --binary + "${0}" noauto --stage + "${0}" noauto --source + + rmdir --ignore-fail-on-non-empty auto > /dev/null 2>&1 || true + rmdir --ignore-fail-on-non-empty local/bin > /dev/null 2>&1 || true + rmdir --ignore-fail-on-non-empty local > /dev/null 2>&1 || true + ;; + + --cache) + rm -rf cache + ;; + + --chroot) + Echo_message "Cleaning chroot" + umount -f chroot/run > /dev/null 2>&1 || true + umount -f chroot/sys > /dev/null 2>&1 || true + umount -f chroot/proc/sys/fs/binfmt_misc > /dev/null 2>&1 || true + umount -f chroot/proc > /dev/null 2>&1 || true + umount -f chroot/lib/init/rw > /dev/null 2>&1 || true + umount -f chroot/dev/shm > /dev/null 2>&1 || true + umount -f chroot/dev/pts > /dev/null 2>&1 || true + umount -f chroot/dev > /dev/null 2>&1 || true + umount -f chroot/var/lib/dpkg > /dev/null 2>&1 || true + umount -f chroot/root/config > /dev/null 2>&1 || true + + umount -f chroot/binary.tmp > /dev/null 2>&1 || true + umount -f chroot/dev.tmp/pts > /dev/null 2>&1 || true + + rm -rf chroot chroot.tmp + + rm -f chroot.packages.live chroot.packages.install + rm -f chroot.files + + rm -f .build/chroot* + ;; + + --binary) + umount -f binary.tmp > /dev/null 2>&1 || true + rm -rf binary.tmp binary.deb binary.udeb + rm -f ${LIVE_IMAGE_NAME}*.iso + rm -f ${LIVE_IMAGE_NAME}*.img + rm -f ${LIVE_IMAGE_NAME}*.tar.gz + rm -f ${LIVE_IMAGE_NAME}*.zsync* + rm -f ${LIVE_IMAGE_NAME}.sh + rm -f ${LIVE_IMAGE_NAME}*.contents ${LIVE_IMAGE_NAME}*.packages ${LIVE_IMAGE_NAME}*.files + rm -f MD5SUMS SHA1SUMS SHA256SUMS SHA512SUMS + rm -f md5sum.txt sha1sum.txt sha256sum.txt sha512sum.txt + + rm -rf binary + rm -rf tftpboot + + rm -f .build/binary* + ;; + + --remove) + "${0}" --all + rm -rf cache/packages.* + ;; + + --purge) + "${0}" --all + "${0}" --cache + + if [ -e auto/config ] + then + rm -f .build/config + fi + ;; + + --stage) + rm -rf .build/* + ;; + + --source) + rm -f ${LIVE_IMAGE_NAME}-source*.iso + rm -f ${LIVE_IMAGE_NAME}-source*.img + rm -f ${LIVE_IMAGE_NAME}-source*.tar + rm -f ${LIVE_IMAGE_NAME}-source*.tar.gz + rm -f ${LIVE_IMAGE_NAME}-source*.list + rm -f ${LIVE_IMAGE_NAME}-source-selection.txt + + rm -rf source + + rm -f .build/source* + ;; + + -h|--help) + Help + ;; + + -u|--usage) + Usage + ;; + + -v|--version) + echo "${VERSION}" + exit 0 + ;; + + *) + Usage + exit 1 + ;; + esac +done diff --git a/system-build/scripts/build/config b/system-build/scripts/build/config new file mode 100755 index 0000000..fc710a3 --- /dev/null +++ b/system-build/scripts/build/config @@ -0,0 +1,1379 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +PROGRAM="lb config" +DESCRIPTION="$(Echo 'create configuration for live-build(7)')" +USAGE="${PROGRAM} [--apt-ftp-proxy URL]\n\ +\t [--apt-http-proxy URL]\n\ +\t [--apt-indices true|false]\n\ +\t [--apt-options OPTION|\"OPTIONS\"]\n\ +\t [--apt-pipeline DEPTH]\n\ +\t [--apt-recommends true|false]\n\ +\t [--apt-secure true|false]\n\ +\t [--apt-source-archives true|false]\n\ +\t [-a|--architectures ARCHITECTURE]\n\ +\t [-b|--binary-images iso|iso-hybrid|netboot|tar|hdd]\n\ +\t [--binary-filesystem fat16|fat32|ext2|ext3|ext4|ntfs]\n\ +\t [--bootappend-install PARAMETER|\"PARAMETERS\"]\n\ +\t [--bootappend-live PARAMETER|\"PARAMETERS\"]\n\ +\t [--bootappend-live-failsafe PARAMETER|\"PARAMETERS\"]\n\ +\t [--bootloaders grub-legacy|grub-pc|syslinux]\n\ +\t [--cache true|false]\n\ +\t [--cache-indices true|false]\n\ +\t [--cache-packages true|false]\n\ +\t [--cache-stages STAGE|\"STAGES\"]\n\ +\t [--checksums md5|sha1|sha256|sha512|none]\n\ +\t [--compression bzip2|gzip|lzip|xz|none]\n\ +\t [--config GIT_URL::GIT_BRANCH]\n\ +\t [--zsync true|false]\n\ +\t [--build-with-chroot true|false]\n\ +\t [--chroot-filesystem ext2|ext3|ext4|squashfs|jffs2|none]\n\ +\t [--clean\n\ +\t [-c|--conffile FILE]\n\ +\t [--debconf-frontend dialog|editor|noninteractive|readline]\n\ +\t [--debconf-priority low|medium|high|critical]\n\ +\t [--debian-installer true|cdrom|netinst|netboot|businesscard|live|false]\n\ +\t [--debian-installer-distribution daily|CODENAME]\n\ +\t [--debian-installer-preseedfile FILE|URL]\n\ +\t [--debian-installer-gui true|false]\n\ +\t [--debug]\n\ +\t [-d|--distribution CODENAME]\n\ +\t [--parent-distribution CODENAME]\n\ +\t [--parent-debian-installer-distribution CODENAME]\n\ +\t [--dump]\n\ +\t [--fdisk fdisk|fdisk.dist]\n\ +\t [--force]\n\ +\t [--grub-splash FILE]\n\ +\t [--gzip-options OPTION|\"OPTIONS\"]\n\ +\t [--ignore-system-defaults]\n\ +\t [--initramfs auto|none|system-boot]\n\ +\t [--initramfs-compression bzip2|gzip|lzma]\n\ +\t [--initsystem sysvinit|systemd|none]\n\ +\t [--image-name [NAME]\n\ +\t [--interactive shell]\n\ +\t [--isohybrid-options OPTION|\"OPTIONS\"]\n\ +\t [--hdd-label LABEL]\n\ +\t [--hdd-size MB]\n\ +\t [--hdd-partition-start [parted unit, e.g. 63s]\n\ +\t [--iso-application NAME]\n\ +\t [--iso-preparer NAME]\n\ +\t [--iso-publisher NAME]\n\ +\t [--iso-volume NAME]\n\ +\t [--jffs2-eraseblock SIZE]\n\ +\t [--keyring-packages PACKAGE|\"PACKAGES\"]\n\ +\t [-k|--linux-flavours FLAVOUR|\"FLAVOURS\"]\n\ +\t [--linux-packages \"PACKAGES\"]\n\ +\t [--losetup losetup|losetup.orig]\n\ +\t [--memtest memtest86+|memtest86|none]\n\ +\t [-m|--parent-mirror-bootstrap URL]\n\ +\t [--parent-mirror-chroot URL]\n\ +\t [--parent-mirror-chroot-security URL]\n\ +\t [--parent-mirror-binary URL]\n\ +\t [--parent-mirror-binary-security URL]\n\ +\t [--parent-mirror-debian-installer URL]\n\ +\t [--mirror-bootstrap URL]\n\ +\t [--mirror-chroot URL]\n\ +\t [--mirror-chroot-security URL]\n\ +\t [--mirror-binary URL]\n\ +\t [--mirror-binary-security URL]\n\ +\t [--mirror-debian-installer URL]\n\ +\t [--mode debian]\n\ +\t [--system live|normal]\n\ +\t [--net-root-filesystem nfs|cfs]\n\ +\t [--net-root-mountoptions OPTIONS]\n\ +\t [--net-root-path PATH]\n\ +\t [--net-root-server IP|HOSTNAME]\n\ +\t [--net-cow-filesystem nfs|cfs]\n\ +\t [--net-cow-mountoptions OPTIONS]\n\ +\t [--net-cow-path PATH]\n\ +\t [--net-cow-server IP|HOSTNAME]\n\ +\t [--net-tarball true|false]\n\ +\t [--quiet]\n\ +\t [--archive-areas ARCHIVE_AREA|\"ARCHIVE_AREAS\"]\n\ +\t [--parent-archive-areas ARCHIVE_AREA|\"ARCHIVE_AREAS\"]\n\ +\t [--security true|false]\n\ +\t [--source true|false]\n\ +\t [-s|--source-images iso|netboot|tar|hdd]\n\ +\t [--firmware-binary true|false]\n\ +\t [--firmware-chroot true|false]\n\ +\t [--swap-file-path PATH]\n\ +\t [--swap-file-size MB]\n\ +\t [--tasksel apt|tasksel]\n\ +\t [--updates true|false]\n\ +\t [--backports true|false]\n\ +\t [--verbose]\n\ +\t [--loadlin true|false]\n\ +\t [--win32-loader true|false]\n\ +\t [--bootstrap-qemu-exclude PACKAGES]\n\ +\t [--bootstrap-qemu-static PATH]\n\ +\t [--bootstrap-qemu-arch ARCH]" + + +Local_arguments () +{ + LONG_OPTIONS="apt:,apt-ftp-proxy:,apt-http-proxy:,apt-options:,debootstrap-options:, + apt-pipeline:,apt-recommends:,apt-secure:,apt-source-archives:,bootstrap:,cache:,cache-indices:,cache-packages:, + cache-stages:,debconf-frontend:,debconf-priority:,dump, + initramfs:,initramfs-compression:,initsystem:,fdisk:,losetup:,mode:,system:,tasksel:, + architectures:,clean, + distribution:,parent-distribution:,parent-debian-installer-distribution:,parent-mirror-bootstrap:,parent-mirror-chroot:,parent-mirror-chroot-security:,parent-mirror-binary:, + parent-mirror-binary-security:,parent-mirror-debian-installer:, + mirror-bootstrap:,mirror-chroot:,mirror-chroot-security:,mirror-binary:, + mirror-binary-security:,mirror-debian-installer:, + archive-areas:,parent-archive-areas:,chroot-filesystem:, + gzip-options:,image-name:,interactive:,keyring-packages:,linux-flavours:,linux-packages:, + security:,updates:,backports:,binary-filesystem:,binary-images:, + apt-indices:,bootappend-install:,bootappend-live:,bootappend-live-failsafe:,bootloaders:,checksums:,compression:,config:,zsync:,build-with-chroot:, + debian-installer:,debian-installer-distribution:,debian-installer-preseedfile:,debian-installer-gui:, + grub-splash:,isohybrid-options:,hdd-label:,hdd-size:,hdd-partition-start:,iso-application:,iso-preparer:,iso-publisher:, + iso-volume:,jffs2-eraseblock:,memtest:,net-root-filesystem:,net-root-mountoptions:, + net-root-path:,net-root-server:,net-cow-filesystem:,net-cow-mountoptions:,net-cow-path:, + net-cow-server:,net-tarball:,firmware-binary:,firmware-chroot:,swap-file-path:,swap-file-size:, + loadlin:,win32-loader:,source:,source-images:,breakpoints,conffile:,debug,force, + help,ignore-system-defaults,quiet,usage,verbose,version,bootstrap-qemu-static:,bootstrap-qemu-arch:, + bootstrap-qemu-exclude:" + # Remove spaces added by indentation + LONG_OPTIONS="$(echo ${LONG_OPTIONS} | tr -d ' ')" + ARGUMENTS="$(getopt --longoptions ${LONG_OPTIONS} --name="${PROGRAM}" --options a:f:d:m:l:k:p:b:e:s:c:huv --shell sh -- "${@}")" + + if [ "${?}" != "0" ] + then + Echo_error "terminating" >&2 + exit 1 + fi + + eval set -- "${ARGUMENTS}" + + while true + do + case "${1}" in + --dump) + # Dump version + if [ -x "$(which dpkg-query 2>/dev/null)" ] + then + VERSION_DPKG="$(dpkg-query -f='${Version}' --show live-build)" + fi + + Echo "%s: This is live-build version %s" "${0}" "${VERSION_DPKG:-${VERSION}}" + + # Dump conffile contents + Print_conffiles config/all config/common config/bootstrap config/system config/binary config/source + + # Dump contents of directories that contain text files + for DIRECTORY in config/package-lists config/apt config/preseed config/rootfs + do + if Find_files "${DIRECTORY}" + then + Echo_file "${DIRECTORY}"/* + fi + done + + # Dump directory listings of all directories under config/ + for DIRECTORY in $(find config/ -mindepth 1 -maxdepth 1 -type d) + do + if Find_files "${DIRECTORY}" + then + ls -lR "${DIRECTORY}" | while read LINE + do + echo "${DIRECTORY}: ${LINE}" + done + fi + done + + exit 0 + ;; + + --clean) + _CLEAN="true" + shift + ;; + + # config/common + --apt) + LB_APT="${2}" + shift 2 + ;; + + --apt-ftp-proxy) + LB_APT_FTP_PROXY="${2}" + shift 2 + ;; + + --apt-http-proxy) + LB_APT_HTTP_PROXY="${2}" + shift 2 + ;; + + --apt-indices) + LB_APT_INDICES="${2}" + shift 2 + ;; + + --apt-options) + APT_OPTIONS="${2}" + shift 2 + ;; + + --apt-pipeline) + LB_APT_PIPELINE="${2}" + shift 2 + ;; + + --apt-recommends) + LB_APT_RECOMMENDS="${2}" + shift 2 + ;; + + --apt-secure) + LB_APT_SECURE="${2}" + shift 2 + ;; + + --apt-source-archives) + LB_APT_SOURCE_ARCHIVES="${2}" + shift 2 + ;; + + --debootstrap-options) + DEBOOTSTRAP_OPTIONS="${2}" + shift 2 + ;; + + --cache) + LB_CACHE="${2}" + shift 2 + ;; + + --cache-indices) + LB_CACHE_INDICES="${2}" + shift 2 + ;; + + --cache-packages) + LB_CACHE_PACKAGES="${2}" + shift 2 + ;; + + --cache-stages) + LB_CACHE_STAGES="${2}" + shift 2 + ;; + + --debconf-frontend) + LB_DEBCONF_FRONTEND="${2}" + shift 2 + ;; + + --debconf-priority) + LB_DEBCONF_PRIORITY="${2}" + shift 2 + ;; + + --initramfs) + LB_INITRAMFS="${2}" + shift 2 + ;; + + --initramfs-compression) + LB_INITRAMFS_COMPRESSION="${2}" + shift 2 + ;; + + --initsystem) + LB_INITSYSTEM="${2}" + shift 2 + ;; + + --fdisk) + LB_FDISK="${2}" + shift 2 + ;; + + --losetup) + LB_LOSETUP="${2}" + shift 2 + ;; + + --mode) + LB_MODE="${2}" + shift 2 + ;; + + --system) + LB_SYSTEM="${2}" + shift 2 + ;; + + --tasksel) + LB_TASKSEL="${2}" + shift 2 + ;; + + # config/bootstrap + -a|--architectures) + LB_ARCHITECTURES="${2}" + shift 2 + ;; + + -d|--distribution) + LB_DISTRIBUTION="${2}" + shift 2 + ;; + + --parent-distribution) + LB_PARENT_DISTRIBUTION="${2}" + shift 2 + ;; + + -m|--parent-mirror-bootstrap) + LB_PARENT_MIRROR_BOOTSTRAP="${2}" + shift 2 + ;; + + --parent-mirror-chroot) + LB_PARENT_MIRROR_CHROOT="${2}" + shift 2 + ;; + + --parent-mirror-chroot-security) + LB_PARENT_MIRROR_CHROOT_SECURITY="${2}" + shift 2 + ;; + + --parent-mirror-binary) + LB_PARENT_MIRROR_BINARY="${2}" + shift 2 + ;; + + --parent-mirror-binary-security) + LB_PARENT_MIRROR_BINARY_SECURITY="${2}" + shift 2 + ;; + + --parent-mirror-debian-installer) + LB_PARENT_MIRROR_DEBIAN_INSTALLER="${2}" + shift 2 + ;; + + --mirror-bootstrap) + LB_MIRROR_BOOTSTRAP="${2}" + shift 2 + ;; + + --mirror-chroot) + LB_MIRROR_CHROOT="${2}" + shift 2 + ;; + + --mirror-chroot-security) + LB_MIRROR_CHROOT_SECURITY="${2}" + shift 2 + ;; + + --mirror-binary) + LB_MIRROR_BINARY="${2}" + shift 2 + ;; + + --mirror-binary-security) + LB_MIRROR_BINARY_SECURITY="${2}" + shift 2 + ;; + + --mirror-debian-installer) + LB_MIRROR_DEBIAN_INSTALLER="${2}" + shift 2 + ;; + + --archive-areas) + LB_ARCHIVE_AREAS="${2}" + shift 2 + ;; + + --parent-archive-areas) + LB_PARENT_ARCHIVE_AREAS="${2}" + shift 2 + ;; + + # config/system + --chroot-filesystem) + LB_CHROOT_FILESYSTEM="${2}" + shift 2 + ;; + + --gzip-options) + GZIP_OPTIONS="${2}" + shift 2 + ;; + + --image-name) + LIVE_IMAGE_NAME="${2}" + shift 2 + ;; + + --interactive) + LB_INTERACTIVE="${2}" + shift 2 + ;; + + --keyring-packages) + LB_KEYRING_PACKAGES="${2}" + shift 2 + ;; + + -k|--linux-flavours) + LB_LINUX_FLAVOURS="${2}" + shift 2 + ;; + + --linux-packages) + LB_LINUX_PACKAGES="${2}" + shift 2 + ;; + + --security) + LB_SECURITY="${2}" + shift 2 + ;; + + --updates) + LB_UPDATES="${2}" + shift 2 + ;; + + --backports) + LB_BACKPORTS="${2}" + shift 2 + ;; + + # config/binary + --binary-filesystem) + LB_BINARY_FILESYSTEM="${2}" + shift 2 + ;; + + -b|--binary-images) + LIVE_IMAGE_TYPE="${2}" + shift 2 + ;; + + --bootappend-live) + LB_BOOTAPPEND_LIVE="${2}" + shift 2 + ;; + + --bootappend-live-failsafe) + LB_BOOTAPPEND_LIVE_FAILSAFE="${2}" + shift 2 + ;; + + --bootappend-install) + LB_BOOTAPPEND_INSTALL="${2}" + shift 2 + ;; + + --bootloaders) + LB_BOOTLOADERS="${2}" + shift 2 + ;; + + --checksums) + LB_CHECKSUMS="${2}" + shift 2 + ;; + + --compression) + LB_COMPRESSION="${2}" + shift 2 + ;; + + --config) + _CONFIG="${2}" + shift 2 + ;; + + --zsync) + LB_ZSYNC="${2}" + shift 2 + ;; + + --build-with-chroot) + LB_BUILD_WITH_CHROOT="${2}" + shift 2 + ;; + + --debian-installer) + LB_DEBIAN_INSTALLER="${2}" + shift 2 + ;; + + --debian-installer-distribution) + LB_DEBIAN_INSTALLER_DISTRIBUTION="${2}" + shift 2 + ;; + + --parent-debian-installer-distribution) + LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION="${2}" + shift 2 + ;; + + --debian-installer-preseedfile) + LB_DEBIAN_INSTALLER_PRESEEDFILE="${2}" + shift 2 + ;; + + --debian-installer-gui) + LB_DEBIAN_INSTALLER_GUI="${2}" + shift 2 + ;; + + --grub-splash) + LB_GRUB_SPLASH="${2}" + shift 2 + ;; + + --isohybrid-options) + LB_ISOHYBRID_OPTIONS="${2}" + shift 2 + ;; + + --hdd-label) + LB_HDD_LABEL="${2}" + shift 2 + ;; + + --hdd-size) + LB_HDD_SIZE="${2}" + shift 2 + ;; + + --hdd-partition-start) + LB_HDD_PARTITION_START="${2}" + shift 2 + ;; + + --iso-application) + LB_ISO_APPLICATION="${2}" + shift 2 + ;; + + --iso-preparer) + LB_ISO_PREPARER="${2}" + shift 2 + ;; + + --iso-publisher) + LB_ISO_PUBLISHER="${2}" + shift 2 + ;; + + --iso-volume) + LB_ISO_VOLUME="${2}" + shift 2 + ;; + + --jffs2-eraseblock) + LB_JFFS2_ERASEBLOCK="${2}" + shift 2 + ;; + + --memtest) + LB_MEMTEST="${2}" + shift 2 + ;; + + --net-root-filesystem) + LB_NET_ROOT_FILESYSTEM="${2}" + shift 2 + ;; + + --net-root-mountoptions) + LB_NET_ROOT_MOUNTOPTIONS="${2}" + shift 2 + ;; + + --net-root-path) + LB_NET_ROOT_PATH="${2}" + shift 2 + ;; + + --net-root-server) + LB_NET_ROOT_SERVER="${2}" + shift 2 + ;; + + --net-cow-filesystem) + LB_NET_COW_FILESYSTEM="${2}" + shift 2 + ;; + + --net-cow-mountoptions) + LB_NET_COW_MOUNTOPTIONS="${2}" + shift 2 + ;; + + --net-cow-path) + LB_NET_COW_PATH="${2}" + shift 2 + ;; + + --net-cow-server) + LB_NET_COW_SERVER="${2}" + shift 2 + ;; + + --net-tarball) + LB_NET_TARBALL="${2}" + shift 2 + ;; + + --firmware-binary) + LB_FIRMWARE_BINARY="${2}" + shift 2 + ;; + + --firmware-chroot) + LB_FIRMWARE_CHROOT="${2}" + shift 2 + ;; + + --swap-file-path) + LB_SWAP_FILE_PATH="${2}" + shift 2 + ;; + + --swap-file-size) + LB_SWAP_FILE_SIZE="${2}" + shift 2 + ;; + + --loadlin) + LB_LOADLIN="${2}" + shift 2 + ;; + + --win32-loader) + LB_WIN32_LOADER="${2}" + shift 2 + ;; + + --bootstrap-qemu-arch) + LB_BOOTSTRAP_QEMU_ARCHITECTURES="${2}" + shift 2 + ;; + + --bootstrap-qemu-exclude) + LB_BOOTSTRAP_QEMU_EXCLUDE="${2}" + shift 2 + ;; + + --bootstrap-qemu-static) + LB_BOOTSTRAP_QEMU_STATIC="${2}" + shift 2 + ;; + + # config/source + --source) + LB_SOURCE="${2}" + shift 2 + ;; + + -s|--source-images) + LB_SOURCE_IMAGES="${2}" + shift 2 + ;; + + # other + --breakpoints) + _BREAKPOINTS="true" + shift + ;; + + -c|--conffile) + _CONFFILE="${2}" + shift 2 + ;; + + --color) + _COLOR="true" + shift + ;; + + --debug) + _DEBUG="true" + shift + ;; + + --force) + _FORCE="true" + shift + ;; + + -h|--help) + Help + shift + ;; + + --ignore-system-defaults) + shift + ;; + + --quiet) + _QUIET="true" + shift + ;; + + -u|--usage) + Usage + shift + ;; + + --verbose) + _VERBOSE="true" + shift + ;; + + -v|--version) + echo "${VERSION}" + exit 0 + ;; + + --) + shift + break + ;; + + *) + Echo_error "internal error %s" "${0}" + exit 1 + ;; + esac + done +} + +Local_arguments "${@}" + +if [ -e .git ] && [ -n "${_CONFIG}" ] +then + if [ "${1}" != "noauto" ] + then + Echo_message "Ignoring --config ${_CONFIG}: ${PWD} is already a git repository" + fi + + _CONFIG="" +fi + +if [ -e .build/config ] && [ -n "${_CONFIG}" ] +then + if [ "${1}" != "noauto" ] + then + Echo_message "Ignoring --config ${_CONFIG}: ${PWD} is already a live-build configuration tree" + fi + + _CONFIG="" +fi + +if [ -n "${_CONFIG}" ] +then + if [ -e "${_CONFIG}" ] || [ -e "/usr/share/live/images/${_CONFIG}" ] + then + if [ ! -e "${_CONFIG}" ] && [ -e "/usr/share/live/images/${_CONFIG}" ] + then + _CONFIG="/usr/share/live/images/${_CONFIG}" + fi + + Echo_message "Copying ${_CONFIG}" + tar -C "${_CONFIG}" -c . | tar -C ./ -x + else + _GIT_REPOSITORY="$(echo ${_CONFIG} | sed -e 's|::.*$||')" + + Echo_message "Cloning ${_GIT_REPOSITORY}" + git clone ${_GIT_REPOSITORY} ./ + + if [ "${_GIT_REPOSITORY}" != "${_CONFIG}" ] + then + _GIT_BRANCH="$(echo ${_CONFIG} | awk -F\:\: '{ print $NF }')" + + Echo_message "Checking out ${_GIT_BRANCH}" + git checkout ${_GIT_BRANCH} + fi + fi + + if [ -e auto/config ] + then + _EXTRA_OPTIONS="$(echo ${@} | sed -e "s|--config ${_GIT_REPOSITORY}::${_GIT_BRANCH}||g" -e "s|--config ${_GIT_REPOSITORY}||g")" + + Echo_message "The following extra options specified to lb config are going to be added to auto/config: ${_EXTRA_OPTIONS}" + sed -i -e "s|\"\${@}\"|${_EXTRA_OPTIONS} \"\${@}\"|" auto/config + fi +fi + +# Read meta config +if [ "${1}" != "noauto" ] && [ -x auto/config ] +then + Echo_message "Executing auto/config script." + ./auto/config "${@}" + exit ${?} +fi + +if [ "${1}" = "noauto" ] +then + shift +fi + +# Reading system configuration +if ls /etc/live/build.conf > /dev/null 2>&1 || ls /etc/live/build/* > /dev/null 2>&1 +then + if In_list "--ignore-system-defaults" "${@}" + then + Echo_message "Ignoring defaults in %s" "/etc/live/build.conf" + else + Echo_message "Using defaults in %s" "/etc/live/build.conf" + + Read_conffiles /etc/live/build.conf /etc/live/build/* + fi +fi + +# Reading existing configuration +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source + +Local_arguments "${@}" + +if [ -n "${_CONFFILE}" ] +then + Read_conffiles "${_CONFFILE}" +fi + +# Setting defaults +Set_defaults + +# Checking defaults +Check_defaults + +if [ ! -e config ] +then + Echo_message "Creating config tree for a ${LB_MODE}/${LB_DISTRIBUTION}/${LB_ARCHITECTURES} system" + mkdir config +else + Echo_message "Updating config tree for a ${LB_MODE}/${LB_DISTRIBUTION}/${LB_ARCHITECTURES} system" +fi + +# Creating live-build configuration +cat > config/common << EOF +# config/common - common options for live-build(7) + +# \$LB_APT_FTP_PROXY: set apt ftp proxy +# (Default: autodetected or empty) +LB_APT_FTP_PROXY="${LB_APT_FTP_PROXY}" + +# \$LB_APT_HTTP_PROXY: set apt http proxy +# (Default: autodetected or empty) +LB_APT_HTTP_PROXY="${LB_APT_HTTP_PROXY}" + +# \$LB_APT_PIPELINE: set apt pipeline depth +# (Default: ${LB_APT_PIPELINE}) +LB_APT_PIPELINE="${LB_APT_PIPELINE}" + +# \$LB_APT_RECOMMENDS: set apt recommends +# (Default: ${LB_APT_RECOMMENDS}) +LB_APT_RECOMMENDS="${LB_APT_RECOMMENDS}" + +# \$LB_APT_SECURE: set apt security +# (Default: ${LB_APT_SECURE}) +LB_APT_SECURE="${LB_APT_SECURE}" + +# \$LB_APT_SOURCE_ARCHIVES: set apt source entries in sources.list +# (Default: ${LB_APT_SOURCE_ARCHIVES}) +LB_APT_SOURCE_ARCHIVES="${LB_APT_SOURCE_ARCHIVES}" + +# \$LB_CACHE: control cache +# (Default: ${LB_CACHE}) +LB_CACHE="${LB_CACHE}" + +# \$LB_CACHE_INDICES: control if downloaded package indices should be cached +# (Default: ${LB_CACHE_INDICES}) +LB_CACHE_INDICES="${LB_CACHE_INDICES}" + +# \$LB_CACHE_PACKAGES: control if downloaded packages files should be cached +# (Default: ${LB_CACHE_PACKAGES}) +LB_CACHE_PACKAGES="${LB_CACHE_PACKAGES}" + +# \$LB_CACHE_STAGES: control if completed stages should be cached +# (Default: ${LB_CACHE_STAGES}) +LB_CACHE_STAGES="${LB_CACHE_STAGES}" + +# \$LB_DEBCONF_FRONTEND: set debconf(1) frontend to use +# (Default: ${LB_DEBCONF_FRONTEND}) +LB_DEBCONF_FRONTEND="${LB_DEBCONF_FRONTEND}" + +# \$LB_DEBCONF_PRIORITY: set debconf(1) priority to use +# (Default: ${LB_DEBCONF_PRIORITY}) +LB_DEBCONF_PRIORITY="${LB_DEBCONF_PRIORITY}" + +# \$LB_INITRAMFS: set initramfs hook +# (Default: ${LB_INITRAMFS}) +LB_INITRAMFS="${LB_INITRAMFS}" + +# \$LB_INITRAMFS_COMPRESSION: set initramfs compression +# (Default: ${LB_INITRAMFS_COMPRESSION}) +LB_INITRAMFS_COMPRESSION="${LB_INITRAMFS_COMPRESSION}" + +# \$LB_INITSYSTEM: set init system +# (Default: ${LB_INITSYSTEM}) +LB_INITSYSTEM="${LB_INITSYSTEM}" + +# \$LB_FDISK: set fdisk program +# (Default: autodetected) +LB_FDISK="${LB_FDISK}" + +# \$LB_LOSETUP: set losetup program +# (Default: autodetected) +LB_LOSETUP="${LB_LOSETUP}" + +# \$LB_MODE: set distribution mode +# (Default: ${LB_MODE}) +LB_MODE="${LB_MODE}" + +# \$LB_SYSTEM: set system type +# (Default: ${LB_SYSTEM}) +LB_SYSTEM="${LB_SYSTEM}" + +# \$LB_TASKSEL: set tasksel program +# (Default: ${LB_TASKSEL}) +LB_TASKSEL="${LB_TASKSEL}" + +# live-build options + +# \$_BREAKPOINTS: enable breakpoints +# (Default: ${_BREAKPOINTS}) +#_BREAKPOINTS="${_BREAKPOINTS}" + +# \$_DEBUG: enable debug +# (Default: ${_DEBUG}) +#_DEBUG="${_DEBUG}" + +# \$_COLOR: enable color +# (Default: ${_COLOR}) +#_COLOR="${_COLOR}" + +# \$_FORCE: enable force +# (Default: ${_FORCE}) +#_FORCE="${_FORCE}" + +# \$_QUIET: enable quiet +# (Default: ${_QUIET}) +_QUIET="${_QUIET}" + +# \$_VERBOSE: enable verbose +# (Default: ${_VERBOSE}) +#_VERBOSE="${_VERBOSE}" + +# Internal stuff (FIXME) +APT_OPTIONS="${APT_OPTIONS}" +DEBOOTSTRAP_OPTIONS="${DEBOOTSTRAP_OPTIONS}" +GZIP_OPTIONS="${GZIP_OPTIONS}" +ISOHYBRID_OPTIONS="${ISOHYBRID_OPTIONS}" +EOF + +# Creating lb_bootstrap_* configuration +cat > config/bootstrap << EOF +# config/bootstrap - options for live-build(7), bootstrap stage + +# \$LB_DISTRIBUTION: select distribution to use +# (Default: ${LB_DISTRIBUTION}) +LB_DISTRIBUTION="${LB_DISTRIBUTION}" + +# \$LB_PARENT_DISTRIBUTION: select parent distribution to use +# (Default: ${LB_PARENT_DISTRIBUTION}) +LB_PARENT_DISTRIBUTION="${LB_PARENT_DISTRIBUTION}" + +# \$LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION: select parent distribution for debian-installer to use +# (Default: ${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}) +LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION="${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}" + +# \$LB_PARENT_MIRROR_BOOTSTRAP: set parent mirror to bootstrap from +# (Default: ${LB_PARENT_MIRROR_BOOTSTRAP}) +LB_PARENT_MIRROR_BOOTSTRAP="${LB_PARENT_MIRROR_BOOTSTRAP}" + +# \$LB_PARENT_MIRROR_CHROOT: set parent mirror to fetch packages from +# (Default: ${LB_PARENT_MIRROR_CHROOT}) +LB_PARENT_MIRROR_CHROOT="${LB_PARENT_MIRROR_CHROOT}" + +# \$LB_PARENT_MIRROR_CHROOT_SECURITY: set security parent mirror to fetch packages from +# (Default: ${LB_PARENT_MIRROR_CHROOT_SECURITY}) +LB_PARENT_MIRROR_CHROOT_SECURITY="${LB_PARENT_MIRROR_CHROOT_SECURITY}" + +# \$LB_PARENT_MIRROR_BINARY: set parent mirror which ends up in the image +# (Default: ${LB_PARENT_MIRROR_BINARY}) +LB_PARENT_MIRROR_BINARY="${LB_PARENT_MIRROR_BINARY}" + +# \$LB_PARENT_MIRROR_BINARY_SECURITY: set security parent mirror which ends up in the image +# (Default: ${LB_PARENT_MIRROR_BINARY_SECURITY}) +LB_PARENT_MIRROR_BINARY_SECURITY="${LB_PARENT_MIRROR_BINARY_SECURITY}" + +# \$LB_PARENT_MIRROR_DEBIAN_INSTALLER: set debian-installer parent mirror +# (Default: ${LB_PARENT_MIRROR_BOOTSTRAP}) +LB_PARENT_MIRROR_DEBIAN_INSTALLER="${LB_PARENT_MIRROR_DEBIAN_INSTALLER}" + +# \$LB_MIRROR_BOOTSTRAP: set mirror to bootstrap from +# (Default: ${LB_MIRROR_BOOTSTRAP}) +LB_MIRROR_BOOTSTRAP="${LB_MIRROR_BOOTSTRAP}" + +# \$LB_MIRROR_CHROOT: set mirror to fetch packages from +# (Default: ${LB_MIRROR_CHROOT}) +LB_MIRROR_CHROOT="${LB_MIRROR_CHROOT}" + +# \$LB_MIRROR_CHROOT_SECURITY: set security mirror to fetch packages from +# (Default: ${LB_MIRROR_CHROOT_SECURITY}) +LB_MIRROR_CHROOT_SECURITY="${LB_MIRROR_CHROOT_SECURITY}" + +# \$LB_MIRROR_BINARY: set mirror which ends up in the image +# (Default: ${LB_MIRROR_BINARY}) +LB_MIRROR_BINARY="${LB_MIRROR_BINARY}" + +# \$LB_MIRROR_BINARY_SECURITY: set security mirror which ends up in the image +# (Default: ${LB_MIRROR_BINARY_SECURITY}) +LB_MIRROR_BINARY_SECURITY="${LB_MIRROR_BINARY_SECURITY}" + +# \$LB_MIRROR_DEBIAN_INSTALLER: set debian-installer mirror +# (Default: ${LB_MIRROR_BOOTSTRAP}) +LB_MIRROR_DEBIAN_INSTALLER="${LB_MIRROR_DEBIAN_INSTALLER}" + +# \$LB_BOOTSTRAP_QEMU_ARCHITECTURES: architectures to use foreign bootstrap +# (Default: ${LB_BOOTSTRAP_QEMU_ARCHITECTURES}) +LB_BOOTSTRAP_QEMU_ARCHITECTURES="${LB_BOOTSTRAP_QEMU_ARCHITECTURES}" + +# \$LB_BOOTSTRAP_QEMU_EXCLUDE: packages to exclude during foreign bootstrap +# (Default: ${LB_BOOTSTRAP_QEMU_EXCLUDE}) +LB_BOOTSTRAP_QEMU_EXCLUDE="${LB_BOOTSTRAP_QEMU_EXCLUDE}" + +# \$LB_BOOTSTRAP_QEMU_STATIC: static qemu binary for foreign bootstrap +# (Default: ${LB_BOOTSTRAP_QEMU_STATIC}) +LB_BOOTSTRAP_QEMU_STATIC="${LB_BOOTSTRAP_QEMU_STATIC}" +EOF + +# Creating lb_chroot_* configuration +mkdir -p config/archives +mkdir -p config/apt +mkdir -p config/packages +mkdir -p config/packages.chroot +mkdir -p config/package-lists +mkdir -p config/preseed + +cat > config/system << EOF +# config/system - options for live-build(7), chroot stage + +# \$LB_CHROOT_FILESYSTEM: set chroot filesystem +# (Default: ${LB_CHROOT_FILESYSTEM}) +LB_CHROOT_FILESYSTEM="${LB_CHROOT_FILESYSTEM}" + +# \$LB_UNION_FILESYSTEM: set union filesystem +# (Default: ${LB_UNION_FILESYSTEM}) +LB_UNION_FILESYSTEM="${LB_UNION_FILESYSTEM}" + +# \$LB_INTERACTIVE: set interactive build +# (Default: ${LB_INTERACTIVE}) +LB_INTERACTIVE="${LB_INTERACTIVE}" + +# \$LB_KEYRING_PACKAGES: set keyring packages +# (Default: empty) +LB_KEYRING_PACKAGES="${LB_KEYRING_PACKAGES}" + +# \$LB_LINUX_FLAVOURS: set kernel flavour to use +# (Default: autodetected) +LB_LINUX_FLAVOURS="${LB_LINUX_FLAVOURS}" + +# \$LB_LINUX_PACKAGES: set kernel packages to use +# (Default: autodetected) +LB_LINUX_PACKAGES="${LB_LINUX_PACKAGES}" + +# \$LB_SECURITY: enable security updates +# (Default: ${LB_SECURITY}) +LB_SECURITY="${LB_SECURITY}" + +# \$LB_UPDATES: enable updates updates +# (Default: ${LB_UPDATES}) +LB_UPDATES="${LB_UPDATES}" + +# \$LB_BACKPORTS: enable backports updates +# (Default: ${LB_BACKPORTS}) +LB_BACKPORTS="${LB_BACKPORTS}" +EOF + +# Creating lb_binary_* configuration +mkdir -p config/debian-installer +mkdir -p config/includes.installer +mkdir -p config/packages.binary +mkdir -p config/package-lists +mkdir -p config/rootfs + +cat > config/binary << EOF +# config/binary - options for live-build(7), binary stage + +# \$LB_BINARY_FILESYSTEM: set image filesystem +# (Default: ${LB_BINARY_FILESYSTEM}) +LB_BINARY_FILESYSTEM="${LB_BINARY_FILESYSTEM}" + +# \$LB_APT_INDICES: set apt generic indices +# (Default: ${LB_APT_INDICES}) +LB_APT_INDICES="${LB_APT_INDICES}" + +# \$LB_BOOTAPPEND_LIVE: set boot parameters +# (Default: empty) +LB_BOOTAPPEND_LIVE="${LB_BOOTAPPEND_LIVE}" + +# \$LB_BOOTAPPEND_INSTALL: set boot parameters +# (Default: empty) +LB_BOOTAPPEND_INSTALL="${LB_BOOTAPPEND_INSTALL}" + +# \$LB_BOOTAPPEND_LIVE_FAILSAFE: set boot parameters +# (Default: empty) +LB_BOOTAPPEND_LIVE_FAILSAFE="${LB_BOOTAPPEND_LIVE_FAILSAFE}" + +# \$LB_BOOTLOADERS: set bootloaders +# (Default: ${LB_BOOTLOADERS}) +LB_BOOTLOADERS="${LB_BOOTLOADERS}" + +# \$LB_CHECKSUMS: set checksums +# (Default: ${LB_CHECKSUMS}) +LB_CHECKSUMS="${LB_CHECKSUMS}" + +# \$LB_COMPRESSION: set compression +# (Default: ${LB_COMPRESSION}) +LB_COMPRESSION="${LB_COMPRESSION}" + +# \$LB_ZSYNC: set zsync +# (Default: ${LB_ZSYNC}) +LB_ZSYNC="${LB_ZSYNC}" + +# \${LB_BUILD_WITH_CHROOT: control if we build binary images chrooted +# (Default: ${LB_BUILD_WITH_CHROOT}) +# DO NEVER, *NEVER*, *N*E*V*E*R* SET THIS OPTION to false. +LB_BUILD_WITH_CHROOT="${LB_BUILD_WITH_CHROOT}" + +# \$LB_DEBIAN_INSTALLER: set debian-installer +# (Default: ${LB_DEBIAN_INSTALLER}) +LB_DEBIAN_INSTALLER="${LB_DEBIAN_INSTALLER}" + +# \$LB_DEBIAN_INSTALLER_DISTRIBUTION: set debian-installer suite +# (Default: empty) +LB_DEBIAN_INSTALLER_DISTRIBUTION="${LB_DEBIAN_INSTALLER_DISTRIBUTION}" + +# \$LB_DEBIAN_INSTALLER_PRESEEDFILE: set debian-installer preseed filename/url +# (Default: ${LB_DEBIAN_INSTALLER_PRESEEDFILE}) +LB_DEBIAN_INSTALLER_PRESEEDFILE="${LB_DEBIAN_INSTALLER_PRESEEDFILE}" + +# \$LB_DEBIAN_INSTALLER_GUI: toggle use of GUI debian-installer +# (Default: ${LB_DEBIAN_INSTALLER_GUI}) +LB_DEBIAN_INSTALLER_GUI="${LB_DEBIAN_INSTALLER_GUI}" + +# \$LB_GRUB_SPLASH: set custom grub splash +# (Default: empty) +LB_GRUB_SPLASH="${LB_GRUB_SPLASH}" + +# \$LB_HDD_LABEL: set hdd label +# (Default: ${LB_HDD_LABEL}) +LB_HDD_LABEL="${LB_HDD_LABEL}" + +# \$LB_HDD_SIZE: set hdd filesystem size +# (Default: ${LB_HDD_SIZE}) +LB_HDD_SIZE="${LB_HDD_SIZE}" + +# \$LB_HDD_PARTITION_START: set start of partition for the hdd target for BIOSes that expect a specific boot partition start (e.g. "63s"). If empty, use optimal layout. +# (Default: ${LB_HDD_PARTITION_START}) +LB_HDD_PARTITION_START="${LB_HDD_PARTITION_START}" + +# \$LB_ISO_APPLICATION: set iso author +# (Default: ${LB_ISO_APPLICATION}) +LB_ISO_APPLICATION="${LB_ISO_APPLICATION}" + +# \$LB_ISO_PREPARER: set iso preparer +# (Default: ${LB_ISO_PREPARER}) +LB_ISO_PREPARER="${LB_ISO_PREPARER}" + +# \$LB_ISO_PUBLISHER: set iso publisher +# (Default: ${LB_ISO_PUBLISHER}) +LB_ISO_PUBLISHER="${LB_ISO_PUBLISHER}" + +# \$LB_ISO_VOLUME: set iso volume (max 32 chars) +# (Default: ${LB_ISO_VOLUME}) +LB_ISO_VOLUME="${LB_ISO_VOLUME}" + +# \$LB_JFFS2_ERASEBLOCK: set jffs2 eraseblock size +# (Default: unset) +LB_JFFS2_ERASEBLOCK="" + +# \$LB_MEMTEST: set memtest +# (Default: ${LB_MEMTEST}) +LB_MEMTEST="${LB_MEMTEST}" + +# \$LB_LOADLIN: set loadlin +# (Default: ${LB_LOADLIN}) +LB_LOADLIN="${LB_LOADLIN}" + +# \$LB_WIN32_LOADER: set win32-loader +# (Default: ${LB_WIN32_LOADER}) +LB_WIN32_LOADER="${LB_WIN32_LOADER}" + +# \$LB_NET_ROOT_FILESYSTEM: set netboot filesystem +# (Default: ${LB_NET_ROOT_FILESYSTEM}) +LB_NET_ROOT_FILESYSTEM="${LB_NET_ROOT_FILESYSTEM}" + +# \$LB_NET_ROOT_MOUNTOPTIONS: set nfsopts +# (Default: empty) +LB_NET_ROOT_MOUNTOPTIONS="${LB_NET_ROOT_MOUNTOPTIONS}" + +# \$LB_NET_ROOT_PATH: set netboot server directory +# (Default: ${LB_NET_ROOT_PATH}) +LB_NET_ROOT_PATH="${LB_NET_ROOT_PATH}" + +# \$LB_NET_ROOT_SERVER: set netboot server address +# (Default: ${LB_NET_ROOT_SERVER}) +LB_NET_ROOT_SERVER="${LB_NET_ROOT_SERVER}" + +# \$LB_NET_COW_FILESYSTEM: set net client cow filesystem +# (Default: ${LB_NET_COW_FILESYSTEM}) +LB_NET_COW_FILESYSTEM="${LB_NET_COW_FILESYSTEM}" + +# \$LB_NET_COW_MOUNTOPTIONS: set cow mount options +# (Default: empty) +LB_NET_COW_MOUNTOPTIONS="${LB_NET_COW_MOUNTOPTIONS}" + +# \$LB_NET_COW_PATH: set cow directory +# (Default: ${LB_NET_COW_PATH}) +LB_NET_COW_PATH="${LB_NET_COW_PATH}" + +# \$LB_NET_COW_SERVER: set cow server +# (Default: ${LB_NET_COW_SERVER}) +LB_NET_COW_SERVER="${LB_NET_COW_SERVER}" + +# \$LB_NET_TARBALL: set net tarball +# (Default: ${LB_NET_TARBALL}) +LB_NET_TARBALL="${LB_NET_TARBALL}" + +# \$LB_FIRMWARE_BINARY: include firmware packages in debian-installer +# (Default: ${LB_FIRMWARE_BINARY}) +LB_FIRMWARE_BINARY="${LB_FIRMWARE_BINARY}" + +# \$LB_FIRMWARE_CHROOT: include firmware packages in debian-installer +# (Default: ${LB_FIRMWARE_CHROOT}) +LB_FIRMWARE_CHROOT="${LB_FIRMWARE_CHROOT}" + +# \$LB_SWAP_FILE_PATH: set swap file path +# (Default: ${LB_SWAP_FILE_PATH}) +LB_SWAP_FILE_PATH="${LB_SWAP_FILE_PATH}" + +# \$LB_SWAP_FILE_SIZE: set swap file size +# (Default: ${LB_SWAP_FILE_SIZE}) +LB_SWAP_FILE_SIZE="${LB_SWAP_FILE_SIZE}" +EOF + +# Creating lb_source_* configuration +cat > config/source << EOF +# config/source - options for live-build(7), source stage + +# \$LB_SOURCE: set source option +# (Default: ${LB_SOURCE}) +LB_SOURCE="${LB_SOURCE}" + +# \$LB_SOURCE_IMAGES: set image type +# (Default: ${LB_SOURCE_IMAGES}) +LB_SOURCE_IMAGES="${LB_SOURCE_IMAGES}" +EOF + +mkdir -p auto +mkdir -p local/bin + +# Checking defaults again +Check_defaults + +if [ "${_CLEAN}" = "true" ] +then + # Remove empty directories in config tree + rmdir --ignore-fail-on-non-empty auto > /dev/null 2>&1 || true + rmdir --ignore-fail-on-non-empty config/*/ > /dev/null 2>&1 || true + rmdir --ignore-fail-on-non-empty config > /dev/null 2>&1 || true + rmdir --ignore-fail-on-non-empty local/*/ > /dev/null 2>&1 || true + rmdir --ignore-fail-on-non-empty local > /dev/null 2>&1 || true +fi + +mkdir -p config/hooks/normal config/hooks/live +mkdir -p config/includes config/includes.bootstrap config/includes.chroot config/includes.binary config/includes.source + +Echo_message "Symlinking hooks..." + +for _HOOK in "${LIVE_BUILD}"/share/hooks/normal/*.hook* /usr/share/live/build/hooks/normal/*.hook* +do + if [ -e "${_HOOK}" ] && [ ! -e "config/hooks/normal/$(basename ${_HOOK})" ] + then + ln -s "${_HOOK}" "config/hooks/normal/$(basename ${_HOOK})" + fi +done + +for _HOOK in "${LIVE_BUILD}"/share/hooks/live/*.hook* /usr/share/live/build/hooks/live/*.hook* +do + if [ -e "${_HOOK}" ] && [ ! -e "config/hooks/live/$(basename ${_HOOK})" ] + then + ln -s "${_HOOK}" "config/hooks/live/$(basename ${_HOOK})" + fi +done + +if [ ! -e config/package-lists/live.list.chroot ] +then + mkdir -p config/package-lists + + case "${LB_INITRAMFS}" in + system-boot) + echo "system-boot" > config/package-lists/live.list.chroot + echo "system-config" >> config/package-lists/live.list.chroot + ;; + + *) + ;; +esac + +fi + +cat > config/build << EOF +[Image] +Architecture: ${LB_ARCHITECTURES} +Archive-Areas: ${LB_ARCHIVE_AREAS} +Distribution: ${LB_DISTRIBUTION} +Mirror-Bootstrap: ${LB_MIRROR_BOOTSTRAP} +EOF + +if [ "${LB_DERIVATIVE}" = "true" ] +then + +cat >> config/build << EOF + +Parent-Archive-Areas: ${LB_ARCHIVE_AREAS} +Parent-Distribution: ${LB_PARENT_DISTRIBUTION} +Parent-Mirror-Bootstrap: ${LB_PARENT_MIRROR_BOOTSTRAP} +EOF + +fi + +cat >> config/build << EOF + +[FIXME] +Configuration-Version: ${LIVE_CONFIGURATION_VERSION} +Name: ${LIVE_IMAGE_NAME} +Type: ${LIVE_IMAGE_TYPE} +EOF + +# Creating stage file +Create_stagefile .build/config diff --git a/system-build/scripts/build/installer b/system-build/scripts/build/installer new file mode 100755 index 0000000..8ef2edd --- /dev/null +++ b/system-build/scripts/build/installer @@ -0,0 +1,75 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Automatically populating config tree +if [ -x auto/config ] && [ ! -e .build/config ] +then + Echo_message "Automatically populating config tree." + lb config +fi + +# Setting static variables +DESCRIPTION="$(Echo 'preparing installer images')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +# Setup cleanup function +Setup_cleanup + +if [ "${LB_BUILD_WITH_CHROOT}" = "true" ] +then + # Configuring chroot + lb chroot_devpts install ${@} + lb chroot_proc install ${@} + lb chroot_selinuxfs install ${@} + lb chroot_sysfs install ${@} + lb chroot_debianchroot install ${@} + lb chroot_dpkg install ${@} + lb chroot_tmpfs install ${@} + lb chroot_sysv-rc install ${@} + lb chroot_hosts install ${@} + lb chroot_resolv install ${@} + lb chroot_hostname install ${@} + lb chroot_apt install ${@} + lb chroot_archives chroot install ${@} +fi + +# Building installer +lb installer_debian-installer ${@} +lb installer_preseed ${@} + +if [ "${LB_BUILD_WITH_CHROOT}" = "true" ] +then + # Deconfiguring chroot + lb chroot_archives chroot remove ${@} + lb chroot_apt remove ${@} + lb chroot_hostname remove ${@} + lb chroot_resolv remove ${@} + lb chroot_hosts remove ${@} + lb chroot_sysv-rc remove ${@} + lb chroot_tmpfs remove ${@} + lb chroot_dpkg remove ${@} + lb chroot_debianchroot remove ${@} + lb chroot_sysfs remove ${@} + lb chroot_selinuxfs remove ${@} + lb chroot_proc remove ${@} + lb chroot_devpts remove ${@} +fi diff --git a/system-build/scripts/build/installer_debian-installer b/system-build/scripts/build/installer_debian-installer new file mode 100755 index 0000000..3f13915 --- /dev/null +++ b/system-build/scripts/build/installer_debian-installer @@ -0,0 +1,829 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'install debian-installer into binary')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +if [ "${_DEBUG}" = "true" ] +then + WGET_OPTIONS="${WGET_OPTIONS} --verbose" +elif [ "${_QUIET}" = "true" ] +then + WGET_OPTIONS="${WGET_OPTIONS} --quiet" +else + WGET_OPTIONS="${WGET_OPTIONS} --no-verbose" +fi + +# Check d-i configuration +case "${LB_DEBIAN_INSTALLER}" in + true|cdrom|netinst|netboot|businesscard|live) + ;; + + false) + exit 0 + ;; + + *) + Echo_error "debian-installer flavour %s not supported." "${LB_DEBIAN_INSTALLER}" + exit 1 + ;; +esac + +Echo_message "Begin installing debian-installer..." + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +# Checking stage file +Check_stagefile .build/installer_debian-installer + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +# Checking depends +Check_package host /usr/bin/wget wget +Check_package chroot /usr/bin/apt-ftparchive apt-utils + +# Restoring cache +Restore_cache cache/packages.binary + +# Installing depends +Install_package + +# Setting destination directory +case "${LIVE_IMAGE_TYPE}" in + netboot) + DESTDIR="tftpboot/debian-install/${LB_ARCHITECTURES}" + ;; + + hdd*|tar) + DESTDIR="binary/install" + ;; + + *) + DESTDIR="binary/install" + ;; +esac + +# Set d-i image type +case "${LB_DEBIAN_INSTALLER}" in + businesscard|netboot|netinst) + DI_IMAGE_TYPE="netboot" + ;; + *) + case "${LIVE_IMAGE_TYPE}" in + netboot) + DI_IMAGE_TYPE="netboot" + ;; + + *) + DI_IMAGE_TYPE="cdrom" + ;; + esac + ;; +esac + +# Set architecture-specific variables +case "${LB_ARCHITECTURES}" in + armel) + DEFAULT_FLAVOUR="$(echo ${LB_LINUX_FLAVOURS} | awk '{ print $1 }')" + case "${DI_IMAGE_TYPE}" in + cdrom) + DI_REMOTE_BASE="${DEFAULT_FLAVOUR}/cdrom" + ;; + + netboot) + DI_REMOTE_BASE="${DEFAULT_FLAVOUR}/netboot" + ;; + esac + + DI_REMOTE_KERNEL="vmlinuz" + DI_REMOTE_BASE_GTK="${DI_REMOTE_BASE}/gtk" + ;; + + powerpc) + case "${DI_IMAGE_TYPE}" in + cdrom) + DI_REMOTE_BASE="${LB_ARCHITECTURES}/cdrom" + ;; + + netboot) + DI_REMOTE_BASE="${LB_ARCHITECTURES}/netboot" + ;; + esac + + DI_REMOTE_KERNEL="vmlinux" + DI_REMOTE_BASE_GTK="${DI_REMOTE_BASE}/gtk" + ;; + + *) + case "${DI_IMAGE_TYPE}" in + netboot) + DI_REMOTE_BASE="netboot/debian-installer/${LB_ARCHITECTURES}" + DI_REMOTE_BASE_GTK="netboot/gtk/debian-installer/${LB_ARCHITECTURES}" + DI_REMOTE_KERNEL="linux" + ;; + + cdrom) + DI_REMOTE_BASE="cdrom" + DI_REMOTE_BASE_GTK="cdrom/gtk" + DI_REMOTE_KERNEL="vmlinuz" + ;; + esac + ;; +esac + +Check_multiarchitectures + +Install_file() { + local FILE + FILE="${1}" + + local ARCHIVE_AREA + ARCHIVE_AREA="$(dpkg -I ${FILE} | awk '/^.*Section: / { print $2 }')" + + if echo "${ARCHIVE_AREA}" | grep -qs '/' + then + ARCHIVE_AREA="$(echo ${ARCHIVE_AREA} | awk -F/ '{ print $1 }')" + else + ARCHIVE_AREA="main" + fi + + local TARGET + TARGET="${2}/${ARCHIVE_AREA}" + + 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 "${TARGET}"/"${LETTER}"/"${SOURCE}" + + # Move files + cp "${FILE}" "${TARGET}"/"${LETTER}"/"${SOURCE}" +} + +# Set absolute directory for caching; we require it when we call Download_file +# from a non-standard cwd. +_LB_CACHE_DIR="$(pwd)/cache/installer_debian-installer" + +Download_file () { + local _LB_TARGET + _LB_TARGET="${1}" + + local _LB_URL + _LB_URL="${2}" + + _LB_CACHE_FILE="${_LB_CACHE_DIR}/$(echo "${_LB_URL}" | sed 's|/|_|g')" + + if [ ! -f "${_LB_CACHE_FILE}" ] + then + mkdir -p ${_LB_CACHE_DIR} + if ! wget ${WGET_OPTIONS} -O "${_LB_CACHE_FILE}" "${_LB_URL}" + then + rm -f "${_LB_CACHE_FILE}" + + Echo_error "Could not download file: %s" "${_LB_URL}" + exit 1 + fi + fi + + if [ "$(stat --printf %d "${_LB_CACHE_DIR}/")" = "$(stat --printf %d ./)" ] + then + CP_OPTIONS="-l" + fi + + cp -f ${CP_OPTIONS} -- "${_LB_CACHE_FILE}" "${_LB_TARGET}" +} + +VMLINUZ_DI="vmlinuz" +INITRD_DI="initrd.gz" +DESTDIR_DI="${DESTDIR}" + +VMLINUZ_GI="gtk/vmlinuz" +INITRD_GI="gtk/initrd.gz" +DESTDIR_GI="${DESTDIR}/gtk" + +case "${LB_DERIVATIVE}" in + false) + if [ "${LB_DEBIAN_INSTALLER_DISTRIBUTION}" = "daily" ] + then + # FIXME: variable name should be decupled from derivatves + LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION="sid" + + # Debian Installer daily builds + URL="https://d-i.debian.org/daily-images/${LB_ARCHITECTURES}/daily/" + else + URL="${LB_MIRROR_DEBIAN_INSTALLER}/dists/${LB_DEBIAN_INSTALLER_DISTRIBUTION}/main/installer-${LB_ARCHITECTURES}/current/images/" + fi + ;; + + true) + if [ "${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}" = "daily" ] + then + LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION="sid" + + # Debian Installer daily builds + URL="https://d-i.debian.org/daily-images/${LB_ARCHITECTURES}/daily/" + else + URL="${LB_PARENT_MIRROR_DEBIAN_INSTALLER}/dists/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/main/installer-${LB_ARCHITECTURES}/current/images/" + fi + + if [ "${LB_MODE}" = "progress-linux" ] + then + # FIXME: normal derivatives probably don't rebuild d-i, + # but progress-linux does. + URL="${LB_MIRROR_DEBIAN_INSTALLER}/dists/${LB_DEBIAN_INSTALLER_DISTRIBUTION}/main/installer-${LB_ARCHITECTURES}/current/images/" + fi + ;; +esac + +mkdir -p "${DESTDIR_DI}" + +# Downloading debian-installer +Download_file "${DESTDIR}"/"${VMLINUZ_DI}" ${URL}/${DI_REMOTE_BASE}/${DI_REMOTE_KERNEL} +Download_file "${DESTDIR}"/"${INITRD_DI}" ${URL}/${DI_REMOTE_BASE}/initrd.gz + +# Downloading graphical-installer +DOWNLOAD_GTK_INSTALLER=0 +if [ "${LB_DEBIAN_INSTALLER_GUI}" = "true" ] +then + case "${LB_ARCHITECTURES}" in + amd64|i386) + DOWNLOAD_GTK_INSTALLER=1 + ;; + + powerpc) + if [ "${LB_DEBIAN_INSTALLER}" = "netboot" ] + then + DOWNLOAD_GTK_INSTALLER=1 + fi + ;; + esac +fi + +if [ ${DOWNLOAD_GTK_INSTALLER} -eq 1 ] +then + mkdir -p "${DESTDIR_GI}" + Download_file "${DESTDIR}"/"${VMLINUZ_GI}" ${URL}/${DI_REMOTE_BASE_GTK}/${DI_REMOTE_KERNEL} + Download_file "${DESTDIR}"/"${INITRD_GI}" ${URL}/${DI_REMOTE_BASE_GTK}/initrd.gz +fi + +# Only download additional packages if appropriate +if [ "${DI_IMAGE_TYPE}" != "netboot" ] +then + # 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 "${LB_ARCHITECTURES}" in + amd64) + DI_REQ_PACKAGES="lilo grub-pc" + DI_PACKAGES="${DI_REQ_PACKAGES} linux-image-amd64" + ;; + + i386) + DI_REQ_PACKAGES="lilo grub-pc" + DI_PACKAGES="${DI_REQ_PACKAGES} linux-image-686-pae" + ;; + + powerpc) + DI_REQ_PACKAGES="yaboot" + DI_PACKAGES="${DI_REQ_PACKAGES} linux-image-powerpc linux-image-powerpc64 linux-image-powerpc-smp" + ;; + esac + + DI_PACKAGES="${DI_PACKAGES} busybox cryptsetup mdadm lvm2 xfsprogs jfsutils" + + case "${LB_MODE}" in + debian) + DI_REQ_PACKAGES="${DI_REQ_PACKAGES} console-setup keyboard-configuration kbd" + DI_PACKAGES="${DI_PACKAGES} console-setup keyboard-configuration kbd" + ;; + esac + # Include firmware packages + if [ "${LB_FIRMWARE_BINARY}" = "true" ] + then + # Assumption: firmware packages install files into /lib/firmware + + # Get all firmware packages names + mkdir -p cache/contents.binary + + FIRMWARE_PACKAGES="" + + _CONTENTS="$(for _PARENT_ARCHIVE_AREA in ${LB_PARENT_ARCHIVE_AREAS}; do echo ${LB_PARENT_MIRROR_CHROOT}/dists/${LB_PARENT_DISTRIBUTION}/${_PARENT_ARCHIVE_AREA}/Contents-${LB_ARCHITECTURES}.gz; done)" + + rm -f cache/contents.chroot/contents.${LB_PARENT_DISTRIBUTION}.${LB_ARCHITECTURES} + + for _CONTENT in ${_CONTENTS} + do + wget ${WGET_OPTIONS} ${_CONTENT} -O - | gunzip -c >> cache/contents.chroot/contents.${LB_PARENT_DISTRIBUTION}.${LB_ARCHITECTURES} + + FIRMWARE_PACKAGES="${FIRMWARE_PACKAGES} $(awk '/^lib\/firmware/ { print $2 }' cache/contents.chroot/contents.${LB_PARENT_DISTRIBUTION}.${LB_ARCHITECTURES} | sort -u)" + done + + if echo ${LB_PARENT_ARCHIVE_AREAS} | grep -qs "non-free" + then + # Manually add firmware-linux/non-free meta package + if [ "${LB_DERIVATIVE}" != "true" ] + then + FIRMWARE_PACKAGES="${FIRMWARE_PACKAGES} firmware-linux" + else + case "${LB_DERIVATIVE_IS_BASED_ON}" in + debian) + FIRMWARE_PACKAGES="${FIRMWARE_PACKAGES} firmware-linux" + ;; + *) + ;; + esac + fi + fi + + if [ "${LB_DERIVATIVE}" = "true" ] + then + # FIXME: account for the fact that PARENT_DISTRIBUTION and DISTRIBUTION might be the same (to not have overlapping cache files for contents). + + _CONTENTS="$(for _ARCHIVE_AREA in ${LB_ARCHIVE_AREAS}; do echo ${LB_MIRROR_CHROOT}/dists/${LB_DISTRIBUTION}/${_ARCHIVE_AREA}/Contents-${LB_ARCHITECTURES}.gz; done)" + + rm -f cache/contents.chroot/contents.${LB_DISTRIBUTION}.${LB_ARCHITECTURES} + + for _CONTENT in ${_CONTENTS} + do + wget ${WGET_OPTIONS} ${_CONTENT} -O - | gunzip -c >> cache/contents.chroot/contents.${LB_DISTRIBUTION}.${LB_ARCHITECTURES} + + FIRMWARE_PACKAGES="${FIRMWARE_PACKAGES} $(awk '/^lib\/firmware/ { print $2 }' cache/contents.chroot/contents.${LB_DISTRIBUTION}.${LB_ARCHITECTURES} | sort -u)" + done + fi + + # Drop section and keep package names only + for _PACKAGE in ${FIRMWARE_PACKAGES} + do + DI_FIRMWARE_PACKAGES="${DI_FIRMWARE_PACKAGES} $(echo ${_PACKAGE} | awk -F/ '{ print $NF }')" + done + fi + + # Set apt command prefix + _LB_APT_COMMAND="apt-get ${APT_OPTIONS} -o Dir::Cache=/binary.deb -o APT::Install-Recommends=false --download-only" + + if [ "${LB_DEBIAN_INSTALLER}" = "live" ] + then + # We don't want to duplicate .debs of packages in binary/pool that are already + # installed to target/ via live-installer. + # + # However, we need to force various packages' inclusion in binary/pool as + # d-i does not support (for example) re-installing grub from target/ - the grub + # .debs must actually exist. + + # Download .debs of the required packages + Chroot chroot ${_LB_APT_COMMAND} install ${DI_PACKAGES} ${DI_FIRMWARE_PACKAGES} ${DI_REQ_PACKAGES} + + # Drop the packages already installed that d-i doesn't explicitely need + _REMAINING_PACKAGES="$(echo ${DI_FIRMWARE_PACKAGES} ${DI_REQ_PACKAGES} | sed -e 's# #|#g')" + _REMAINING_PACKAGES="$(sed -n -e 's|Package: ||p' chroot/var/lib/dpkg/status.tmp | grep -E -v "^(${_REMAINING_PACKAGES})\$")" + + for _PACKAGE in ${_REMAINING_PACKAGES} + do + rm -f chroot/binary.deb/archives/${_PACKAGE}_*.deb + done + else + # Download .debs of the required packages + Chroot chroot ${_LB_APT_COMMAND} install ${DI_PACKAGES} ${DI_FIRMWARE_PACKAGES} + fi + + # Revert dpkg status file + mv chroot/var/lib/dpkg/status.tmp chroot/var/lib/dpkg/status + + mv chroot/binary.deb ./ + + for _ARCHIVE_AREA in $(echo ${LB_PARENT_ARCHIVE_AREAS} ${LB_ARCHIVE_AREAS}) + do + mkdir -p binary/pool/${_ARCHIVE_AREA} + done + + if Find_files binary.deb/archives/*.deb + then + for FILE in binary.deb/archives/*.deb + do + Install_file "${FILE}" "binary/pool" + done + fi + + if [ "${LB_DEBIAN_INSTALLER}" != "live" ] + then + # Including base debian packages + if ls cache/packages.bootstrap/*.deb > /dev/null 2>&1 + then + for FILE in cache/packages.bootstrap/*.deb + do + Install_file "${FILE}" "binary/pool" + done + else + Echo_error "Could not find packages in cache/packages.bootstrap." + Echo_error "You selected values of LB_CACHE, LB_CACHE_PACKAGES, LB_CACHE_STAGES and LB_DEBIAN_INSTALLER which will result in 'bootstrap' packages not being cached - these are required when integrating the Debian Installer." + exit 1 + fi + fi + + # Including local debs + if Find_files config/packages.binary/*_"${LB_ARCHITECTURES}".deb || Find_files config/packages/*_"${LB_ARCHITECTURES}".deb + then + for FILE in config/packages.binary/*_"${LB_ARCHITECTURES}".deb config/packages/*_"${LB_ARCHITECTURES}".deb + do + if [ -e "${FILE}" ] + then + Install_file "${FILE}" "binary/pool" + fi + done + fi + + if Find_files config/packages.binary/*_all.deb || Find_files config/packages/*_all.deb + then + for FILE in config/packages.binary/*_all.deb config/packages/*_all.deb + do + if [ -e "${FILE}" ] + then + Install_file "${FILE}" "binary/pool" + fi + done + fi + + # Generating deb indices + for _ARCHIVE_AREA in $(cd binary/pool && ls) + do + mkdir -p binary/dists/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/${_ARCHIVE_AREA}/binary-${LB_ARCHITECTURES} + + mv binary chroot/root + echo "cd /root/binary && apt-ftparchive packages pool/${_ARCHIVE_AREA} > dists/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/${_ARCHIVE_AREA}/binary-${LB_ARCHITECTURES}/Packages" > chroot/binary.sh + Chroot chroot "sh binary.sh" + rm -f chroot/binary.sh + mv chroot/root/binary ./ + + gzip -9 -c binary/dists/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/${_ARCHIVE_AREA}/binary-${LB_ARCHITECTURES}/Packages > binary/dists/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/${_ARCHIVE_AREA}/binary-${LB_ARCHITECTURES}/Packages.gz + + # Fetching release + Download_file binary/dists/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/${_ARCHIVE_AREA}/binary-${LB_ARCHITECTURES}/Release "${LB_PARENT_MIRROR_CHROOT}"/dists/"${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}"/${_ARCHIVE_AREA}/binary-"${LB_ARCHITECTURES}"/Release + done + + # Symlink firmware packages to /firmware + if [ -n "${DI_FIRMWARE_PACKAGES}" ] + then + mkdir -p binary/firmware + cd binary/firmware + + for _PACKAGE in ${DI_FIRMWARE_PACKAGES} + do + for _FILE in $(find ../pool -name "${_PACKAGE}_*.deb") + do + ln -sf ${_FILE} ./ + done + done + + cd "${OLDPWD}" + fi + + # Udeb handling + mkdir binary.udeb + cd binary.udeb + + # Downloading udeb indices + Download_file Packages.gz "${LB_PARENT_MIRROR_CHROOT}"/dists/"${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}"/main/debian-installer/binary-"${LB_ARCHITECTURES}"/Packages.gz + gunzip -c Packages.gz > Packages + + if [ "${LB_DERIVATIVE}" = "true" ] + then + Download_file Packages.derivative.gz "${LB_MIRROR_CHROOT}"/dists/"${LB_DEBIAN_INSTALLER_DISTRIBUTION}"/main/debian-installer/binary-"${LB_ARCHITECTURES}"/Packages.gz + gunzip -c Packages.derivative.gz > Packages.derivative + fi + + # Sorting udebs + if [ "${LB_DERIVATIVE}" = true ] + then + UDEBS="$(awk '/Filename: / { print $2 }' Packages.derivative)" + fi + + UDEBS="${UDEBS} $(awk '/Filename: / { print $2 }' Packages)" + + # Downloading udebs packages + Echo_message "Downloading udebs..." + + if [ "${LB_DERIVATIVE}" = "true" ] + then + Echo_message "Building in derivative mode in debian+ layout.. a lot of 404 errors are ok here." + fi + + for UDEB in ${UDEBS} + do + if [ -f ../cache/packages.installer_debian-installer.udeb/"$(basename ${UDEB})" ] + then + # Copying cached udebs + cp ../cache/packages.installer_debian-installer.udeb/"$(basename ${UDEB})" ./ + else + # Downloading udebs + if ! ls "$(basename ${UDEB} | awk -F_ '{ print $1 }')"_* > /dev/null 2>&1 + then + wget ${WGET_OPTIONS} "${LB_MIRROR_CHROOT}"/${UDEB} || wget ${WGET_OPTIONS} "${LB_PARENT_MIRROR_CHROOT}"/${UDEB} + fi + fi + done + + # Caching udebs + rm -rf ../cache/packages.installer_debian-installer.udeb + mkdir -p ../cache/packages.installer_debian-installer.udeb + cp *.udeb ../cache/packages.installer_debian-installer.udeb + + # Including local udebs + if Find_files ../config/packages.binary/*_"${LB_ARCHITECTURES}".udeb || Find_files ../config/packages/*_"${LB_ARCHITECTURES}".udeb + then + for FILE in ../config/packages.binary/*_"${LB_ARCHITECTURES}".udeb ../config/packages/*_"${LB_ARCHITECTURES}".udeb + do + if [ -e "${FILE}" ] + then + Install_file "${FILE}" "pool" + + # Prefer local udebs over downloaded udebs + rm -f "$(basename ${FILE} | awk -F_ '{ print $1 }')"_*.udeb + fi + done + fi + + if Find_files ../config/packages.binary/*_all.udeb || Find_files ../config/packages/*_all.udeb + then + for FILE in ../config/packages.binary/*_all.udeb ../config/packages/*_all.udeb + do + if [ -e "${FILE}" ] + then + Install_file "${FILE}" "pool" + + # Prefer local udebs over downloaded udebs + rm -f "$(basename ${FILE} | awk -F_ '{ print $1 }')"_*.udeb + fi + done + fi + + # Excluding udebs + for LOCATION in "${LIVE_BUILD}/data/debian-cd" /usr/share/live/build/data/debian-cd + do + if [ -e "${LOCATION}" ] + then + grep -v "^#" "${LOCATION}/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/udeb_exclude" > exclude || true + grep -v "^#" "${LOCATION}/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/exclude-udebs" >> exclude || true + grep -v "^#" "${LOCATION}/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/exclude-udebs-${LB_ARCHITECTURES}" >> exclude || true + + continue + fi + done + + # Local exclude file + if [ -e ../config/debian-installer/udeb_exclude ] + then + cat ../config/debian-installer/udeb_exclude >> exclude + fi + + # Excluding udebs from excludes because we want them to be in the image on purpose + sed -i -e 's|di-utils-exit-installer||' exclude # used for live-installer-launcher + + while read EXCLUDE + do + if [ "${LB_DEBIAN_INSTALLER}" = "live" ] && [ "${EXCLUDE}" = "live-installer" ] + then + continue + fi + + rm -f ${EXCLUDE}_*.udeb + done < exclude + + # 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/"${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}"/main/debian-installer/binary-"${LB_ARCHITECTURES}" + cd "${OLDPWD}" + + mv binary.udeb chroot/root + echo "cd /root/binary.udeb && apt-ftparchive packages pool/main > dists/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/main/debian-installer/binary-${LB_ARCHITECTURES}/Packages" > chroot/binary.sh + Chroot chroot "sh binary.sh" + rm -f chroot/binary.sh + mv chroot/root/binary.udeb ./ + + cd binary.udeb + gzip -9 -c dists/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/main/debian-installer/binary-${LB_ARCHITECTURES}/Packages > dists/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/main/debian-installer/binary-${LB_ARCHITECTURES}/Packages.gz + + rm -f Packages* exclude + find . | cpio -dmpu "${OLDPWD}"/binary + cd "${OLDPWD}" + + rm -rf binary.udeb + rm -rf binary.deb + + # Generating release file + mv binary chroot/root + + if [ -e chroot/etc/os-release ] + then + _VERSION="$(. chroot/etc/os-release && echo ${VERSION_ID})" + fi + + if [ -n "${_VERSION}" ]; then + _LB_APT_VERSION_OPT='-o APT::FTPArchive::Release::Version="'"${_VERSION}"'"' + fi + + case "${LB_PARENT_DISTRIBUTION}" in + sid) + _SUITE="unstable" + ;; + + *) + _SUITE="${LB_PARENT_DISTRIBUTION}" + ;; + esac + +cat > chroot/binary.sh << EOF +cd /root/binary && apt-ftparchive \ + -o APT::FTPArchive::Release::Origin="Debian" \ + -o APT::FTPArchive::Release::Label="Debian" \ + -o APT::FTPArchive::Release::Suite="${_SUITE}" \ + ${_LB_APT_VERSION_OPT} \ + -o APT::FTPArchive::Release::Codename="${LB_PARENT_DISTRIBUTION}" \ + -o APT::FTPArchive::Release::Date="$(date -R)" \ + -o APT::FTPArchive::Release::Architectures="${LB_ARCHITECTURES}" \ + -o APT::FTPArchive::Release::Components="${LB_PARENT_ARCHIVE_AREAS}" \ + -o APT::FTPArchive::Release::Description="Last updated: $(date -R)" \ + release dists/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION} > dists/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}/Release +EOF + + Chroot chroot "sh binary.sh" + rm -f chroot/binary.sh + mv chroot/root/binary ./ + + case "${LB_PARENT_DISTRIBUTION}" in + jessie) + DISTRIBUTIONS="stable" + ;; + + *) + DISTRIBUTIONS="stable testing unstable" + ;; + esac + + if [ "${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION}" != "${LB_PARENT_DISTRIBUTION}" ] + then + DISTRIBUTIONS="${DISTRIBUTIONS} ${LB_PARENT_DISTRIBUTION}" + fi + + case "${LIVE_IMAGE_TYPE}" in + hdd) + case "${LB_BINARY_FILESYSTEM}" in + fat*|ntfs) + # Creating dist directories + for DISTRIBUTION in ${DISTRIBUTIONS} + do + cp -a binary/dists/${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION} binary/dists/${DISTRIBUTION} + done + ;; + esac + ;; + + *) + # Creating dist symlinks + for DISTRIBUTION in ${DISTRIBUTIONS} + do + ln -s ${LB_PARENT_DEBIAN_INSTALLER_DISTRIBUTION} binary/dists/${DISTRIBUTION} + done + + ln -s . binary/debian + ;; + esac +fi + +Repack_initrd() +{ + local TARGET_INITRD + local INCLUDE_PATH + TARGET_INITRD="${1}" + INCLUDE_PATH="${2}" + REPACK_TMPDIR="unpacked-initrd" + + if [ -d "${INCLUDE_PATH}" ] + then + INCLUDE_PATH=$(readlink -f ${INCLUDE_PATH}) + fi + + # cpio does not have a "extract to directory", so we must change directory + mkdir -p ${REPACK_TMPDIR} + cd ${REPACK_TMPDIR} + + gzip -d < ../${TARGET_INITRD} | cpio -i --make-directories --no-absolute-filenames + if [ ! -d "${INCLUDE_PATH}" ] + then + # Invoked the old way, just copy the preseeds + for _FILE in ../config/preseed/*.cfg ../config/preseed/*.cfg.installer + do + if [ -e "${_FILE}" ] + then + cp "${_FILE}" . + fi + done + else + # New way, include target directory content in the initrd + REPACK_TMPDIR_ABS="${PWD}" + cd "${INCLUDE_PATH}" + find -print0 | cpio -pumd0 --no-preserve-owner "${REPACK_TMPDIR_ABS}/" + cd "${OLDPWD}" + fi + find -print0 | cpio -H newc -o0 | gzip -9 > ../${TARGET_INITRD} + + cd .. + rm -rf ${REPACK_TMPDIR} +} + +# Preseed d-i by repacking the initrd in certain situations +if [ "${DI_IMAGE_TYPE}" = "netboot" ] && ( ls config/preseed/*.cfg > /dev/null 2>&1 || ls config/preseed/*.cfg.installer > /dev/null 2>&1 ) +then + Repack_initrd "${DESTDIR}"/"${INITRD_DI}" + + if [ -e "${DESTDIR}"/"${INITRD_GI}" ] + then + Repack_initrd "${DESTDIR}"/"${INITRD_GI}" + fi +fi + +# Include content of config/includes.installer if exists and not empty +if [ -d config/includes.installer ] && [ -n "$(ls -A config/includes.installer)" ] +then + Repack_initrd "${DESTDIR}"/"${INITRD_DI}" config/includes.installer + + if [ -e "${DESTDIR}"/"${INITRD_GI}" ] + then + Repack_initrd "${DESTDIR}"/"${INITRD_GI}" config/includes.installer + fi +fi + +case "${LB_MODE}" in + progress-linux) + mv binary/install binary/installer + + rm -f binary/debian + + for _DIRECTORY in dists pool project firmware + do + if [ -e "binary/${_DIRECTORY}" ] + then + mv binary/"${_DIRECTORY}" binary/installer + fi + done + ;; +esac + +# Saving cache +Save_cache cache/packages.binary + +# Removing depends +Remove_package + +# Creating stage file +Create_stagefile .build/installer_debian-installer diff --git a/system-build/scripts/build/installer_preseed b/system-build/scripts/build/installer_preseed new file mode 100755 index 0000000..f17102a --- /dev/null +++ b/system-build/scripts/build/installer_preseed @@ -0,0 +1,72 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'include local preseed in installer')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + + +# Check d-i configuration +case "${LB_DEBIAN_INSTALLER}" in + false) + exit 0 + ;; +esac + +Echo_message "Begin including local preseeds..." + +# Checking stage file +Check_stagefile .build/installer_preseed + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +if ls config/preseed/*.cfg > /dev/null 2>&1 || \ + ls config/preseed/*.cfg.installer > /dev/null 2>&1 || \ + ls chroot/root/packages.installer > /dev/null 2>&1 +then + case "${LB_MODE}" in + progress-linux) + _DIRECTORY="binary/installer" + ;; + + *) + _DIRECTORY="binary/install" + ;; + esac + + rm -f "${_DIRECTORY}/preseed.cfg" + + for _FILE in config/preseed/*.cfg config/preseed/*.cfg.installer chroot/root/packages.installer + do + if [ -e "${_FILE}" ] + then + cat "${_FILE}" >> "${_DIRECTORY}/preseed.cfg" + fi + done + + # Creating stage file + Create_stagefile .build/installer_preseed +fi diff --git a/system-build/scripts/build/source b/system-build/scripts/build/source new file mode 100755 index 0000000..4d4f9bd --- /dev/null +++ b/system-build/scripts/build/source @@ -0,0 +1,66 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Automatically populating config tree +if [ -x auto/config ] && [ ! -e .build/config ] +then + Echo_message "Automatically populating config tree." + lb config +fi + +# Setting static variables +DESCRIPTION="$(Echo 'build source images')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +if [ "${LB_SOURCE}" != "true" ] +then + exit 0 +fi + +#Require_stagefile + +# Setup cleanup function +Setup_cleanup + +# Enabling network in chroot +lb chroot_hosts install ${@} +lb chroot_resolv install ${@} +lb chroot_hostname install ${@} +lb chroot_archives source install ${@} + +# Preparing images +lb source_live ${@} +lb source_debian ${@} +lb source_disk ${@} +lb source_hooks ${@} +lb source_checksums ${@} + +# Building images +lb source_iso ${@} +lb source_tar ${@} +lb source_hdd ${@} + +# Deconfiguring chroot +lb chroot_archives chroot remove ${@} +lb chroot_hostname remove ${@} +lb chroot_resolv remove ${@} +lb chroot_hosts remove ${@} diff --git a/system-build/scripts/build/source_checksums b/system-build/scripts/build/source_checksums new file mode 100755 index 0000000..8b3172f --- /dev/null +++ b/system-build/scripts/build/source_checksums @@ -0,0 +1,101 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'create source checksums')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +if [ "${LB_CHECKSUMS}" = "none" ] || [ "${LB_SOURCE}" != "true" ] +then + exit 0 +fi + +# Requiring stage file +Require_stagefile .build/config .build/source_debian + +# Checking stage file +Check_stagefile .build/source_checksums + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +for DIRECTORY in source/debian source/live +do + if [ ! -d ${DIRECTORY} ] + then + continue + fi + + for CHECKSUM in ${LB_CHECKSUMS} + do + case "${LB_MODE}" in + progress-linux) + CHECKSUMS="$(echo ${CHECKSUM} | tr [a-z] [A-Z])SUMS" + ;; + + *) + CHECKSUMS="${CHECKSUM}sum.txt" + ;; + esac + + Echo_message "Begin creating source ${CHECKSUMS}..." + + # Remove old checksums + if [ -f ${DIRECTORY}/${CHECKSUMS} ] + then + rm -f ${DIRECTORY}/${CHECKSUMS} + fi + + # Calculating checksums + cd ${DIRECTORY} + find . -type f \ + \! -path './*SUMS' \ + \! -path './*sum.txt' \ + -print0 | sort -z | xargs -0 ${CHECKSUM}sum > ../${CHECKSUMS} + +cat > ${CHECKSUMS} << EOF +## This file contains the list of ${CHECKSUM} checksums of all files on this +## medium. +## +## You can verify them automatically with the 'verify-checksums' boot parameter, +## or, manually with: '${CHECKSUM}sum -c ${CHECKSUMS}'. +## +## +EOF + + cat ../${CHECKSUMS} >> ${CHECKSUMS} + rm -f ../${CHECKSUMS} + + cd "${OLDPWD}" + done + + # File list + cd ${DIRECTORY} + find . | sed -e 's|^.||g' | grep "^/" | sort > ../../${LIVE_IMAGE_NAME}-source.$(basename ${DIRECTORY}).contents + cd "${OLDPWD}" +done + +# Creating stage file +Create_stagefile .build/source_checksums diff --git a/system-build/scripts/build/source_debian b/system-build/scripts/build/source_debian new file mode 100755 index 0000000..49e53db --- /dev/null +++ b/system-build/scripts/build/source_debian @@ -0,0 +1,207 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'debian sources')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +if [ "${LB_SOURCE}" != "true" ] +then + exit 0 +fi + +Echo_message "Begin downloading sources..." + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +# Checking stage file +Check_stagefile .build/source_debian + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +# Remove old sources +if [ -d source/debian ] +then + rm -rf source/debian +fi + +# Download sources +Chroot chroot "dpkg --get-selections" | awk '{ print $1 }' > source-selection.txt + +echo "${LB_BOOTLOADERS}" | \ +while IFS="," read -r BOOTLOADER +do + cat >> source-selection.txt << EOF + ${BOOTLOADER} +EOF +done + +cat >> source-selection.txt << EOF +live-build +EOF + +case "${LB_BINARY_IMAGES}" in + iso*) + echo "xorriso" >> source-selection.txt + ;; + + hdd*) + echo "parted" >> source-selection.txt + ;; +esac + +case "${LB_CHROOT_FILESYSTEM}" in + squashfs) + echo "squashfs-tools" >> source-selection.txt + ;; +esac + +case "${LB_BINARY_FILESYSTEM}" in + fat*) + echo "dosfstools" >> source-selection.txt + ;; + + ntfs) + echo "ntfs-3g" >> source-selection.txt + ;; +esac + +case "${LB_ARCHITECTURES}" in + amd64|i386) + +cat >> source-selection.txt << EOF +mtools +syslinux +grub +EOF + + if [ "${LB_MEMTEST}" != "false" ] && [ "${LB_MEMTEST}" != "none" ] + then + echo "${LB_MEMTEST}" >> source-selection.txt + fi + ;; +esac + +if [ -n "${LB_TASKS}" ] +then + echo "${LB_TASKSEL}" >> source-selection.txt +fi + +# apt-get source does not respect pinning +# building images with backports included but not enabled +# will result in apt-get source download stuff from backports +# where available. workaround: disable backports +case "${LB_MODE}" in + progress-linux) + case "${LB_DISTRIBUTION}" in + *-backports) + + ;; + + *) + if grep -qs "${LB_DISTRIBUTION}-backports" chroot/etc/apt/sources.list.d/progress-linux.list + then + cp chroot/etc/apt/sources.list.d/progress-linux.list chroot/etc/apt/sources.list.d/progress-linux.list.orig + + while read _LINE + do + if echo "${_LINE}" | grep -qs ${LB_DISTRIBUTION}-backports + then + sed -i -e "s|${_LINE}|#${_LINE}|" chroot/etc/apt/sources.list.d/progress-linux.list + fi + done < chroot/etc/apt/sources.list.d/progress-linux.list.orig + + Apt chroot update + fi + ;; + esac + ;; +esac + +MISSING="" + +grep . source-selection.txt | \ +while read PACKAGE +do + if ! Chroot chroot "apt-get ${APT_OPTIONS} --download-only source ${PACKAGE}" + then + MISSING="${MISSING} ${PACKAGE}" + fi +done + +if [ -n "${MISSING}" ] +then + cat > source/missing-source.txt << EOF +This file contains the list of binary packages that are installed on this live +system that do not have a corresponding source package. + +EOF + + for PACKAGE in ${MISSING} + do + Chroot chroot "dpkg -l ${PACKAGE}" | tail -n1 >> source/missing-source.txt + done +fi + +rm -f source-selection.txt + +# Sort sources +for DSC in chroot/*.dsc +do + SOURCE="$(sed -n 's|^Source: ||p' ${DSC} 2>/dev/null || :)" + # The sed may fail if multiple dsc files exist for same source, as the + # first one to match will have already been moved. + [ -n "$SOURCE" ] || continue + + case "${SOURCE}" in + lib?*) + LETTER="$(echo ${SOURCE} | sed 's|\(....\).*|\1|')" + ;; + + *) + LETTER="$(echo ${SOURCE} | sed 's|\(.\).*|\1|')" + ;; + esac + + # Install directory + mkdir -p source/debian/"${LETTER}"/"${SOURCE}" + + # Move files + mv chroot/"${SOURCE}"_* source/debian/"${LETTER}"/"${SOURCE}" +done + +# Reverting apt sources again +if [ -e chroot/etc/apt/sources.list.d/progress-linux.list.orig ] +then + mv chroot/etc/apt/sources.list.d/progress-linux.list.orig chroot/etc/apt/sources.list.d/progress-linux.list + + Apt chroot update +fi + +# Creating stage file +Create_stagefile .build/source_debian +Create_stagefile .build/source diff --git a/system-build/scripts/build/source_debian-live b/system-build/scripts/build/source_debian-live new file mode 100755 index 0000000..3af41e5 --- /dev/null +++ b/system-build/scripts/build/source_debian-live @@ -0,0 +1,62 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'copy debian-live config into source')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +if [ "${LB_SOURCE}" != "true" ] +then + exit 0 +fi + +Echo_message "Begin copying live-build configuration..." + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +# Checking stage file +Check_stagefile .build/source_debian-live + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +# Remove old sources +if [ -d source/debian-live ] +then + rm -rf source/debian-live +fi + +# Copy system configuration +mkdir -p source/debian-live +cp -a config source/debian-live + +if Find_files auto/* +then + cp -a auto source/debian-live +fi + +# Creating stage file +Create_stagefile .build/source_debian-live diff --git a/system-build/scripts/build/source_disk b/system-build/scripts/build/source_disk new file mode 100755 index 0000000..9cac2b3 --- /dev/null +++ b/system-build/scripts/build/source_disk @@ -0,0 +1,123 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'install disk information into source')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +case "${LB_SOURCE_IMAGES}" in + iso*|hdd*) + ;; + + *) + exit 0 + ;; +esac + +Echo_message "Begin installing disk information..." + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +# Checking stage file +Check_stagefile .build/source_disk + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +mkdir -p source/.disk + +DISTRIBUTION="$(echo ${LB_DISTRIBUTION} | cut -b 1 | tr '[a-z]' '[A-Z]')" +DISTRIBUTION="${DISTRIBUTION}$(echo ${LB_DISTRIBUTION} | cut -b 2-)" + +if [ -e chroot/etc/os-release ] +then + VERSION="$(. chroot/etc/os-release && echo ${VERSION_ID})" +fi + +VERSION="${VERSION:-none}" + +case "${LB_MODE}" in + debian) + TITLE="Debian GNU/Linux" + STRING="Official Snapshot ${ARCHITECTURE}" + TRACE="project/trace/ftp-master.debian.org" + ;; + + progress-linux) + TITLE="Progress Linux" + STRING="${VERSION} (${DISTRIBUTION}) - ${ARCHITECTURE}" + TRACE="project/trace/archive-master.progress-linux.org" + ;; + + *) + TITLE="Debian GNU/Linux" + STRING="Snapshot ${ARCHITECTURE}" + TRACE="" + ;; +esac + +if [ -n "${TRACE}" ] +then + case "${LB_DERIVATIVE}" in + true) + echo "$(echo ${LB_PARENT_MIRROR_BOOTSTRAP} | awk -F:// '{ print $2 }'): $(wget -q ${LB_PARENT_MIRROR_BOOTSTRAP}/${TRACE} -O - | head -n 1)" \ + > source/.disk/archive_trace + + echo "$(echo ${LB_MIRROR_BOOTSTRAP} | awk -F:// '{ print $2 }'): $(wget -q ${LB_MIRROR_BOOTSTRAP}/${TRACE} -O - | head -n 1)" \ + >> source/.disk/archive_trace + ;; + + false) + echo "$(wget -q ${LB_PARENT_MIRROR_BOOTSTRAP}/${TRACE} -O - | head -n 1)" \ + > source/.disk/archive_trace + ;; + esac +fi + +case "${LB_DEBIAN_INSTALLER}" in + cdrom) + echo "${TITLE} ${VERSION} \"${DISTRIBUTION}\" - ${STRING} LIVE/CD Source $(date +%Y%m%d-%H:%M)" > source/.disk/info + ;; + + true|netinst) + echo "${TITLE} ${VERSION} \"${DISTRIBUTION}\" - ${STRING} LIVE/NETINST Source $(date +%Y%m%d-%H:%M)" > source/.disk/info + ;; + + live) + echo "${TITLE} ${VERSION} \"${DISTRIBUTION}\" - ${STRING} LIVE/INSTALL Source $(date +%Y%m%d-%H:%M)" > source/.disk/info + ;; + + businesscard) + echo "${TITLE} ${VERSION} \"${DISTRIBUTION}\" - ${STRING} LIVE/BC Source $(date +%Y%m%d-%H:%M)" > source/.disk/info + ;; + + false) + echo "${TITLE} ${VERSION} \"${DISTRIBUTION}\" - ${STRING} LIVE Source $(date +%Y%m%d-%H:%M)" > source/.disk/info + ;; +esac + +# Creating stage file +Create_stagefile .build/source_disk diff --git a/system-build/scripts/build/source_hdd b/system-build/scripts/build/source_hdd new file mode 100755 index 0000000..e9947ab --- /dev/null +++ b/system-build/scripts/build/source_hdd @@ -0,0 +1,155 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'build source image')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +if [ "${LB_SOURCE}" != "true" ] +then + exit 0 +fi + +if ! In_list hdd "${LB_SOURCE_IMAGES}" +then + exit 0 +fi + +Echo_message "Begin building source hdd image..." + +# Requiring stage file +Require_stagefile .build/config .build/source_debian + +# Checking stage file +Check_stagefile .build/source_hdd + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +# Checking depends +Check_package chroot /sbin/mkdosfs dosfstools +Check_package chroot /sbin/parted parted + +# Installing depends +Install_package + +# Remove old source +if [ -f ${LIVE_IMAGE_NAME}-source.img ] +then + rm -f ${LIVE_IMAGE_NAME}-source.img +fi + +# Everything which comes here needs to be cleaned up, +DU_DIM="$(du -ms source | cut -f1)" +REAL_DIM="$(Calculate_partition_size ${DU_DIM} ${LB_BINARY_FILESYSTEM})" +dd if=/dev/zero of=${LIVE_IMAGE_NAME}-source.img bs=1024k count=0 seek=${REAL_DIM} +FREELO="$(${LB_LOSETUP} -f)" +if [ ! -b chroot/${FREELO} ] +then + MAKEDEV="true" + + mv chroot/dev chroot/dev.tmp + find /dev | cpio -dmpu chroot +fi + +case "${LB_BINARY_FILESYSTEM}" in + ext2|ext3|ext4) + PARTITION_TYPE="ext2" + ;; + + fat16|fat32) + PARTITION_TYPE="${LB_BINARY_FILESYSTEM}" + ;; + + ntfs) + PARTITION_TYPE="NTFS" + ;; + + *) + Echo_error "Unsupported binary filesystem %s" "${LB_BINARY_FILESYSTEM}" + exit 1 + ;; +esac + +Echo_warning "!!! The following error/warning messages can be ignored !!!" +Losetup $FREELO ${LIVE_IMAGE_NAME}-source.img 0 +Chroot chroot "parted -s ${FREELO} mklabel msdos" || true +Chroot chroot "parted -a optimal -s ${FREELO} mkpart primary ${PARTITION_TYPE} 0.0 100%" || true +Lodetach ${FREELO} + +Losetup $FREELO ${LIVE_IMAGE_NAME}-source.img 1 + +case "${LB_BINARY_FILESYSTEM}" in + ext2|ext3|ext4) + MKFS="${LB_BINARY_FILESYSTEM}" + MKFS_OPTIONS="-L ${LB_HDD_LABEL} -m 0 -O ^64bit" + MOUNT_OPTIONS="" + ;; + + fat16) + MKFS="vfat" + MKFS_OPTIONS="-F 16 -n ${LB_HDD_LABEL}" + MOUNT_OPTIONS="" + ;; + + fat32) + MKFS="vfat" + MKFS_OPTIONS="-F 32 -n ${LB_HDD_LABEL}" + MOUNT_OPTIONS="" + ;; + + ntfs) + MKFS="ntfs" + MKFS_OPTIONS="-L ${LB_HDD_LABEL}" + MOUNT_OPTIONS="-t ntfs-3g" + ;; +esac + +Chroot chroot "mkfs.${MKFS} ${MKFS_OPTIONS} ${FREELO}" + +mkdir -p source.tmp +mount ${MOUNT_OPTIONS} ${FREELO} source.tmp +cp -r source/* source.tmp +umount source.tmp +rmdir source.tmp +Lodetach ${FREELO} +Echo_warning "!!! The above error/warning messages can be ignored !!!" + +FREELO="$(${LB_LOSETUP} -f)" +Losetup "$FREELO" ${LIVE_IMAGE_NAME}-source.img 0 +Chroot chroot "parted -s ${FREELO} set 1 lba off" || true +Lodetach ${FREELO} + +if [ -n "${MAKEDEV}" ] +then + rm -rf chroot/dev + mv chroot/dev.tmp chroot/dev +fi + +# Removing depends +Remove_package + +# Creating stage file +Create_stagefile .build/source_hdd diff --git a/system-build/scripts/build/source_hooks b/system-build/scripts/build/source_hooks new file mode 100755 index 0000000..4a7b1a4 --- /dev/null +++ b/system-build/scripts/build/source_hooks @@ -0,0 +1,81 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'execute hooks in source')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/source config/source +Set_defaults + +Echo_message "Begin executing hooks..." + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +# Checking stage file +Check_stagefile .build/source_hooks + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +## Processing distribution hooks + +# Running hooks +for _HOOK in ${LB_BINARY_HOOKS} +do + for LOCATION in "${LIVE_BUILD}/hooks" /usr/share/live/build/hooks + do + for FILE in "${LOCATION}"/????-"${_HOOK}".source + do + if [ -e "${FILE}" ] + then + cd source + "${FILE}" || { Echo_error "${_HOOK} failed (exit non-zero). You should check for errors."; exit 1 ;} + cd "${OLDPWD}" + fi + done + done +done + +## Processing local hooks +for HOOK in config/hooks/normal/*.source config/hooks/live/*.source +do + if [ ! -e "${HOOK}" ] + then + continue + fi + + # Making hook executable + if [ ! -x "${HOOK}" ] + then + chmod +x "${HOOK}" + fi + + # Executing hook + cd source + ../"${HOOK}" || { Echo_error "${HOOK} failed (exit non-zero). You should check for errors."; exit 1 ;} + cd "${OLDPWD}" +done + +# Creating stage file +Create_stagefile .build/source_hooks diff --git a/system-build/scripts/build/source_iso b/system-build/scripts/build/source_iso new file mode 100755 index 0000000..b0b3036 --- /dev/null +++ b/system-build/scripts/build/source_iso @@ -0,0 +1,122 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'build iso source image')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +if [ "${LB_SOURCE}" != "true" ] +then + exit 0 +fi + +case "${LB_SOURCE_IMAGES}" in + iso*) + ;; + + *) + exit 0 + ;; +esac + +Echo_message "Begin building source iso image..." + +# Requiring stage file +Require_stagefile .build/config .build/source_debian + +# Checking stage file +Check_stagefile .build/source_iso + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +# Checking depends +Check_package chroot /usr/bin/xorriso xorriso + +# Installing depends +Install_package + +# Remove old iso image +if [ -f ${LIVE_IMAGE_NAME}-source.iso ] +then + rm -f ${LIVE_IMAGE_NAME}-source.iso +fi + +# Handle xorriso generic options +XORRISO_OPTIONS="-as mkisofs -r -J -joliet-long -l -cache-inodes" + +# Handle xorriso live-build specific options +if [ "${_QUIET}" = "true" ] +then + XORRISO_OPTIONS="${XORRISO_OPTIONS} -quiet" +fi + +if [ "${_VERBOSE}" = "true" ] +then + XORRISO_OPTIONS="${XORRISO_OPTIONS} -v" +fi + +if [ -n "${LB_ISO_APPLICATION}" ] && [ "${LB_ISO_APPLICATION}" != "none" ] +then + XORRISO_OPTIONS="${XORRISO_OPTIONS} -A \"${LB_ISO_APPLICATION}\"" +fi + +if [ -n "${LB_ISO_PREPARER}" ] && [ "${LB_ISO_PREPARER}" != "none" ] +then + XORRISO_OPTIONS="${XORRISO_OPTIONS} -p \"${LB_ISO_PREPARER}\"" +fi + +if [ -n "${LB_ISO_PUBLISHER}" ] && [ "${LB_ISO_PUBLISHER}" != "none" ] +then + XORRISO_OPTIONS="${XORRISO_OPTIONS} -publisher \"${LB_ISO_PUBLISHER}\"" +fi + +if [ -n "${LB_ISO_VOLUME}" ] && [ "${LB_ISO_VOLUME}" != "none" ] +then + XORRISO_OPTIONS="${XORRISO_OPTIONS} -V \"${LB_ISO_VOLUME}\"" +fi + +# Set an explicit modification date +XORRISO_OPTIONS="${XORRISO_OPTIONS} --modification-date=$(date --utc --date="@${SOURCE_DATE_EPOCH:-$(date +%s)}" +%Y%m%d%H%m%S00)" + +# Moving image +mv source chroot + +cat >> chroot/source.sh << EOF +xorriso ${XORRISO_OPTIONS} -o source.iso source +EOF + +Chroot chroot "sh source.sh" + +# Move image +mv chroot/source ./ +mv chroot/source.iso ${LIVE_IMAGE_NAME}-source.iso +rm -f chroot/source.sh + +# Removing depends +Remove_package + +# Creating stage file +Create_stagefile .build/source_iso diff --git a/system-build/scripts/build/source_live b/system-build/scripts/build/source_live new file mode 100755 index 0000000..67e71c9 --- /dev/null +++ b/system-build/scripts/build/source_live @@ -0,0 +1,62 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'copy live config into source')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +if [ "${LB_SOURCE}" != "true" ] +then + exit 0 +fi + +Echo_message "Begin copying live-build configuration..." + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +# Checking stage file +Check_stagefile .build/source_live + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +# Remove old sources +if [ -d source/live ] +then + rm -rf source/live +fi + +# Copy system configuration +mkdir -p source/live +cp -a config source/live + +if Find_files auto/* +then + cp -a auto source/live +fi + +# Creating stage file +Create_stagefile .build/source_live diff --git a/system-build/scripts/build/source_tar b/system-build/scripts/build/source_tar new file mode 100755 index 0000000..d4b3555 --- /dev/null +++ b/system-build/scripts/build/source_tar @@ -0,0 +1,85 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2015 Daniel Baumann <mail@daniel-baumann.ch> +## +## This program 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 +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'build source tarball')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/system config/binary config/source +Set_defaults + +if [ "${LB_SOURCE}" != "true" ] +then + exit 0 +fi + +if ! In_list tar "${LB_SOURCE_IMAGES}" +then + exit 0 +fi + +Echo_message "Begin building source tarball..." +Echo_message "This may take a while." + +# Requiring stage file +Require_stagefile .build/config .build/source_debian + +# Checking stage file +Check_stagefile .build/source_tar + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +# Remove old source +rm -f ${LIVE_IMAGE_NAME}-source.orig.tar.bz2 ${LIVE_IMAGE_NAME}-source.orig.tar.gz ${LIVE_IMAGE_NAME}-source.orig.tar.lz ${LIVE_IMAGE_NAME}-source.orig.tar +rm -f ${LIVE_IMAGE_NAME}-source.config.tar.bz2 ${LIVE_IMAGE_NAME}-source.config.tar.gz ${LIVE_IMAGE_NAME}-source.config.tar.lz ${LIVE_IMAGE_NAME}-source.config.tar + +tar cf ${LIVE_IMAGE_NAME}-source.orig.tar source/debian +tar cf ${LIVE_IMAGE_NAME}-source.config.tar source/live + +case "${LB_COMPRESSION}" in + bzip2) + bzip2 ${BZIP2_OPTIONS} ${LIVE_IMAGE_NAME}-source.orig.tar + bzip2 ${BZIP2_OPTIONS} ${LIVE_IMAGE_NAME}-source.config.tar + ;; + + gzip) + gzip ${GZIP_OPTIONS} ${LIVE_IMAGE_NAME}-source.orig.tar + gzip ${GZIP_OPTIONS} ${LIVE_IMAGE_NAME}-source.config.tar + ;; + + lzip) + lzip ${LZIP_OPTIONS} ${LIVE_IMAGE_NAME}-source.orig.tar + lzip ${LZIP_OPTIONS} ${LIVE_IMAGE_NAME}-source.config.tar + ;; + + xz) + xz ${XZ_OPTIONS} ${LIVE_IMAGE_NAME}-source.orig.tar + xz ${XZ_OPTIONS} ${LIVE_IMAGE_NAME}-source.config.tar + ;; + + none) + ;; +esac + +# Creating stage file +Create_stagefile .build/source_tar |