docker-archlinux-daily/pacstrap-docker
Davide Depau 8df03273a2 Create /dev/null in new root to prevent hangs
gnupg post install script does "dirmngr </dev/null &>/dev/null".
Since "pacman -r" does not mount any filesystems but it does chroot
into the new root, /dev/null does not exist, making the script hang
forever.
2020-04-16 23:55:17 +02:00

31 lines
848 B
Bash
Executable file

#!/bin/bash
out() { printf "$1 $2\n" "${@:3}"; }
error() { out "==> ERROR:" "$@"; } >&2
die() { error "$@"; exit 1; }
(( $# )) || die "No root directory specified"
newroot=$1; shift
pacman_args=("${@:-base}")
if [[ $EUID -ne 0 ]]; then
die "This script must be run as root"
fi
[[ -d $newroot ]] || die "%s is not a directory" "$newroot"
echo 'Creating install root at %s' "$newroot"
mkdir -m 0755 -p "$newroot"/var/{cache/pacman/pkg,lib/pacman,log} "$newroot"/{dev,run,etc}
mkdir -m 1777 -p "$newroot"/tmp
mkdir -m 0555 -p "$newroot"/{sys,proc}
echo 'Creating /dev/null in new root'
mknod "$newroot/dev/null" c 1 3
echo 'Installing packages to %s' "$newroot"
if ! pacman -r "$newroot" -Sy --noconfirm "${pacman_args[@]}"; then
die 'Failed to install packages to new root'
fi
echo 'Deleting /dev/null from new root'
rm "$newroot/dev/null"