81 lines
1.3 KiB
Markdown
81 lines
1.3 KiB
Markdown
# Unattended Boot Services Pattern Notes
|
|
|
|
This file keeps examples and rationale. The normative rules live in `contract.md`.
|
|
|
|
## Dependency Skeleton
|
|
|
|
```sh
|
|
depend() {
|
|
need localmount
|
|
after some-service
|
|
use logger
|
|
}
|
|
```
|
|
|
|
Avoid `need net` for best-effort services.
|
|
|
|
## Network-Independent SSH
|
|
|
|
```sh
|
|
#!/sbin/openrc-run
|
|
description="SSH server"
|
|
|
|
depend() {
|
|
need localmount
|
|
after bee-sshsetup
|
|
use logger
|
|
}
|
|
|
|
start() {
|
|
check_config || return 1
|
|
ebegin "Starting dropbear"
|
|
/usr/sbin/dropbear ${DROPBEAR_OPTS}
|
|
eend $?
|
|
}
|
|
```
|
|
|
|
Place this in `etc/init.d/dropbear` in the overlay to override package defaults that require network.
|
|
|
|
## Persistent DHCP
|
|
|
|
Wrong:
|
|
|
|
```sh
|
|
udhcpc -i "$iface" -t 3 -T 5 -n -q
|
|
```
|
|
|
|
Correct:
|
|
|
|
```sh
|
|
udhcpc -i "$iface" -b -t 0 -T 3 -q
|
|
```
|
|
|
|
## Typical Start Order
|
|
|
|
```text
|
|
localmount
|
|
-> sshsetup
|
|
-> dropbear
|
|
-> network
|
|
-> nvidia
|
|
-> audit
|
|
```
|
|
|
|
Use `after` for ordering without turning soft dependencies into hard boot blockers.
|
|
|
|
## Error Handling Skeleton
|
|
|
|
```sh
|
|
start() {
|
|
ebegin "Running audit"
|
|
/usr/local/bin/audit --output /var/log/audit.json >> /var/log/audit.log 2>&1
|
|
local rc=$?
|
|
if [ $rc -eq 0 ]; then
|
|
einfo "Audit complete"
|
|
else
|
|
ewarn "Audit finished with errors — check /var/log/audit.log"
|
|
fi
|
|
eend 0
|
|
}
|
|
```
|