/usr/sbin/ltsp-chroot is in ltsp-server 5.3.7-0ubuntu2.
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 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 | #!/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
}
analyze_command_line() {
local done_opts
while [ -z "$done_opts" ] ; do
case "$1" in
-a|--arch) ARCH=$(echo $2 | sed -e "s,',,g") ; shift 2 ;;
-b|--base) BASE=$(echo $2 | sed -e "s,',,g") ; shift 2 ;;
-c|--mount-package-cache) MOUNT_PACKAGE_CACHE=true ; shift 1 ;;
-d|--mount-dev) MOUNT_DEV=true; shift 1 ;;
-h|--help) usage ; exit 0 ;;
-m|--mount-all) MOUNT_ALL=true; shift 1 ;;
-p|--mount-proc) MOUNT_PROC=true; shift 1 ;;
-r|--copy-resolv-conf) COPY_RESOLV_CONF=true; shift 1 ;;
--) shift ; done_opts=true ;;
*) die "$0: Internal error!" ;;
esac
done
COMMAND="$@"
}
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 dir in "$BASE"/*/; do
# If it's not "images" and it's not "*" because of no subdirs
if [ -n "${dir##*/images/}" ] && [ -d "$dir" ]; then
# Keep only the subdir name
ARCH=${dir%/}
ARCH=${ARCH##*/}
break
fi
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."
}
# Main
# Parse command line arguments
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
# Source the ltsp server functions
. /usr/share/ltsp/ltsp-server-functions
# First, include the configuration file, if it exists
if [ -f /etc/ltsp/ltsp-chroot.conf ]; then
. /etc/ltsp/ltsp-chroot.conf
fi
# The command line parameters override the configuration file settings
analyze_command_line $ARGS
# 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
eval LTSP_HANDLE_DAEMONS=false chroot "$ROOT" $COMMAND
|