diff options
Diffstat (limited to 'share/scripts')
-rwxr-xr-x | share/scripts/curl | 187 | ||||
-rwxr-xr-x | share/scripts/debconf | 2 | ||||
-rwxr-xr-x | share/scripts/debconf.d/0003-debconf | 4 | ||||
-rwxr-xr-x | share/scripts/debootstrap | 2 |
4 files changed, 191 insertions, 4 deletions
diff --git a/share/scripts/curl b/share/scripts/curl new file mode 100755 index 0000000..0cf38e9 --- /dev/null +++ b/share/scripts/curl @@ -0,0 +1,187 @@ +#!/bin/sh + +# container-tools - Manage systemd-nspawn containers +# Copyright (C) 2014-2016 Daniel Baumann <daniel.baumann@open-infrastructure.net> +# +# 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/>. + +set -e + +SCRIPT="${0}" + +MACHINES="/var/lib/machines" +CACHE="/var/cache/container-tools/curl" + +Parameters () +{ + LONG_OPTIONS="bind:,script:,name:,image:,server:,password:" + OPTIONS="b:,s:,n:,p:" + + PARAMETERS="$(getopt --longoptions ${LONG_OPTIONS} --name=${SCRIPT} --options ${OPTIONS} --shell sh -- ${@})" + + if [ "${?}" != "0" ] + then + echo "'${SCRIPT}': getopt exit" >&2 + exit 1 + fi + + eval set -- "${PARAMETERS}" + + while true + do + case "${1}" in + -b|--bind) + # ignore + shift 2 + ;; + + --cnt.auto) + # ignore + shift 2 + ;; + + -s|--script) + # ignore + shift 2 + ;; + + -n|--name) + NAME="${2}" + shift 2 + ;; + + --image) + IMAGE="${2}" + shift 2 + ;; + + --server) + SERVER="${2}" + shift 2 + ;; + + -p|--password) + PASSWORD="${2}" + shift 2 + ;; + + --) + shift 1 + break + ;; + + *) + echo "'${SCRIPT}': getopt error" >&2 + exit 1 + ;; + esac + done +} + +Usage () +{ + echo "Usage: container create -n|--name NAME -s|--script ${SCRIPT} -- [--image IMAGE] [--server SERVER] [-p|--password PASSWORD}" >&2 + exit 1 +} + +Parameters "${@}" + +if [ -z "${NAME}" ] +then + Usage +fi + +if [ -e "${MACHINES}/${NAME}" ] +then + echo "'${NAME}': container already exists" >&2 + exit 1 +fi + +if [ ! -x /usr/bin/curl ] +then + echo "'${NAME}': /usr/bin/curl - no such file." >&2 + exit 1 +fi + +if [ "$(id -u)" -ne 0 ] +then + echo "'${NAME}': need root privileges" >&2 + exit 1 +fi + +ARCHITECTURE="${ARCHITECTURE:-$(dpkg --print-architecture)}" +IMAGE="${IMAGE:-debian-stretch-${ARCHITECTURE}.tar.xz}" +SERVER="${SERVER:-https://files.open-infrastructure.net/images/container-tools/current}" +PASSWORD="${PASSWORD:-$(dd if=/dev/urandom bs=12 count=1 2> /dev/null | base64)}" + +VERSION="$(container version)" + +# Run + +# FIXME: Show available image directories on server +# FIXME: Fetch debconf-choices.txt to show debconf select +# FIXME: gpg verification against debian-keyring or local keyring +# FIXME: default server via configuration file + +echo "Downloading ${IMAGE}" +mkdir -p "${CACHE}" + +if [ -e "${CACHE}/${IMAGE}" ] +then + CURL_OPTIONS="--time-cond ${CACHE}/${IMAGE}" +fi + +curl --http2 --location --progress-bar --user-agent container-tools/${VERSION} ${CURL_OPTIONS} \ + "${SERVER}/${IMAGE}" -o "${CACHE}/${IMAGE}" + +echo "Unpacking ${IMAGE}" +mkdir -p "${MACHINES}/${NAME}" + +case "${IMAGE}" in + *.gz) + TAR_OPTIONS="--gzip" + ;; + + *.lz) + TAR_OPTIONS="--lzip" + ;; + + *.xz) + TAR_OPTIONS="--xz" + ;; + + *) + TAR_OPTIONS="" + ;; +esac + +if [ -e /usr/bin/pv ] +then + pv --format '%p' --width 77 "${CACHE}/${IMAGE}" | tar xf - ${TAR_OPTIONS} -C "${MACHINES}/${NAME}" --strip 1 +else + tar xf "${CACHE}/${IMAGE}" ${TAR_OPTIONS} -C "${MACHINES}/${NAME}" --strip 1 +fi + +# Creating machine-id +chroot "${MACHINES}/${NAME}" systemd-machine-id-setup > /dev/null 2>&1 + +# Setting hostname +echo "${NAME}" > "${MACHINES}/${NAME}/etc/hostname" + +# Copying resolv.conf +cp -L /etc/resolv.conf "${MACHINES}/${NAME}/etc/resolv.conf" + +# Setting root password +echo root:${PASSWORD} | chroot "${MACHINES}/${NAME}" chpasswd +echo "${NAME}: root password set to '${PASSWORD}'." diff --git a/share/scripts/debconf b/share/scripts/debconf index 6fab784..75cbfb0 100755 --- a/share/scripts/debconf +++ b/share/scripts/debconf @@ -81,7 +81,7 @@ Parameters () Usage () { - echo "Usage: container create -n|--name NAME -s|--script ${SCRIPT} [-p|--preseed-file FILE]" >&2 + echo "Usage: container create -n|--name NAME -s|--script ${SCRIPT} -- [-p|--preseed-file FILE]" >&2 exit 1 } diff --git a/share/scripts/debconf.d/0003-debconf b/share/scripts/debconf.d/0003-debconf index c0944fa..77dc030 100755 --- a/share/scripts/debconf.d/0003-debconf +++ b/share/scripts/debconf.d/0003-debconf @@ -32,8 +32,8 @@ Distribution () then case "${MODE}" in debian) - db_subst cnt-debconf/distribution CHOICES "Debian GNU/Linux 8 \"jessie\", Debian GNU/Linux 9 \"stretch\", Debian GNU/Linux unstable/sid" - db_subst cnt-debconf/distribution CHOICES_C "jessie, stretch, sid" + db_subst cnt-debconf/distribution CHOICES "Debian GNU/Linux 9 \"stretch\", Debian GNU/Linux unstable/sid" + db_subst cnt-debconf/distribution CHOICES_C "stretch, sid" db_set cnt-debconf/distribution stretch db_fset cnt-debconf/distribution seen false diff --git a/share/scripts/debootstrap b/share/scripts/debootstrap index 1ead471..e04f32d 100755 --- a/share/scripts/debootstrap +++ b/share/scripts/debootstrap @@ -95,7 +95,7 @@ Parameters () Usage () { - echo "Usage: container create -n|--name NAME -s|--script ${SCRIPT} [-a|--architecture ARCHITECTURE] [-d|--distribution DISTRIBUTION] [-m|--mirror MIRROR] [-p|--password PASSWORD}" >&2 + echo "Usage: container create -n|--name NAME -s|--script ${SCRIPT} -- [-a|--architecture ARCHITECTURE] [-d|--distribution DISTRIBUTION] [-m|--mirror MIRROR] [-p|--password PASSWORD}" >&2 exit 1 } |