qemu with hax to log dma reads & writes
jcs.org/2018/11/12/vfio
1#!/bin/sh
2#
3# Simple wrapper for debootstrap, run in the docker build context
4#
5FAKEROOT=`which fakeroot 2> /dev/null`
6# debootstrap < 1.0.67 generates empty sources.list, see Debian#732255
7MIN_DEBOOTSTRAP_VERSION=1.0.67
8
9exit_and_skip()
10{
11 exit 3
12}
13
14#
15# fakeroot is needed to run the bootstrap stage
16#
17if [ -z $FAKEROOT ]; then
18 echo "Please install fakeroot to enable bootstraping" >&2
19 exit_and_skip
20
21fi
22
23if [ -z "${DEB_ARCH}" ]; then
24 echo "Please set DEB_ARCH to choose an architecture (e.g. armhf)" >&2
25 exit_and_skip
26
27fi
28
29if [ -z "${DEB_TYPE}" ]; then
30 echo "Please set DEB_TYPE to a Debian archive name (e.g. testing)" >&2
31 exit_and_skip
32
33fi
34
35# We check in order for
36#
37# - DEBOOTSTRAP_DIR pointing at a development checkout
38# - PATH for the debootstrap script (installed)
39#
40# If neither option works then we checkout debootstrap from its
41# upstream SCM and run it from there.
42#
43
44if [ -z $DEBOOTSTRAP_DIR ]; then
45 NEED_DEBOOTSTRAP=false
46 DEBOOTSTRAP=`which debootstrap 2> /dev/null`
47 if [ -z $DEBOOTSTRAP ]; then
48 echo "No debootstrap installed, attempting to install from SCM"
49 NEED_DEBOOTSTRAP=true
50 elif ! (echo "${MIN_DEBOOTSTRAP_VERSION}" ; "${DEBOOTSTRAP}" --version \
51 | cut -d ' ' -f 2) | sort -t . -n -k 1,1 -k 2,2 -k 3,3 -c &>/dev/null; then
52 echo "debootstrap too old, attempting to install from SCM"
53 NEED_DEBOOTSTRAP=true
54 fi
55 if $NEED_DEBOOTSTRAP; then
56 DEBOOTSTRAP_SOURCE=https://anonscm.debian.org/git/d-i/debootstrap.git
57 git clone ${DEBOOTSTRAP_SOURCE} ./debootstrap.git
58 export DEBOOTSTRAP_DIR=./debootstrap.git
59 DEBOOTSTRAP=./debootstrap.git/debootstrap
60 (cd "${DEBOOTSTRAP_DIR}" && "${FAKEROOT}" make )
61 fi
62else
63 DEBOOTSTRAP=${DEBOOTSTRAP_DIR}/debootstrap
64 if [ ! -f $DEBOOTSTRAP ]; then
65 echo "Couldn't find script at ${DEBOOTSTRAP}" >&2
66 exit_and_skip
67 fi
68fi
69
70#
71# Finally check to see if any qemu's are installed
72#
73BINFMT_DIR=/proc/sys/fs/binfmt_misc
74if [ ! -e $BINFMT_DIR ]; then
75 echo "binfmt_misc needs enabling for a QEMU bootstrap to work" >&2
76 exit_and_skip
77else
78 # DEB_ARCH and QEMU arch names are not totally aligned
79 case "${DEB_ARCH}" in
80 amd64)
81 QEMU=qemu-i386
82 ;;
83 armel|armhf)
84 QEMU=qemu-arm
85 ;;
86 arm64)
87 QEMU=qemu-aarch64
88 ;;
89 powerpc)
90 QEMU=qemu-ppc
91 ;;
92 ppc64el)
93 QEMU=qemu-ppc64le
94 ;;
95 s390)
96 QEMU=qemu-s390x
97 ;;
98 *)
99 QEMU=qemu-${DEB_ARCH}
100 ;;
101 esac
102 if [ ! -e "${BINFMT_DIR}/$QEMU" ]; then
103 echo "No binfmt_misc rule to run $QEMU, can't bootstrap" >&2
104 exit_and_skip
105 fi
106fi
107
108echo "Building a rootfs using ${FAKEROOT} and ${DEBOOTSTRAP} ${DEB_ARCH}/${DEB_TYPE}"
109
110${FAKEROOT} ${DEBOOTSTRAP} --variant=buildd --foreign --arch=$DEB_ARCH $DEB_TYPE . http://httpredir.debian.org/debian || exit 1
111exit 0