nixpkgs/modules/installer/tools/installer2/run-in-chroot.sh
Marc Weber 4b5864666e * refactoring kvm test and bootstrapping image.
expose makeInfo (used by test now)
  expose config hack
* Adding tests to release.nix
* fixes
* removing dependency on perl

refactoring details:
Move all configuration modules used by the NixOS installation test script
into one directory.

svn path=/nixos/trunk/; revision=18982
2009-12-15 23:26:52 +00:00

80 lines
1.5 KiB
Bash

#!/bin/sh
# helper script preparing chroot by mounting /dev /proc /sys etc
set -e
usage(){
cat << EOF
$SCRIPT OPTS or cmd
OPTS:
--prepare : only mount
--unprepare : only unmount
--debug : set -x
$SCRIPT --prepare: prepare chroot only
$SCRIPT --unprepare: unprepare chroot only
$SCRIPT command: run /bin/sh command in chroot
usage example run a shell in chroot:
$SCRIPT path-to-sh
EOF
exit 1
}
die(){ echo "!>> " $@; exit 1; }
INFO(){ echo "INFO: " $@; }
prepare(){
INFO "Enable networking: copying /etc/resolv.conf"
mkdir -m 0755 -p $mountPoint/etc
touch /etc/resolv.conf
cp /etc/resolv.conf $mountPoint/etc/
INFO "mounting /proc /sys /dev and / to /host-system"
mkdir -m 0755 -p $mountPoint/{dev,proc,sys,host-system}
mount --bind /dev $mountPoint/dev
mount --bind /proc $mountPoint/proc
mount --bind /sys $mountPoint/sys
mount --rbind / $mountPoint/host-system
}
unprepare(){
INFO "unmounting /proc /sys /dev and removing /host-system if empty"
for d in $mountPoint/{host-system,dev,proc,sys}; do
umount -l "$d"
done
# no -fr !!
rmdir $mountPoint/host-system
}
run_cmd(){
prepare
trap "unprepare" EXIT
chroot $mountPoint $@
}
SCRIPT="$(basename "$0")"
mountPoint=${mountPoint:-/mnt}
[ -d $mountPoint ] || die "$mountPoint is not a directory"
while [ "$#" > 0 ]; do
case $1 in
--debug) shift; set -x;;
-h|--help) shift; usage;;
--prepare) shift; prepare;;
--unprepare) shift; unprepare;;
*)
run_cmd "$@"
exit 0
;;
esac
done