morz-infoboard/docs/superpowers/plans/2026-03-27-boot-optimierung.md
2026-03-27 22:08:15 +01:00

135 lines
3.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Boot-Optimierung Implementation Plan
> **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking.
**Goal:** Boot-Zeit der Infoscreens verkürzen durch Entfernung von `network-online.target` aus dem morz-agent Service und Deinstallation von cloud-init.
**Architecture:** Zwei unabhängige Ansible-Änderungen — eine am systemd-Unit-Template, eine an den signage_base-Tasks. Kein Application-Code betroffen.
**Tech Stack:** Ansible, systemd, Debian/Raspberry Pi OS
---
## Dateien
- Modify: `ansible/roles/signage_player/templates/morz-agent.service.j2`
- Modify: `ansible/roles/signage_base/tasks/main.yml`
---
### Task 1: network-online.target aus morz-agent.service entfernen
**Files:**
- Modify: `ansible/roles/signage_player/templates/morz-agent.service.j2`
- [ ] **Step 1: Service-Template anpassen**
Aktuelle Zeilen 34:
```
After=network-online.target
Wants=network-online.target
```
Ersetzen durch:
```
After=network.target
```
Die komplette Datei sieht danach so aus:
```ini
[Unit]
Description=Morz Infoboard Player Agent
After=network.target
[Service]
Type=simple
User={{ signage_user }}
Environment=DISPLAY=:0
Environment=XAUTHORITY=/home/{{ signage_user }}/.Xauthority
ExecStart={{ signage_binary_dest }}
Restart=on-failure
RestartSec=10
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
```
- [ ] **Step 2: Commit**
```bash
git add ansible/roles/signage_player/templates/morz-agent.service.j2
git commit -m "fix(ansible): network-online.target entfernen, network.target reicht"
```
---
### Task 2: cloud-init deinstallieren in signage_base
**Files:**
- Modify: `ansible/roles/signage_base/tasks/main.yml`
- [ ] **Step 1: cloud-init-Task ans Ende von signage_base/tasks/main.yml anhängen**
Folgenden Block **nach** dem letzten Task ("Ensure signage user exists") einfügen:
```yaml
- name: Remove cloud-init (unnötig, bremst Boot)
ansible.builtin.apt:
name: cloud-init
state: absent
purge: true
become: true
failed_when: false
- name: Remove cloud-init config directory
ansible.builtin.file:
path: /etc/cloud
state: absent
become: true
- name: Remove cloud-init state directory
ansible.builtin.file:
path: /var/lib/cloud
state: absent
become: true
```
Hinweis: `failed_when: false` beim apt-Task stellt sicher, dass der Play nicht bricht wenn cloud-init auf einer Maschine gar nicht installiert war. Die file-Tasks mit `state: absent` sind idempotent — kein `failed_when` nötig.
- [ ] **Step 2: Commit**
```bash
git add ansible/roles/signage_base/tasks/main.yml
git commit -m "fix(ansible): cloud-init deinstallieren und Verzeichnisse entfernen"
```
---
### Task 3: Ansible-Playbook gegen einen Infoscreen ausführen und prüfen
- [ ] **Step 1: Playbook ausführen**
```bash
cd ansible
ansible-playbook site.yml -l <hostname> --tags signage_base,signage_player -v
```
Erwartet: kein FAILED, Tasks für cloud-init und morz-agent.service zeigen `changed`.
- [ ] **Step 2: Auf dem Zielgerät prüfen**
```bash
# cloud-init weg?
ssh <user>@<hostname> "dpkg -l cloud-init 2>&1; ls /etc/cloud 2>&1; ls /var/lib/cloud 2>&1"
# Erwartet: "dpkg-query: no packages found", "No such file or directory" (beide Pfade)
# Service-Unit korrekt?
ssh <user>@<hostname> "systemctl cat morz-agent | grep -E 'After|Wants'"
# Erwartet: "After=network.target" — kein Wants
# Boot-Zeit vergleichen
ssh <user>@<hostname> "systemd-analyze"
# Erwartet: deutlich kürzere Kernel + userspace Zeit als vorher
```