xen: add a mechanism to automatically create XenDevice-s...
[qemu.git] / tests / docker / dockerfiles / debian-bootstrap.pre
blobc164778c302127b7044dab0921b11cca815b5cfd
1 #!/bin/sh
3 # Simple wrapper for debootstrap, run in the docker build context
5 FAKEROOT=$(which fakeroot 2> /dev/null)
6 # debootstrap < 1.0.67 generates empty sources.list, see Debian#732255
7 MIN_DEBOOTSTRAP_VERSION=1.0.67
9 exit_and_skip()
11     exit 3
15 # fakeroot is needed to run the bootstrap stage
17 if [ -z $FAKEROOT ]; then
18     echo "Please install fakeroot to enable bootstraping" >&2
19     exit_and_skip
23 if [ -z "${DEB_ARCH}" ]; then
24     echo "Please set DEB_ARCH to choose an architecture (e.g. armhf)" >&2
25     exit_and_skip
29 if [ -z "${DEB_TYPE}" ]; then
30     echo "Please set DEB_TYPE to a Debian archive name (e.g. testing)" >&2
31     exit_and_skip
35 # The following allow finer grain control over the defaults
36 if [ -z "${DEB_VARIANT}" ]; then
37     DEB_VARIANT=buildd
40 if [ -z "${DEB_URL}" ]; then
41     DEB_URL="http://httpredir.debian.org/debian"
44 # We check in order for
46 #  - DEBOOTSTRAP_DIR pointing at a development checkout
47 #  - PATH for the debootstrap script (installed)
49 # If neither option works then we checkout debootstrap from its
50 # upstream SCM and run it from there.
53 if [ -z $DEBOOTSTRAP_DIR ]; then
54     NEED_DEBOOTSTRAP=false
55     DEBOOTSTRAP=$(which debootstrap 2> /dev/null)
56     if [ -z $DEBOOTSTRAP ]; then
57         echo "No debootstrap installed, attempting to install from SCM"
58         NEED_DEBOOTSTRAP=true
59     else
60         INSTALLED_VERSION=$(${DEBOOTSTRAP} --version | sed 's/debootstrap \([0-9\.]*\)[^0-9\.]*.*/\1/')
61         if ! (echo "${MIN_DEBOOTSTRAP_VERSION}" ; echo "${INSTALLED_VERSION}") \
62                 | sort -t . -n -k 1,1 -k 2,2 -k 3,3 -C ; then
63             echo "debootstrap too old, attempting to install from SCM"
64             NEED_DEBOOTSTRAP=true
65         fi
66     fi
67     if $NEED_DEBOOTSTRAP; then
68         DEBOOTSTRAP_SOURCE=https://salsa.debian.org/installer-team/debootstrap.git
69         git clone ${DEBOOTSTRAP_SOURCE} ./debootstrap.git
70         export DEBOOTSTRAP_DIR=./debootstrap.git
71         DEBOOTSTRAP=./debootstrap.git/debootstrap
72         (cd "${DEBOOTSTRAP_DIR}" && "${FAKEROOT}" make )
73     fi
74 else
75     DEBOOTSTRAP=${DEBOOTSTRAP_DIR}/debootstrap
76     if [ ! -f $DEBOOTSTRAP ]; then
77         echo "Couldn't find script at ${DEBOOTSTRAP}" >&2
78         exit_and_skip
79     fi
83 # Finally check to see if any qemu's are installed
85 BINFMT_DIR=/proc/sys/fs/binfmt_misc
86 if [ ! -e $BINFMT_DIR ]; then
87    echo "binfmt_misc needs enabling for a QEMU bootstrap to work" >&2
88    exit_and_skip
89 else
90     # DEB_ARCH and QEMU arch names are not totally aligned
91     case "${DEB_ARCH}" in
92         amd64)
93             QEMU=qemu-i386
94             ;;
95         armel|armhf)
96             QEMU=qemu-arm
97             ;;
98         arm64)
99             QEMU=qemu-aarch64
100             ;;
101         powerpc)
102             QEMU=qemu-ppc
103             ;;
104         ppc64el)
105             QEMU=qemu-ppc64le
106             ;;
107         s390)
108             QEMU=qemu-s390x
109             ;;
110         *)
111             QEMU=qemu-${DEB_ARCH}
112         ;;
113     esac
114     if [ ! -e "${BINFMT_DIR}/$QEMU" ]; then
115         echo "No binfmt_misc rule to run $QEMU, can't bootstrap" >&2
116         exit_and_skip
117     fi
120 echo "Building a rootfs using ${FAKEROOT} and ${DEBOOTSTRAP} ${DEB_ARCH}/${DEB_TYPE}"
122 ${FAKEROOT} ${DEBOOTSTRAP} --variant=$DEB_VARIANT --foreign --arch=$DEB_ARCH $DEB_TYPE . $DEB_URL || exit 1
123 exit 0