4c5aeb1238
For installing stuff from sid or ports you may need to manually specify the location of the keyring. You can even import keys into your personal keyring and point it there, e.g.: gpg --keyserver keyring.debian.org --recv-keys 84C573CD4E1AFD6C make docker-binfmt-image-debian-sid-hppa DEB_TYPE=sid DEB_ARCH=hppa \ DEB_URL=http://ftp.ports.debian.org/debian-ports/ \ EXECUTABLE=./hppa-linux-user/qemu-hppa V=1 \ DEB_KEYRING=${HOME}/.gnupg/pubring.kbx Signed-off-by: Alex Bennée <alex.bennee@linaro.org> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org> Reviewed-by: Richard Henderson <richard.henderson@linaro.org> Message-Id: <20200724064509.331-12-alex.bennee@linaro.org>
131 lines
3.4 KiB
Bash
Executable File
131 lines
3.4 KiB
Bash
Executable File
#!/bin/sh
|
|
#
|
|
# Simple wrapper for debootstrap, run in the docker build context
|
|
#
|
|
FAKEROOT=$(which fakeroot 2> /dev/null)
|
|
# debootstrap < 1.0.67 generates empty sources.list, see Debian#732255
|
|
MIN_DEBOOTSTRAP_VERSION=1.0.67
|
|
|
|
exit_and_skip()
|
|
{
|
|
exit 3
|
|
}
|
|
|
|
#
|
|
# fakeroot is needed to run the bootstrap stage
|
|
#
|
|
if [ -z $FAKEROOT ]; then
|
|
echo "Please install fakeroot to enable bootstraping" >&2
|
|
exit_and_skip
|
|
|
|
fi
|
|
|
|
if [ -z "${DEB_ARCH}" ]; then
|
|
echo "Please set DEB_ARCH to choose an architecture (e.g. armhf)" >&2
|
|
exit_and_skip
|
|
|
|
fi
|
|
|
|
if [ -z "${DEB_TYPE}" ]; then
|
|
echo "Please set DEB_TYPE to a Debian archive name (e.g. testing)" >&2
|
|
exit_and_skip
|
|
|
|
fi
|
|
|
|
# The following allow finer grain control over the defaults
|
|
if [ -z "${DEB_VARIANT}" ]; then
|
|
DEB_VARIANT=buildd
|
|
fi
|
|
|
|
if [ -z "${DEB_URL}" ]; then
|
|
DEB_URL="http://httpredir.debian.org/debian"
|
|
fi
|
|
|
|
# We check in order for
|
|
#
|
|
# - DEBOOTSTRAP_DIR pointing at a development checkout
|
|
# - PATH for the debootstrap script (installed)
|
|
#
|
|
# If neither option works then we checkout debootstrap from its
|
|
# upstream SCM and run it from there.
|
|
#
|
|
|
|
if [ -z $DEBOOTSTRAP_DIR ]; then
|
|
NEED_DEBOOTSTRAP=false
|
|
DEBOOTSTRAP=$(which debootstrap 2> /dev/null)
|
|
if [ -z $DEBOOTSTRAP ]; then
|
|
echo "No debootstrap installed, attempting to install from SCM"
|
|
NEED_DEBOOTSTRAP=true
|
|
else
|
|
INSTALLED_VERSION=$(${DEBOOTSTRAP} --version | sed 's/debootstrap \([0-9\.]*\)[^0-9\.]*.*/\1/')
|
|
if ! (echo "${MIN_DEBOOTSTRAP_VERSION}" ; echo "${INSTALLED_VERSION}") \
|
|
| sort -t . -n -k 1,1 -k 2,2 -k 3,3 -C ; then
|
|
echo "debootstrap too old, attempting to install from SCM"
|
|
NEED_DEBOOTSTRAP=true
|
|
fi
|
|
fi
|
|
if $NEED_DEBOOTSTRAP; then
|
|
DEBOOTSTRAP_SOURCE=https://salsa.debian.org/installer-team/debootstrap.git
|
|
git clone ${DEBOOTSTRAP_SOURCE} ./debootstrap.git
|
|
export DEBOOTSTRAP_DIR=./debootstrap.git
|
|
DEBOOTSTRAP=./debootstrap.git/debootstrap
|
|
(cd "${DEBOOTSTRAP_DIR}" && "${FAKEROOT}" make )
|
|
fi
|
|
else
|
|
DEBOOTSTRAP=${DEBOOTSTRAP_DIR}/debootstrap
|
|
if [ ! -f $DEBOOTSTRAP ]; then
|
|
echo "Couldn't find script at ${DEBOOTSTRAP}" >&2
|
|
exit_and_skip
|
|
fi
|
|
fi
|
|
|
|
#
|
|
# Add optional args
|
|
#
|
|
if [ -n "${DEB_KEYRING}" ]; then
|
|
DEBOOTSTRAP="${DEBOOTSTRAP} --keyring=${DEB_KEYRING}"
|
|
fi
|
|
|
|
#
|
|
# Finally check to see if any qemu's are installed
|
|
#
|
|
BINFMT_DIR=/proc/sys/fs/binfmt_misc
|
|
if [ ! -e $BINFMT_DIR ]; then
|
|
echo "binfmt_misc needs enabling for a QEMU bootstrap to work" >&2
|
|
exit_and_skip
|
|
else
|
|
# DEB_ARCH and QEMU arch names are not totally aligned
|
|
case "${DEB_ARCH}" in
|
|
amd64)
|
|
QEMU=qemu-i386
|
|
;;
|
|
armel|armhf)
|
|
QEMU=qemu-arm
|
|
;;
|
|
arm64)
|
|
QEMU=qemu-aarch64
|
|
;;
|
|
powerpc)
|
|
QEMU=qemu-ppc
|
|
;;
|
|
ppc64el)
|
|
QEMU=qemu-ppc64le
|
|
;;
|
|
s390)
|
|
QEMU=qemu-s390x
|
|
;;
|
|
*)
|
|
QEMU=qemu-${DEB_ARCH}
|
|
;;
|
|
esac
|
|
if [ ! -e "${BINFMT_DIR}/$QEMU" ]; then
|
|
echo "No binfmt_misc rule to run $QEMU, can't bootstrap" >&2
|
|
exit_and_skip
|
|
fi
|
|
fi
|
|
|
|
echo "Building a rootfs using ${FAKEROOT} and ${DEBOOTSTRAP} ${DEB_ARCH}/${DEB_TYPE}"
|
|
|
|
${FAKEROOT} ${DEBOOTSTRAP} --variant=$DEB_VARIANT --foreign --arch=$DEB_ARCH $DEB_TYPE . $DEB_URL || exit 1
|
|
exit 0
|