]> git.wh0rd.org - home.git/blobdiff - .bin/custom-chroot
cvs-import: modernize a bit
[home.git] / .bin / custom-chroot
index 1306cb95928709137da5e234dbfbc08d5f84c878..f86e41df71e3f548edb7eda593250d35f711d7a4 100755 (executable)
@@ -1,12 +1,16 @@
 #!/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'
@@ -93,7 +97,7 @@ usage() {
 main() {
        bootstrap "$@"
 
-       local mounts=( proc sys tmp dev dev/pts 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
@@ -107,7 +111,7 @@ main() {
                -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
@@ -134,6 +138,8 @@ main() {
                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 \