6a2bdc6e |
#!/bin/sh
set -e
[ $(id -u) -eq 0 ] || {
printf >&2 '%s requires root\n' "$0"
exit 1
}
usage() { |
7fa40ef5 |
printf >&2 '%s: [-r release] [-m mirror] [-s] [-c additional repository]\n' "$0" |
6a2bdc6e |
exit 1
}
tmp() { |
287e604a |
TMP=$(mktemp -d ${TMPDIR:-/var/tmp}/alpine-docker-XXXXXXXXXX)
ROOTFS=$(mktemp -d ${TMPDIR:-/var/tmp}/alpine-docker-rootfs-XXXXXXXXXX) |
6a2bdc6e |
trap "rm -rf $TMP $ROOTFS" EXIT TERM INT
}
apkv() { |
7fa40ef5 |
curl -sSL $MAINREPO/$ARCH/APKINDEX.tar.gz | tar -Oxz |
grep --text '^P:apk-tools-static$' -A1 | tail -n1 | cut -d: -f2 |
6a2bdc6e |
}
getapk() { |
7fa40ef5 |
curl -sSL $MAINREPO/$ARCH/apk-tools-static-$(apkv).apk | |
6a2bdc6e |
tar -xz -C $TMP sbin/apk.static
}
mkbase() { |
7fa40ef5 |
$TMP/sbin/apk.static --repository $MAINREPO --update-cache --allow-untrusted \ |
6a2bdc6e |
--root $ROOTFS --initdb add alpine-base
}
conf() { |
7fa40ef5 |
printf '%s\n' $MAINREPO > $ROOTFS/etc/apk/repositories
printf '%s\n' $ADDITIONALREPO >> $ROOTFS/etc/apk/repositories |
6a2bdc6e |
}
pack() {
local id
id=$(tar --numeric-owner -C $ROOTFS -c . | docker import - alpine:$REL)
docker tag $id alpine:latest |
7fa40ef5 |
docker run -i -t --rm alpine printf 'alpine:%s with id=%s created!\n' $REL $id |
6a2bdc6e |
}
save() {
[ $SAVE -eq 1 ] || return
tar --numeric-owner -C $ROOTFS -c . | xz > rootfs.tar.xz
}
while getopts "hr:m:s" opt; do
case $opt in
r)
REL=$OPTARG
;;
m)
MIRROR=$OPTARG
;;
s)
SAVE=1
;; |
7fa40ef5 |
c)
ADDITIONALREPO=community
;; |
6a2bdc6e |
*)
usage
;;
esac
done
REL=${REL:-edge}
MIRROR=${MIRROR:-http://nl.alpinelinux.org/alpine}
SAVE=${SAVE:-0} |
7fa40ef5 |
MAINREPO=$MIRROR/$REL/main
ADDITIONALREPO=$MIRROR/$REL/community |
75f1c440 |
ARCH=${ARCH:-$(uname -m)} |
6a2bdc6e |
tmp
getapk
mkbase
conf
pack
save |