From 5882bb8ca2b2233d1afcc479f0e54db4d5f2e942 Mon Sep 17 00:00:00 2001 From: Andreas Baumann Date: Thu, 22 Nov 2018 21:50:24 +0100 Subject: adapted to new pacman/pacstrap/arch-chroot (using a mountpoint) don't require to run on a 32-bit Archlinux, can build docker images on a 64-bit Archlinux now small fixes --- mkimage-arch.sh | 40 ++++++++++++++++++++++++++++------------ 1 file changed, 28 insertions(+), 12 deletions(-) mode change 100644 => 100755 mkimage-arch.sh diff --git a/mkimage-arch.sh b/mkimage-arch.sh old mode 100644 new mode 100755 index f751209..ecec8d6 --- a/mkimage-arch.sh +++ b/mkimage-arch.sh @@ -17,6 +17,7 @@ hash expect &>/dev/null || { export LANG="C.UTF-8" +MOUNTPOINT=$(mktemp -d ${TMPDIR:-/var/tmp}/mountpoint-archlinux-XXXXXXXXXX) ROOTFS=$(mktemp -d ${TMPDIR:-/var/tmp}/rootfs-archlinux-XXXXXXXXXX) chmod 755 $ROOTFS @@ -68,12 +69,22 @@ case "$arch" in DOCKER_IMAGE_NAME="armv${version}h/archlinux" ;; *) - PACMAN_CONF='./mkimage-arch-pacman.conf' - PACMAN_MIRRORLIST='Server = https://jpn.mirror.archlinux32.org/$arch/$repo' - PACMAN_EXTRA_PKGS='' + if pacman -Q archlinux32-keyring >/dev/null 2>&1; then + pacman-key --init + pacman-key --populate archlinux32 + else + echo "Could not find archlinux32-keyring. Please, install it and run pacman-key --populate archlinux32" + exit 1 + fi + PACMAN_CONF=$(mktemp ${TMPDIR:-/var/tmp}/pacman-conf-archlinux-XXXXXXXXX) + sed "s/Architecture.*/Architecture = i686/" './mkimage-arch-pacman.conf' > "${PACMAN_CONF}" + echo 'Server = http://archlinux32.andreasbaumann.cc/$arch/$repo' > mirrorlist32 + sed -i "s|/etc/pacman.d/mirrorlist|mirrorlist32|g" "${PACMAN_CONF}" + PACMAN_MIRRORLIST='Server = http://archlinux32.andreasbaumann.cc/$arch/$repo' + PACMAN_EXTRA_PKGS='archlinux32-keyring' EXPECT_TIMEOUT=60 - ARCH_KEYRING=archlinux - DOCKER_IMAGE_NAME=archlinux + ARCH_KEYRING=archlinux32 + DOCKER_IMAGE_NAME=archlinux32 ;; esac @@ -96,15 +107,18 @@ expect < $ROOTFS/etc/locale.gen -arch-chroot $ROOTFS locale-gen -arch-chroot $ROOTFS /bin/sh -c 'echo $PACMAN_MIRRORLIST > /etc/pacman.d/mirrorlist' +mount --bind $ROOTFS $MOUNTPOINT +arch-chroot $MOUNTPOINT /bin/sh -c 'rm -r /usr/share/man/*' +#arch-chroot $MOUNTPOINT /bin/sh -c "haveged -w 1024; pacman-key --init; pkill haveged; pacman -Rs --noconfirm haveged; pacman-key --populate $ARCH_KEYRING; pkill gpg-agent" +arch-chroot $MOUNTPOINT /bin/sh -c "pacman-key --init; pacman-key --populate $ARCH_KEYRING" +arch-chroot $MOUNTPOINT /bin/sh -c "ln -s /usr/share/zoneinfo/UTC /etc/localtime" +echo 'en_US.UTF-8 UTF-8' > $MOUNTPOINT/etc/locale.gen +arch-chroot $MOUNTPOINT locale-gen +sed -i "s/Architecture.*/Architecture = i686/" "$MOUNTPOINT/etc/pacman.conf" +arch-chroot $MOUNTPOINT /bin/sh -c 'echo $PACMAN_MIRRORLIST > /etc/pacman.d/mirrorlist' # udev doesn't work in containers, rebuild /dev -DEV=$ROOTFS/dev +DEV=$MOUNTPOINT/dev rm -rf $DEV mkdir -p $DEV mknod -m 666 $DEV/null c 1 3 @@ -120,7 +134,9 @@ 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 +umount $MOUNTPOINT tar --numeric-owner --xattrs --acls -C $ROOTFS -c . | docker import - $DOCKER_IMAGE_NAME docker run --rm -t $DOCKER_IMAGE_NAME echo Success. +rmdir $MOUNTPOINT rm -rf $ROOTFS -- cgit v1.2.3