mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-12-25 03:17:13 +00:00
59 lines
1.5 KiB
Bash
59 lines
1.5 KiB
Bash
|
#! @shell@
|
||
|
|
||
|
set -e
|
||
|
|
||
|
# Re-exec ourselves in a private mount namespace so that our bind
|
||
|
# mounts get cleaned up automatically.
|
||
|
if [ "$(id -u)" = 0 ]; then
|
||
|
if [ -z "$NIXOS_ENTER_REEXEC" ]; then
|
||
|
export NIXOS_ENTER_REEXEC=1
|
||
|
exec unshare --mount --uts -- "$0" "$@"
|
||
|
else
|
||
|
mount --make-rprivate /
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
mountPoint=/mnt
|
||
|
command=("bash" "--login")
|
||
|
system=/nix/var/nix/profiles/system
|
||
|
|
||
|
while [ "$#" -gt 0 ]; do
|
||
|
i="$1"; shift 1
|
||
|
case "$i" in
|
||
|
--root)
|
||
|
mountPoint="$1"; shift 1
|
||
|
;;
|
||
|
--system)
|
||
|
system="$1"; shift 1
|
||
|
;;
|
||
|
--help)
|
||
|
exec man nixos-enter
|
||
|
exit 1
|
||
|
;;
|
||
|
--command|-c)
|
||
|
command=("bash" "-c" "$1")
|
||
|
shift 1
|
||
|
;;
|
||
|
--)
|
||
|
command=("$@")
|
||
|
break
|
||
|
;;
|
||
|
*)
|
||
|
echo "$0: unknown option \`$i'"
|
||
|
exit 1
|
||
|
;;
|
||
|
esac
|
||
|
done
|
||
|
|
||
|
# Set up some bind mounts we'll want regardless of chroot or not
|
||
|
mkdir -m 0755 -p "$mountPoint/dev" "$mountPoint/proc" "$mountPoint/sys" "$mountPoint/run"
|
||
|
mount --rbind /dev "$mountPoint/dev"
|
||
|
mount -t proc none "$mountPoint/proc"
|
||
|
mount -t sysfs none "$mountPoint/sys"
|
||
|
mount -t tmpfs none "$mountPoint/run"
|
||
|
|
||
|
# Run the activation script. Set $LOCALE_ARCHIVE to supress some Perl locale warnings.
|
||
|
LOCALE_ARCHIVE=$system/sw/lib/locale/locale-archive chroot "$mountPoint" "$system/activate" >&2
|
||
|
|
||
|
exec chroot "$mountPoint" "${command[@]}"
|