Offline CUPS from the normal menu, local-file sites, build-dep install
- CUPS (Addons -> CUPS Printing, from ./install.sh or the Web UI) now installs from the offline bundle by itself when the kiosk can't reach the Ubuntu archive: lib/config.sh's run_with_offline_fallback switches apt to the bundle (kiosk-offline-apt on) around the install and back afterwards. No-op on manual installs or when online. - Fix cups_is_installed reporting "not installed" for an installed CUPS: `dpkg -l | grep -q` under install.sh's pipefail fails when grep exits early and dpkg takes SIGPIPE. Uses dpkg-query on the one package now. - Sites: an absolute path (/home/kiosk/docs/menu.pdf) is accepted and turned into a percent-encoded file:// URL, identically in the Sites menu (sites_parse_url) and the Web UI (parseUrl, with tests). Electron 42 shows local HTML, PDFs (built-in viewer) and images as-is. - iso/build-iso.sh checks its build tools (plus the --offline ones) and offers to `sudo apt install` what's missing; --install-deps does it without asking. --offline now refuses non-amd64 hosts up front. Tested: offline chroot of the 26.04.1 server filesystem - action_install_cups installed CUPS + printer-driver-all/hplip/gutenprint from the bundle with no network and left apt back on normal sources; webui test suite passes; Electron 42 rendered a file:// PDF and PNG with spaces/# in the path; build-iso.sh stopped with the install command when apt-utils was missing and no TTY, and installed it and built the ISO with --install-deps. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Cjz8a58eB5P9sUweqd3NHm
This commit is contained in:
@@ -104,6 +104,36 @@ offline_install_node_modules() {
|
||||
sudo -u "$KIOSK_USER" tar -xzf "$tarball" -C "$dest"
|
||||
}
|
||||
|
||||
# Quick reachability check for the package mirrors install.sh needs.
|
||||
have_internet() {
|
||||
curl -fsS --max-time 8 -o /dev/null http://archive.ubuntu.com/ubuntu/ 2>/dev/null \
|
||||
|| curl -fsS --max-time 8 -o /dev/null https://deb.nodesource.com/ 2>/dev/null
|
||||
}
|
||||
|
||||
# run_with_offline_fallback CMD [ARGS...]
|
||||
# Runs CMD normally - but on a kiosk installed from an --offline ISO with
|
||||
# no internet right now, first points apt at the bundle on this disk
|
||||
# (kiosk-offline-apt on) and switches it back afterwards, whatever CMD
|
||||
# returns. Lets apt-based installs (e.g. the CUPS addon) work from the
|
||||
# normal menus and the Web UI with no extra steps. Everywhere else
|
||||
# (manual installs, or online) it just runs CMD.
|
||||
run_with_offline_fallback() {
|
||||
local restore=0 rc=0
|
||||
if ! offline_mode_active && [[ -f "$KIOSK_OFFLINE_DIR/apt/Packages" ]] && ! have_internet; then
|
||||
log_info "No internet - installing from the offline bundle on this disk ($(sed -n 's/^Built: *//p' "$KIOSK_OFFLINE_DIR/bundle-info.txt" 2>/dev/null))"
|
||||
if sudo kiosk-offline-apt on >/dev/null; then
|
||||
restore=1
|
||||
else
|
||||
log_warning "Couldn't switch apt to the offline bundle - trying normally"
|
||||
fi
|
||||
fi
|
||||
"$@" || rc=$?
|
||||
if (( restore )); then
|
||||
sudo kiosk-offline-apt off >/dev/null || true
|
||||
fi
|
||||
return "$rc"
|
||||
}
|
||||
|
||||
kiosk_user_exists() {
|
||||
id "$KIOSK_USER" &>/dev/null
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user