#!/bin/bash -e
bootstrap() {
- [[ -w / ]] || exec sudo env -uUNSHARE HOME="$HOME" "$0" "$@"
+ [[ $(id -u) -eq 0 ]] || exec sudo env -uUNSHARE HOME="$HOME" "$0" "$@"
if [[ -z ${UNSHARE} ]] ; then
mount_args=
if type -P unshare >&/dev/null ; then
- UNSHARE=true exec unshare -m -- "$0" "$@"
+ uargs=( -m )
+ unshare -u -- true >&/dev/null && uargs+=( -u )
+ unshare -i -- true >&/dev/null && uargs+=( -i )
+ unshare -p -- true >&/dev/null && uargs+=( -p -f --mount-proc )
+ UNSHARE=true exec unshare "${uargs[@]}" -- "$0" "$@"
fi
else
mount_args='-n'
main() {
bootstrap "$@"
- local mounts=( proc sys tmp dev dev/pts dev/shm usr/portage usr/portage/distfiles usr/local/src )
+ local mounts=( proc sys tmp dev dev/pts dev/shm run usr/portage usr/portage/distfiles usr/local/src )
local chroot=${0%/*}
case ${chroot} in
-u) cmd='umount' ;;
-m) mounts+=( "$2" ); shift ;;
-d) chroot=$(realpath "$2"); shift ;;
- -h) usage ;;
+ --help|-h) usage ;;
-*) echo "${0##*/}: unknown option $1"; exit 1 ;;
*) break ;;
esac
fi
fi
+ # Doubtful these settings we want to leak into the chroot.
+ unset ROOT PORTAGE_CONFIGROOT LD_LIBRARY_PATH
unset LS_COLORS # format changes over time
[[ $# -eq 0 ]] && set -- env HOME=/root /bin/bash -l
exec \