#!/bin/bash # Generate a minimal filesystem for archlinux and load it into the local # docker as "archlinux" # requires root set -e PACSTRAP=$(which pacstrap) [ "$PACSTRAP" ] || { echo "Could not find pacstrap. Run pacman -S arch-install-scripts" exit 1 } EXPECT=$(which expect) [ "$EXPECT" ] || { echo "Could not find expect. Run pacman -S expect" exit 1 } ROOTFS=~/rootfs-arch-$$-$RANDOM mkdir $ROOTFS #packages to ignore for space savings PKGIGNORE=linux,jfsutils,lvm2,cryptsetup,groff,man-db,man-pages,mdadm,pciutils,pcmciautils,reiserfsprogs,s-nail,xfsprogs expect < $ROOTFS/etc/locale.gen < /etc/pacman.d/mirrorlist' # udev doesn't work in containers, rebuild /dev DEV=${ROOTFS}/dev mv ${DEV} ${DEV}.old 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 tar --numeric-owner -C $ROOTFS -c . | docker import - archlinux docker run -i -t archlinux echo Success. rm -rf $ROOTFS