Browse code

Add mkimage-arch.sh

Travis Cline authored on 2013/10/16 08:09:02
Showing 1 changed files
1 1
new file mode 100755
... ...
@@ -0,0 +1,65 @@
0
+#!/bin/bash
1
+# Generate a minimal filesystem for archlinux and load it into the local
2
+# docker as "archlinux"
3
+# requires root
4
+set -e
5
+
6
+PACSTRAP=$(which pacstrap)
7
+[ "$PACSTRAP" ] || {
8
+    echo "Could not find pacstrap. Run pacman -S arch-install-scripts"
9
+    exit 1
10
+}
11
+EXPECT=$(which expect)
12
+[ "$EXPECT" ] || {
13
+    echo "Could not find expect. Run pacman -S expect"
14
+    exit 1
15
+}
16
+
17
+ROOTFS=~/rootfs-arch-$$-$RANDOM
18
+mkdir $ROOTFS
19
+
20
+#packages to ignore for space savings
21
+PKGIGNORE=linux,jfsutils,lvm2,cryptsetup,groff,man-db,man-pages,mdadm,pciutils,pcmciautils,reiserfsprogs,s-nail,xfsprogs
22
+ 
23
+expect -c "
24
+  set timeout 60
25
+  spawn pacstrap -c -d -G -i $ROOTFS base haveged --ignore $PKGIGNORE
26
+  expect {
27
+    \"Install anyway\" { send "n\\r"; exp_continue }
28
+    \"(default=all)\" { send "\\r"; exp_continue }
29
+    \"Proceed with installation?\" { send "\\r"; exp_continue }
30
+    \"skip the above package\" {send "y\\r"; exp_continue }
31
+    \"checking\" { exp_continue }
32
+    \"loading\" { exp_continue }
33
+    \"installing\" { exp_continue }
34
+  }"
35
+
36
+arch-chroot $ROOTFS /bin/sh -c "haveged -w 1024; pacman-key --init; pkill haveged; pacman -Rs --noconfirm haveged; pacman-key --populate archlinux"
37
+arch-chroot $ROOTFS /bin/sh -c "ln -s /usr/share/zoneinfo/UTC /etc/localtime"
38
+cat > $ROOTFS/etc/locale.gen <<DELIM
39
+en_US.UTF-8 UTF-8
40
+en_US ISO-8859-1
41
+DELIM
42
+arch-chroot $ROOTFS locale-gen
43
+arch-chroot $ROOTFS /bin/sh -c 'echo "Server = http://mirrors.kernel.org/archlinux/\$repo/os/\$arch" > /etc/pacman.d/mirrorlist'
44
+
45
+# udev doesn't work in containers, rebuild /dev
46
+DEV=${ROOTFS}/dev
47
+mv ${DEV} ${DEV}.old
48
+mkdir -p ${DEV}
49
+mknod -m 666 ${DEV}/null c 1 3
50
+mknod -m 666 ${DEV}/zero c 1 5
51
+mknod -m 666 ${DEV}/random c 1 8
52
+mknod -m 666 ${DEV}/urandom c 1 9
53
+mkdir -m 755 ${DEV}/pts
54
+mkdir -m 1777 ${DEV}/shm
55
+mknod -m 666 ${DEV}/tty c 5 0
56
+mknod -m 600 ${DEV}/console c 5 1
57
+mknod -m 666 ${DEV}/tty0 c 4 0
58
+mknod -m 666 ${DEV}/full c 1 7
59
+mknod -m 600 ${DEV}/initctl p
60
+mknod -m 666 ${DEV}/ptmx c 5 2
61
+
62
+tar -C $ROOTFS -c . | docker import - archlinux
63
+docker run -i -t archlinux echo Success.
64
+rm -rf $ROOTFS