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