Extract init-neutral unit resolution into service/, add initsys.Init with systemd, openrc and runit backends, selected by 'init:' config or autodetect. OpenRC and runit are root only; rootless units run as system services as that user. Add docs and generated examples for all three.
27 lines
735 B
Go
27 lines
735 B
Go
package cmd
|
|
|
|
import (
|
|
"fmt"
|
|
|
|
"github.com/warkanum/unitdore/config"
|
|
"github.com/warkanum/unitdore/initsys"
|
|
"github.com/warkanum/unitdore/sysuser"
|
|
)
|
|
|
|
// runtimeLabel is the RUNTIME column value for list/status.
|
|
func runtimeLabel(u config.Unit) string {
|
|
if u.IsStack() {
|
|
return u.Runtime + " (stack)"
|
|
}
|
|
return u.Runtime
|
|
}
|
|
|
|
// lingerHint prints, once per user, how to make user units start at boot.
|
|
func lingerHint(ini initsys.Init, seen map[string]bool, u config.Unit) {
|
|
if !ini.SupportsLinger() || u.User == "" || seen[u.User] || sysuser.LingerEnabled(u.User) {
|
|
return
|
|
}
|
|
seen[u.User] = true
|
|
fmt.Printf(" ! linger not enabled for %s — user units won't start at boot: sudo loginctl enable-linger %s\n", u.User, u.User)
|
|
}
|