ae2f659ca5
When using the git version of debootstrap (because no usable version of debootstrap was installed on the host), we need to run 'make' so that devices.tar.gz gets built. Otherwise the first debootstrap stage will fail without printing any error message. Signed-off-by: Sascha Silbe <silbe@linux.vnet.ibm.com> Message-Id: <1473192351-601-8-git-send-email-silbe@linux.vnet.ibm.com> Signed-off-by: Fam Zheng <famz@redhat.com>
112 lines
2.9 KiB
Bash
Executable File
112 lines
2.9 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
|
|
|
|
# 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
|
|
elif ! (echo "${MIN_DEBOOTSTRAP_VERSION}" ; "${DEBOOTSTRAP}" --version \
|
|
| cut -d ' ' -f 2) | sort -t . -n -k 1,1 -k 2,2 -k 3,3 -c &>/dev/null; then
|
|
echo "debootstrap too old, attempting to install from SCM"
|
|
NEED_DEBOOTSTRAP=true
|
|
fi
|
|
if $NEED_DEBOOTSTRAP; then
|
|
DEBOOTSTRAP_SOURCE=https://anonscm.debian.org/git/d-i/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
|
|
|
|
#
|
|
# 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=buildd --foreign --arch=$DEB_ARCH $DEB_TYPE . http://httpredir.debian.org/debian || exit 1
|
|
exit 0
|