contrib/mkimage-arch.sh
b1953bab
 #!/usr/bin/env bash
d94a027d
 # Generate a minimal filesystem for archlinux and load it into the local
 # docker as "archlinux"
 # requires root
 set -e
 
787ff552
 hash pacstrap &>/dev/null || {
e72f8161
 	echo "Could not find pacstrap. Run pacman -S arch-install-scripts"
 	exit 1
d94a027d
 }
c138c335
 
de5f3020
 hash expect &>/dev/null || {
e72f8161
 	echo "Could not find expect. Run pacman -S expect"
 	exit 1
de5f3020
 }
 
9e9adf80
 export LANG="C.UTF-8"
 
287e604a
 ROOTFS=$(mktemp -d ${TMPDIR:-/var/tmp}/rootfs-archlinux-XXXXXXXXXX)
736bf3f7
 chmod 755 $ROOTFS
d94a027d
 
c6535d27
 # packages to ignore for space savings
9f59b057
 PKGIGNORE=(
     cryptsetup
     device-mapper
     dhcpcd
     iproute2
     jfsutils
     linux
     lvm2
     man-db
     man-pages
     mdadm
     nano
     netctl
     openresolv
     pciutils
     pcmciautils
     reiserfsprogs
     s-nail
     systemd-sysvcompat
     usbutils
     vi
     xfsprogs
 )
 IFS=','
 PKGIGNORE="${PKGIGNORE[*]}"
 unset IFS
da4ba807
 
de5f3020
 expect <<EOF
e72f8161
 	set send_slow {1 .1}
 	proc send {ignore arg} {
 		sleep .1
 		exp_send -s -- \$arg
 	}
 	set timeout 60
 
 	spawn pacstrap -C ./mkimage-arch-pacman.conf -c -d -G -i $ROOTFS base haveged --ignore $PKGIGNORE
 	expect {
 		-exact "anyway? \[Y/n\] " { send -- "n\r"; exp_continue }
 		-exact "(default=all): " { send -- "\r"; exp_continue }
 		-exact "installation? \[Y/n\]" { send -- "y\r"; exp_continue }
 	}
de5f3020
 EOF
d94a027d
 
18c0b415
 arch-chroot $ROOTFS /bin/sh -c 'rm -r /usr/share/man/*'
d04debdd
 arch-chroot $ROOTFS /bin/sh -c "haveged -w 1024; pacman-key --init; pkill haveged; pacman -Rs --noconfirm haveged; pacman-key --populate archlinux; pkill gpg-agent"
d94a027d
 arch-chroot $ROOTFS /bin/sh -c "ln -s /usr/share/zoneinfo/UTC /etc/localtime"
da4ba807
 echo 'en_US.UTF-8 UTF-8' > $ROOTFS/etc/locale.gen
d94a027d
 arch-chroot $ROOTFS locale-gen
73a277eb
 arch-chroot $ROOTFS /bin/sh -c 'echo "Server = https://mirrors.kernel.org/archlinux/\$repo/os/\$arch" > /etc/pacman.d/mirrorlist'
d94a027d
 
 # udev doesn't work in containers, rebuild /dev
c6535d27
 DEV=$ROOTFS/dev
 rm -rf $DEV
 mkdir -p $DEV
 mknod -m 666 $DEV/null c 1 3
 mknod -m 666 $DEV/zero c 1 5
 mknod -m 666 $DEV/random c 1 8
 mknod -m 666 $DEV/urandom c 1 9
 mkdir -m 755 $DEV/pts
 mkdir -m 1777 $DEV/shm
 mknod -m 666 $DEV/tty c 5 0
 mknod -m 600 $DEV/console c 5 1
 mknod -m 666 $DEV/tty0 c 4 0
 mknod -m 666 $DEV/full c 1 7
 mknod -m 600 $DEV/initctl p
 mknod -m 666 $DEV/ptmx c 5 2
e6b794e5
 ln -sf /proc/self/fd $DEV/fd
d94a027d
 
e857716d
 tar --numeric-owner --xattrs --acls -C $ROOTFS -c . | docker import - archlinux
4ff56bbd
 docker run -t archlinux echo Success.
d94a027d
 rm -rf $ROOTFS