/usr/sbin/ltsp-chroot is in ltsp-server 5.4.2-6+deb7u1.
This file is owned by root:root, with mode 0o755.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 | #!/bin/sh
# copyright 2009 Vagrant Cascadian <vagrant@freegeek.org>,
# 2010 Alkis Georgopoulos <alkisg@gmail.com>,
# 2011 Wim Muskee <wimmuskee@gmail.com>, distributed under the
# terms of the GNU General Public License version 2 or any later version.
# generic functions
usage() {
cat <<EOF
$0 [OPTION] command
-a, --arch Architecture of the chroot. Default is arch of the host.
-b, --base Base of ltsp chroot. Default is /opt/ltsp if unspecified.
-c, --mount-package-cache Mount package cache dir from server.
-d, --mount-dev Mount /dev from server.
-h, --help This message.
-m, --mount-all Mount all server dirs mentioned in this message.
-p, --mount-proc Mount /proc from server.
-r, --copy-resolv-conf Copy /etc/resolv.conf from server.
EOF
}
default_options() {
if [ -n "$ROOT" ]; then
# If $ROOT contains a terminating /, remove it
ROOT=${ROOT%/}
# Extract $BASE and $ARCH from $ROOT in case they're needed afterwards
BASE=${ROOT%/*}
ARCH=${ROOT##*/}
else
BASE=${BASE:-/opt/ltsp}
# If $BASE contains a terminating /, remove it
BASE=${BASE%/}
if [ -z "$ARCH" ]; then
# Prefer the chroot that corresponds to the server arch,
# but if that doesn't exist, use the first one available.
ARCH=$(detect_arch)
if [ ! -d "$BASE/$ARCH" ]; then
for ARCH in $(find "$BASE/" -mindepth 1 -maxdepth 1 -type d ! -name images -printf "%f\n"); do
test -x "$BASE/$ARCH/bin/true" && break
done
fi
fi
ROOT="$BASE/$ARCH"
fi
}
pre_chroot() {
test -d "$ROOT" || die "ERROR: ltsp chroot not found: $ROOT"
if boolean_is_true "$MOUNT_ALL"; then
MOUNT_PACKAGE_CACHE=true
MOUNT_DEV=true
MOUNT_PROC=true
fi
if boolean_is_true "$MOUNT_PACKAGE_CACHE"; then
mount_package_cache
fi
if boolean_is_true "$MOUNT_DEV"; then
mark_mount --bind "/dev" "$ROOT/dev"
mark_mount -t devpts -o rw,noexec,nosuid,gid=5,mode=620 devpts "$ROOT/dev/pts"
fi
if boolean_is_true "$MOUNT_PROC"; then
mark_mount -t proc proc "$ROOT/proc"
fi
if boolean_is_true "$COPY_RESOLV_CONF"; then
cp /etc/resolv.conf "$ROOT/etc/"
fi
}
post_chroot() {
# Stop trapping
trap - 0 HUP INT QUIT KILL SEGV PIPE TERM
umount_marked
}
# distro specific functions
mount_package_cache() {
echo "Mounting the package cache is not available for your distribution."
}
# This also sources vendor functions and .conf file settings
. /usr/share/ltsp/ltsp-server-functions
# The command line parameters override the configuration file settings
if ! args=$(getopt -n "$0" -o +a:b:cdhmpr -l \
'arch:,base:,mount-package-cache,mount-dev,help,mount-all,mount-proc,copy-resolv-conf' -- "$@"); then
exit 1
fi
eval "set -- $args"
while true; do
case "$1" in
-a|--arch) shift; ARCH=$1 ;;
-b|--base) shift; BASE=$1 ;;
-c|--mount-package-cache) MOUNT_PACKAGE_CACHE=true ;;
-d|--mount-dev) MOUNT_DEV=true ;;
-h|--help) usage; exit 0 ;;
-m|--mount-all) MOUNT_ALL=true ;;
-p|--mount-proc) MOUNT_PROC=true ;;
-r|--copy-resolv-conf) COPY_RESOLV_CONF=true ;;
--) shift; break ;;
*) die "$0: Internal error!" ;;
esac
shift
done
# Finally, fall back to using default values for any unset options
default_options
require_root
trap "post_chroot" 0 HUP INT QUIT KILL SEGV PIPE TERM
pre_chroot
LTSP_HANDLE_DAEMONS=false chroot "$ROOT" "$@"
|