#!/bin/sh
# fake/pbuilder-proposed -- emulate how pbuilder is proposed to chroot in
# future.
#
# Copyright © 2017 Simon McVittie
# SPDX-License-Identifier: MIT
# (see debian/copyright)

set -e

BUILDPLACE="$1"
shift
if test -z "$BUILDPLACE" || test -z "$1"; then
	echo "Usage: $0 CHROOT COMMAND...">&2
	exit 2
fi

devpts_options="noexec,nosuid,gid=5,mode=620"

mkdir -p "$BUILDPLACE/dev/pts"
if ! mount -t devpts none "$BUILDPLACE/dev/pts" -o "$devpts_options,newinstance,ptmxmode=666"; then
    mount -t devpts none "$BUILDPLACE/dev/pts" -o "$devpts_options"
fi

mounted_ptmx=no

if [ -e "$BUILDPLACE/dev/pts/ptmx" ] && \
        ! [ -L "$BUILDPLACE/dev/ptmx" ]; then
    chmod 666 "$BUILDPLACE/dev/pts/ptmx"
    mount --bind "$BUILDPLACE/dev/pts/ptmx" "$BUILDPLACE/dev/ptmx"
    mounted_ptmx=yes
fi

mounted_console=no

if stdin_tty="$(tty)"; then
    if [ ! -e "$BUILDPLACE/dev/console" ]; then
        mknod -m700 "$BUILDPLACE/dev/console" c 5 1
    fi

    mount --bind "$stdin_tty" "$BUILDPLACE/dev/console"
    mounted_console=yes
fi

ls -l "$BUILDPLACE/dev/ptmx" | sed -e 's/^/# fake-pbuilder: /' >&2
ls -l "$BUILDPLACE/dev/pts/ptmx" | sed -e 's/^/# fake-pbuilder: /' >&2

e=0
chroot "$BUILDPLACE" "$@" || e=$?

[ "$mounted_console" = no ] || umount "$BUILDPLACE/dev/console"
[ "$mounted_ptmx" = no ] || umount "$BUILDPLACE/dev/ptmx"
umount "$BUILDPLACE/dev/pts"
exit "$e"
