4c5199075f
Don't run docker in interactive mode in the archlinux container build script. Recent versions of Docker error out with "cannot enable tty mode on non tty input" when being run non-interactively (such as in a cron job, Jenkins build, etc.) Signed-off-by: Jared Biel <jared.biel@bolderthinking.com> Upstream-commit: 4ff56bbddf23c64586920a8861f75c3d35413e49 Component: engine
92 lines
2.3 KiB
Bash
Executable File
92 lines
2.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Generate a minimal filesystem for archlinux and load it into the local
|
|
# docker as "archlinux"
|
|
# requires root
|
|
set -e
|
|
|
|
hash pacstrap &>/dev/null || {
|
|
echo "Could not find pacstrap. Run pacman -S arch-install-scripts"
|
|
exit 1
|
|
}
|
|
|
|
hash expect &>/dev/null || {
|
|
echo "Could not find expect. Run pacman -S expect"
|
|
exit 1
|
|
}
|
|
|
|
ROOTFS=$(mktemp -d ${TMPDIR:-/var/tmp}/rootfs-archlinux-XXXXXXXXXX)
|
|
chmod 755 $ROOTFS
|
|
|
|
# packages to ignore for space savings
|
|
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
|
|
|
|
expect <<EOF
|
|
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 }
|
|
}
|
|
EOF
|
|
|
|
arch-chroot $ROOTFS /bin/sh -c 'rm -r /usr/share/man/*'
|
|
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"
|
|
arch-chroot $ROOTFS /bin/sh -c "ln -s /usr/share/zoneinfo/UTC /etc/localtime"
|
|
echo 'en_US.UTF-8 UTF-8' > $ROOTFS/etc/locale.gen
|
|
arch-chroot $ROOTFS locale-gen
|
|
arch-chroot $ROOTFS /bin/sh -c 'echo "Server = https://mirrors.kernel.org/archlinux/\$repo/os/\$arch" > /etc/pacman.d/mirrorlist'
|
|
|
|
# udev doesn't work in containers, rebuild /dev
|
|
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
|
|
ln -sf /proc/self/fd $DEV/fd
|
|
|
|
tar --numeric-owner --xattrs --acls -C $ROOTFS -c . | docker import - archlinux
|
|
docker run -t archlinux echo Success.
|
|
rm -rf $ROOTFS
|