github.com/michael-k/docker@v1.7.0-rc2/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]\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 $REPO/$ARCH/APKINDEX.tar.gz | tar -Oxz |
    23  		grep '^P:apk-tools-static$' -A1 | tail -n1 | cut -d: -f2
    24  }
    25  
    26  getapk() {
    27  	curl -sSL $REPO/$ARCH/apk-tools-static-$(apkv).apk |
    28  		tar -xz -C $TMP sbin/apk.static
    29  }
    30  
    31  mkbase() {
    32  	$TMP/sbin/apk.static --repository $REPO --update-cache --allow-untrusted \
    33  		--root $ROOTFS --initdb add alpine-base
    34  }
    35  
    36  conf() {
    37  	printf '%s\n' $REPO > $ROOTFS/etc/apk/repositories
    38  }
    39  
    40  pack() {
    41  	local id
    42  	id=$(tar --numeric-owner -C $ROOTFS -c . | docker import - alpine:$REL)
    43  
    44  	docker tag $id alpine:latest
    45  	docker run -i -t alpine printf 'alpine:%s with id=%s created!\n' $REL $id
    46  }
    47  
    48  save() {
    49  	[ $SAVE -eq 1 ] || return
    50  
    51  	tar --numeric-owner -C $ROOTFS -c . | xz > rootfs.tar.xz
    52  }
    53  
    54  while getopts "hr:m:s" opt; do
    55  	case $opt in
    56  		r)
    57  			REL=$OPTARG
    58  			;;
    59  		m)
    60  			MIRROR=$OPTARG
    61  			;;
    62  		s)
    63  			SAVE=1
    64  			;;
    65  		*)
    66  			usage
    67  			;;
    68  	esac
    69  done
    70  
    71  REL=${REL:-edge}
    72  MIRROR=${MIRROR:-http://nl.alpinelinux.org/alpine}
    73  SAVE=${SAVE:-0}
    74  REPO=$MIRROR/$REL/main
    75  ARCH=${ARCH:-$(uname -m)}
    76  
    77  tmp
    78  getapk
    79  mkbase
    80  conf
    81  pack
    82  save