Browse code

contrib: mkimage script for alpine linux

Docker-DCO-1.1-Signed-off-by: Eivind Uggedal <eivind@uggedal.com> (github: uggedal)

Eivind Uggedal authored on 2014/04/13 23:52:21
Showing 1 changed files
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