diff options
-rwxr-xr-x | components/bootstrap_debootstrap | 130 | ||||
-rw-r--r-- | components/defaults.conf | 3 | ||||
-rwxr-xr-x | components/init | 75 | ||||
-rwxr-xr-x | scripts/build/bootstrap_debootstrap | 131 |
4 files changed, 208 insertions, 131 deletions
diff --git a/components/bootstrap_debootstrap b/components/bootstrap_debootstrap new file mode 100755 index 000000000..adc0a76ae --- /dev/null +++ b/components/bootstrap_debootstrap @@ -0,0 +1,130 @@ +#!/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 + +# Checking meta-data directory +if [ ! -e .build ] +then + echo "fatal: Not a live-build configuration in ${PWD}/: .build" + exit 1 +fi + +# Checking meta-data file +if [ ! -e .build/bootstrap_debootstrap ] +then + echo "${0} already run, skipping." + exit 0 +fi + +# Checking host dependencies +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 'sudo apt install debootstrap'." + exit 1 +fi + +# Creating lock file +# FIXME + +# Reading archive configuration +for FILE in config/archives/debian.list.bootstrap config/archives/debian.list +do + if [ -e "${FILE}" ] + then + DEB="$(grep -m 1 '^deb ' ${FILE})" + + ARCHIVE_URI="$(echo ${DEB} | awk '{ print $2 }')" + ARCHIVE_SUITE="$(echo ${DEB} | awk '{ print $3 }')" + ARCHIVE_COMPONENTS="$(echo ${DEB} | awk -F${ARCHIVE_SUITE} '{ print $2 }' | sed -e 's|^ ||')" + + break + fi +done + +# Setting archive defaults +ARCHIVE_URI="${ARCHIVE_URI:-${DEFAULT_ARCHIVE_URI}}" +ARCHIVE_SUITE="${ARCHIVE_SUITE:-${DEFAULT_ARCHIVE_SUITE}}" +ARCHIVE_COMPONENTS="${ARCHIVE_COMPONENTS:-${DEFAULT_ARCHIVE_COMPONENTS}}" + +# Creating cache directory +mkdir -p "cache/${DISTRIBUTION}" + +# Creating chroot directory +mkdir -p chroot + +# Setting debootstrap options +DEBOOTSTRAP_OPTIONS="" + +if [ "${ARCHIVE_AREAS}" != "main" ] +then + DEBOOTSTRAP_OPTIONS="${DEBOOTSTRAP_OPTIONS} --components=$(echo ${ARCHIVE_AREAS} | sed -e 's| |,|g')" +fi + +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 diff --git a/components/defaults.conf b/components/defaults.conf new file mode 100644 index 000000000..d773c5e6e --- /dev/null +++ b/components/defaults.conf @@ -0,0 +1,3 @@ +DEFAULT_ARCHIVE_URI="http://ftp.debian.org/debian" +DEFAULT_ARCHIVE_SUITE="stretch" +DEFAULT_ARCHIVE_COMPONENTS="main" diff --git a/components/init b/components/init new file mode 100755 index 000000000..e2d36f634 --- /dev/null +++ b/components/init @@ -0,0 +1,75 @@ +#!/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 + +# Checking meta-data directory +if [ ! -e .build ] +then + echo "Initialized empty live-build configuration in ${PWD}/" + + if [ "$(ls -a ${PWD})" ] + then + echo "Warning: directory not empty" + fi +else + echo "Reinitialized existing live-build configuration in ${PWD}/" +fi + +# Reading defaults +. ./defaults.conf + +# Creating meta-data directory +mkdir -p .build + +# Creating archive configuration directory +mkdir -p config/archives + +# Creating default archive configuration +cat > config/archives/debian.list << EOF +deb ${DEFAULT_ARCHIVE_URI} ${DEFAULT_ARCHIVE_SUITE} ${DEFAULT_ARCHIVE_COMPONENTS} +EOF + +# Creating default architecture configuration +ARCHITECTURE="$(dpkg --print-architecture)" + +echo "${ARCHITECTURE}" > config/archives/architecture + +# Creating default foreign architecture configuration +case "${ARCHITECTURE}" in + amd64) + FOREIGN_ARCHITECTURES="i386" + ;; + + i386) + FOREIGN_ARCHITECTURES="amd64" + ;; +esac + +if [ -n "${FOREIGN_ARCHITECTURES}" ] +then + rm -f config/archives/foreign-architectures + + for FOREIGN_ARCHITECTURE in ${FOREIGN_ARCHITECTURES} + do + echo "${FOREIGN_ARCHITECTURE}" >> config/archives/foreign-architecture + done +fi diff --git a/scripts/build/bootstrap_debootstrap b/scripts/build/bootstrap_debootstrap deleted file mode 100755 index bd646fffc..000000000 --- a/scripts/build/bootstrap_debootstrap +++ /dev/null @@ -1,131 +0,0 @@ -#!/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/chroot 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 - -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 |