Version in base suite: 2.13.2~deb13u1 Base version: debian-edu-config_2.13.2~deb13u1 Target version: debian-edu-config_2.13.6~deb13u1 Base file: /srv/ftp-master.debian.org/ftp/pool/main/d/debian-edu-config/debian-edu-config_2.13.2~deb13u1.dsc Target file: /srv/ftp-master.debian.org/policy/pool/main/d/debian-edu-config/debian-edu-config_2.13.6~deb13u1.dsc /srv/release.debian.org/tmp/lPg2Y6dlVt/debian-edu-config-2.13.6~deb13u1/ltsp-tjener-tosend.tar |binary debian-edu-config-2.13.6~deb13u1/bin/debian-edu-ldapserver | 2 debian-edu-config-2.13.6~deb13u1/debian/changelog | 75 ++++ debian-edu-config-2.13.6~deb13u1/debian/control | 2 debian-edu-config-2.13.6~deb13u1/debian/salsa-ci.yml | 3 debian-edu-config-2.13.6~deb13u1/etc/debian-edu/pxeinstall.conf | 3 debian-edu-config-2.13.6~deb13u1/sbin/debian-edu-ltsp-install | 77 ++-- debian-edu-config-2.13.6~deb13u1/sbin/debian-edu-pxeinstall | 173 +++++++--- debian-edu-config-2.13.6~deb13u1/share/debian-edu-config/d-i/finish-install | 36 ++ debian-edu-config-2.13.6~deb13u1/share/debian-edu-config/testsuite-lib.sh | 17 debian-edu-config-2.13.6~deb13u1/share/debian-edu-config/tools/improve-desktop-l10n | 2 debian-edu-config-2.13.6~deb13u1/share/debian-edu-config/tools/install-task-pkgs | 2 debian-edu-config-2.13.6~deb13u1/share/debian-edu-config/tools/pxe-addfirmware | 128 ++++--- debian-edu-config-2.13.6~deb13u1/share/debian-edu-config/tools/run-at-firstboot | 2 14 files changed, 387 insertions(+), 135 deletions(-) dpkg-source: warning: cannot verify inline signature for /srv/release.debian.org/tmp/tmpb3zpdiz8/debian-edu-config_2.13.2~deb13u1.dsc: no acceptable signature found dpkg-source: warning: cannot verify inline signature for /srv/release.debian.org/tmp/tmpb3zpdiz8/debian-edu-config_2.13.6~deb13u1.dsc: no acceptable signature found diff -Nru debian-edu-config-2.13.2~deb13u1/bin/debian-edu-ldapserver debian-edu-config-2.13.6~deb13u1/bin/debian-edu-ldapserver --- debian-edu-config-2.13.2~deb13u1/bin/debian-edu-ldapserver 2026-08-19 20:24:04.000000000 +0000 +++ debian-edu-config-2.13.6~deb13u1/bin/debian-edu-ldapserver 2026-09-28 07:57:25.000000000 +0000 @@ -63,7 +63,7 @@ print STDERR "warning: no DNS name from dnsdomainname call. using $dnsdomain from /etc/resolv.conf.\n" if $opts{d}; } $ldapserver = $opts{s} || find_ldap_server($dnsdomain); - print STDERR "info: found ldap server $ldapserver\n" if $opts{d}; + print STDERR "info: found ldap server $ldapserver\n" if $opts{d} && $ldapserver; $krbserver = find_kerberos_server($dnsdomain); } } diff -Nru debian-edu-config-2.13.2~deb13u1/debian/changelog debian-edu-config-2.13.6~deb13u1/debian/changelog --- debian-edu-config-2.13.2~deb13u1/debian/changelog 2026-09-07 08:58:57.000000000 +0000 +++ debian-edu-config-2.13.6~deb13u1/debian/changelog 2026-11-01 13:57:41.000000000 +0000 @@ -1,3 +1,78 @@ +debian-edu-config (2.13.6~deb13u1) trixie; urgency=medium + + * Release to trixie. + + -- Mike Gabriel Sun, 01 Nov 2026 14:57:41 +0100 + +debian-edu-config (2.13.6) unstable; urgency=medium + + [ Roland Clobus ] + * Support 'locales-all' (Closes: #1149230). + + -- Mike Gabriel Sun, 01 Nov 2026 14:53:56 +0100 + +debian-edu-config (2.13.5) unstable; urgency=medium + + [ Roland Clobus ] + * debian-edu-ltsp-install: + - Rework DLW installation method (Closes: #1150421). Apply code path of + X2Go thinclient installation method to DLW installation method. + - Fix running outside of Debian Installer. The script can be run outside + the d-i environment. If the BD ISO was used to install, and it is still + available, use the packages on the BD ISO instead of downloading them. + + -- Mike Gabriel Wed, 14 Oct 2026 19:56:17 +0200 + +debian-edu-config (2.13.4) unstable; urgency=medium + + [ Mike Gabriel ] + * sbin/debian-edu-pxeinstall: + - Report progress of D-I provisioning to the admin. + + [ Roland Clobus ] + * sbin/debian-edu-pxeinstall: + - Always use the versioned logo + - Update the dark logo too (Closes: #1150417) + * sbin/debian-edu-ltsp-install: + - Update X2Go TCE preparation for trixie (Closes: #1147625) + * finish-install: + - Keep the BD-ROM mounted (Closes: #1147630, #1147702). + * Enable the CI for aptly. + + -- Mike Gabriel Fri, 09 Oct 2026 18:00:10 +0200 + +debian-edu-config (2.13.3) unstable; urgency=medium + + * debian/control: + + Require debian-edu-artwork (>= 2.13.5-1~). Needed for debian-edu- + pxeinstall to be able to use the correct Debian Installer version's + logo banner in the graphical installer (relevant for multi-version- + netboot-di setups, see changes below). + * bin/debian-edu-ldapserver: + - Don't use $ldapserver uninitialised. + * sbin/debian-edu-ltsp-install: + - Support KDE in X2Go sessions again. + * share/debian-edu-config/tools/run-at-firstboot: + - Silence warnings during D-I installation about unability to use an + interactive debconf frontend. + * sbin/debian-edu-pxeinstall: + - When downloading the netinstaller, skip if download fails. (Closes: + #1147699). + - Support multiple D-I versions if installed as DEB. (Closes: #1147764). + - Default to amd64 only, since trixie there is no i386 Debian-Installer + anymore. + - Stop and abort if no netboot installers could be found, don't create/ + touch the TFTP config in that case. + - Enable iPXE graphical background image. + - When generating ltsp.ipxe, make the script continue/ignore if console + iPXE command is unknown to the iPXE firmware build/version. + - Use Debian-version-specific installer logo PNG in Debian Installers + installing older versons of Debian Edu. + * tools/pxe-addfirmware: + - Refactor script. Adjust for trixie and for multi-version netboot D-I. + + -- Mike Gabriel Fri, 25 Sep 2026 08:55:54 +0200 + debian-edu-config (2.13.2~deb13u1) trixie; urgency=medium * Release to trixie. diff -Nru debian-edu-config-2.13.2~deb13u1/debian/control debian-edu-config-2.13.6~deb13u1/debian/control --- debian-edu-config-2.13.2~deb13u1/debian/control 2026-09-07 08:58:26.000000000 +0000 +++ debian-edu-config-2.13.6~deb13u1/debian/control 2026-09-28 07:57:25.000000000 +0000 @@ -26,7 +26,7 @@ cfengine3, curl, debconf-utils, - debian-edu-artwork, + debian-edu-artwork (>= 2.13.5-1~), e2fsprogs, education-tasks, fping, diff -Nru debian-edu-config-2.13.2~deb13u1/debian/salsa-ci.yml debian-edu-config-2.13.6~deb13u1/debian/salsa-ci.yml --- debian-edu-config-2.13.2~deb13u1/debian/salsa-ci.yml 1970-01-01 00:00:00.000000000 +0000 +++ debian-edu-config-2.13.6~deb13u1/debian/salsa-ci.yml 2026-11-01 13:57:25.000000000 +0000 @@ -0,0 +1,3 @@ +--- +include: + - https://salsa.debian.org/installer-team/branch2repo/raw/main/trigger_b2r.yml diff -Nru debian-edu-config-2.13.2~deb13u1/etc/debian-edu/pxeinstall.conf debian-edu-config-2.13.6~deb13u1/etc/debian-edu/pxeinstall.conf --- debian-edu-config-2.13.2~deb13u1/etc/debian-edu/pxeinstall.conf 2026-08-19 20:24:04.000000000 +0000 +++ debian-edu-config-2.13.6~deb13u1/etc/debian-edu/pxeinstall.conf 2026-09-28 07:57:25.000000000 +0000 @@ -13,3 +13,6 @@ # Set this during development to test if daily d-i netboot.tar.gz is working. #dailydi=true + +# Architectures to support by Debian-Installer via PXE boot. +#archs=amd64 Binary files /srv/release.debian.org/tmp/wgJulmlT1k/debian-edu-config-2.13.2~deb13u1/ltsp-tjener-tosend.tar and /srv/release.debian.org/tmp/lPg2Y6dlVt/debian-edu-config-2.13.6~deb13u1/ltsp-tjener-tosend.tar differ diff -Nru debian-edu-config-2.13.2~deb13u1/sbin/debian-edu-ltsp-install debian-edu-config-2.13.6~deb13u1/sbin/debian-edu-ltsp-install --- debian-edu-config-2.13.2~deb13u1/sbin/debian-edu-ltsp-install 2026-09-07 08:58:26.000000000 +0000 +++ debian-edu-config-2.13.6~deb13u1/sbin/debian-edu-ltsp-install 2026-11-01 13:57:25.000000000 +0000 @@ -28,10 +28,8 @@ # support if [ -x /usr/bin/startxfce4 ]; then # from xfce4-session echo XFCE - # FIXME x2goclient and x2goserver (x2goruncommand) in Debian only support - # startkde which does not exist any more (#955128) - #elif [ -x /usr/bin/startplasma-x11 ]; then # from plasma-workspace - # echo KDE + elif [ -x /usr/bin/startplasma-x11 ]; then # from plasma-workspace + echo KDE elif [ -x /usr/bin/gnome-session ]; then # from gnome-session-bin echo GNOME elif [ -x /usr/bin/mate-session ]; then # from mate-session @@ -454,12 +452,14 @@ show=false EOF -# Specific settings needed if BD ISO image is used for installation inside d-i. -# First part of next condition: Looking for file created by base-installer and -# removed at the end of the d-i run. -if [ -e /etc/apt/apt.conf.d/00IgnoreTimeConflict ] && grep -q BD /etc/apt/sources.list ; then +# If the BD ISO image is used, ensure that it is mounted. +if grep -q BD /etc/apt/sources.list && ! mountpoint -q /media/cdrom ; then + bd_iso_was_mounted="yes" + mount /media/cdrom -o ro +fi +# If the BD ISO image is used, get as many packages as possible from the BD image instead of downloading them. +if grep -q BD /etc/apt/sources.list && [ -e /media/cdrom/.disk/cd_type ] ; then BD_ISO="true"; - device="$(grep media/cdrom /etc/fstab | cut -d' ' -f1)" mirror="file:///media/cdrom/" else mirror="http://deb.debian.org/debian" @@ -477,12 +477,18 @@ unset TMPDIR TEMP TEMPDIR TMP chroot /srv/ltsp/x2go-"$thin_type"-"$arch"/ apt clean # Care for complete sources list (security, also nonfree -- in case firmware is needed). - chroot /srv/ltsp/x2go-"$thin_type"-"$arch"/ sh -c "cp /usr/share/doc/apt/examples/sources.list /etc/apt/sources.list.d/full.list" + if [ -e /srv/ltsp/x2go-"$thin_type"-"$arch"/usr/share/doc/apt/examples/sources.list ] ; then + # Up to bookworm + chroot /srv/ltsp/x2go-"$thin_type"-"$arch"/ sh -c "cp /usr/share/doc/apt/examples/sources.list /etc/apt/sources.list.d/full.list" + else + # Since trixie + chroot /srv/ltsp/x2go-"$thin_type"-"$arch"/ sh -c "cp /usr/share/doc/apt/examples/debian.sources /etc/apt/sources.list.d/debian_full.sources" + fi 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/x2go-"$thin_type"-"$arch"/media/cdrom - mount "$device" /srv/ltsp/x2go-"$thin_type"-"$arch"/media/cdrom + mount /media/cdrom /srv/ltsp/x2go-"$thin_type"-"$arch"/media/cdrom -o bind echo "deb [trusted=yes] $mirror $dist main" > /srv/ltsp/x2go-"$thin_type"-"$arch"/etc/apt/sources.list fi chroot /srv/ltsp/x2go-"$thin_type"-"$arch"/ apt -y -qq install education-thin-client p910nd @@ -609,7 +615,7 @@ echo "search intern" >> /etc/resolv.conf # Temporary workaround needed to turn DLW images into machines of profile type 'Workstation' sed -i /etc/debian-edu/config -e "s/^PROFILE=.*/PROFILE=\"Workstation\"/g" - # Create SqashFS image. + # Create SquashFS image. ltsp image /,,/boot,subdir=boot,,/usr,subdir=usr,,/var,subdir=var # Revert resolver workaround from above. rm -f /etc/resolv.conf @@ -640,20 +646,27 @@ EOF mkdir -p /srv/ltsp/dlw chmod 755 /srv/ltsp/dlw - # Use BD-ISO if available. - if [ "true" == "$BD_ISO" ] && ! mountpoint -q /media/cdrom ; then - mount /media/cdrom + # Install base system + debootstrap --arch="$arch" --no-check-gpg --variant=minbase --include=locales,console-setup,linux-image-"$kernel_arch" "$dist" /srv/ltsp/dlw "$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/dlw/ apt clean + # Care for complete sources list (security, also nonfree -- in case firmware is needed). + if [ -e /srv/ltsp/dlw/usr/share/doc/apt/examples/sources.list ] ; then + # Up to bookworm + chroot /srv/ltsp/dlw/ sh -c "cp /usr/share/doc/apt/examples/sources.list /etc/apt/sources.list.d/full.list" + else + # Since trixie + chroot /srv/ltsp/dlw/ sh -c "cp /usr/share/doc/apt/examples/debian.sources /etc/apt/sources.list.d/debian_full.sources" fi - if grep -q BD /etc/apt/sources.list && [ -f /media/cdrom/.disk/info ] ; then + mount /dev/pts -t devpts /srv/ltsp/dlw/dev/pts + mount proc -t proc /srv/ltsp/dlw/proc + if [ "true" == "$BD_ISO" ] ; then mkdir -p /srv/ltsp/dlw/media/cdrom - mount --bind /media/cdrom /srv/ltsp/dlw/media/cdrom - mirror="file:///media/cdrom/" + mount /media/cdrom /srv/ltsp/dlw/media/cdrom -o bind + echo "deb [trusted=yes] $mirror $dist main" > /srv/ltsp/dlw/etc/apt/sources.list fi - # 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 -- in case firmware is needed). - 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/ @@ -664,14 +677,6 @@ 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 - if grep -q BD /etc/apt/sources.list && mountpoint -q /media/cdrom ; then - echo "deb [trusted=yes] $mirror $dist main" > /srv/ltsp/dlw/etc/apt/sources.list - fi mkdir -p /srv/ltsp/dlw/tmp/user/0/ cp /usr/share/debian-edu-config/tools/debian-edu-bless /srv/ltsp/dlw/sbin @@ -697,12 +702,11 @@ # Care for temporary mounts. umount /srv/ltsp/dlw/dev/pts umount /srv/ltsp/dlw/proc - if grep -q BD /etc/apt/sources.list && [ -f /media/cdrom/.disk/info ] ; then + if [ "true" == "$BD_ISO" ] ; then umount /srv/ltsp/dlw/media/cdrom - umount /media/cdrom fi - # Create optional SqashFS image file. + # Create optional SquashFS image file. if [ "yes" == "$img" ] ; then ltsp image dlw fi @@ -796,3 +800,8 @@ sed -i "s#ltsp/ltsp.img#ltsp/${img}/ltsp.img#" /srv/tftp/ltsp/ltsp.ipxe # Add "quiet" and "splash" parameters to hide kernel logs on a boot screen. sed -i "s/set cmdline ${cmdline_method} ${cmdline_ltsp} ${cmdline_client}$/set cmdline ${cmdline_method} ${cmdline_ltsp} ${cmdline_client} ${KERNEL_PARAMETERS}/" /srv/tftp/ltsp/ltsp.ipxe + +# Unmount the BD image, if it was mounted at the start of this script. +if [ "yes" == "$bd_iso_was_mounted" ] ; then + umount /media/cdrom +fi diff -Nru debian-edu-config-2.13.2~deb13u1/sbin/debian-edu-pxeinstall debian-edu-config-2.13.6~deb13u1/sbin/debian-edu-pxeinstall --- debian-edu-config-2.13.2~deb13u1/sbin/debian-edu-pxeinstall 2026-09-07 08:58:26.000000000 +0000 +++ debian-edu-config-2.13.6~deb13u1/sbin/debian-edu-pxeinstall 2026-11-01 13:57:25.000000000 +0000 @@ -52,14 +52,18 @@ # Grab dist value for both testing and stable release cases. if grep -q / /etc/debian_version ; then - dist=$(cat /etc/debian_version | cut -d/ -f1) + # Likely a Debian testing/unstable system this script is executed on. + dist_codename=$(cat /etc/debian_version | cut -d/ -f1) + dist_version=${dist_codename} else - dist=$(lsb_release -sc) + # A stable release of Debian. + dist_codename=$(lsb_release -sc) + dist_version=$(lsb_release -sr) fi default_mydesktop="xfce" -[ "$archs" ] || archs="amd64 i386" +[ "$archs" ] || archs="amd64" [ "$mirrorurl" ] || mirrorurl=http://deb.debian.org/debian [ "$hostname" ] || hostname=pxeinstall [ "$domain" ] || domain=intern @@ -136,28 +140,54 @@ [ -d $tftpdir ] || mkdir $tftpdir [ -d $tftpdir/debian-edu ] || mkdir $tftpdir/debian-edu +[ -d $tftpdir/debian-installer ] || \ +mkdir $tftpdir/debian-installer +cd $tftpdir/debian-installer + +# We require to have at least debian-installer--netboot-* installed, +# if not, we fallback to http download from Debian archive servers +if [ -d "/usr/lib/debian-installer/images/${dist_version}" ]; then + di_versions_supported="$(cd /usr/lib/debian-installer/images/; ls -1 | grep -E '^[0-9]+$' | sort -r -h)" +else + di_versions_supported="${dist_version}" +fi + for arch in $archs ; do - ( - if [ true = "$dailydi" ] ; then - diurl=https://d-i.debian.org/daily-images/$arch/daily/netboot - else - diurl=$mirrorurl/dists/$dist/main/installer-$arch/current/images/netboot - fi - [ -d $tftpdir/debian-installer ] || \ - mkdir $tftpdir/debian-installer + for di_ver in ${di_versions_supported}; do + ( cd $tftpdir/debian-installer - di_ver=11 + + echo -n "Preparing Debian Edu ${di_ver} installer (${arch}) ... " + tarball="" - if [ -d /usr/lib/debian-installer/images/$di_ver/$arch ]; then - di_img_dir="/usr/lib/debian-installer/images/$di_ver/$arch" - # Use the debian/installer netboot debs - tarball="" - if [ true = "$graphicdi" ]; then - cp -r -u $di_img_dir/gtk/debian-installer/$arch $arch + if [ -d /usr/lib/debian-installer/images/ ] && [ -n "$(find /usr/lib/debian-installer/images/ -mindepth 1 -maxdepth 1 -type d 2>/dev/null)" ]; then + + di_img_dir="/usr/lib/debian-installer/images/${di_ver}/${arch}" + if [ -d ${di_img_dir} ]; then + # Use the debian/installer netboot debs + mkdir -p ${di_ver}/ + if [ true = "$graphicdi" ]; then + cp -r -u ${di_img_dir}/gtk/debian-installer/${arch} ${di_ver}/ + else + cp -r -u ${di_img_dir}/text/debian-installer/${arch} ${di_ver}/ + fi else - cp -r -u $di_img_dir/text/debian-installer/$arch $arch + continue fi - elif [ ! -f netboot-$arch.tar.gz ] ; then + + elif [ ! -f ${dist_version}/netboot-$arch.tar.gz ] ; then + + # Daily DI vs. released netboot images + if [ true = "$dailydi" ] ; then + diurl=https://d-i.debian.org/daily-images/$arch/daily/netboot + else + diurl=${mirrorurl}/dists/${dist_codename}/main/installer-${arch}/current/images/netboot + fi + + # Only support D-I version of the server's distro version + di_ver=${dist_version} + + # This only supports Debian Installer netboot setup for the same version as this server. if [ true = "$graphicdi" ]; then # Use this URL for graphical installer, and fix # gtkvideo setting below @@ -166,16 +196,24 @@ url=$diurl/netboot.tar.gz fi echo "Fetching $url" - if wget -q -O netboot-$arch.tar.gz.new $url ; then - mv netboot-$arch.tar.gz.new netboot-$arch.tar.gz + set +e + if wget -q -O netboot-$arch.tar.gz.new $url; then + mkdir -p ${di_ver}/ + cd ${di_ver} + mv ../netboot-$arch.tar.gz.new netboot-$arch.tar.gz tarball=netboot-$arch.tar.gz else - echo "error: Unable to download $url" - exit 1 + echo "warning: Unable to download $url" + # remove cruft + rm -f netboot-$arch.tar.gz.new + continue fi + set -e fi if [ "$tarball" ] ; then tar --strip-components=2 -zxvf $tarball + # remove downloaded netboot installer tarball + rm $tarball fi if [ true = "$graphicdi" ]; then # Replace Debian installer logo with Debian Edu one. @@ -184,19 +222,31 @@ cd $TMP/$arch mkdir new cd new - unmkinitramfs $tftpdir/debian-installer/$arch/initrd.gz . - if [ ! -z "$theme" ] ; then - cp /usr/share/pixmaps/$theme-installer-logo.png usr/share/graphics/logo_debian.png - fi - find . | cpio -H newc -o > ../initrd + unmkinitramfs ${tftpdir}/debian-installer/${di_ver}/${arch}/initrd.gz . + cp /usr/share/pixmaps/debian-edu-${di_ver}-installer-logo.png usr/share/graphics/logo_debian.png + ln -fs usr/share/graphics/logo_debian.png usr/share/graphics/logo_debian_dark.png + find . | cpio -H newc -o 1> ../initrd 2>/dev/null cd .. gzip initrd - cp initrd.gz $tftpdir/debian-installer/$arch + cp initrd.gz ${tftpdir}/debian-installer/${di_ver}/${arch}/ rm -rf $TMP fi - ) + + if [ -e "${tftpdir}/debian-installer/${di_ver}/${arch}/initrd.gz" ]; then + echo "done." + else + echo "failed!" + fi + ) + done done +# We know that this script has been able to provide at least one netinstaller if its initrd.gz has been created successfully. +if [ -z "$(find ${tftpdir}/debian-installer/*/*/initrd.gz)" ]; then + echo "ERROR: no D-I netboot image could be obtained, aborting further PXE setup for PXE-based Debian Installer." + exit 1 +fi + echo "Generating $preseedfile" ( cat < $menufile @@ -287,14 +341,19 @@ if [ -f $tftpdir/ltsp/ltsp.ipxe ] ; then # ltsp is installed already, modify existing ipxe menu if ! grep -q main-server $tftpdir/ltsp/ltsp.ipxe ; then - echo "Modifying $tftpdir/ltsp/ltsp.ipxe" - sed -i '/^menu.*/ a item\ + echo "Modifying $tftpdir/ltsp/ltsp.ipxe" + + # FIXME: also support other installer versions here, currently only latest version gets + # integrated into LTSP servers ltsp.ipxe file. + + sed -i "/^menu.*/ a item\ item --gap Installation:\ -item --key a amd64 Install Debian Edu/amd64 (64-Bit)\ -item --key i i386 Install Debian Edu/i386 (32-Bit)\ +item --key a amd64_${dist_version} Install Debian Edu ${dist_version} / amd64 (64-Bit)\ +# BEGIN: Debian-Installer other versions +# END: Debian-Installer other versions item\ -' /srv/tftp/ltsp/ltsp.ipxe - cat $menufile >> $tftpdir/ltsp/ltsp.ipxe +" ${tftpdir}/ltsp/ltsp.ipxe + cat $menufile >> $tftpdir/ltsp/ltsp.ipxe fi else # generate ipxe menu on a plain main server for PXE installations @@ -304,13 +363,15 @@ cp /boot/memtest86+ia32.bin $tftpdir/ltsp/memtest.0 cp /boot/memtest86+x64.efi $tftpdir/ltsp/memtest.efi echo "Generating $tftpdir/ltsp/ltsp.ipxe" - cat < /srv/tftp/ltsp/ltsp.ipxe + cat < ${tftpdir}/ltsp/ltsp.ipxe #!ipxe # # Configure iPXE for network installations +console --picture /debian-edu/debian-edu-pxe.png || + # Set the default image (img) based on arch, or to root-path if it's not empty -cpuid --ext 29 && set img amd64 || set img i386 +cpuid --ext 29 && set img amd64_${dist_version} || set img i386_${dist_version} goto start @@ -321,8 +382,10 @@ menu Debian Edu iPXE boot menu || goto \${img} item item --gap Debian Edu installation: -item --key a amd64 Install Debian Edu/amd64 (64-Bit) -item --key i i386 Install Debian Edu/i386 (32-Bit) +item --key a amd64_${dist_version} Install Debian Edu ${dist_version} / amd64 +item +# BEGIN: Debian-Installer other versions +# END: Debian-Installer other versions item item --gap Other options: item --key m memtest Memory test @@ -369,3 +432,23 @@ fi fi +# Insert other Debian-Installer versions, if any. +if [ "${dist_version}" != "${di_versions_supported}" ]; then + # We have more D-I netboot versions installed, so inject them into the iPXE boot menu + for di_ver in ${di_versions_supported}; do + for arch in ${archs}; do + if [ "${di_ver}" = "${dist_version}" ]; then + # we already have this, see above + : + else + if [ -d $tftpdir/debian-installer/${di_ver}/${arch} ]; then + sed -i "/^# END: Debian-Installer other versions/i \ +item ${arch}_${di_ver} Install Debian Edu ${di_ver} / ${arch}\ +" ${tftpdir}/ltsp/ltsp.ipxe + fi + fi + done + done +else + sed -E -i "${tftpdir}/ltsp/ltsp.ipxe" -e "/# (BEGIN|END): Debian-Installer other versions/d" +fi diff -Nru debian-edu-config-2.13.2~deb13u1/share/debian-edu-config/d-i/finish-install debian-edu-config-2.13.6~deb13u1/share/debian-edu-config/d-i/finish-install --- debian-edu-config-2.13.2~deb13u1/share/debian-edu-config/d-i/finish-install 2026-08-19 21:07:41.000000000 +0000 +++ debian-edu-config-2.13.6~deb13u1/share/debian-edu-config/d-i/finish-install 2026-11-01 13:57:25.000000000 +0000 @@ -30,6 +30,37 @@ fi } +# Make the content of the BD available again and prevent unmounts +keep_cdrom_mountpoint_active=0 +cd_type=$(cat /cdrom/.disk/cd_type) +case "$cd_type" in + bluray*) + keep_cdrom_mountpoint_active=1 + ;; +esac + +if [ ${keep_cdrom_mountpoint_active} ]; then + # /cdrom is mounted, but /target/media/cdrom isn't + mount -o bind /cdrom /target/media/cdrom + # Restore the 00NoMountCDROM file to prevent unmounting the BD + # The file will later be deleted by 90base-installer + cat > /target/etc/apt/apt.conf.d/00NoMountCDROM << EOT +APT::CDROM::NoMount "true"; +Acquire::cdrom { + "/media/cdrom/" { + Mount "true"; + UMount "true"; + }; + AutoDetect "false"; +} +EOT + # Fixup of /target/etc/apt/sources.list: + # 1) Add a line with the magic marker 'BD' needed for debian-edu-ltsp-install + # 2) Replace the cdrom: entry with a file entry + in-target sed -i -e '1i# Origin BD image' -e 's|cdrom:\[.*\]/|[trusted=yes] file:///media/cdrom/|' /etc/apt/sources.list + in-target apt-get update +fi + db_get debian-edu-install/profile PROFILE="$RET" @@ -131,6 +162,11 @@ log "info: Installation is broken; all passwords cleared from debconf database." fi +# Cleanup +if [ ${keep_cdrom_mountpoint_active} ]; then + umount /target/media/cdrom +fi + echo "info: processes using mount point below /target" mountpoints="$(grep " /target" /proc/mounts | cut -d" " -f2 | sed s%/target%%g)" LANG=C chroot /target fuser -mv $mountpoints 2>&1 | sed 's/^/info: /' diff -Nru debian-edu-config-2.13.2~deb13u1/share/debian-edu-config/testsuite-lib.sh debian-edu-config-2.13.6~deb13u1/share/debian-edu-config/testsuite-lib.sh --- debian-edu-config-2.13.2~deb13u1/share/debian-edu-config/testsuite-lib.sh 2026-09-07 08:58:26.000000000 +0000 +++ debian-edu-config-2.13.6~deb13u1/share/debian-edu-config/testsuite-lib.sh 2026-11-01 13:57:25.000000000 +0000 @@ -44,3 +44,20 @@ fi } + +# Fill the variable 'langsfull' with language codes (e.g. en, en_GB) +prepare_langsfull() { + if deb_installed locales-all ; then + langsfull="" + if ! [ -z $LANGUAGE ] ; then + # If the language priority has been defined, add those languages + langsfull="$(echo $LANGUAGE | tr ":" " ") " + fi + if [ -r /etc/locale.gen ] ; then + # The locales that have been explicitly enabled + langsfull="$langsfull$(grep -v "^#" /etc/locale.gen | grep UTF-8 | cut -d'.' -f1)" + fi + else + langsfull="$(locale -a|grep utf8|cut -d'.' -f1)" + fi +} diff -Nru debian-edu-config-2.13.2~deb13u1/share/debian-edu-config/tools/improve-desktop-l10n debian-edu-config-2.13.6~deb13u1/share/debian-edu-config/tools/improve-desktop-l10n --- debian-edu-config-2.13.2~deb13u1/share/debian-edu-config/tools/improve-desktop-l10n 2026-08-19 20:24:05.000000000 +0000 +++ debian-edu-config-2.13.6~deb13u1/share/debian-edu-config/tools/improve-desktop-l10n 2026-11-01 13:57:25.000000000 +0000 @@ -9,7 +9,7 @@ . /usr/share/debian-edu-config/testsuite-lib.sh -langsfull="$(locale -a|grep utf8|cut -d'.' -f1)" +prepare_langsfull for lang in $langsfull ; do baselang="${lang%_*}" langcountry="$(echo ${lang%.*}|cut -d'_' -f2 | tr '[:upper:]' '[:lower:]')" diff -Nru debian-edu-config-2.13.2~deb13u1/share/debian-edu-config/tools/install-task-pkgs debian-edu-config-2.13.6~deb13u1/share/debian-edu-config/tools/install-task-pkgs --- debian-edu-config-2.13.2~deb13u1/share/debian-edu-config/tools/install-task-pkgs 2026-08-19 20:24:05.000000000 +0000 +++ debian-edu-config-2.13.6~deb13u1/share/debian-edu-config/tools/install-task-pkgs 2026-11-01 13:57:25.000000000 +0000 @@ -31,7 +31,7 @@ fi } -langsfull="$(locale -a | grep utf8 | cut -d'.' -f1)" +prepare_langsfull for lang in $langsfull ; do baselang="${lang%_*}" # , -desktop, -kde-desktop and -gnome-desktop tasks; rather weird diff -Nru debian-edu-config-2.13.2~deb13u1/share/debian-edu-config/tools/pxe-addfirmware debian-edu-config-2.13.6~deb13u1/share/debian-edu-config/tools/pxe-addfirmware --- debian-edu-config-2.13.2~deb13u1/share/debian-edu-config/tools/pxe-addfirmware 2026-08-19 20:24:05.000000000 +0000 +++ debian-edu-config-2.13.6~deb13u1/share/debian-edu-config/tools/pxe-addfirmware 2026-09-28 07:57:25.000000000 +0000 @@ -1,74 +1,100 @@ #!/bin/sh # -# Adds (non-free) firmware to the debian-installer initrd used by the +# Adds (non-free-firmware) firmware to the debian-installer initrd used by the # PXE installation to make sure it works on more hardware out of the # box. set -e +export TMPDIR=/var/tmp + +echo Finding and downloading firmware .debs +# Find files. This requires non-free-firmware to be enabled as APT +# repository. +# Skip installer debs to avoid the b43 installers that conflict +# with each other. +# For bookworm, also exclude firmware-microbit-micropython{-dl}. +# For trixie, exclude various other 'huge' firmware packages and metadata packages. +# FIXME Review if this needs to be adjusted after trixie. +debnames="$(apt-cache search ^firmware-.* | grep -v installer \ + | grep -v firmware-micropython \ + | grep -v firmware-nvidia \ + | grep -v firmware-qcom \ + | grep -v firmware-marvell-prestera \ + | grep -v firmware-linux-nonfree \ + | grep -v firmware-linux \ + | grep -v fxload \ + | grep -v dfu-util \ + | grep -v ap51-flash \ + | cut -d" " -f1)" + +# Allow caller to ask for extra debs using environment variable +debnames="$debnames $FIRMWAREDEBNAMES" + add_firmware_to_initrd() { - initrd=$1 + initrd=$1 - tmpdir=$(mktemp -d) - cd $tmpdir + tmpdir=$(mktemp -d) + cd $tmpdir - echo Finding and downloading firmware .debs - # Find files. This requires non-free to be enabled as APT - # repository. - # Skip installer debs to avoid the b43 installers that conflict - # with each other. - # For bookworm, also exclude firmware-microbit-micropython{-dl}. - # FIXME Review if this is still needed after bookworm. - debnames="$(apt-cache search ^firmware-.* | grep -v installer | grep -v micropython | cut -d" " -f1)" - - # Allow caller to ask for extra debs using environment variable - debnames="$debnames $FIRMWAREDEBNAMES" - - apt-get --download-only -y -q install $debnames - - # Find firmware .deb files - for name in $debnames ; do - for deb in /var/cache/apt/archives/${name}_* ; do - if [ -f $deb ] ; then - debs="$debs $deb" - fi + # Find firmware .deb files + for name in $debnames ; do + for deb in /var/cache/apt/archives/${name}_* ; do + if [ -f $deb ] ; then + debs="$debs $deb" + fi + done done - done - echo Unpacking current initrd - gunzip < $initrd | cpio --quiet -id + echo Unpacking current initrd + gunzip < $initrd | cpio --quiet -id - echo Unpacking firmware files, overwriting any in the original initrd - for deb in $debs ; do - if ar p $deb data.tar.gz | tar zxf - ./lib/firmware/ >/dev/null 2>&1 ; then - : - else - echo "Ignoring $deb without /lib/firmware/" - fi - done - - timestamp=$(date +%Y%m%dT%H:%M) - echo Wrapping up new initrd - find . | cpio --quiet -o -H newc | gzip -9 > $initrd.new && - mv $initrd $initrd.old-$timestamp && - mv $initrd.new $initrd - cd / - rm -rf $tmpdir + echo Unpacking firmware files, overwriting any in the original initrd + for deb in $debs ; do + data_tarball="$(ar t $deb | grep data.tar.)" + if ar p ${deb} ${data_tarball} > ${data_tarball} && tar axf ${data_tarball} ./usr/lib/firmware ; then + : + # and clean up... + rm ${data_tarball} + else + echo "Ignoring $deb without /usr/lib/firmware/" + fi + done + + timestamp=$(date +%Y%m%dT%H:%M) + echo Wrapping up new initrd + echo $(pwd) + echo ${initrd}.new + find . | cpio --quiet -o -H newc | gzip -9 > $initrd.new && + mv $initrd $initrd.old-$timestamp && + mv $initrd.new $initrd + cd / + rm -rf $tmpdir } if [ "$1" ] ; then - diroot="$1" + diroot="$1" fi # Path to where the d-i pxe boot images were unpacked if [ -z "$diroot" ] ; then - diroot=/srv/tftp/debian-installer + diroot=/srv/tftp/debian-installer fi -for initrd in $diroot/*/initrd.gz ; do - if [ -e $initrd ] ; then - add_firmware_to_initrd "$initrd" - else - echo "Unable to open $initrd" - fi +# Retrieve .deb packages that we will extract firmware files from. +apt-get --download-only --no-install-recommends -y -q install $debnames + +# We will use firmware files available for this host's Debian version for +# all Debian-Installer initrd files (also for older/newer D-I versions). +# For older D-I versions, this will likely work well. +# FIXME: For newer D-I versions, we need to find a better solution at some point +# (e.g. debootstrap a minimal system based on the D-I version and obtain the +# firmware files into that chroot, FTR: firmware packages are arch:all, so only +# one amd64 chroot for Debian version based downloads are sufficient). +for initrd in $diroot/*/*/initrd.gz ; do + if [ -e $initrd ] ; then + add_firmware_to_initrd "$initrd" + else + echo "Unable to open $initrd" + fi done diff -Nru debian-edu-config-2.13.2~deb13u1/share/debian-edu-config/tools/run-at-firstboot debian-edu-config-2.13.6~deb13u1/share/debian-edu-config/tools/run-at-firstboot --- debian-edu-config-2.13.2~deb13u1/share/debian-edu-config/tools/run-at-firstboot 2026-09-07 08:58:26.000000000 +0000 +++ debian-edu-config-2.13.6~deb13u1/share/debian-edu-config/tools/run-at-firstboot 2026-09-28 07:57:25.000000000 +0000 @@ -114,7 +114,7 @@ # we would have to wait for the weekly cron job to run before golearn # was usable. if [ -x /usr/sbin/update-apt-xapian-index ] ; then - dpkg-reconfigure apt-xapian-index + DEBCONF_FRONTEND=noninteractive dpkg-reconfigure apt-xapian-index else info "apt-xapian-index/goplay is not installed" fi