paul@34 | 1 | #!/bin/sh |
paul@34 | 2 | |
paul@34 | 3 | # Configuration: |
paul@34 | 4 | if [ -e userinstall-defaults ]; then |
paul@34 | 5 | . "$PWD/userinstall-defaults" |
paul@34 | 6 | elif [ -e /etc/default/userinstall ]; then |
paul@34 | 7 | . /etc/default/userinstall |
paul@34 | 8 | else |
paul@34 | 9 | echo "No defaults found for userinstall." 1>&2 |
paul@34 | 10 | exit 1 |
paul@34 | 11 | fi |
paul@34 | 12 | |
paul@50 | 13 | # Root installations benefit from having the proc and sys filesystems mounted. |
paul@50 | 14 | |
paul@34 | 15 | mount -o bind /proc "$PACKAGEROOT/proc" |
paul@34 | 16 | mount -o bind /sys "$PACKAGEROOT/sys" |
paul@50 | 17 | |
paul@34 | 18 | if [ "$1" = '--dev' ]; then |
paul@34 | 19 | DEV=$1 |
paul@34 | 20 | shift 1 |
paul@50 | 21 | |
paul@50 | 22 | # Backup any existing device directory. |
paul@50 | 23 | |
paul@50 | 24 | if [ ! -e "$PACKAGEROOT/dev.orig" ] && [ -e "$PACKAGEROOT/dev" ]; then |
paul@50 | 25 | mv "$PACKAGEROOT/dev" "$PACKAGEROOT/dev.orig" |
paul@50 | 26 | fi |
paul@50 | 27 | |
paul@50 | 28 | # Make an empty device directory if appropriate. |
paul@50 | 29 | |
paul@50 | 30 | if [ ! -e "$PACKAGEROOT/dev" ] || rmdir "$PACKAGEROOT/dev" ; then |
paul@50 | 31 | mkdir "$PACKAGEROOT/dev" |
paul@50 | 32 | mount -o bind /dev "$PACKAGEROOT/dev" |
paul@34 | 33 | else |
paul@50 | 34 | echo "Devices may already be defined for the installation." 1>&2 |
paul@34 | 35 | fi |
paul@51 | 36 | |
paul@51 | 37 | # Record this process's usage of the devices. |
paul@51 | 38 | |
paul@51 | 39 | touch "$PACKAGEROOT/dev.userinstall.$$" |
paul@51 | 40 | |
paul@50 | 41 | elif [ ! -e "$PACKAGEROOT/dev" ]; then |
paul@51 | 42 | cat 1>&2 <<EOF |
paul@50 | 43 | Devices are not defined for the installation. |
paul@50 | 44 | To mount the host system's devices, use the --dev option. |
paul@50 | 45 | EOF |
paul@50 | 46 | exit 1 |
paul@34 | 47 | fi |
paul@50 | 48 | |
paul@50 | 49 | # Enter the installation. |
paul@50 | 50 | |
paul@58 | 51 | /usr/sbin/chroot "$PACKAGEROOT" $* |
paul@50 | 52 | |
paul@50 | 53 | # Unmount the filesystems. |
paul@50 | 54 | |
paul@34 | 55 | umount "$PACKAGEROOT/proc" |
paul@34 | 56 | umount "$PACKAGEROOT/sys" |
paul@50 | 57 | |
paul@52 | 58 | if [ "$DEV" ] ; then |
paul@52 | 59 | rm "$PACKAGEROOT/dev.userinstall.$$" |
paul@51 | 60 | |
paul@51 | 61 | for FILENAME in "$PACKAGEROOT/dev.userinstall."* ; do |
paul@51 | 62 | |
paul@51 | 63 | # If the pattern does not expand to produce filenames, no such |
paul@51 | 64 | # files are present. |
paul@51 | 65 | |
paul@51 | 66 | if [ "$FILENAME" = "$PACKAGEROOT/dev.userinstall.*" ]; then |
paul@51 | 67 | umount "$PACKAGEROOT/dev" && rmdir "$PACKAGEROOT/dev" |
paul@51 | 68 | if [ -e "$PACKAGEROOT/dev.orig" ] && [ ! -e "$PACKAGEROOT/dev" ]; then |
paul@51 | 69 | mv "$PACKAGEROOT/dev.orig" "$PACKAGEROOT/dev" |
paul@51 | 70 | fi |
paul@51 | 71 | fi |
paul@51 | 72 | break |
paul@51 | 73 | done |
paul@34 | 74 | fi |