Install opens up COMFY_DIR for the sandboxed service: ACL grant on Windows, BindPaths on Linux
This commit is contained in:
@@ -62,8 +62,14 @@ func Run(run func(ctx context.Context) error) error {
|
||||
// filesystem is read-only except StateDirectory (the install dir, so
|
||||
// self-updates can rewrite the binary), and the usual no-privilege-escalation
|
||||
// directives apply. The proxy needs nothing but outbound TCP/UDP and the
|
||||
// notify socket, so it loses nothing.
|
||||
func renderUnit(exePath, configPath string) string {
|
||||
// notify socket, so it loses nothing. A managed ComfyUI (comfyDir) gets a
|
||||
// BindPaths hole through ProtectHome/ProtectSystem: it reads its venv and
|
||||
// writes output/temp/user data under COMFY_DIR.
|
||||
func renderUnit(exePath, configPath, comfyDir string) string {
|
||||
bind := ""
|
||||
if comfyDir != "" {
|
||||
bind = "BindPaths=" + comfyDir + "\n"
|
||||
}
|
||||
return fmt.Sprintf(`[Unit]
|
||||
Description=gpu-turnstile GPU arbitration proxy for Ollama and ComfyUI
|
||||
After=network-online.target
|
||||
@@ -78,7 +84,7 @@ RestartSec=5s
|
||||
|
||||
DynamicUser=yes
|
||||
StateDirectory=%s
|
||||
ProtectSystem=strict
|
||||
%sProtectSystem=strict
|
||||
ProtectHome=yes
|
||||
PrivateTmp=yes
|
||||
NoNewPrivileges=yes
|
||||
@@ -100,7 +106,7 @@ SystemCallErrorNumber=EPERM
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
`, exePath, configPath, Name)
|
||||
`, exePath, configPath, Name, bind)
|
||||
}
|
||||
|
||||
// copyFile copies src to dst, creating dst with the given mode.
|
||||
@@ -125,7 +131,9 @@ func copyFile(src, dst string, mode os.FileMode) error {
|
||||
// sure /etc/gpu-turnstile.env exists (copied from the given config file if
|
||||
// provided), writes the hardened unit, then enables and starts it. With
|
||||
// copyBin=false the current executable location and config path are
|
||||
// registered as-is instead. Needs root.
|
||||
// registered as-is instead. When the config sets COMFY_DIR, the unit gets a
|
||||
// BindPaths= for it so the sandboxed service can reach the managed ComfyUI
|
||||
// even under /home. Needs root.
|
||||
//
|
||||
// Re-running install converges an existing unit instead of failing: it is
|
||||
// stopped first if active, the installed binary is replaced only when the
|
||||
@@ -186,7 +194,7 @@ func Install(configPath string, copyBin bool, version string) error {
|
||||
cfg = abs
|
||||
}
|
||||
}
|
||||
rendered := renderUnit(exe, cfg)
|
||||
rendered := renderUnit(exe, cfg, configuredValue(cfg, "COMFY_DIR"))
|
||||
if old, _ := os.ReadFile(unitPath); string(old) != rendered {
|
||||
if err := os.WriteFile(unitPath, []byte(rendered), 0o644); err != nil {
|
||||
return fmt.Errorf("write %s (run as root): %w", unitPath, err)
|
||||
|
||||
Reference in New Issue
Block a user