#!/bin/bash set -e if ! id classroom >/dev/null 2>&1; then adduser \ --disabled-password \ --gecos "" \ classroom fi cat > /home/classroom/.bash_profile <<'PROFILE' if [ -z "$WAYLAND_DISPLAY" ] && [ "${XDG_VTNR:-}" = "1" ]; then exec sway -c /etc/ekklesia-classroom/sway/config fi PROFILE chown classroom:classroom /home/classroom/.bash_profile chmod 0644 /home/classroom/.bash_profile chmod 0755 /usr/local/bin/classroom-browser chmod 0755 /usr/local/bin/classroom-window chmod 0755 /usr/local/bin/classroom-dvd chmod 0755 /usr/local/bin/classroom-dvd-session chmod 0755 /usr/local/bin/classroom-dvd-css-setup chmod 0755 /usr/local/bin/classroom-notify chmod 0755 /usr/local/bin/classroom-notify-test chmod 0755 /usr/local/bin/classroom-mqtt chmod 0755 /usr/local/bin/classroom-notifications chmod 0755 /usr/local/bin/classroom-scale chmod 0755 /usr/local/bin/classroom-shutdown chmod 0755 /usr/local/bin/classroom-chrome-setup chmod 0755 /usr/local/bin/classroom-provision # Reading the optical drive needs group cdrom. Takes effect at the next # login, which the OTA reboot provides. if getent group cdrom >/dev/null 2>&1; then adduser classroom cdrom >/dev/null 2>&1 || true fi if [ ! -f /etc/ekklesia-classroom/device.conf ]; then cat > /etc/ekklesia-classroom/device.conf <<'CONFIG' # Ekklesia Classroom device configuration UPDATE_URL=https://updates.riverofglorymn.org CHANNEL=stable # Set to true on classrooms that have a DVD drive. DVD_ENABLED=false # Size of the dock, clock and notifications, 0.8 to 1.5. # Larger rooms and larger TVs want a larger number. UI_SCALE=1.0 # Church message broker. The room is this machine's hostname unless ROOM # is set. Leave MQTT_ENABLED=false until a broker exists. MQTT_ENABLED=false MQTT_HOST= MQTT_PORT=1883 MQTT_USERNAME= MQTT_PASSWORD= CONFIG fi # Make the settings discoverable on classrooms installed before they # existed. Both defaults are what those rooms already do, so nothing # about their behaviour changes. if ! grep -q '^DVD_ENABLED=' /etc/ekklesia-classroom/device.conf; then cat >> /etc/ekklesia-classroom/device.conf <<'CONFIG' # Set to true on classrooms that have a DVD drive. DVD_ENABLED=false CONFIG fi if ! grep -q '^UI_SCALE=' /etc/ekklesia-classroom/device.conf; then cat >> /etc/ekklesia-classroom/device.conf <<'CONFIG' # Size of the dock, clock and notifications, 0.8 to 1.5. # Larger rooms and larger TVs want a larger number. UI_SCALE=1.0 CONFIG fi if ! grep -q '^MQTT_ENABLED=' /etc/ekklesia-classroom/device.conf; then cat >> /etc/ekklesia-classroom/device.conf <<'CONFIG' # Church message broker. The room is this machine's hostname unless ROOM # is set. Leave MQTT_ENABLED=false until a broker exists. MQTT_ENABLED=false MQTT_HOST= MQTT_PORT=1883 MQTT_USERNAME= MQTT_PASSWORD= CONFIG fi # The broker password lives here, so the file stops being world readable. # Everything that reads it runs as root or as the classroom user. chown root:classroom /etc/ekklesia-classroom/device.conf 2>/dev/null || true chmod 0640 /etc/ekklesia-classroom/device.conf systemctl daemon-reload || true systemctl enable ekklesia-classroom-update.timer || true systemctl start ekklesia-classroom-update.timer || true # Google Chrome, and the DVD codecs when the room has a drive, are # fetched by the provisioning service at the next boot. # # Deliberately enabled but not started here. It cannot run during this # script anyway, because dpkg holds the apt lock throughout. Starting it # straight afterwards would race the reboot that an OTA update performs # the moment this install finishes, and an apt run killed by that reboot # leaves dpkg half-configured. Every OTA reboots, so waiting for the next # boot costs nothing and cannot corrupt anything. # # A failure there must never fail this installation. systemctl enable ekklesia-classroom-provision.service || true # Gives Chrome a chance to close properly on reboot, so its profile is # not marked as crashed. Best effort: it must never hold a shutdown up. systemctl enable ekklesia-classroom-shutdown.service || true # The room's link to the church broker. Enabled always; it does nothing # at all until a broker is configured in device.conf. systemctl enable ekklesia-classroom-mqtt.service || true systemctl restart ekklesia-classroom-mqtt.service || true systemctl start ekklesia-classroom-shutdown.service || true exit 0