Services (daynivo-kiosk-*, daynivo-network-guard, daynivo-boot-import),
programs in /usr/lib/daynivo-kiosk, folders /etc, /var/lib, /var/log and
/var/cache daynivo-kiosk*, the system user daynivo, DAYNIVO_* settings,
the plymouth theme, network profiles daynivo-eth0/wlan0, the image stage
and its first user daynivoadmin.
install.sh moves a kiosk installed up to 1.2.x over once: old services
stopped and removed, folders moved (configuration, password, browser
profile, logs) with symlinks under the old names, the voxip user renamed
with the same uid, network profiles renamed unless a change awaits
confirmation, and old leftovers removed. Tested by upgrading a configured
1.2.0 installation in a container, and running the install a second time.
Old names keep working where people type or place them: voxip-config.json,
voxip-authorized_keys, voxip-network-reset, voxip-kiosk-ctl, and
VOXIP_DEFAULT_URL / VOXIP_DEVICE_NAME for image builds.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
src/voxip_kiosk -> src/daynivo_kiosk, with every import, the launchers,
install.sh, the Makefile and the manager's gunicorn app path. An upgrade
replaces /usr/lib/voxip-kiosk/python as a whole, so the old package
disappears; tested by upgrading an installation of the previous commit.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- daynivo-config.json, daynivo-authorized_keys and daynivo-network-reset
on the boot partition; errors go to daynivo-config.error.txt.
- daynivo-kiosk-ctl, with voxip-kiosk-ctl as a symlink to it.
- The voxip-* names keep working, so existing SD cards and instructions
stay valid; when both config files are present the Daynivo one is
applied last.
- Internal names (services, /etc/voxip-kiosk, user voxip) are unchanged.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The self-hosted runner allows privileged containers; a fork's pull
request could otherwise run its own workflow with root on that machine.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- .github/workflows/release.yml: a tag vX.Y.Z runs the tests, publishes
daynivo-kiosk-os-X.Y.Z.tar.gz (+ .sha256) and install-online.sh as a
Gitea release, then builds the SD image with pi-gen and attaches it.
- install-online.sh: curl | sudo bash installer for the latest release.
- voxip-kiosk-updater: checks the latest release, verifies and unpacks a
newer one under /opt/daynivo-kiosk-os and runs its update.sh. A daily
timer checks around 03:00 and installs when auto_update is on.
- Web interface: Systeem -> Software-updates with the auto-update switch,
check now and install now (helper verbs update-check / update-install).
- CI checks out with plain git, so it runs on Gitea's act_runner too.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Product name (Daynivo Kiosk OS), default device name, kiosk screens,
service descriptions, installer output and docs. Internal names
(voxip-kiosk-*, /etc/voxip-kiosk, user voxip, VOXIP_* variables) stay.
An update renames a device still called "VoxIP Kiosk" to the new default.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The Daynivo mark sits on a small white tile in the navy bar, where its
navy parts would otherwise disappear; the favicon is Daynivo's too.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
With no address on any interface (cable out, no wifi) the kiosk now
switches to the offline screen right away and returns when the network
and server are back. An unreachable server with the network up still
leaves the page running for InfoFlow's offline cache. The panel on the
local pages loses its blue top edge.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Own plymouth theme (logo centred on white), quiet kernel command line
without boot text, Raspberry logos or cursor, and no firmware rainbow
square. The initramfs is only rebuilt when the theme changes;
uninstall.sh restores the previous theme.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Dark grey background, name top left, date and clock top right, a flat
panel with a blue top edge. The pages show the kiosk link (token masked)
and the management address; the clock code is shared in kiosk.js.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The actions are now on every page in the same place instead of a button
row that differed per page.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Without a connected monitor every Chromium start waited 30 s for one, so
DevTools was unreachable for ~35 s after a restart. Only wait right after
boot. The reload error now says Chromium may still be starting.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Navy as the only accent, secondary buttons for restart/shutdown, the
destructive action as a red outline, status colour only in the badge
dot, no underline on the active nav item.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
ProtectKernelTunables, ProtectKernelModules and LockPersonality imply
NoNewPrivileges for a non-root unit, so sudo refused to start the helper
(hostname, reboot, network changes all failed). Guarded by a test.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
On a Pi OS Desktop image lightdm keeps display :0 until the next reboot,
so the kiosk X server failed with 'server already running'. Disabled
display managers are recorded and re-enabled by uninstall.sh.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Chromium kiosk without a desktop for the Raspberry Pi 3, a Flask web
interface on port 8080 (kiosk, system and network management), a
restricted root helper, network changes with automatic rollback, a
healthcheck timer, install/update/uninstall scripts and a pi-gen image
build.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>