Browse code

Added script for building Base Docker CRUX images

Docker-DCO-1.1-Signed-off-by: James Mills <prologic@shortcircuit.net.au> (github: therealprologic)

James Mills authored on 2014/01/22 23:48:47
Showing 1 changed files
1 1
new file mode 100755
... ...
@@ -0,0 +1,75 @@
0
+#!/usr/bin/env bash
1
+# Generate a minimal filesystem for CRUX/Linux and load it into the local
2
+# docker as "cruxlinux"
3
+# requires root and the crux iso (http://crux.nu)
4
+
5
+set -e
6
+
7
+die () {
8
+    echo >&2 "$@"
9
+    exit 1
10
+}
11
+
12
+[ "$#" -eq 1 ] || die "1 argument(s) required, $# provided. Usage: ./mkimage-crux.sh /path/to/iso"
13
+
14
+ISO=${1}
15
+
16
+ROOTFS=$(mktemp -d /tmp/rootfs-crux-XXXXXXXXXX)
17
+CRUX=$(mktemp -d /tmp/crux-XXXXXXXXXX)
18
+TMP=$(mktemp -d /tmp/XXXXXXXXXX)
19
+
20
+VERSION=$(basename --suffix=.iso $ISO | sed 's/[^0-9.]*\([0-9.]*\).*/\1/')
21
+
22
+# Mount the ISO
23
+mount -o ro,loop $ISO $CRUX
24
+
25
+# Extract pkgutils
26
+tar -C $TMP -xf $CRUX/tools/pkgutils#*.pkg.tar.gz
27
+
28
+# Put pkgadd in the $PATH
29
+export PATH="$TMP/usr/bin:$PATH"
30
+
31
+# Install core packages
32
+mkdir -p $ROOTFS/var/lib/pkg
33
+touch $ROOTFS/var/lib/pkg/db
34
+for pkg in $CRUX/crux/core/*; do
35
+    pkgadd -r $ROOTFS $pkg
36
+done
37
+
38
+# Remove agetty and inittab config
39
+if (grep agetty ${ROOTFS}/etc/inittab 2>&1 > /dev/null); then
40
+    echo "Removing agetty from /etc/inittab ..."
41
+    chroot ${ROOTFS} sed -i -e "/agetty/d" /etc/inittab
42
+    chroot ${ROOTFS} sed -i -e "/shutdown/d" /etc/inittab
43
+    chroot ${ROOTFS} sed -i -e "/^$/N;/^\n$/d" /etc/inittab
44
+fi
45
+
46
+# Remove kernel source
47
+rm -rf $ROOTFS/usr/src/*
48
+
49
+# udev doesn't work in containers, rebuild /dev
50
+DEV=$ROOTFS/dev
51
+rm -rf $DEV
52
+mkdir -p $DEV
53
+mknod -m 666 $DEV/null c 1 3
54
+mknod -m 666 $DEV/zero c 1 5
55
+mknod -m 666 $DEV/random c 1 8
56
+mknod -m 666 $DEV/urandom c 1 9
57
+mkdir -m 755 $DEV/pts
58
+mkdir -m 1777 $DEV/shm
59
+mknod -m 666 $DEV/tty c 5 0
60
+mknod -m 600 $DEV/console c 5 1
61
+mknod -m 666 $DEV/tty0 c 4 0
62
+mknod -m 666 $DEV/full c 1 7
63
+mknod -m 600 $DEV/initctl p
64
+mknod -m 666 $DEV/ptmx c 5 2
65
+
66
+IMAGE_ID=$(tar --numeric-owner -C $ROOTFS -c . | docker import - crux:$VERSION)
67
+docker tag $IMAGE_ID crux:latest
68
+docker run -i -t crux echo Success.
69
+
70
+# Cleanup
71
+umount $CRUX
72
+rm -rf $ROOTFS
73
+rm -rf $CRUX
74
+rm -rf $TMP