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
 |