github.com/docker/docker@v299999999.0.0-20200612211812-aaf470eca7b5+incompatible/contrib/mkimage-alpine.sh (about)

     1  #!/bin/sh
     2  
     3  set -e
     4  
     5  [ $(id -u) -eq 0 ] || {
     6  	printf >&2 '%s requires root\n' "$0"
     7  	exit 1
     8  }
     9  
    10  usage() {
    11  	printf >&2 '%s: [-r release] [-m mirror] [-s] [-c additional repository] [-a arch]\n' "$0"
    12  	exit 1
    13  }
    14  
    15  tmp() {
    16  	TMP=$(mktemp -d ${TMPDIR:-/var/tmp}/alpine-docker-XXXXXXXXXX)
    17  	ROOTFS=$(mktemp -d ${TMPDIR:-/var/tmp}/alpine-docker-rootfs-XXXXXXXXXX)
    18  	trap "rm -rf $TMP $ROOTFS" EXIT TERM INT
    19  }
    20  
    21  apkv() {
    22  	curl -sSL $MAINREPO/$ARCH/APKINDEX.tar.gz | tar -Oxz \
    23  		| grep --text '^P:apk-tools-static$' -A1 | tail -n1 | cut -d: -f2
    24  }
    25  
    26  getapk() {
    27  	curl -sSL $MAINREPO/$ARCH/apk-tools-static-$(apkv).apk \
    28  		| tar -xz -C $TMP sbin/apk.static
    29  }
    30  
    31  mkbase() {
    32  	$TMP/sbin/apk.static --repository $MAINREPO --no-cache --allow-untrusted \
    33  		--root $ROOTFS --initdb add alpine-base
    34  }
    35  
    36  conf() {
    37  	printf '%s\n' $MAINREPO > $ROOTFS/etc/apk/repositories
    38  	printf '%s\n' $ADDITIONALREPO >> $ROOTFS/etc/apk/repositories
    39  }
    40  
    41  pack() {
    42  	local id
    43  	id=$(tar --numeric-owner -C $ROOTFS -c . | docker import - alpine:$REL)
    44  
    45  	docker tag $id alpine:latest
    46  	docker run --rm alpine printf 'alpine:%s with id=%s created!\n' $REL $id
    47  }
    48  
    49  save() {
    50  	[ $SAVE -eq 1 ] || return 0
    51  
    52  	tar --numeric-owner -C $ROOTFS -c . | xz > rootfs.tar.xz
    53  }
    54  
    55  while getopts "hr:m:sc:a:" opt; do
    56  	case $opt in
    57  		r)
    58  			REL=$OPTARG
    59  			;;
    60  		m)
    61  			MIRROR=$OPTARG
    62  			;;
    63  		s)
    64  			SAVE=1
    65  			;;
    66  		c)
    67  			ADDITIONALREPO=$OPTARG
    68  			;;
    69  		a)
    70  			ARCH=$OPTARG
    71  			;;
    72  		*)
    73  			usage
    74  			;;
    75  	esac
    76  done
    77  
    78  REL=${REL:-edge}
    79  MIRROR=${MIRROR:-http://nl.alpinelinux.org/alpine}
    80  SAVE=${SAVE:-0}
    81  MAINREPO=$MIRROR/$REL/main
    82  ADDITIONALREPO=$MIRROR/$REL/${ADDITIONALREPO:-community}
    83  ARCH=${ARCH:-$(uname -m)}
    84  
    85  tmp
    86  getapk
    87  mkbase
    88  conf
    89  pack
    90  save