#!/bin/sh # fake/schroot-proposed -- emulate proposed mount behaviour for schroot # # Copyright © 2017 Simon McVittie # SPDX-License-Identifier: MIT # (see debian/copyright) set -e # /etc/schroot/default/fstab bind_dev=yes while true; do case "$1" in (--sbuild) shift # /etc/schroot/sbuild/fstab bind_dev=no ;; (*) break esac done CHROOT_PATH="$1" shift if test -z "$CHROOT_PATH" || test -z "$1"; then echo "Usage: $0 CHROOT COMMAND...">&2 exit 2 fi [ "$bind_dev" = no ] || mount --bind /dev "$CHROOT_PATH/dev" mount -t devpts -o rw,newinstance,ptmxmode=666,mode=620,gid=5 /dev/pts "$CHROOT_PATH/dev/pts" ls -l "$CHROOT_PATH/dev/ptmx" | sed -e 's/^/# fake-schroot: /' >&2 ls -l "$CHROOT_PATH/dev/pts/ptmx" | sed -e 's/^/# fake-schroot: /' >&2 mounted_ptmx=no if [ -e "$CHROOT_PATH/dev/pts/ptmx" ] && \ ! [ -L "$CHROOT_PATH/dev/ptmx" ]; then mount --bind "$CHROOT_PATH/dev/pts/ptmx" "$CHROOT_PATH/dev/ptmx" mounted_ptmx=yes fi mounted_console=no if stdin_tty="$(tty)"; then if [ ! -e "$CHROOT_PATH/dev/console" ]; then mknod -m700 "$CHROOT_PATH/dev/console" c 5 1 fi mount --bind "$stdin_tty" "$CHROOT_PATH/dev/console" mounted_console=yes fi ls -l "$CHROOT_PATH/dev/ptmx" | sed -e 's/^/# fake-schroot: /' >&2 ls -l "$CHROOT_PATH/dev/pts/ptmx" | sed -e 's/^/# fake-schroot: /' >&2 e=0 chroot "$CHROOT_PATH" "$@" || e=$? [ "$mounted_console" = no ] || umount "$CHROOT_PATH/dev/console" [ "$mounted_ptmx" = no ] || umount "$CHROOT_PATH/dev/ptmx" umount "$CHROOT_PATH/dev/pts" [ "$bind_dev" = no ] || umount "$CHROOT_PATH/dev" exit "$e"