[debian-edu-commits] [Git][debian-edu/debian-edu-config][master] 5 commits: Add LTSP related tools and manual pages

Wolfgang Schweer (@schweer-guest) gitlab at salsa.debian.org
Wed Sep 29 21:24:51 BST 2021



Wolfgang Schweer pushed to branch master at Debian Edu / debian-edu-config


Commits:
ae94b67b by Wolfgang Schweer at 2021-09-29T21:29:49+02:00
Add LTSP related tools and manual pages

sbin/debian-edu-ltsp-chroot: Used for chroot maintenance.
debian-edu-ltsp-ipxe: Wrapper for 'ltsp ipxe' command.
sbin/share/man/man8/debian-edu-ltsp-chroot.8
share/man/man8/debian-edu-ltsp-ipxe.8

Signed-off-by: Wolfgang Schweer <wschweer at arcor.de>

- - - - -
aa5348ea by Wolfgang Schweer at 2021-09-29T22:04:03+02:00
Improve sbin/debian-edu-ltsp-install concerning chroots

  Relocate and keep X2Go thin client chroots.
  Unset temporary directory variables instead of manually creating directories and
  mounting tmpfs.
  Add/adjust iPXE menu item names.
  Care for complete sources list in chroots.
  Use 'no' as default for the --diskless_workstation option.

Adjust to match above changes
  share/debian-edu-config/tools/run-at-firstboot
  share/man/man8/debian-edu-ltsp-install.8
  share/debian-edu-config/tools/copy-host-keytab

Signed-off-by: Wolfgang Schweer <wschweer at arcor.de>

- - - - -
335ebc8d by Wolfgang Schweer at 2021-09-29T22:18:26+02:00
Improve share/debian-edu-config/tools/{improve-desktop-l10n,install-task-pkgs}

  Check if package is already installed. Avoids useless noise if cf-agent is
  also run after system installation, e.g. upgrades.

  Whitespace cleanup.

Signed-off-by: Wolfgang Schweer <wschweer at arcor.de>

- - - - -
64213e84 by Wolfgang Schweer at 2021-09-29T22:21:28+02:00
Remove cruft from debian/debian-edu-config.postrm

Signed-off-by: Wolfgang Schweer <wschweer at arcor.de>

- - - - -
82a8cdac by Wolfgang Schweer at 2021-09-29T22:23:39+02:00
Cleanup debian/debian-edu-config.lintian-overrides

Signed-off-by: Wolfgang Schweer <wschweer at arcor.de>

- - - - -


14 changed files:

- Makefile
- debian/changelog
- debian/debian-edu-config.lintian-overrides
- debian/debian-edu-config.postrm
- + sbin/debian-edu-ltsp-chroot
- sbin/debian-edu-ltsp-install
- + sbin/debian-edu-ltsp-ipxe
- share/debian-edu-config/tools/copy-host-keytab
- share/debian-edu-config/tools/improve-desktop-l10n
- share/debian-edu-config/tools/install-task-pkgs
- share/debian-edu-config/tools/run-at-firstboot
- + share/man/man8/debian-edu-ltsp-chroot.8
- share/man/man8/debian-edu-ltsp-install.8
- + share/man/man8/debian-edu-ltsp-ipxe.8


Changes:

=====================================
Makefile
=====================================
@@ -6,7 +6,9 @@ PROGS = \
 	debian-edu-copy-pki
 
 SPROGS = debian-edu-fsautoresize \
+	debian-edu-ltsp-chroot \
 	debian-edu-ltsp-install \
+	debian-edu-ltsp-ipxe \
 	debian-edu-pxeinstall \
 	debian-edu-restart-services \
 	debian-edu-test-install \


=====================================
debian/changelog
=====================================
@@ -1,3 +1,30 @@
+debian-edu-config (2.12.4) UNRELEASED; urgency=medium
+
+  * Add LTSP related tools and manual pages:
+    - sbin/debian-edu-ltsp-chroot: Used for chroot maintenance.
+    - sbin/debian-edu-ltsp-ipxe: Wrapper for 'ltsp ipxe' command.
+    - share/man/man8/debian-edu-ltsp-chroot.8
+    - share/man/man8/debian-edu-ltsp-ipxe.8
+  * Improve sbin/debian-edu-ltsp-install concerning chroots:
+    - Relocate and keep X2Go thin client chroots.
+    - Unset temporary directory variables instead of manually creating
+      directories and mounting tmpfs.
+    - Add/adjust iPXE menu item names.
+    - Care for complete sources list in chroots.
+    - Use 'no' as default for the --diskless_workstation option.
+  * Adjust to match above changes:
+    - share/debian-edu-config/tools/run-at-firstboot
+    - share/man/man8/debian-edu-ltsp-install.8
+    - share/debian-edu-config/tools/copy-host-keytab
+  * share/debian-edu-config/tools/{improve-desktop-l10n,install-task-pkgs}:
+    - Check if package is already installed. Avoids useless noise if cf-agent is
+      also run after system installation, e.g. upgrades.
+    - Whitespace cleanup.
+  * debian/debian-edu-config.postrm: Remove cruft.
+  * debian/debian-edu-config.lintian-overrides: Cleanup, thanks lintian.
+
+ -- Wolfgang Schweer <wschweer at arcor.de>  Tue, 28 Sep 2021 12:45:57 +0200
+
 debian-edu-config (2.12.3) unstable; urgency=medium
 
   [ Wolfgang Schweer ]


=====================================
debian/debian-edu-config.lintian-overrides
=====================================
@@ -8,8 +8,6 @@ debian-edu-config binary: debconf-is-not-a-registry usr/share/debian-edu-config/
 debian-edu-config binary: debconf-is-not-a-registry usr/share/debian-edu-config/d-i/pre-pkgsel
 debian-edu-config binary: debconf-is-not-a-registry usr/share/debian-edu-config/tools/kerberos-kdc-init
 debian-edu-config binary: debconf-is-not-a-registry usr/share/debian-edu-config/tools/edu-icinga-setup
-debian-edu-config binary: remove-of-unknown-diversion usr/bin/gtick postrm:18
-debian-edu-config binary: uses-dpkg-database-directly usr/sbin/debian-edu-ltsp-install
 debian-edu-config binary: debconf-is-not-a-registry usr/share/debian-edu-config/tools/run-at-firstboot
 debian-edu-config binary: missing-systemd-service-for-init.d-script chromium-ldapconf
 debian-edu-config binary: missing-systemd-service-for-init.d-script enable-nat


=====================================
debian/debian-edu-config.postrm
=====================================
@@ -12,12 +12,6 @@ case "$1" in
 		/etc/init.d/enable-nat stop || exit $?
 	    fi
 	fi
-	# cleanup from debian-edu-ltsp-audiodivert
-	if dpkg --compare-versions "$2" le "1.931~" && [ -f /usr/bin/gtick.ltsp ] ; then
-	    rm /usr/bin/gtick
-	    dpkg-divert --package debian-edu-config --rename --remove /usr/bin/gtick
-	    rm /usr/bin/gtick.ltsp
-	fi
 	if [ -e /var/lib/cfengine3/inputs/debian-edu ] ; then
 	    rm -rf /var/lib/cfengine3/inputs/debian-edu
 	    rm -rf /var/lib/cfengine3/inputs/


=====================================
sbin/debian-edu-ltsp-chroot
=====================================
@@ -0,0 +1,190 @@
+#!/bin/sh
+
+# Based upon the 'ltsp-chroot' script and 'ltsp-server-functions', both shipped
+# with package 'ltsp-server 5.18.12-3' (Debian Buster).
+
+# Original information about authors and copyright:
+# copyright 2009 Vagrant Cascadian <vagrant at freegeek.org>,
+# 2010 Alkis Georgopoulos <alkisg at gmail.com>,
+# 2011 Wim Muskee <wimmuskee at gmail.com>, distributed under the
+# terms of the GNU General Public License v2 or any later version.
+
+# Reduced to the bare minimum and adjusted to be useful for Debian Edu Bullseye.
+# Also, integrated everything into one tool to be usable standalone.
+# 2021 Wolfgang Schweer <wschweer at arcor.de>, distributed under the
+# terms of the GNU General Public License v2 or any later version.
+
+
+# generic functions
+
+usage() {
+cat <<EOF
+Usage: $0 [OPTION] command
+
+Chroots into a specified LTSP chroot. Optional arguments can be provided to customize
+the chroot location as well as extra mounts.
+
+Options:
+  -b, --base[=PATH]             Sets base of target chroot. Defaults to /srv/ltsp/dlw if unspecified.
+  -d, --mount-dev               If set, mounts the server dev and devpts directories to the chroot
+                                previous to chrooting.
+  -h, --help                    Displays the debian-edu-ltsp-chroot help message.
+  -p, --mount-proc              If set, mounts the server /proc to the chroot previous to chrooting.
+  -m, --mount-all               If set, does both --mount-dev and --mount-proc previous to chrooting.
+      --version                 Output version information and exit.
+EOF
+}
+
+debian_edu_version() {
+ . /etc/debian-edu/config
+ echo $VERSION
+}
+
+default_options() {
+    BASE=${BASE:-/srv/ltsp/dlw}
+    # If $BASE contains a terminating /, remove it
+    BASE=${BASE%/}
+}
+
+pre_chroot() {
+    test -d "$BASE" || die "ERROR: ltsp chroot not found: $BASE"
+
+    if boolean_is_true "$MOUNT_ALL"; then
+        MOUNT_DEV=true
+        MOUNT_PROC=true
+    fi
+    if boolean_is_true "$MOUNT_DEV"; then
+        mark_mount --bind "/dev" "$BASE/dev"
+        mark_mount -t devpts -o rw,noexec,nosuid,gid=5,mode=620 devpts "$BASE/dev/pts"
+    fi
+    if boolean_is_true "$MOUNT_PROC"; then
+        mark_mount -t proc proc "$BASE/proc"
+    fi
+}
+
+post_chroot() {
+    # Stop trapping
+    trap - 0 HUP INT QUIT KILL SEGV PIPE TERM
+    umount_marked
+}
+
+# Next functions are taken from ltsp-server-functions).
+
+warn()
+{
+    printf "%s\n" "$*" >&2
+}
+
+die() {
+    warn "$@"
+    exit 1
+}
+
+boolean_is_true(){
+    case $1 in
+       # match all cases of true|y|yes
+       [Tt][Rr][Uu][Ee]|[Yy]|[Yy][Ee][Ss]) return 0 ;;
+       *) return 1 ;;
+    esac
+}
+
+require_root()
+{
+    if [ ${UID:-$(id -u)} -ne 0 ]; then
+        die "Superuser privileges are needed."
+    fi
+}
+
+# Remember mounted dirs so that it's easier to unmount them with a single call
+# to umount_marked. They'll be unmounted in reverse order.
+# Use the normal mount syntax, e.g.
+#   mark_mount -t proc proc "$ROOT/proc"
+mark_mount() {
+    local dir old_marked_mounts
+
+    # The last parameter is the dir we need to remember to unmount
+    dir=$(eval "echo \$$#")
+    # If the user presses Ctrl+C while mount is still running, there's
+    # a possibility that it will succeed but it won't go inside the if.
+    # So mark the dir before mount.
+    # Use newlines to separate dirs, in case they contain spaces
+    old_marked_mounts="$MARKED_MOUNTS"
+    if [ -z "$MARKED_MOUNTS" ]; then
+        MARKED_MOUNTS="$dir"
+    else
+        MARKED_MOUNTS="$dir
+$MARKED_MOUNTS"
+    fi
+    if ! mount "$@"; then
+        MARKED_MOUNTS="$old_marked_mounts"
+        die "Could not mount $dir."
+    fi
+}
+
+umount_marked() {
+    [ -z "$MARKED_MOUNTS" ] && return 0
+
+    # Wait until all buffers are flushed, otherwise umount might fail
+    sync
+    echo "$MARKED_MOUNTS" | while read dir; do
+        if ! umount "$dir"; then
+            warn "Couldn't unmount $dir."
+        fi
+    done
+    unset MARKED_MOUNTS
+}
+
+umount_marked() {
+    [ -z "$MARKED_MOUNTS" ] && return
+
+    # Wait until all buffers are flushed, otherwise umount might fail
+    sync
+    echo "$MARKED_MOUNTS" | while read dir; do
+        # binfmt_misc might need to be unmounted manually, see LP #534211
+        if [ "$dir%/proc}" != "$dir" ] && 
+            [ -d "$dir/sys/fs/binfmt_misc" ] && [ -f "$dir/mounts" ] &&
+            grep -q "^binfmt_misc $dir/sys/fs/binfmt_misc" "$dir/mounts"; then
+            if ! umount "$dir/sys/fs/binfmt_misc"; then
+                echo "Couldn't unmount $dir/sys/fs/binfmt_misc." >&2
+            fi
+        fi
+        if ! umount "$dir"; then
+            echo "Couldn't unmount $dir." >&2
+        fi
+    done
+    unset MARKED_MOUNTS
+}
+
+# The command line parameters override the configuration file settings
+if ! args=$(getopt -n "$0" -o +a:b:dhmp -l \
+    'base:,mount-dev,help,mount-all,mount-proc,version' -- "$@"); then
+    exit 1
+fi
+eval "set -- $args"
+while true; do
+    case "$1" in
+        -b|--base) shift; BASE=$1 ;;
+        -d|--mount-dev) MOUNT_DEV=true ;;
+        -h|--help) usage; exit 0 ;;
+        -m|--mount-all) MOUNT_ALL=true ;;
+        -p|--mount-proc) MOUNT_PROC=true ;;
+        --version) debian_edu_version; exit 0 ;;
+        --) 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
+
+# Unset temporary directory variables to avoid problems when directory
+# is missing inside the chroot. https://bugs.debian.org/765443
+unset TMPDIR TEMP TEMPDIR TMP
+
+chroot "$BASE" "$@"


=====================================
sbin/debian-edu-ltsp-install
=====================================
@@ -17,7 +17,7 @@
 # Author/Copyright:	Wolfgang Schweer <wschweer at arcor.de>
 # Licence:		GPL2+
 # first edited:	2019-11-21
-# last edited:	2021-09-19
+#version=2021-09-28
 
 set -e
 
@@ -43,13 +43,13 @@ workstations and thin clients.
 
 --dns_server defaults to 10.0.2.2 if omitted.
 
---diskless_workstation defaults to yes if omitted.
+--diskless_workstation defaults to no if omitted.
 
 --dlw        used to create a diskless workstation LTSP chroot (root fs via NFS), default is no.
 
---img        takes effect for LTSP diskless workstation chroot setup, default is no.
+--img        takes effect for LTSP diskless workstation and X2Go thin client chroot setup, default is no.
 
---desktop    takes effect for a LTSP diskless workstation chroot setup, default is xfce.
+--desktop    takes effect for LTSP diskless workstation chroot setup, default is xfce.
              Other values: cinnamon, gnome, kde, lxde, lxqt, mate.
              (And 'none' for modular installations - also useful for testing).
 
@@ -59,22 +59,21 @@ workstations and thin clients.
     display: x2gothinclient running in display mode.
     desktop: x2gothinclient running in minidesktop mode.
 
-Example 1: 'debian-edu-ltsp-install --arch amd64' creates diskless workstation support.
+Example 1: 'debian-edu-ltsp-install --diskless_workstation yes' creates diskless workstation support (SquashFS image).
 
-Example 2: 'debian-edu-ltsp-install --arch amd64 --dist bullseye --thin_type bare' creates diskless workstation
+Example 2: 'debian-edu-ltsp-install --arch amd64 --diskless_workstation yes --thin_type bare' creates diskless workstation
             and 64-bit thin client support. LTSP client boot defaults to diskless workstation.
 
-Example 3: 'debian-edu-ltsp-install --arch i386 --diskless_workstation no --thin_type bare' creates
-            additional 32-bit thin client support.
+Example 3: 'debian-edu-ltsp-install --arch i386 --thin_type bare' creates additional 32-bit thin client support.
 
 Example 4: 'debian-edu-ltsp-install --diskless_workstation yes' updates the diskless workstation SquashFS image.
 
-Example 5: 'debian-edu-ltsp-install --dlw yes --diskless_workstation no' creates a diskless workstation LTSP chroot.
+Example 5: 'debian-edu-ltsp-install --dlw yes' creates a diskless workstation LTSP chroot.
             Please note that about 15 GiB of additional disk space is needed. In the default case, run the commands
             'lvresize -L+15G /dev/vg_system/srv+ltsp' and 'resize2fs /dev/vg_system/srv+ltsp'.
 
-Example 6: 'debian-edu-ltsp-install --dlw yes --diskless_workstation no --img yes' creates diskless workstation
-            LTSP chroot and the related SquashFS image. About 5 GiB more additional disk space is needed.
+Example 6: 'debian-edu-ltsp-install --dlw yes --img yes' creates diskless workstation LTSP chroot and
+           the related SquashFS image. Another 5 GiB more additional disk space is needed.
 
 This script applies to a system with two NICs on the internal backbone network.
 
@@ -95,11 +94,12 @@ fi
 # Set default values.
 arch="$(dpkg --print-architecture)"
 dns_server="10.0.2.2"
-diskless_workstation="yes"
+diskless_workstation="no"
 thin_type=""
 dlw="no"
 img="no"
 desktop="xfce"
+#version="$version"
 
 while [ $# -gt 0 ] ; do
   case "$1" in
@@ -147,41 +147,58 @@ if [ ! -d /etc/ltsp/client ] ; then
 # Documentation=man:ltsp.conf(5)
 
 [server]
-# Provide a full menu name for thin/bare-amd64.img
-IPXE_BARE_AMD64_IMG="Plain X2Go Thin Client (64-Bit)"
-# Provide a full menu name for thin/bare-i386.img
-IPXE_BARE_I386_IMG="Plain X2Go Thin Client (very old machines, 32-Bit)"
-
-# Provide a full menu name for thin/display-amd64.img
-IPXE_DISPLAY_AMD64_IMG="Display Mode X2Go Thin Client (64-Bit)"
-# Provide a full menu name for thin/display-i386.img
-IPXE_DISPLAY_I386_IMG="Display Mode X2Go Thin Client (very old machines, 32-Bit)"
-
-# Provide a full menu name for thin/desktop-amd64.img
-IPXE_DESKTOP_AMD64_IMG="Desktop Mode X2Go Thin Client (64-Bit)"
+# Provide a full menu name for x2go-bare-amd64.img
+IPXE_X2GO_BARE_AMD64_IMG="Plain X2Go Thin Client (64-Bit)"
+# Provide a full menu name for x2go-bare-i386.img
+IPXE_X2GO_BARE_I386_IMG="Plain X2Go Thin Client (32-Bit)"
+
+# Provide a full menu name for x2go-bare-amd64
+IPXE_X2GO_BARE_AMD64="Plain X2Go Thin Client (64-Bit, NFS rootfs)"
+# Provide a full menu name for x2go-bare-i386
+IPXE_X2GO_BARE_I386="Plain X2Go Thin Client (32-Bit, NFS rootfs)"
+
+# Provide a full menu name for x2go-display-amd64.img
+IPXE_X2GO_DISPLAY_AMD64_IMG="Display Mode X2Go Thin Client (64-Bit)"
+# Provide a full menu name for x2go-display-i386.img
+IPXE_X2GO_DISPLAY_I386_IMG="Display Mode X2Go Thin Client (32-Bit)"
+
+# Provide a full menu name for x2go-display-amd64
+IPXE_X2GO_DISPLAY_AMD64="Display Mode X2Go Thin Client (64-Bit, NFS rootfs)"
+# Provide a full menu name for x2go-display-i386
+IPXE_X2GO_DISPLAY_I386="Display Mode X2Go Thin Client (32-Bit, NFS rootfs)"
+
+# Provide a full menu name for x2go-desktop-amd64.img
+IPXE_X2GO_DESKTOP_AMD64_IMG="Desktop Mode X2Go Thin Client (64-Bit)"
 # Provide a full menu name for thin/desktop-i386.img
-IPXE_DESKTOP_I386_IMG="Desktop Mode X2Go Thin Client (very old machines, 32-Bit)"
+IPXE_X2GO_DESKTOP_I386_IMG="Desktop Mode X2Go Thin Client (32-Bit)"
+
+# Provide a full menu name for x2go-desktop-amd64
+IPXE_X2GO_DESKTOP_AMD64="Desktop Mode X2Go Thin Client (64-Bit, NFS rootfs)"
+# Provide a full menu name for thin/desktop-i386
+IPXE_X2GO_DESKTOP_I386="Desktop Mode X2Go Thin Client (32-Bit, NFS rootfs)"
 
 # Provide a full menu name for x86_64.img
-IPXE_X86_64_IMG="Diskless Workstation (64-Bit)"
+IPXE_X86_64_IMG="Diskless Workstation (server's SquashFS image)"
 # Provide a full menu name for x86_32.img
-IPXE_X86_32_IMG="Diskless Workstation (32-Bit)"
+IPXE_X86_32_IMG="Diskless Workstation (32-Bit, server's SquashFS image)"
 
 # Provide a full menu name for dlw.img
-IPXE_DLW_IMG="Diskless Workstation (chroot SquashFS image)"
+IPXE_DLW_IMG="Diskless Workstation (SquashFS image from chroot)"
 # Provide a full menu name for dlw
-IPXE_DLW="Diskless Workstation (chroot NFS rootfs)"
+IPXE_DLW="Diskless Workstation (Chroot as NFS rootfs)"
 
 ##### Set default boot value ######
 # Default value is x86_64 or x86_32 (arch specific, Diskless Workstation)
 # Plain X2Go Thin Client (64-Bit)
-#DEFAULT_IMAGE="bare-amd64"
+#DEFAULT_IMAGE="x2go-bare-amd64"
 # Plain X2Go Thin Client (32-Bit)
-#DEFAULT_IMAGE="bare-i386"
+#DEFAULT_IMAGE="x2go-bare-i386"
 # Display Mode X2Go Thin Client (64-Bit)
-#DEFAULT_IMAGE="display-amd64"
+#DEFAULT_IMAGE="x2go-display-amd64"
 # Desktop Mode X2Go Thin Client (64-Bit)
-#DEFAULT_IMAGE="desktop-amd64"
+#DEFAULT_IMAGE="x2go-desktop-amd64"
+# Diskless Workstation (Chroot as NFS rootfs)
+#DEFAULT_IMAGE="dlw"
 # Install Debian Edu/amd64 (64-Bit)
 #DEFAULT_IMAGE="amd64"
 # Install Debian Edu/i386  (32-Bit)
@@ -410,62 +427,62 @@ fi
 
 # Create thin client chroot and generate image.
 export DEBIAN_FRONTEND=noninteractive
-if ! [ "" == "$thin_type" ] && [ ! -d /srv/ltsp/thin/"$thin_type"-"$arch"/etc/ltsp ] ; then
-	mkdir -p /srv/ltsp/thin/"$thin_type"-"$arch"
+if ! [ "" == "$thin_type" ] && [ ! -d /srv/tftp/ltsp/x2go-"$thin_type"-"$arch"/etc/ltsp ] ; then
+	mkdir -p /srv/tftp/ltsp/x2go-"$thin_type"-"$arch"
 	# Install common thin client packages.
 debootstrap --arch="$arch" --no-check-gpg --variant=minbase --include=linux-image-"$kernel_arch" \
-	"$dist" /srv/ltsp/thin/"$thin_type"-"$arch" "$mirror"
-	chroot /srv/ltsp/thin/"$thin_type"-"$arch"/ apt clean
-	mount /dev/pts -t devpts /srv/ltsp/thin/"$thin_type"-"$arch"/dev/pts
-	mount proc -t proc /srv/ltsp/thin/"$thin_type"-"$arch"/proc
-	mount tmpfs -t tmpfs /srv/ltsp/thin/"$thin_type"-"$arch"/tmp
-	mkdir -p /srv/ltsp/thin/"$thin_type"-"$arch"/tmp/user/0
+	"$dist" /srv/ltsp/x2go-"$thin_type"-"$arch" "$mirror"
+	# Unset temporary directory variables to avoid problems when directory
+	# is missing inside the chroot. https://bugs.debian.org/765443
+	unset TMPDIR TEMP TEMPDIR TMP
+	chroot /srv/ltsp/x2go-"$thin_type"-"$arch"/ apt clean
+	# Care for complete sources list (security, also nonfree for possible needed firmware).
+	chroot /srv/ltsp/x2go-"$thin_type"-"$arch"/ sh -c "cp /usr/share/doc/apt/examples/sources.list > /etc/apt/sources.list.d/full.list"
+	mount /dev/pts -t devpts /srv/ltsp/x2go-"$thin_type"-"$arch"/dev/pts
+	mount proc -t proc /srv/ltsp/x2go-"$thin_type"-"$arch"/proc
 	if [ "true" == "$BD_ISO" ] ; then
-		mkdir -p /srv/ltsp/thin/"$thin_type"-"$arch"/media/cdrom
-		mount $device /srv/ltsp/thin/"$thin_type"-"$arch"/media/cdrom
-		echo "deb [trusted=yes] $mirror $dist main" > /srv/ltsp/thin/"$thin_type"-"$arch"/etc/apt/sources.list
+		mkdir -p /srv/ltsp/x2go-"$thin_type"-"$arch"/media/cdrom
+		mount $device /srv/ltsp/x2go-"$thin_type"-"$arch"/media/cdrom
+		echo "deb [trusted=yes] $mirror $dist main" > /srv/ltsp/x2go-"$thin_type"-"$arch"/etc/apt/sources.list
 	fi
-	chroot /srv/ltsp/thin/"$thin_type"-"$arch"/ apt -y -qq install education-thin-client p910nd
+	chroot /srv/ltsp/x2go-"$thin_type"-"$arch"/ apt -y -qq install education-thin-client p910nd
 	# Install case specific additional packages.
 	if [ "display" == "$thin_type" ] ; then
-		chroot /srv/ltsp/thin/"$thin_type"-"$arch"/ apt -y -qq install x2gothinclient-displaymanager
+		chroot /srv/ltsp/x2go-"$thin_type"-"$arch"/ apt -y -qq install x2gothinclient-displaymanager
 	fi
 	if [ "desktop" == "$thin_type" ] ; then
-		chroot /srv/ltsp/thin/"$thin_type"-"$arch"/ apt -y -qq install x2gothinclient-minidesktop \
+		chroot /srv/ltsp/x2go-"$thin_type"-"$arch"/ apt -y -qq install x2gothinclient-minidesktop \
 		x2gothinclient-cdmanager x2gothinclient-usbmount \
 		firefox-esr-l10n-"$LANGCODE"
 	fi
 	if [ "true" == "$BD_ISO" ] ; then
-		umount /srv/ltsp/thin/"$thin_type"-"$arch"/media/cdrom
+		umount /srv/ltsp/x2go-"$thin_type"-"$arch"/media/cdrom
 	fi
-	umount /srv/ltsp/thin/"$thin_type"-"$arch"/dev/pts
-	umount /srv/ltsp/thin/"$thin_type"-"$arch"/proc
-	umount /srv/ltsp/thin/"$thin_type"-"$arch"/tmp
-	rm -rf /srv/ltsp/thin/"$thin_type"-"$arch"/tmp/user
+	umount /srv/ltsp/x2go-"$thin_type"-"$arch"/dev/pts
+	umount /srv/ltsp/x2go-"$thin_type"-"$arch"/proc
 	if [ "bare" == "$thin_type" ] ; then
-		rm -rf /srv/ltsp/thin/"$thin_type"-"$arch"/var/cache/apt
-		rm -rf /srv/ltsp/thin/"$thin_type"-"$arch"/var/cache/debconf
-		rm -rf /srv/ltsp/thin/"$thin_type"-"$arch"/var/cache/man
-		rm -rf /srv/ltsp/thin/"$thin_type"-"$arch"/var/lib/dpkg
+		rm -rf /srv/ltsp/x2go-"$thin_type"-"$arch"/var/cache/apt
+		rm -rf /srv/ltsp/x2go-"$thin_type"-"$arch"/var/cache/debconf
+		rm -rf /srv/ltsp/x2go-"$thin_type"-"$arch"/var/cache/man
 	fi
-	cp /etc/locale.gen /srv/ltsp/thin/"$thin_type"-"$arch"/etc/
-	cp /etc/default/locale /srv/ltsp/thin/"$thin_type"-"$arch"/etc/default
-	chroot /srv/ltsp/thin/"$thin_type"-"$arch" locale-gen
-	cp /etc/default/keyboard /srv/ltsp/thin/"$thin_type"-"$arch"/etc/default
-	cp /etc/default/console-setup /srv/ltsp/thin/"$thin_type"-"$arch"/etc/default
-	chroot /srv/ltsp/thin/"$thin_type"-"$arch" setupcon -k
+	cp /etc/locale.gen /srv/ltsp/x2go-"$thin_type"-"$arch"/etc/
+	cp /etc/default/locale /srv/ltsp/x2go-"$thin_type"-"$arch"/etc/default
+	chroot /srv/ltsp/x2go-"$thin_type"-"$arch" locale-gen
+	cp /etc/default/keyboard /srv/ltsp/x2go-"$thin_type"-"$arch"/etc/default
+	cp /etc/default/console-setup /srv/ltsp/x2go-"$thin_type"-"$arch"/etc/default
+	chroot /srv/ltsp/x2go-"$thin_type"-"$arch" setupcon -k
 
 	# Customize X2Go client for Debian Edu use.
 	if [ "display" == "$thin_type" ] || [ "desktop" == "$thin_type" ] ; then
-		cp /etc/ltsp/skel/.x2goclient/sessions /srv/ltsp/thin/"$thin_type"-"$arch"/etc/x2go/x2gothinclient_sessions
+		cp /etc/ltsp/skel/.x2goclient/sessions /srv/ltsp/x2go-"$thin_type"-"$arch"/etc/x2go/x2gothinclient_sessions
 	fi
 	# Firefox-ESR customization for Debian Edu.
 	if [ "desktop" == "$thin_type" ] ; then
-		cp /etc/environment /srv/ltsp/thin/"$thin_type"-"$arch"/etc
-		cp /etc/firefox-esr/debian-edu.js /srv/ltsp/thin/"$thin_type"-"$arch"/etc/firefox-esr
-		cp /etc/firefox-esr/debian-edu-homepage-ldap.js /srv/ltsp/thin/"$thin_type"-"$arch"/etc/firefox-esr
-		cp /etc/ssl/certs/Debian-Edu_rootCA.crt /srv/ltsp/thin/"$thin_type"-"$arch"/etc/ssl/certs
-		cat <<EOF > /srv/ltsp/thin/"$thin_type"-"$arch"/usr/share/firefox-esr/distribution/policies.json
+		cp /etc/environment /srv/ltsp/x2go-"$thin_type"-"$arch"/etc
+		cp /etc/firefox-esr/debian-edu.js /srv/ltsp/x2go-"$thin_type"-"$arch"/etc/firefox-esr
+		cp /etc/firefox-esr/debian-edu-homepage-ldap.js /srv/ltsp/x2go-"$thin_type"-"$arch"/etc/firefox-esr
+		cp /etc/ssl/certs/Debian-Edu_rootCA.crt /srv/ltsp/x2go-"$thin_type"-"$arch"/etc/ssl/certs
+		cat <<EOF > /srv/ltsp/x2go-"$thin_type"-"$arch"/usr/share/firefox-esr/distribution/policies.json
 {
   "policies": {
     "Certificates": {
@@ -493,10 +510,9 @@ debootstrap --arch="$arch" --no-check-gpg --variant=minbase --include=linux-imag
 EOF
 	fi
 
-	ltsp image /srv/ltsp/thin/"$thin_type"-"$arch"
-
-	# Remove chroot now that the image has been built (to save space)
-	rm -rf /srv/ltsp/thin/"$thin_type"-"$arch"
+	if [ "img" == "yes" ] ; then
+		ltsp image /srv/ltsp/x2go-"$thin_type"-"$arch"
+	fi
 
 	# Create a runtime user for x2go login terminal; configure autofs (USB storage support).
 	if [ "bare" == "$thin_type" ] ; then
@@ -511,9 +527,10 @@ cp /etc/ltsp/autofs/auto.* /etc'
 EOF
 	fi
 
+	ALL_IMAGES=1 ltsp kernel
 	# Create the ltsp.img file and move it to where it belongs.
 	ltsp initrd
-	mv /srv/tftp/ltsp/ltsp.img /srv/tftp/ltsp/"$thin_type"-"$arch"/ltsp.img
+	mv /srv/tftp/ltsp/ltsp.img /srv/tftp/ltsp/x2go-"$thin_type"-"$arch"/ltsp.img
 
 	# Clean up ltsp.conf from image specific items.
 	sed -i '/POST_INIT/d' /etc/ltsp/ltsp.conf
@@ -583,6 +600,9 @@ EOF
 	# Install base system
 	debootstrap --arch="$arch" --no-check-gpg --variant=minbase --include=locales,console-setup,linux-image-"$arch" "$dist" /srv/ltsp/dlw "$mirror"
 
+	# Care for complete sources list (security, also nonfree for possible needed firmware).
+	chroot /srv/ltsp/dlw sh -c "cp /usr/share/doc/apt/examples/sources.list > /etc/apt/sources.list.d/full.list"
+
 	# Care for same locale and keyboard settings in the chroot, also useful to quiet down Perl.
 	cp /etc/locale.gen /srv/ltsp/dlw/etc/
 	cp /etc/default/locale /srv/ltsp/dlw/etc/default
@@ -592,9 +612,11 @@ EOF
 	chroot /srv/ltsp/dlw setupcon -k
 
 	# Care for special files.
+	# Unset temporary directory variables to avoid problems when directory
+	# is missing inside the chroot. https://bugs.debian.org/765443
+	unset TMPDIR TEMP TEMPDIR TMP
 	mount /dev/pts -t devpts /srv/ltsp/dlw/dev/pts
 	mount proc -t proc /srv/ltsp/dlw/proc
-	mount tmpfs -t tmpfs /srv/ltsp/dlw/tmp
 	if mountpoint -q /media/cdrom ; then
 		echo "deb [trusted=yes] "$mirror" "$dist" main" > /srv/ltsp/dlw/etc/apt/sources.list
 	fi
@@ -619,7 +641,6 @@ EOF
 	# Care for temporary mounts.
 	umount /srv/ltsp/dlw/dev/pts
 	umount /srv/ltsp/dlw/proc
-	umount /srv/ltsp/dlw/tmp
 	if [ -f /media/cdrom/.disk/info ] ; then
 		umount /srv/ltsp/dlw/media/cdrom
 		umount /media/cdrom


=====================================
sbin/debian-edu-ltsp-ipxe
=====================================
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+set -e
+
+ltsp ipxe 2> /dev/null
+# Make sure /srv/tftp/ltsp/ltsp.ipxe is Debian Edu specific.
+sed -i 's#ltsp/ltsp.img#ltsp/${img}/ltsp.img#' /srv/tftp/ltsp/ltsp.ipxe
+echo ""
+echo "/srv/tftp/ltsp/ltsp.ipxe has been modified."
\ No newline at end of file


=====================================
share/debian-edu-config/tools/copy-host-keytab
=====================================
@@ -2,3 +2,8 @@
 set -e
 kinit
 scp tjener:/etc/debian-edu/host-keytabs/$(hostname -s).intern.keytab /etc/krb5.keytab
+
+# Special case separate LTSP server.
+if [ -f /srv/ltsp/dlw/etc/ltsp/ltsp.conf ] ; then
+	cp /etc/krb5.keytab /srv/ltsp/dlw/etc/krb5.keytab
+fi


=====================================
share/debian-edu-config/tools/improve-desktop-l10n
=====================================
@@ -6,31 +6,35 @@
 # schweer, 2018-12-15.
 
 set -e
+
+. /usr/share/debian-edu-config/testsuite-lib.sh
+
 langsfull="$(locale -a|grep utf8|cut -d'.' -f1)"
-for lang in $(echo $langsfull) ; do
+for lang in $langsfull ; do
     baselang="${lang%_*}"
     langcountry="$(echo ${lang%.*}|cut -d'_' -f2 | tr '[:upper:]' '[:lower:]')"
     for i in debian-edu-doc debian-edu-doc-legacy gimp-help thunderbird-l10n; do
-        if ! [ -z "$(apt-cache search $i-$baselang-$langcountry)" ]; then
+        if ! [ -z "$(apt-cache search $i-$baselang-$langcountry)" ] && ! deb_installed $i-$baselang-$langcountry ; then
             apt-get -yq install $i-$baselang-$langcountry
         else
             if ! [ -z "$(apt-cache search $i-$baselang)" ] && \
-                ! [ "thunderbird-l10n-en" = "$i-$baselang" ] ; then
-                apt-get -y install $i-$baselang
+                ! [ "thunderbird-l10n-en" = "$i-$baselang" ] && ! deb_installed $i-$baselang ; then
+                # caveat: $i-$baselang might be missing, e.g. es_PE: only $i-es-ar and $i-es-es exist.
+                apt-get -y install $i-$baselang || true
         fi
         fi
     done
     # special cases nn_NO and nb_NO (debian-edu-doc and gimp-help).
     if [ "nn" = "$baselang" ] && [ "no" = "$langcountry" ] && \
-        ! [ -z "$(apt-cache search debian-edu-doc-nb-no)" ] ; then
+        ! [ -z "$(apt-cache search debian-edu-doc-nb-no)" ] && ! deb_installed debian-edu-doc-nb-no ; then
             apt-get -yq install debian-edu-doc-nb-no
     fi
     if [ "nn" = "$baselang" ] && [ "no" = "$langcountry" ] && \
-        ! [ -z "$(apt-cache search debian-edu-doc-legacy-nb-no)" ] ; then
+        ! [ -z "$(apt-cache search debian-edu-doc-legacy-nb-no)" ] && ! deb_installed debian-edu-doc-legacy-nb-no; then
             apt-get -yq install debian-edu-doc-legacy-nb-no
     fi
     if [ "nb" = "$baselang" ] && [ "no" = "$langcountry" ] && \
-        ! [ -z "$(apt-cache search gimp-help-nn)" ] ; then
+        ! [ -z "$(apt-cache search gimp-help-nn)" ] && ! deb_installed install gimp-help-nn ; then
             apt-get -yq install gimp-help-nn
     fi
 done


=====================================
share/debian-edu-config/tools/install-task-pkgs
=====================================
@@ -5,208 +5,247 @@
 # schweer, 2018-12-21
 
 set -e
+
+. /usr/share/debian-edu-config/testsuite-lib.sh
+
+install_pkg1() {
+	if ! deb_installed "$pkg1" ; then
+		apt-get install -yq "$pkg1"
+	fi
+}
+install_pkg2() {
+	if ! deb_installed "$pkg2" ; then
+		apt-get install -yq "$pkg2"
+	fi
+}
+install_pkg3() {
+	if ! deb_installed "$pkg3" ; then
+		apt-get install -yq "$pkg3"
+	fi
+}
+install_pkg123() {
+	install_pkg1
+	install_pkg2
+	if dpkg -l education-desktop-kde 1>/dev/null ; then
+		install_pkg3
+	fi
+}
+
 langsfull="$(locale -a | grep utf8 | cut -d'.' -f1)"
-for lang in $(echo $langsfull) ; do
-    baselang="${lang%_*}"
-    # <lang>, <lang>-desktop, <lang>-kde-desktop and <lang>-gnome-desktop tasks; rather weird
-    # due to a lot of cases. The code might be smarter.
-    # FIXME: Data and cases were taken from the /usr/share/tasksel/debian-tasks.desc file and
-    # should be kept in sync.
-    case "$lang" in
-	    en_GB) # only desktop task (kde not always).
-		apt-get install -y task-british-desktop
-		if dpkg -l education-desktop-kde 1>/dev/null ; then
-		    apt-get -yq install task-british-kde-desktop
-		fi
-		;;
-	    en_ZA)
-		apt-get install -y task-south-african-english-desktop
-		;;
-	    pt_BR) # lang and desktop tasks
-		apt-get install -y task-brazilian-portuguese task-brazilian-portuguese-desktop
-		if dpkg -l education-desktop-kde 1>/dev/null ; then
-		    apt-get -yq install task-brazilian-portuguese-kde-desktop
-		fi
-		;;
-	    ca_ES)
-		apt-get install -y task-catalan task-catalan-desktop
-		if dpkg -l education-desktop-kde 1>/dev/null ; then
-		    apt-get -yq install task-catalan-kde-desktop
-		fi
-		;;
-	    zh_CN|zh_SG)
-		apt-get install -y task-chinese-s task-chinese-s-desktop
-		if dpkg -l education-desktop-kde 1>/dev/null ; then
-		    apt-get -yq install task-chinese-s-kde-desktop
-		fi
-		;;
-	    zh_TW|zh_HK)
-		apt-get install -y task-chinese-t task-chinese-t-desktop
-		if dpkg -l education-desktop-kde 1>/dev/null ; then
-		    apt-get -yq install task-chinese-t-kde-desktop
-		fi
-		;;
-	    pt_PT|pt_AO|pt_CV|pt_TL|pt_GW|pt_MZ|pt_ST)
-		apt-get install -y task-portuguese task-portuguese-desktop
-		if dpkg -l education-desktop-kde 1>/dev/null ; then
-		    apt-get -yq install task-portuguese-kde-desktop
-		fi
-		;;
-    esac
-    case "$baselang" in
-	    en) # only lang task (en); all other ones: only desktop task (kde not always available).
-		apt-get install -y task-english
-		;;
-	    sq)
-		apt-get install -y task-albanian-desktop
-		;;
-	    ka)
-		apt-get install -y task-georgian-desktop
-		;;
-	    dz)
+for lang in $langsfull ; do
+	baselang="${lang%_*}"
+	# <lang>, <lang>-desktop, <lang>-kde-desktop and <lang>-gnome-desktop tasks; rather weird
+	# due to a lot of cases. The code might be smarter.
+	# FIXME: Data and cases were taken from the /usr/share/tasksel/debian-tasks.desc file and
+	# should be kept in sync.
+	case "$lang" in
+		en_GB) # only desktop task (kde not always).
+		pkg1=task-british-desktop
+		pkg2=task-british-kde-desktop
+		install_pkg1
+		install_pkg2
+		;;
+		en_ZA)
+		pkg1=task-south-african-english-desktop
+		install_pkg1
+		;;
+		pt_BR) # lang and desktop tasks
+		pkg1=task-brazilian-portuguese
+		pkg2=task-brazilian-portuguese-desktop
+		pkg3=task-brazilian-portuguese-kde-desktop
+		install_pkg123
+		;;
+		ca_ES)
+		pkg1=task-catalan
+		pkg2=task-catalan-desktop
+		pkg3=task-catalan-kde-desktop
+		install_pkg123
+		;;
+		zh_CN|zh_SG)
+		pkg1=task-chinese-s
+		pkg2=task-chinese-s-desktop
+		pkg3=task-chinese-s-kde-desktop
+		install_pkg123
+		;;
+		zh_TW|zh_HK)
+		pkg1=task-chinese-t
+		pkg2=task-chinese-t-desktop
+		pkg3=task-chinese-t-kde-desktop
+		install_pkg123
+		;;
+		pt_PT|pt_AO|pt_CV|pt_TL|pt_GW|pt_MZ|pt_ST)
+		pkg1=task-portuguese
+		pkg2=task-portuguese-desktop
+		pkg3=task-portuguese-kde-desktop
+		install_pkg123
+		;;
+	esac
+	case "$baselang" in
+		en) # only lang task (en); all other ones: only desktop task (kde not always available).
+		pkg1=task-english
+		install_pkg1
+		;;
+		sq)
+		pkg1=task-albanian-desktop
+		install_pkg1
+		;;
+		ka)
+		pkg1=task-georgian-desktop
+		install_pkg1
+		;;
+		dz)
+		pkg1=
+		pkg2=
+		install_pkg1
+		install_pkg2
 		apt-get install -y task-dzongkha-desktop
 		if dpkg -l education-desktop-kde 1>/dev/null ; then
-		    apt-get -yq install task-dzongkha-kde-desktop
-		fi
-		;;
-	    id)
-		apt-get install -y task-indonesian-desktop
-		if dpkg -l education-desktop-kde 1>/dev/null ; then
-		    apt-get -yq install task-indonesian-kde-desktop
-		fi
-		;;
-	    ne)
-		apt-get install -y task-nepali-desktop
-		if dpkg -l education-desktop-kde 1>/dev/null ; then
-		    apt-get -yq install task-nepali-kde-desktop
-		fi
-		;;
-	    si)
-		apt-get install -y task-sinhala-desktop
-		if dpkg -l education-desktop-kde 1>/dev/null ; then
-		    apt-get -yq install task-sinhala-kde-desktop
-		fi
-		;;
-	    kn)
-		apt-get install -y task-kannada-desktop
-		if dpkg -l education-desktop-kde 1>/dev/null ; then
-		    apt-get -yq install task-kannada-kde-desktop
-		fi
-		;;
-	    vi)
-		apt-get install -y task-vietnamese-desktop
-		if dpkg -l education-desktop-kde 1>/dev/null ; then
-		    apt-get -yq install task-vietnamese-kde-desktop
-		fi
-		;;
-	    ug)
-		apt-get install -y task-uyghur-desktop
-		if dpkg -l education-desktop-kde 1>/dev/null ; then
-		    apt-get -yq install task-uyghur-kde-desktop
+		apt-get -yq install task-dzongkha-kde-desktop
 		fi
 		;;
-	    xh)
-		apt-get install -y task-xhosa-desktop
-		if dpkg -l education-desktop-kde 1>/dev/null ; then
-		    apt-get -yq install task-xhosa-kde-desktop
+		id)
+		pkg1=task-indonesian-desktop
+		pkg2=task-indonesian-kde-desktop
+		install_pkg1
+		install_pkg2
+		;;
+		ne)
+		pkg1=task-nepali-desktop
+		pkg2=task-nepali-kde-desktop
+		install_pkg1
+		install_pkg2
+		;;
+		si)
+		pkg1=task-sinhala-desktop
+		pkg2=task-sinhala-kde-desktop
+		install_pkg1
+		install_pkg2
+		;;
+		kn)
+		pkg1=task-kannada-desktop
+		pkg2=task-kannada-kde-desktop
+		install_pkg1
+		install_pkg2
+		;;
+		vi)
+		pkg1=task-vietnamese-desktop
+		pkg2=task-vietnamese-kde-desktop
+		install_pkg1
+		install_pkg2
+		;;
+		ug)
+		pkg1=task-uyghur-desktop
+		pkg2=task-uyghur-kde-desktop
+		install_pkg1
+		install_pkg2
+		;;
+		xh)
+		pkg1=task-xhosa-desktop
+		pkg2=task-xhosa-kde-desktop
+		install_pkg1
+		install_pkg2
+		;;
+	esac
+	# all other cases (lang and desktop tasks; kde not always, gnome sometimes available).
+	duo="
+	am:amharic
+	ar:arabic
+	ast:asturian
+	eu:basque
+	be:belarusian
+	bn:bengali
+	bs:bosnian
+	bg:bulgarian
+	hr:croatian
+	be:cyrillic
+	bg:cyrillic
+	kz:cyrillic
+	mk:cyrillic
+	mn:cyrillic
+	ru:cyrillic
+	sr:cyrillic
+	cs:czech
+	da:danish
+	nl:dutch
+	eo:esperanto
+	et:estonian
+	fi:finnish
+	fr:french
+	gl:galician
+	de:german
+	el:greek
+	gu:gujarati
+	he:hebrew
+	hi:hindi
+	hu:hungarian
+	is:icelandic
+	ga:irish
+	it:italian
+	ja:japanese
+	kk:kazakh
+	km:khmer
+	ko:korean
+	ku:kurdish
+	lv:latvian
+	lt:lithuanian
+	mk:macedonian
+	ml:malayalam
+	mr:marathi
+	se:northern-sami
+	no:norwegian
+	nb:norwegian
+	nn:norwegian
+	fa:persian
+	pl:polish
+	pa:punjabi
+	ro:romanian
+	ru:russian
+	sr:serbian
+	sk:slovak
+	sl:slovenian
+	es:spanish
+	sv:swedish
+	tl:tagalog
+	ta:tamil
+	te:telugu
+	th:thai
+	tr:turkish
+	uk:ukrainian
+	cy:welsh"
+	for l in $duo ; do
+		lbase="$(echo "$l" | cut -d':' -f1)"
+		lname="$(echo "$l" | cut -d':' -f2)"
+		if [ "$baselang" = "$lbase" ] ; then
+			pkg1=task-$lname
+			pkg2=task-$lname-desktop
+			install_pkg1
+			install_pkg2
+			if dpkg -l education-desktop-kde 1>/dev/null ; then
+				case "$baselang" in
+					ast|mr|se|ti|ta|cy) # kde desktop task not available
+					;;
+					*)
+					pkg1=task-$lname-kde-desktop
+					install_pkg1
+					;;
+				esac
+			fi
+			if dpkg -l education-desktop-gnome 1>/dev/null ; then
+				case "$baselang" in
+					he|ja|ko|ml|ta|te|th)
+					pkg1=task-$lname-gnome-desktop
+					install_pkg1
+					;;
+					*) # gnome desktop task not available
+					;;
+				esac
+			fi
 		fi
-		;;
-    esac
-    # all other cases (lang and desktop tasks; kde not always, gnome sometimes available).
-    duo="
-    am:amharic
-    ar:arabic
-    ast:asturian
-    eu:basque
-    be:belarusian
-    bn:bengali
-    bs:bosnian
-    bg:bulgarian
-    hr:croatian
-    be:cyrillic
-    bg:cyrillic
-    kz:cyrillic
-    mk:cyrillic
-    mn:cyrillic
-    ru:cyrillic
-    sr:cyrillic
-    cs:czech
-    da:danish
-    nl:dutch
-    eo:esperanto
-    et:estonian
-    fi:finnish
-    fr:french
-    gl:galician
-    de:german
-    el:greek
-    gu:gujarati
-    he:hebrew
-    hi:hindi
-    hu:hungarian
-    is:icelandic
-    ga:irish
-    it:italian
-    ja:japanese
-    kk:kazakh
-    km:khmer
-    ko:korean
-    ku:kurdish
-    lv:latvian
-    lt:lithuanian
-    mk:macedonian
-    ml:malayalam
-    mr:marathi
-    se:northern-sami
-    no:norwegian
-    nb:norwegian
-    nn:norwegian
-    fa:persian
-    pl:polish
-    pa:punjabi
-    ro:romanian
-    ru:russian
-    sr:serbian
-    sk:slovak
-    sl:slovenian
-    es:spanish
-    sv:swedish
-    tl:tagalog
-    ta:tamil
-    te:telugu
-    th:thai
-    tr:turkish
-    uk:ukrainian
-    cy:welsh"
-    for l in $(echo $duo) ; do
-        lbase="$(echo $l | cut -d':' -f1)"
-        lname="$(echo $l | cut -d':' -f2)"
-        if [ "$baselang" = "$lbase" ] ; then
-            apt-get install -y task-$lname task-$lname-desktop
-            if dpkg -l education-desktop-kde 1>/dev/null ; then
-                case "$baselang" in
-                    ast|mr|se|ti|ta|cy) # kde desktop task not available
-                    ;;
-                    *)
-                        apt-get -yq install task-$lname-kde-desktop
-                    ;;
-                esac
-            fi
-            if dpkg -l education-desktop-gnome 1>/dev/null ; then
-                case "$baselang" in
-                    he|ja|ko|ml|ta|te|th)
-                        apt-get -yq install task-$lname-gnome-desktop
-                    ;;
-                    *) # gnome desktop task not available
-                    ;;
-                esac
-            fi
-        fi
-    done
+		done
 done
 # finally the stock desktop tasks
 for d in cinnamon gnome kde mate lxde lxqt xfce ; do
 	if dpkg -l education-desktop-$d 1>/dev/null ; then
-	    apt-get -yq install task-$d-desktop
+	apt-get -yq install task-$d-desktop
 	fi
 done


=====================================
share/debian-edu-config/tools/run-at-firstboot
=====================================
@@ -64,7 +64,7 @@ fi
 # needs to include the krb5.keytab file which isn't available at this time.
 if echo "$PROFILE" | grep -Eq 'Main-Server.*LTSP-Server' && \
 	[ ! -f /srv/ltsp/images/$ltspimg ] ; then
-	/usr/sbin/debian-edu-ltsp-install --dist $dist
+	/usr/sbin/debian-edu-ltsp-install --diskless_workstation yes
 fi
 
 # Update PXE setup on LTSP servers with proxy values set in environment


=====================================
share/man/man8/debian-edu-ltsp-chroot.8
=====================================
@@ -0,0 +1,36 @@
+.TH DEBIAN-EDU-LTSP-CHROOT "8" "September 2021" "Debian Edu" "Debian Edu Admin Tools"
+.SH NAME
+debian-edu-ltsp-chroot - execute commands in a specified LTSP Chroot
+.SH SYNOPSIS
+.B debian-edu-ltsp-chroot
+[\fI\,OPTION\/\fR] \fI\,command\/\fR
+.SH DESCRIPTION
+Tool to execute commands in a specified LTSP Chroot (like e.g. install, upgrade and remove packages).
+
+.SH OPTIONS
+.TP
+\fB\-b\fR, \fB\-\-base\fR[=\fI\,PATH\/\fR]
+Sets base of target chroot. Defaults to \fI\,/srv/ltsp/dlw\/\fP if unspecified.
+.TP
+\fB\-d\fR, \fB\-\-mount\-dev\fR
+If set, mounts the server dev and devpts directories to the chroot
+previous to chrooting.
+.TP
+\fB\-h\fR, \fB\-\-help\fR
+Displays the debian\-edu\-ltsp\-chroot help message.
+.TP
+\fB\-p\fR, \fB\-\-mount\-proc\fR
+If set, mounts the server \fI\,/proc\/\fP to the chroot previous to chrooting.
+.TP
+\fB\-m\fR, \fB\-\-mount\-all\fR
+If set, does both \fB\-\-mount\-dev\fR and \fB\-\-mount\-proc\fR previous to chrooting.
+.TP
+\fB\-\-version\fR
+Output version information and exit.
+.SH EXAMPLE
+.TP
+.B debian-edu-ltsp-chroot -m -b /srv/ltsp/dlw apt update
+.TQ
+updates the package cache inside /srv/ltsp/dlw (diskless workstation chroot).
+.SH AUTHORS
+Debian Edu Team, https://blends.debian.org/edu


=====================================
share/man/man8/debian-edu-ltsp-install.8
=====================================
@@ -4,7 +4,8 @@
 debian-edu-ltsp-install - setup, configure and manage LTSP chroot and SquashFS image
 
 .SH SYNOPSIS
-.B debian-edu-ltsp-install --arch <amd64|i386> --dist <stable|testing|sid> --dns_server <10.0.2.2|dns server ip> --diskless_workstation <yes|no> --thin_type <bare|display|desktop>
+.B debian-edu-ltsp-install
+[\fI\,OPTIONS\/\fR] \fI\
 
 .SH DESCRIPTION
 .TP
@@ -25,13 +26,13 @@ takes effect for a LTSP/X2Go client chroot setup, default value is the one the L
 --dns_server defaults to 10.0.2.2 if omitted
 .TP
 \fB\--diskless_workstation\ <yes|no>\fR
-defaults to yes if option is omitted
+defaults to no if the option is omitted
 .TP
 \fB\--dlw\ <yes|no>\fR
 used to create a diskless workstation LTSP chroot (root fs via NFS), default is no
 .TP
 \fB\--img\ <yes|no>\fR
-takes effect for LTSP diskless workstation chroot setup, default is no
+takes effect for LTSP diskless workstation and X2Go thin client chroot setup, default is no
 .TP
 \fB\--desktop\<xfce|cinnamon|gnome|kde|lxde|lxqt|mate|none> \fR
 takes effect for LTSP diskless workstation chroot setup, default is xfce
@@ -50,34 +51,34 @@ takes effect for LTSP diskless workstation chroot setup, default is xfce
 
 .SH EXAMPLE
 .TP
-.B debian-edu-ltsp-install --arch amd64
+.B debian-edu-ltsp-install --diskless_workstation yes
 .TQ
-creates 64-bit diskless workstation support.
+creates diskless workstation support (SquashFS image).
 .TP
-.B debian-edu-ltsp-install --arch amd64 --dist bullseye --thin_type bare
-.TQ 
-creates diskless workstation and 64-bit thin client support, the LTSP client
+.B debian-edu-ltsp-install --arch amd64 --diskless_workstation yes --thin_type bare
 .TQ
-boot defaults to diskless workstation.
+creates diskless workstation and 64-bit thin client support. LTSP client boot defaults to diskless workstation.
 .TP
-.B debian-edu-ltsp-install --arch i386 --diskless_workstation no --thin_type bare
+.B debian-edu-ltsp-install --arch i386 --thin_type bare
 .TQ
-creates additional 32-bit thin client support
+creates additional 32-bit thin client support.
 .TP
 .B debian-edu-ltsp-install --diskless_workstation yes
 .TQ
-updates the diskless workstation SquashFS image
+updates the diskless workstation SquashFS image.
 .TP
-.B debian-edu-ltsp-install --dlw yes --diskless_workstation no
+.B debian-edu-ltsp-install --dlw yes
+.TQ
+creates a diskless workstation LTSP chroot. About 15 GiB additional disk space is needed.
 .TQ
-creates a diskless workstation LTSP chroot. About 15 GiB additional disk space is needed. In the default case, run the commands
-.B lvresize -L+15G /dev/vg_system/srv+ltsp
+In the default case, run the commands
+.B lvresize --L+15G /dev/vg_system/srv+ltsp
 and
 .B resize2fs /dev/vg_system/srv+ltsp
 .TP
-.B debian-edu-ltsp-install --dlw yes --img yes --diskless_workstation no
+.B debian-edu-ltsp-install --dlw yes --img yes
 .TQ
-creates a diskless workstation LTSP chroot and the related SquashFS image. About even 5 GiB more additional diskspace is needed.
+creates a diskless workstation LTSP chroot and the related SquashFS image. Another 5 GiB more additional disk space is needed.
 
 .SH AUTHORS
 Debian Edu Team, https://blends.debian.org/edu


=====================================
share/man/man8/debian-edu-ltsp-ipxe.8
=====================================
@@ -0,0 +1,13 @@
+.TH DEBIAN-EDU-LTSP-IPXE 8 "September 2021" "Debian Edu" "Debian Edu User Tools"
+
+.SH NAME
+debian-edu-ltsp-ipxe - generate or update the iPXE menu file on a Debian Edu LTSP server
+
+.SH SYNOPSIS
+.B debian-edu-ltsp-ipxe
+
+.SH DESCRIPTION
+This is a wrapper script for the 'ltsp ipxe' command. It makes sure that the /srv/tftp/ltsp/ltsp.ipxe file is Debian Edu specific.
+
+.SH AUTHORS
+Debian Edu Team, https://blends.debian.org/edu



View it on GitLab: https://salsa.debian.org/debian-edu/debian-edu-config/-/compare/f41c65e9da74433369e960d89abaca92ad1fede2...82a8cdacafbc97098a6b72f71b9bee9e093053c9

-- 
View it on GitLab: https://salsa.debian.org/debian-edu/debian-edu-config/-/compare/f41c65e9da74433369e960d89abaca92ad1fede2...82a8cdacafbc97098a6b72f71b9bee9e093053c9
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/debian-edu-commits/attachments/20210929/5a112f1d/attachment-0001.htm>


More information about the debian-edu-commits mailing list