48 lines
953 B
Bash
Executable file
48 lines
953 B
Bash
Executable file
#!/bin/sh
|
|
|
|
set -e
|
|
|
|
[ "$(id -u)" = 0 ] || DOAS="${DOAS:-doas}"
|
|
[ "$unshared" = 1 ] || exec $DOAS env unshared=1 unshare -m $0 "$@"
|
|
|
|
bindpoints="/etc/resolv.conf"
|
|
user="patrycja"
|
|
command="ash -l"
|
|
|
|
while getopts "be:u:c:" opt; do
|
|
case $opt in
|
|
'b') bindpoints="
|
|
$bindpoints
|
|
/home/patrycja/aports
|
|
/home/patrycja/packages
|
|
/home/patrycja/.abuild
|
|
" ;;
|
|
'e') bindpoints="$bindpoints $OPTARG" ;;
|
|
'u') user=$OPTARG ;;
|
|
'c') command=$OPTARG ;;
|
|
*) echo "unknown $opt" ;;
|
|
esac
|
|
done
|
|
shift $(( $OPTIND - 1 ))
|
|
|
|
if [ ! -d "$1" ]; then
|
|
echo "no such directory: $1"
|
|
exit 1
|
|
fi
|
|
|
|
mount -t devtmpfs devtmpfs $1/dev
|
|
mount -t tmpfs shm $1/dev/shm
|
|
moutn -t devpts devpts $1/dev/pts
|
|
mount -t sysfs sysfs $1/sys
|
|
mount -t proc proc $1/proc
|
|
mount -t tmpfs tmpfs $1/tmp
|
|
for point in $bindpoints; do
|
|
if [ -f $point ]; then
|
|
touch $1$point
|
|
else
|
|
mkdir -p $1$point
|
|
fi
|
|
mount --bind $point $1$point
|
|
done
|
|
|
|
chroot $1 /bin/sh -c "su $user -c '$command'"
|