| 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 |