Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
2d63dc0
first steps for Debian 13
ronnystandtke Aug 16, 2025
2b6333f
first debian13 ISO build
ronnystandtke Aug 16, 2025
24bc55b
disabled onedrive because of https://bugs.debian.org/cgi-bin/bugrepor…
ronnystandtke Aug 16, 2025
9963b36
updated uninstall hook
ronnystandtke Aug 17, 2025
3f880b9
updated version number in title and ISO name
ronnystandtke Aug 17, 2025
456c515
Merge branch 'debian12' into debian13
ronnystandtke Aug 17, 2025
d3e369e
renamed archives for Debian 13
ronnystandtke Aug 20, 2025
bae4090
removed eog (replaced by loupe)
ronnystandtke Aug 20, 2025
238bb57
updated package lists for Debian 13
ronnystandtke Aug 20, 2025
1e997f3
uninstall eog (replaced by loupe)
ronnystandtke Aug 20, 2025
bd11c37
made script more robust
ronnystandtke Aug 20, 2025
1ec2122
added lernstick-diodon to lernstick-lxde package list
ronnystandtke Aug 20, 2025
57b34c5
updated Debian version in xmlboot
ronnystandtke Aug 20, 2025
d1c45dd
removed lernstick-gimp from standard list (no longer needed in Debian…
ronnystandtke Aug 21, 2025
1079a8f
re-enabled lernstick-zenmap
ronnystandtke Aug 21, 2025
29e9fd2
added lernstick-virt-manager to default list
ronnystandtke Aug 21, 2025
3e008fc
re-enabled dlcopy
ronnystandtke Aug 22, 2025
4a0c20f
re-enabled lernstickwelcome
ronnystandtke Aug 22, 2025
478167f
replaced Minetest Debian packages with Luanti Flatpak
ronnystandtke Aug 23, 2025
b395ee8
added gimp-help-pt-br
ronnystandtke Aug 23, 2025
ee7e62f
updated backports instructions
ronnystandtke Sep 26, 2025
9b5b067
updated pbuilder script for trixie
ronnystandtke Sep 26, 2025
b55e675
added more lernstick-13 archives
ronnystandtke Sep 26, 2025
1693833
re-added virtualbox packages
ronnystandtke Sep 26, 2025
a75bbfe
added gnome-shell-extension-gjs-osk to lernstick-gnome-core package list
ronnystandtke Sep 26, 2025
9eb0fa1
updated for Debian 13
ronnystandtke Nov 1, 2025
fe16395
Update debian_main-core.list.chroot
joberkel Nov 7, 2025
21df818
added hook for disabling systemd services
ronnystandtke Nov 8, 2025
dc6991f
uninstall firmware-marvell-prestera
ronnystandtke Nov 10, 2025
404bb60
updated build scripts to Debian 13
ronnystandtke Nov 10, 2025
e6c9886
added more gnome shell extensions
ronnystandtke Nov 10, 2025
e5f3d39
re-added GNOME shell extensions
ronnystandtke Nov 10, 2025
8fbd159
re-added geogebra-gnome
ronnystandtke Nov 11, 2025
ccdf95d
added unciv
ronnystandtke Nov 22, 2025
677df18
build with current kernel and nvidia packages
ronnystandtke Dec 7, 2025
df6a81f
fixed nvidia packages version
ronnystandtke Dec 7, 2025
85cb941
added hook for cleaning up the uv cache
ronnystandtke Jan 25, 2026
3749852
updated to kernel 6.18.5
joberkel Mar 4, 2026
73a0b68
re-enabled scrcpy (available as backport)
ronnystandtke Mar 13, 2026
f3dee9b
updated to kernel 6.18.15
ronnystandtke Mar 28, 2026
60255e5
re-enabled lernstick-systemd
ronnystandtke Apr 8, 2026
5a0086f
Add proxam-exam-client integration, build pipeline, firewall config
OnSebii Apr 9, 2026
f82e2af
Fix: add systemd-container to ISO build workflow
OnSebii Apr 9, 2026
9ea90bf
fix: run ISO build natively on ubuntu-latest (fix systemd-nspawn in c…
OnSebii Apr 9, 2026
60557bf
fix: build proxam-exam-client .deb from source in CI, remove logkeys …
OnSebii Apr 10, 2026
036c2df
fix: free up runner disk space before ISO build (xorriso out of space)
OnSebii Apr 11, 2026
9ea82e4
(refactor): update configuration for ProXam Exam Client to use server…
FilipWjk Apr 11, 2026
33e6cfc
feat: add support for Moodle + RDP ISO variant with associated script…
FilipWjk Apr 14, 2026
e4ba5a1
fix(ci): restore missing closing quote in .deb build step
FilipWjk Apr 14, 2026
cd6c8f1
fix(ci): remove interactive tmpfs prompt from moodle-rdp build script
FilipWjk Apr 14, 2026
a9a51b2
fix(moodle-rdp): install lernstick-firewall and enable on boot
FilipWjk Apr 14, 2026
03b6fb0
fix(moodle-rdp): remove GNOME initial setup wizard and suppress dialogs
FilipWjk Apr 15, 2026
0354ff9
feat(moodle-rdp): add student file download and file manager to launcher
FilipWjk Apr 16, 2026
a0a2860
refactor(moodle-rdp): use Moodle auth instead of token for file downl…
FilipWjk Apr 16, 2026
2135219
feat(moodle-rdp): add additional applications and pre-build MIME cach…
FilipWjk Apr 16, 2026
f1ab2e0
feat(moodle-rdp): enhance file download script to support email and t…
FilipWjk Apr 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
190 changes: 190 additions & 0 deletions .github/workflows/build-iso.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,190 @@
name: Build ProXam Exam ISO

on:
push:
tags:
- 'v*'
workflow_dispatch:
inputs:
iso_variant:
description: 'ISO variant to build'
required: true
default: 'proxam-exam'
type: choice
options:
- proxam-exam
- moodle-rdp
debug:
description: 'Enable debug output'
required: false
default: 'false'

jobs:
build:
runs-on: ubuntu-latest

steps:
- name: Free up disk space
# GitHub Actions runners come with ~14 GB total but only ~3–4 GB free after
# preinstalled software. The ISO build needs ~10+ GB. We remove toolchains
# and SDKs we don't need to reclaim ~25 GB of space.
run: |
echo "==> Disk space before cleanup:"
df -h /
sudo rm -rf \
/usr/share/dotnet \
/usr/local/lib/android \
/opt/ghc \
/opt/hostedtoolcache \
/usr/local/share/powershell \
/usr/share/swift \
/usr/local/.ghcup \
/usr/lib/jvm \
/usr/local/graalvm \
/usr/local/share/chromium \
/usr/local/share/edge_driver \
/usr/local/share/gecko_driver \
/usr/local/share/vcpkg \
/usr/share/miniconda \
/usr/local/aws-cli \
/usr/local/aws-sam-cli \
/opt/az \
"$AGENT_TOOLSDIRECTORY" || true
sudo apt-get clean
docker image prune -af || true
echo "==> Disk space after cleanup:"
df -h /

- name: Checkout proxam-lernstick
uses: actions/checkout@v4

- name: Checkout proxam-exam-client
uses: actions/checkout@v4
with:
repository: Wojtasik-Lang-Consulting/proxam-exam-client
path: proxam-exam-client-src

- name: Create constants file
run: |
cat > constants <<'EOF'
BUILD_DIR=""
TMPFS=""
TMPFS_IMAGE=""
TMPFS_IMAGE_SIZE=0
TMPFS_IMAGE_MOUNT=""
MIRROR_BUILD="http://deb.debian.org/debian"
MIRROR_SYSTEM="http://deb.debian.org/debian"
MIRROR_SECURITY_SYSTEM="http://security.debian.org/"
SOURCE="false"
EOF

- name: Build proxam-exam-client .deb and place in packages.chroot
# Build the .deb from source inside a Trixie container so the package
# is available to live-build via config/packages.chroot/ — no GitHub
# Release required and no network access needed inside the chroot.
run: |
mkdir -p config/packages.chroot
docker run --rm \
-v "${{ github.workspace }}/proxam-exam-client-src:/src" \
-v "${{ github.workspace }}/config/packages.chroot:/out" \
debian:trixie \
bash -c "
set -e
apt-get update -qq
apt-get install -y --no-install-recommends \
build-essential \
devscripts \
debhelper \
config-package-dev \
gettext \
fakeroot \
dpkg-dev
cp -r /src /build
cd /build
dpkg-buildpackage -us -uc -b
cp /proxam-exam-client_*.deb /out/
ls -la /out/
"

- name: Select ISO variant
run: |
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
ISO_VARIANT="${{ github.event.inputs.iso_variant }}"
else
ISO_VARIANT="proxam-exam"
fi

case "${ISO_VARIANT}" in
proxam-exam)
echo "ISO_VARIANT=${ISO_VARIANT}" >> "$GITHUB_ENV"
echo "ISO_BUILD_SCRIPT=build_proxam_exam_iso.sh" >> "$GITHUB_ENV"
echo "ISO_ARTIFACT_NAME=proxam-exam-iso" >> "$GITHUB_ENV"
echo "ISO_FILE_GLOB=proxam-exam_debian13_proxam_exam_*" >> "$GITHUB_ENV"
;;
moodle-rdp)
echo "ISO_VARIANT=${ISO_VARIANT}" >> "$GITHUB_ENV"
echo "ISO_BUILD_SCRIPT=build_proxam_moodle_rdp_iso.sh" >> "$GITHUB_ENV"
echo "ISO_ARTIFACT_NAME=proxam-moodle-rdp-iso" >> "$GITHUB_ENV"
echo "ISO_FILE_GLOB=lernstick_debian13_moodle_rdp_*" >> "$GITHUB_ENV"
;;
*)
echo "Unsupported ISO variant: ${ISO_VARIANT}" >&2
exit 1
;;
esac

- name: Build ISO (privileged Debian container)
# live-build uses systemd-nspawn to run chroot hooks.
# systemd-nspawn requires kernel namespaces → must run in a
# --privileged container so it has full access to host kernel features.
# Using docker run directly (instead of GitHub Actions container: block)
# lets us pass --privileged and --cgroupns=host which the container: block omits.
run: |
docker run --privileged --cgroupns=host \
-v "${{ github.workspace }}:/build" \
-w /build \
debian:trixie \
bash -c "
set -e
apt-get update -qq
apt-get install -y --no-install-recommends \
live-build \
systemd-container \
rsync \
zsync \
gfxboot \
libhtml-parser-perl \
wget \
ca-certificates \
git \
debootstrap \
squashfs-tools \
xorriso \
isolinux \
syslinux \
syslinux-common \
grub-efi-amd64-bin \
grub-pc-bin \
mtools \
dosfstools
chmod +x "${ISO_BUILD_SCRIPT}"
./${ISO_BUILD_SCRIPT}
"

- name: Upload ISO artifact
uses: actions/upload-artifact@v4
with:
name: ${{ env.ISO_ARTIFACT_NAME }}
path: |
${{ env.ISO_FILE_GLOB }}.iso
${{ env.ISO_FILE_GLOB }}.md5
retention-days: 14

- name: Create GitHub Release
if: startsWith(github.ref, 'refs/tags/')
uses: softprops/action-gh-release@v2
with:
files: |
${{ env.ISO_FILE_GLOB }}.iso
${{ env.ISO_FILE_GLOB }}.md5
generate_release_notes: true
19 changes: 19 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,22 @@ packages needed on a Debian system to run this script:
* live-build
* rsync
* zsync

## Additional ISO variants

### Minimal Moodle + RDP ISO

Use `./build_proxam_moodle_rdp_iso.sh` to create a stripped-down GNOME-based image
for Moodle exams and Windows Remote Desktop access.

This build profile:
- keeps only the shared core package lists required to boot the Lernstick image
- removes the default desktop, education and flatpak package sets
- skips the ProXam exam-client installation hook
- adds Firefox ESR, Remmina and a small launcher that opens Moodle in kiosk mode
or starts the RDP client

Before distributing the image, adjust the generated config file inside the image:
- `/etc/proxam-moodle-rdp.conf`
- set `MOODLE_URL` to your Moodle course or quiz URL
- optionally set `REMMINA_PROFILE` to a pre-provisioned `.remmina` profile path
10 changes: 5 additions & 5 deletions backports.txt
Original file line number Diff line number Diff line change
@@ -1,10 +1,10 @@
# bookworm (64 Bit)
sudo pbuilder --login --basetgz /var/cache/pbuilder/base-bookworm-bpo.tar.gz --bindmounts /home/debian12/lernstick/backports/bookworm
# trixie (64 Bit)
sudo pbuilder --login --basetgz /var/cache/pbuilder/base-trixie-bpo.tar.gz --bindmounts /home/debian13/lernstick/backports/trixie

# bookworm (32 Bit)
sudo pbuilder --login --architecture i386 --basetgz /var/cache/pbuilder/base-bookworm32-bpo.tar.gz --bindmounts /home/debian12/lernstick/backports/bookworm
# trixie (32 Bit)
sudo pbuilder --login --architecture i386 --basetgz /var/cache/pbuilder/base-trixie32-bpo.tar.gz --bindmounts /home/debian13/lernstick/backports/trixie

# bookworm
# trixie
apt update; apt --yes upgrade; apt --yes install devscripts fakeroot pbuilder sudo; /usr/lib/pbuilder/pbuilder-satisfydepends --continue-fail


Expand Down
6 changes: 3 additions & 3 deletions build_binary_release.sh
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,19 @@ fi
clear

# build edu version
git checkout debian12
git checkout debian13
./build_tmpfs.sh
./build_edu-mini_iso.sh
./build_tmpfs.sh
./build_edu_iso.sh

# build exam version
git checkout exam-debian12
git checkout exam-debian13
./build_tmpfs.sh
./build_exam_iso.sh

# checkout main repo
git checkout debian12
git checkout debian13

# final shutdown?
if [ -n "$SHUTDOWN_AFTER_BUILDING" ]
Expand Down
77 changes: 77 additions & 0 deletions build_proxam_exam_iso.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
#!/bin/bash
# ProXam Exam ISO Build Script
# Builds a Lernstick-based exam ISO with the proxam-exam-client pre-installed.
#
# Usage:
# ./build_proxam_exam_iso.sh
#
# Requirements:
# - Debian 13 (Trixie) host or container
# - live-build, rsync, zsync, gfxboot, libhtml-parser-perl installed
# - constants file present (copy from constants.example and adapt)

set -e

. ./functions.sh
check_and_source_constants

init_build

ISO_SUFFIX="_proxam_exam"
SOURCE="false"

echo "==> Building ProXam Exam ISO (suffix: ${ISO_SUFFIX})"
echo "==> Build started: $(date)"

# Override distribution to trixie for debian13 branch
build_image_proxam()
{
TODAY=$(date +%Y-%m-%d)

rm -f config/binary config/bootstrap config/build config/chroot config/common config/source
lb clean

lb config \
--apt-indices false \
--apt-recommends true \
--architectures amd64 \
--archive-areas "main contrib non-free non-free-firmware" \
--bootloaders "syslinux,grub-efi" \
--chroot-squashfs-compression-level 22 \
--chroot-squashfs-compression-type zstd \
--debootstrap-options "--include=ca-certificates,openssl" \
--distribution trixie \
--firmware-chroot false \
--iso-volume "proxam-exam ${TODAY}" \
--mirror-binary "${MIRROR_SYSTEM}" \
--mirror-binary-security "${MIRROR_SECURITY_SYSTEM}" \
--mirror-bootstrap "${MIRROR_BUILD}" \
--security true \
--source false \
--updates true \
--verbose

lb build 2>&1 | tee logfile.txt

ISO_FILE="live-image-amd64.hybrid.iso"
if [ -f "${ISO_FILE}" ]; then
PREFIX="proxam-exam_debian13${ISO_SUFFIX}_${TODAY}"
IMAGE="${PREFIX}.iso"
mv "${ISO_FILE}" "${IMAGE}"
rm -f ./*.zsync
zsyncmake -C "${IMAGE}" -u "${IMAGE}"
md5sum "${IMAGE}" > "${IMAGE}.md5"

if [ -d "${BUILD_DIR}" ]; then
mv "${PREFIX}"* "${BUILD_DIR}"
mv logfile.txt "${BUILD_DIR}"
fi

echo "==> ISO built successfully: ${IMAGE}"
else
echo "ERROR: ISO was not built. Check logfile.txt for details." | tee -a logfile.txt
exit 1
fi
}

build_image_proxam
Loading