From 04e162b20f0188fb6a6fc12e7edb15c5ca068ff6 Mon Sep 17 00:00:00 2001 From: AJ ONeal Date: Sun, 7 Jul 2019 06:48:25 +0000 Subject: [PATCH] Ubuntu: start on install --- README.md | 23 ++-- .../etc/systemd/system/_name_.service.tmpl | 10 +- manager/install_darwin.go | 21 +-- manager/install_linux.go | 130 ++++++++++++++---- manager/start.go | 40 ++++-- manager/static/ab0x.go | 6 +- serviceman.go | 7 +- serviceman_darwin.go | 11 ++ serviceman_linux.go | 26 ++++ serviceman_windows.go | 11 ++ 10 files changed, 211 insertions(+), 74 deletions(-) create mode 100644 serviceman_darwin.go create mode 100644 serviceman_linux.go create mode 100644 serviceman_windows.go diff --git a/README.md b/README.md index 4d26d8d..6d35045 100644 --- a/README.md +++ b/README.md @@ -172,6 +172,7 @@ move serviceman.exe %userprofile%\bin\serviceman.exe **All Others** ``` +chmod a+x ./serviceman sudo mv ./serviceman /usr/local/bin/ ``` @@ -364,9 +365,9 @@ Where `conf.json` looks something like ```json { - "title": "Demo", - "exec": "/Users/me/go-demo/demo", - "argv": ["--foo", "bar", "--baz", "qux"] + "title": "Demo", + "exec": "/Users/me/go-demo/demo", + "argv": ["--foo", "bar", "--baz", "qux"] } ``` @@ -380,10 +381,10 @@ names and relative paths. ```json { - "title": "Demo", - "interpreter": "node.exe", - "exec": "./bin/demo.js", - "argv": ["--foo", "bar", "--baz", "qux"] + "title": "Demo", + "interpreter": "node.exe", + "exec": "./bin/demo.js", + "argv": ["--foo", "bar", "--baz", "qux"] } ``` @@ -391,12 +392,12 @@ That's equivalent to this: ```json { - "title": "Demo", + "title": "Demo", - "name": "demo", + "name": "demo", - "exec": "node.exe", - "argv": ["./bin/demo.js", "--foo", "bar", "--baz", "qux"] + "exec": "node.exe", + "argv": ["./bin/demo.js", "--foo", "bar", "--baz", "qux"] } ``` diff --git a/manager/dist/etc/systemd/system/_name_.service.tmpl b/manager/dist/etc/systemd/system/_name_.service.tmpl index 79bd48f..2c4f765 100644 --- a/manager/dist/etc/systemd/system/_name_.service.tmpl +++ b/manager/dist/etc/systemd/system/_name_.service.tmpl @@ -12,18 +12,20 @@ # sudo journalctl {{ if not .System -}} --user {{ end -}} -xefu {{ .Name }} [Unit] -Description={{ .Title }} - {{ .Desc }} +Description={{ .Title }} {{ if .Desc }}- {{ .Desc }}{{ end }} +{{ if .URL -}} Documentation={{ .URL }} +{{ end -}} {{ if .System -}} After=network-online.target Wants=network-online.target systemd-networkd-wait-online.service -{{- end }} +{{ end -}} [Service] # Restart on crash (bad signal), but not on 'clean' failure (error exit code) # Allow up to 3 restarts within 10 seconds # (it's unlikely that a user or properly-running script will do this) -Restart=on-abnormal +Restart=always StartLimitInterval=10 StartLimitBurst=3 @@ -36,7 +38,7 @@ Group={{ .Group }} {{ if .Workdir -}} WorkingDirectory={{ .Workdir }} {{ end -}} -ExecStart={{if .Interpreter }}{{ .Interpreter }} {{ end }}{{ .Exec }} {{- range $arg := .Argv }}{{ $arg }} {{- end }} +ExecStart={{if .Interpreter }}{{ .Interpreter }} {{ end }}{{ .Exec }}{{ range $arg := .Argv }} {{ $arg }}{{ end }} ExecReload=/bin/kill -USR1 $MAINPID {{if .Production -}} diff --git a/manager/install_darwin.go b/manager/install_darwin.go index 4cc5c4c..c816a83 100644 --- a/manager/install_darwin.go +++ b/manager/install_darwin.go @@ -58,6 +58,8 @@ func start(system bool, home string, name string) error { }, } + cmds = adjustPrivs(system, cmds) + fmt.Println() for i := range cmds { exe := cmds[i] @@ -112,8 +114,7 @@ func install(c *service.Service) error { plistName := c.ReverseDNS + ".plist" plistPath := filepath.Join(plistDir, plistName) if err := ioutil.WriteFile(plistPath, rw.Bytes(), 0644); err != nil { - - return fmt.Errorf("ioutil.WriteFile error: %v", err) + return fmt.Errorf("Error writing %s: %v", plistPath, err) } // TODO --no-start @@ -127,20 +128,4 @@ func install(c *service.Service) error { fmt.Printf("Added and started '%s' as a launchctl service.\n", c.Name) return nil - - /* - fmt.Printf("Installed. To start '%s' run the following:\n", c.Name) - // TODO template config file - if "" != c.Home { - plistPath = strings.Replace(plistPath, c.Home, "~", 1) - } - sudo := "" - if c.System { - sudo = "sudo " - } - fmt.Printf("\t%slaunchctl load -w %s\n", sudo, plistPath) - - - return nil - */ } diff --git a/manager/install_linux.go b/manager/install_linux.go index abcaf41..d422091 100644 --- a/manager/install_linux.go +++ b/manager/install_linux.go @@ -13,16 +13,100 @@ import ( ) var ( - srvLen int - srvExt = ".service" - srvSysPath = "/etc/systemd/system" - srvUserPath = ".local/share/systemd/user" + srvLen int + srvExt = ".service" + srvSysPath = "/etc/systemd/system" + + // Not sure which of these it's supposed to be... + // * ~/.local/share/systemd/user/watchdog.service + // * ~/.config/systemd/user/watchdog.service + // https://wiki.archlinux.org/index.php/Systemd/User + // This seems to work on Ubuntu + srvUserPath = ".config/systemd/user" ) func init() { srvLen = len(srvExt) } +func start(system bool, home string, name string) error { + sys, user, err := getMatchingSrvs(home, name) + if nil != err { + return err + } + + var service string + if system { + service, err = getOneSysSrv(sys, user, name) + if nil != err { + return err + } + service = filepath.Join(srvSysPath, service) + } else { + service, err = getOneUserSrv(home, sys, user, name) + if nil != err { + return err + } + service = filepath.Join(home, srvUserPath, service) + } + + var cmds []Runnable + if system { + cmds = []Runnable{ + Runnable{ + Exec: "systemctl", + Args: []string{"daemon-reload"}, + Must: false, + }, + Runnable{ + Exec: "systemctl", + Args: []string{"stop", name + ".service"}, + Must: false, + }, + Runnable{ + Exec: "systemctl", + Args: []string{"start", name + ".service"}, + Badwords: []string{"not found", "failed"}, + Must: true, + }, + } + } else { + cmds = []Runnable{ + Runnable{ + Exec: "systemctl", + Args: []string{"--user", "daemon-reload"}, + Must: false, + }, + Runnable{ + Exec: "systemctl", + Args: []string{"stop", "--user", name + ".service"}, + Must: false, + }, + Runnable{ + Exec: "systemctl", + Args: []string{"start", "--user", name + ".service"}, + Badwords: []string{"not found", "failed"}, + Must: true, + }, + } + } + + cmds = adjustPrivs(system, cmds) + + fmt.Println() + for i := range cmds { + exe := cmds[i] + fmt.Println(exe.String()) + err := exe.Run() + if nil != err { + return err + } + } + fmt.Println() + + return nil +} + func install(c *service.Service) error { // Linux-specific config options if c.System { @@ -33,17 +117,12 @@ func install(c *service.Service) error { if "" == c.Group { c.Group = c.User } - serviceDir := srvSysPath // Check paths first - serviceName := c.Name + ".service" + serviceDir := srvSysPath if !c.System { - // Not sure which of these it's supposed to be... - // * ~/.local/share/systemd/user/watchdog.service - // * ~/.config/systemd/user/watchdog.service - // https://wiki.archlinux.org/index.php/Systemd/User serviceDir = filepath.Join(c.Home, srvUserPath) - err := os.MkdirAll(filepath.Dir(serviceDir), 0755) + err := os.MkdirAll(serviceDir, 0755) if nil != err { return err } @@ -67,22 +146,27 @@ func install(c *service.Service) error { } // Write the file out + serviceName := c.Name + ".service" servicePath := filepath.Join(serviceDir, serviceName) if err := ioutil.WriteFile(servicePath, rw.Bytes(), 0644); err != nil { - return fmt.Errorf("ioutil.WriteFile error: %v", err) + return fmt.Errorf("Error writing %s: %v", servicePath, err) } - // TODO template this as well? - userspace := "" - sudo := "sudo " - if !c.System { - userspace = "--user " - sudo = "" + // TODO --no-start + err = start(c.System, c.Home, c.Name) + if nil != err { + sudo := "" + // --user-unit rather than --user --unit for older systemd + unit := "--user-unit" + if c.System { + sudo = "sudo " + unit = "--unit" + } + fmt.Printf("If things don't go well you should be able to get additional logging from journalctl:\n") + fmt.Printf("\t%sjournalctl -xe %s %s.service\n", sudo, unit, c.Name) + return err } - fmt.Printf("System service installed as '%s'.\n", servicePath) - fmt.Printf("Run the following to start '%s':\n", c.Name) - fmt.Printf("\t" + sudo + "systemctl " + userspace + "daemon-reload\n") - fmt.Printf("\t"+sudo+"systemctl "+userspace+"restart %s.service\n", c.Name) - fmt.Printf("\t"+sudo+"journalctl "+userspace+"-xefu %s\n", c.Name) + + fmt.Printf("Added and started '%s' as a systemd service.\n", c.Name) return nil } diff --git a/manager/start.go b/manager/start.go index 5cd7eaa..7dbf1d4 100644 --- a/manager/start.go +++ b/manager/start.go @@ -45,34 +45,33 @@ func (x Runnable) Run() error { } } if nil != err { - return fmt.Errorf("Failed to run %s %s\n%s\n", x.Exec, strings.Join(x.Args, " "), str) + var comment string + if len(x.Keywords) > 0 { + comment += "# output must match all of:\n" + comment += "# \t" + strings.Join(x.Keywords, "\n#\t") + "\n" + } + if len(x.Badwords) > 0 { + comment += "# output must not match any of:\n" + comment += "# \t" + strings.Join(x.Badwords, "\n#\t") + "\n" + } + return fmt.Errorf("Failed to run %s %s\n%s\n%s\n", x.Exec, strings.Join(x.Args, " "), str, comment) } return nil } func (x Runnable) String() string { - var comment string var must = "true" if x.Must { must = "exit" - if len(x.Keywords) > 0 { - comment += "# output must match all of:\n" - comment += "\t" + strings.Join(x.Keywords, "#\t \n") + "\n" - } - if len(x.Badwords) > 0 { - comment += "# output must not match any of:\n" - comment += "\t" + strings.Join(x.Keywords, "#\t \n") + "\n" - } } return strings.TrimSpace(fmt.Sprintf( - "%s %s || %s\n%s", + "%s %s || %s\n", x.Exec, strings.Join(x.Args, " "), must, - comment, )) } @@ -203,3 +202,20 @@ func getOneUserSrv(home string, sys []string, user []string, name string) (strin return service, nil } + +func adjustPrivs(system bool, cmds []Runnable) []Runnable { + if !system || isPrivileged() { + return cmds + } + + sudos := cmds + cmds = []Runnable{} + for i := range sudos { + exe := sudos[i] + exe.Args = append([]string{exe.Exec}, exe.Args...) + exe.Exec = "sudo" + cmds = append(cmds, exe) + } + + return cmds +} diff --git a/manager/static/ab0x.go b/manager/static/ab0x.go index 686907b..1d645d4 100644 --- a/manager/static/ab0x.go +++ b/manager/static/ab0x.go @@ -1,5 +1,5 @@ -// Code generated by fileb0x at "2019-07-04 01:21:07.139664 -0600 MDT m=+0.003157447" from config file "b0x.toml" DO NOT EDIT. -// modification hash(7ce890c82a9c0a430fe55cf7f579e8b4.acdb557394f98d3c09c0bb4d4b9142f8) +// Code generated by fileb0x at "2019-07-07 06:08:08.815823212 +0000 UTC m=+0.001636897" from config file "b0x.toml" DO NOT EDIT. +// modification hash(744f8bf151668c884152b77e5f32e002.acdb557394f98d3c09c0bb4d4b9142f8) package static @@ -39,7 +39,7 @@ type HTTPFS struct { var FileDistLibraryLaunchDaemonsRdnsPlistTmpl = []byte("\x3c\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x55\x54\x46\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x70\x6c\x69\x73\x74\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x41\x70\x70\x6c\x65\x2f\x2f\x44\x54\x44\x20\x50\x4c\x49\x53\x54\x20\x31\x2e\x30\x2f\x2f\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x61\x70\x70\x6c\x65\x2e\x63\x6f\x6d\x2f\x44\x54\x44\x73\x2f\x50\x72\x6f\x70\x65\x72\x74\x79\x4c\x69\x73\x74\x2d\x31\x2e\x30\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x70\x6c\x69\x73\x74\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x30\x22\x3e\x0a\x3c\x64\x69\x63\x74\x3e\x0a\x09\x3c\x6b\x65\x79\x3e\x4c\x61\x62\x65\x6c\x3c\x2f\x6b\x65\x79\x3e\x0a\x09\x3c\x73\x74\x72\x69\x6e\x67\x3e\x7b\x7b\x20\x2e\x52\x65\x76\x65\x72\x73\x65\x44\x4e\x53\x20\x7d\x7d\x3c\x2f\x73\x74\x72\x69\x6e\x67\x3e\x0a\x09\x3c\x6b\x65\x79\x3e\x50\x72\x6f\x67\x72\x61\x6d\x41\x72\x67\x75\x6d\x65\x6e\x74\x73\x3c\x2f\x6b\x65\x79\x3e\x0a\x09\x3c\x61\x72\x72\x61\x79\x3e\x0a\x09\x09\x7b\x7b\x2d\x20\x69\x66\x20\x2e\x49\x6e\x74\x65\x72\x70\x72\x65\x74\x65\x72\x20\x7d\x7d\x0a\x09\x09\x3c\x73\x74\x72\x69\x6e\x67\x3e\x7b\x7b\x20\x2e\x49\x6e\x74\x65\x72\x70\x72\x65\x74\x65\x72\x20\x7d\x7d\x3c\x2f\x73\x74\x72\x69\x6e\x67\x3e\x0a\x09\x09\x7b\x7b\x2d\x20\x65\x6e\x64\x20\x7d\x7d\x0a\x09\x09\x3c\x73\x74\x72\x69\x6e\x67\x3e\x7b\x7b\x20\x2e\x45\x78\x65\x63\x20\x7d\x7d\x3c\x2f\x73\x74\x72\x69\x6e\x67\x3e\x0a\x09\x09\x7b\x7b\x2d\x20\x72\x61\x6e\x67\x65\x20\x24\x61\x72\x67\x20\x3a\x3d\x20\x2e\x41\x72\x67\x76\x20\x7d\x7d\x0a\x09\x09\x3c\x73\x74\x72\x69\x6e\x67\x3e\x7b\x7b\x20\x24\x61\x72\x67\x20\x7d\x7d\x3c\x2f\x73\x74\x72\x69\x6e\x67\x3e\x0a\x09\x20\x20\x7b\x7b\x2d\x20\x65\x6e\x64\x20\x7d\x7d\x0a\x09\x3c\x2f\x61\x72\x72\x61\x79\x3e\x0a\x09\x7b\x7b\x2d\x20\x69\x66\x20\x2e\x45\x6e\x76\x73\x20\x7d\x7d\x0a\x09\x3c\x6b\x65\x79\x3e\x45\x6e\x76\x69\x72\x6f\x6e\x6d\x65\x6e\x74\x56\x61\x72\x69\x61\x62\x6c\x65\x73\x3c\x2f\x6b\x65\x79\x3e\x0a\x09\x3c\x64\x69\x63\x74\x3e\x0a\x09\x09\x7b\x7b\x2d\x20\x72\x61\x6e\x67\x65\x20\x24\x6b\x65\x79\x2c\x20\x24\x76\x61\x6c\x75\x65\x20\x3a\x3d\x20\x2e\x45\x6e\x76\x73\x20\x7d\x7d\x0a\x09\x09\x3c\x6b\x65\x79\x3e\x7b\x7b\x20\x24\x6b\x65\x79\x20\x7d\x7d\x3c\x2f\x6b\x65\x79\x3e\x0a\x09\x09\x3c\x73\x74\x72\x69\x6e\x67\x3e\x7b\x7b\x20\x24\x76\x61\x6c\x75\x65\x20\x7d\x7d\x3c\x2f\x73\x74\x72\x69\x6e\x67\x3e\x0a\x09\x09\x7b\x7b\x2d\x20\x65\x6e\x64\x20\x7d\x7d\x0a\x09\x3c\x2f\x64\x69\x63\x74\x3e\x0a\x09\x7b\x7b\x2d\x20\x65\x6e\x64\x20\x7d\x7d\x0a\x0a\x09\x7b\x7b\x69\x66\x20\x2e\x55\x73\x65\x72\x20\x2d\x7d\x7d\x0a\x09\x3c\x6b\x65\x79\x3e\x55\x73\x65\x72\x4e\x61\x6d\x65\x3c\x2f\x6b\x65\x79\x3e\x0a\x09\x3c\x73\x74\x72\x69\x6e\x67\x3e\x7b\x7b\x20\x2e\x55\x73\x65\x72\x20\x7d\x7d\x3c\x2f\x73\x74\x72\x69\x6e\x67\x3e\x0a\x09\x3c\x6b\x65\x79\x3e\x47\x72\x6f\x75\x70\x4e\x61\x6d\x65\x3c\x2f\x6b\x65\x79\x3e\x0a\x09\x3c\x73\x74\x72\x69\x6e\x67\x3e\x7b\x7b\x20\x2e\x47\x72\x6f\x75\x70\x20\x7d\x7d\x3c\x2f\x73\x74\x72\x69\x6e\x67\x3e\x0a\x09\x3c\x6b\x65\x79\x3e\x49\x6e\x69\x74\x47\x72\x6f\x75\x70\x73\x3c\x2f\x6b\x65\x79\x3e\x0a\x09\x3c\x74\x72\x75\x65\x2f\x3e\x0a\x0a\x09\x7b\x7b\x65\x6e\x64\x20\x2d\x7d\x7d\x0a\x09\x3c\x6b\x65\x79\x3e\x52\x75\x6e\x41\x74\x4c\x6f\x61\x64\x3c\x2f\x6b\x65\x79\x3e\x0a\x09\x3c\x74\x72\x75\x65\x2f\x3e\x0a\x09\x7b\x7b\x20\x69\x66\x20\x2e\x52\x65\x73\x74\x61\x72\x74\x20\x2d\x7d\x7d\x0a\x09\x3c\x6b\x65\x79\x3e\x4b\x65\x65\x70\x41\x6c\x69\x76\x65\x3c\x2f\x6b\x65\x79\x3e\x0a\x09\x3c\x74\x72\x75\x65\x2f\x3e\x0a\x09\x3c\x21\x2d\x2d\x64\x69\x63\x74\x3e\x0a\x09\x09\x3c\x6b\x65\x79\x3e\x43\x72\x61\x73\x68\x65\x64\x3c\x2f\x6b\x65\x79\x3e\x0a\x09\x09\x3c\x74\x72\x75\x65\x2f\x3e\x0a\x09\x09\x3c\x6b\x65\x79\x3e\x4e\x65\x74\x77\x6f\x72\x6b\x53\x74\x61\x74\x65\x3c\x2f\x6b\x65\x79\x3e\x0a\x09\x09\x3c\x74\x72\x75\x65\x2f\x3e\x0a\x09\x09\x3c\x6b\x65\x79\x3e\x53\x75\x63\x63\x65\x73\x73\x66\x75\x6c\x45\x78\x69\x74\x3c\x2f\x6b\x65\x79\x3e\x0a\x09\x09\x3c\x66\x61\x6c\x73\x65\x2f\x3e\x0a\x09\x3c\x2f\x64\x69\x63\x74\x2d\x2d\x3e\x0a\x0a\x09\x7b\x7b\x20\x65\x6e\x64\x20\x2d\x7d\x7d\x0a\x09\x7b\x7b\x20\x69\x66\x20\x2e\x50\x72\x6f\x64\x75\x63\x74\x69\x6f\x6e\x20\x2d\x7d\x7d\x0a\x09\x3c\x6b\x65\x79\x3e\x53\x6f\x66\x74\x52\x65\x73\x6f\x75\x72\x63\x65\x4c\x69\x6d\x69\x74\x73\x3c\x2f\x6b\x65\x79\x3e\x0a\x09\x3c\x64\x69\x63\x74\x3e\x0a\x09\x09\x3c\x6b\x65\x79\x3e\x4e\x75\x6d\x62\x65\x72\x4f\x66\x46\x69\x6c\x65\x73\x3c\x2f\x6b\x65\x79\x3e\x0a\x09\x09\x3c\x69\x6e\x74\x65\x67\x65\x72\x3e\x38\x31\x39\x32\x3c\x2f\x69\x6e\x74\x65\x67\x65\x72\x3e\x0a\x09\x3c\x2f\x64\x69\x63\x74\x3e\x0a\x09\x3c\x6b\x65\x79\x3e\x48\x61\x72\x64\x52\x65\x73\x6f\x75\x72\x63\x65\x4c\x69\x6d\x69\x74\x73\x3c\x2f\x6b\x65\x79\x3e\x0a\x09\x3c\x64\x69\x63\x74\x2f\x3e\x0a\x0a\x09\x7b\x7b\x20\x65\x6e\x64\x20\x2d\x7d\x7d\x0a\x09\x7b\x7b\x20\x69\x66\x20\x2e\x57\x6f\x72\x6b\x64\x69\x72\x20\x2d\x7d\x7d\x0a\x09\x3c\x6b\x65\x79\x3e\x57\x6f\x72\x6b\x69\x6e\x67\x44\x69\x72\x65\x63\x74\x6f\x72\x79\x3c\x2f\x6b\x65\x79\x3e\x0a\x09\x3c\x73\x74\x72\x69\x6e\x67\x3e\x7b\x7b\x20\x2e\x57\x6f\x72\x6b\x64\x69\x72\x20\x7d\x7d\x3c\x2f\x73\x74\x72\x69\x6e\x67\x3e\x0a\x0a\x09\x7b\x7b\x20\x65\x6e\x64\x20\x2d\x7d\x7d\x0a\x09\x3c\x6b\x65\x79\x3e\x53\x74\x61\x6e\x64\x61\x72\x64\x45\x72\x72\x6f\x72\x50\x61\x74\x68\x3c\x2f\x6b\x65\x79\x3e\x0a\x09\x3c\x73\x74\x72\x69\x6e\x67\x3e\x7b\x7b\x20\x2e\x4c\x6f\x67\x64\x69\x72\x20\x7d\x7d\x2f\x7b\x7b\x20\x2e\x4e\x61\x6d\x65\x20\x7d\x7d\x2e\x6c\x6f\x67\x3c\x2f\x73\x74\x72\x69\x6e\x67\x3e\x0a\x09\x3c\x6b\x65\x79\x3e\x53\x74\x61\x6e\x64\x61\x72\x64\x4f\x75\x74\x50\x61\x74\x68\x3c\x2f\x6b\x65\x79\x3e\x0a\x09\x3c\x73\x74\x72\x69\x6e\x67\x3e\x7b\x7b\x20\x2e\x4c\x6f\x67\x64\x69\x72\x20\x7d\x7d\x2f\x7b\x7b\x20\x2e\x4e\x61\x6d\x65\x20\x7d\x7d\x2e\x6c\x6f\x67\x3c\x2f\x73\x74\x72\x69\x6e\x67\x3e\x0a\x3c\x2f\x64\x69\x63\x74\x3e\x0a\x3c\x2f\x70\x6c\x69\x73\x74\x3e\x0a") // FileDistEtcSystemdSystemNameServiceTmpl is "dist/etc/systemd/system/_name_.service.tmpl" -var FileDistEtcSystemdSystemNameServiceTmpl = []byte("\x23\x20\x50\x72\x65\x2d\x72\x65\x71\x0a\x23\x20\x73\x75\x64\x6f\x20\x6d\x6b\x64\x69\x72\x20\x2d\x70\x20\x7b\x7b\x20\x2e\x4c\x6f\x63\x61\x6c\x20\x7d\x7d\x2f\x6f\x70\x74\x2f\x7b\x7b\x20\x2e\x4e\x61\x6d\x65\x20\x7d\x7d\x2f\x20\x7b\x7b\x20\x2e\x4c\x6f\x63\x61\x6c\x20\x7d\x7d\x2f\x76\x61\x72\x2f\x6c\x6f\x67\x2f\x7b\x7b\x20\x2e\x4e\x61\x6d\x65\x20\x7d\x7d\x0a\x7b\x7b\x20\x69\x66\x20\x2e\x53\x79\x73\x74\x65\x6d\x20\x2d\x7d\x7d\x0a\x7b\x7b\x2d\x20\x69\x66\x20\x61\x6e\x64\x20\x2e\x55\x73\x65\x72\x20\x28\x20\x6e\x65\x20\x22\x72\x6f\x6f\x74\x22\x20\x2e\x55\x73\x65\x72\x20\x29\x20\x2d\x7d\x7d\x0a\x23\x20\x73\x75\x64\x6f\x20\x61\x64\x64\x75\x73\x65\x72\x20\x7b\x7b\x20\x2e\x55\x73\x65\x72\x20\x7d\x7d\x20\x2d\x2d\x68\x6f\x6d\x65\x20\x2f\x6f\x70\x74\x2f\x7b\x7b\x20\x2e\x4e\x61\x6d\x65\x20\x7d\x7d\x0a\x23\x20\x73\x75\x64\x6f\x20\x63\x68\x6f\x77\x6e\x20\x2d\x52\x20\x7b\x7b\x20\x2e\x55\x73\x65\x72\x20\x7d\x7d\x3a\x7b\x7b\x20\x2e\x47\x72\x6f\x75\x70\x20\x7d\x7d\x20\x2f\x6f\x70\x74\x2f\x7b\x7b\x20\x2e\x4e\x61\x6d\x65\x20\x7d\x7d\x2f\x20\x2f\x76\x61\x72\x2f\x6c\x6f\x67\x2f\x7b\x7b\x20\x2e\x4e\x61\x6d\x65\x20\x7d\x7d\x0a\x7b\x7b\x2d\x20\x65\x6e\x64\x20\x7d\x7d\x0a\x7b\x7b\x20\x65\x6e\x64\x20\x2d\x7d\x7d\x0a\x23\x20\x50\x6f\x73\x74\x2d\x69\x6e\x73\x74\x61\x6c\x6c\x0a\x23\x20\x73\x75\x64\x6f\x20\x73\x79\x73\x74\x65\x6d\x63\x74\x6c\x20\x7b\x7b\x20\x69\x66\x20\x6e\x6f\x74\x20\x2e\x53\x79\x73\x74\x65\x6d\x20\x2d\x7d\x7d\x20\x2d\x2d\x75\x73\x65\x72\x20\x7b\x7b\x20\x65\x6e\x64\x20\x2d\x7d\x7d\x20\x64\x61\x65\x6d\x6f\x6e\x2d\x72\x65\x6c\x6f\x61\x64\x0a\x23\x20\x73\x75\x64\x6f\x20\x73\x79\x73\x74\x65\x6d\x63\x74\x6c\x20\x7b\x7b\x20\x69\x66\x20\x6e\x6f\x74\x20\x2e\x53\x79\x73\x74\x65\x6d\x20\x2d\x7d\x7d\x20\x2d\x2d\x75\x73\x65\x72\x20\x7b\x7b\x20\x65\x6e\x64\x20\x2d\x7d\x7d\x20\x72\x65\x73\x74\x61\x72\x74\x20\x7b\x7b\x20\x2e\x4e\x61\x6d\x65\x20\x7d\x7d\x2e\x73\x65\x72\x76\x69\x63\x65\x0a\x23\x20\x73\x75\x64\x6f\x20\x6a\x6f\x75\x72\x6e\x61\x6c\x63\x74\x6c\x20\x7b\x7b\x20\x69\x66\x20\x6e\x6f\x74\x20\x2e\x53\x79\x73\x74\x65\x6d\x20\x2d\x7d\x7d\x20\x2d\x2d\x75\x73\x65\x72\x20\x7b\x7b\x20\x65\x6e\x64\x20\x2d\x7d\x7d\x20\x2d\x78\x65\x66\x75\x20\x7b\x7b\x20\x2e\x4e\x61\x6d\x65\x20\x7d\x7d\x0a\x0a\x5b\x55\x6e\x69\x74\x5d\x0a\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x3d\x7b\x7b\x20\x2e\x54\x69\x74\x6c\x65\x20\x7d\x7d\x20\x2d\x20\x7b\x7b\x20\x2e\x44\x65\x73\x63\x20\x7d\x7d\x0a\x44\x6f\x63\x75\x6d\x65\x6e\x74\x61\x74\x69\x6f\x6e\x3d\x7b\x7b\x20\x2e\x55\x52\x4c\x20\x7d\x7d\x0a\x7b\x7b\x20\x69\x66\x20\x2e\x53\x79\x73\x74\x65\x6d\x20\x2d\x7d\x7d\x0a\x41\x66\x74\x65\x72\x3d\x6e\x65\x74\x77\x6f\x72\x6b\x2d\x6f\x6e\x6c\x69\x6e\x65\x2e\x74\x61\x72\x67\x65\x74\x0a\x57\x61\x6e\x74\x73\x3d\x6e\x65\x74\x77\x6f\x72\x6b\x2d\x6f\x6e\x6c\x69\x6e\x65\x2e\x74\x61\x72\x67\x65\x74\x20\x73\x79\x73\x74\x65\x6d\x64\x2d\x6e\x65\x74\x77\x6f\x72\x6b\x64\x2d\x77\x61\x69\x74\x2d\x6f\x6e\x6c\x69\x6e\x65\x2e\x73\x65\x72\x76\x69\x63\x65\x0a\x7b\x7b\x2d\x20\x65\x6e\x64\x20\x7d\x7d\x0a\x0a\x5b\x53\x65\x72\x76\x69\x63\x65\x5d\x0a\x23\x20\x52\x65\x73\x74\x61\x72\x74\x20\x6f\x6e\x20\x63\x72\x61\x73\x68\x20\x28\x62\x61\x64\x20\x73\x69\x67\x6e\x61\x6c\x29\x2c\x20\x62\x75\x74\x20\x6e\x6f\x74\x20\x6f\x6e\x20\x27\x63\x6c\x65\x61\x6e\x27\x20\x66\x61\x69\x6c\x75\x72\x65\x20\x28\x65\x72\x72\x6f\x72\x20\x65\x78\x69\x74\x20\x63\x6f\x64\x65\x29\x0a\x23\x20\x41\x6c\x6c\x6f\x77\x20\x75\x70\x20\x74\x6f\x20\x33\x20\x72\x65\x73\x74\x61\x72\x74\x73\x20\x77\x69\x74\x68\x69\x6e\x20\x31\x30\x20\x73\x65\x63\x6f\x6e\x64\x73\x0a\x23\x20\x28\x69\x74\x27\x73\x20\x75\x6e\x6c\x69\x6b\x65\x6c\x79\x20\x74\x68\x61\x74\x20\x61\x20\x75\x73\x65\x72\x20\x6f\x72\x20\x70\x72\x6f\x70\x65\x72\x6c\x79\x2d\x72\x75\x6e\x6e\x69\x6e\x67\x20\x73\x63\x72\x69\x70\x74\x20\x77\x69\x6c\x6c\x20\x64\x6f\x20\x74\x68\x69\x73\x29\x0a\x52\x65\x73\x74\x61\x72\x74\x3d\x6f\x6e\x2d\x61\x62\x6e\x6f\x72\x6d\x61\x6c\x0a\x53\x74\x61\x72\x74\x4c\x69\x6d\x69\x74\x49\x6e\x74\x65\x72\x76\x61\x6c\x3d\x31\x30\x0a\x53\x74\x61\x72\x74\x4c\x69\x6d\x69\x74\x42\x75\x72\x73\x74\x3d\x33\x0a\x0a\x7b\x7b\x20\x69\x66\x20\x2e\x55\x73\x65\x72\x20\x2d\x7d\x7d\x0a\x23\x20\x55\x73\x65\x72\x20\x61\x6e\x64\x20\x67\x72\x6f\x75\x70\x20\x74\x68\x65\x20\x70\x72\x6f\x63\x65\x73\x73\x20\x77\x69\x6c\x6c\x20\x72\x75\x6e\x20\x61\x73\x0a\x55\x73\x65\x72\x3d\x7b\x7b\x20\x2e\x55\x73\x65\x72\x20\x7d\x7d\x0a\x47\x72\x6f\x75\x70\x3d\x7b\x7b\x20\x2e\x47\x72\x6f\x75\x70\x20\x7d\x7d\x0a\x0a\x7b\x7b\x20\x65\x6e\x64\x20\x2d\x7d\x7d\x0a\x7b\x7b\x20\x69\x66\x20\x2e\x57\x6f\x72\x6b\x64\x69\x72\x20\x2d\x7d\x7d\x0a\x57\x6f\x72\x6b\x69\x6e\x67\x44\x69\x72\x65\x63\x74\x6f\x72\x79\x3d\x7b\x7b\x20\x2e\x57\x6f\x72\x6b\x64\x69\x72\x20\x7d\x7d\x0a\x7b\x7b\x20\x65\x6e\x64\x20\x2d\x7d\x7d\x0a\x45\x78\x65\x63\x53\x74\x61\x72\x74\x3d\x7b\x7b\x69\x66\x20\x2e\x49\x6e\x74\x65\x72\x70\x72\x65\x74\x65\x72\x20\x7d\x7d\x7b\x7b\x20\x2e\x49\x6e\x74\x65\x72\x70\x72\x65\x74\x65\x72\x20\x7d\x7d\x20\x7b\x7b\x20\x65\x6e\x64\x20\x7d\x7d\x7b\x7b\x20\x2e\x45\x78\x65\x63\x20\x7d\x7d\x20\x7b\x7b\x2d\x20\x72\x61\x6e\x67\x65\x20\x24\x61\x72\x67\x20\x3a\x3d\x20\x2e\x41\x72\x67\x76\x20\x7d\x7d\x7b\x7b\x20\x24\x61\x72\x67\x20\x7d\x7d\x20\x7b\x7b\x2d\x20\x65\x6e\x64\x20\x7d\x7d\x0a\x45\x78\x65\x63\x52\x65\x6c\x6f\x61\x64\x3d\x2f\x62\x69\x6e\x2f\x6b\x69\x6c\x6c\x20\x2d\x55\x53\x52\x31\x20\x24\x4d\x41\x49\x4e\x50\x49\x44\x0a\x0a\x7b\x7b\x69\x66\x20\x2e\x50\x72\x6f\x64\x75\x63\x74\x69\x6f\x6e\x20\x2d\x7d\x7d\x0a\x23\x20\x4c\x69\x6d\x69\x74\x20\x74\x68\x65\x20\x6e\x75\x6d\x62\x65\x72\x20\x6f\x66\x20\x66\x69\x6c\x65\x20\x64\x65\x73\x63\x72\x69\x70\x74\x6f\x72\x73\x20\x61\x6e\x64\x20\x70\x72\x6f\x63\x65\x73\x73\x65\x73\x3b\x20\x73\x65\x65\x20\x60\x6d\x61\x6e\x20\x73\x79\x73\x74\x65\x6d\x64\x2e\x65\x78\x65\x63\x60\x20\x66\x6f\x72\x20\x6d\x6f\x72\x65\x20\x6c\x69\x6d\x69\x74\x20\x73\x65\x74\x74\x69\x6e\x67\x73\x2e\x0a\x23\x20\x54\x68\x65\x73\x65\x20\x61\x72\x65\x20\x72\x65\x61\x73\x6f\x6e\x61\x62\x6c\x65\x20\x64\x65\x66\x61\x75\x6c\x74\x73\x20\x66\x6f\x72\x20\x61\x20\x70\x72\x6f\x64\x75\x63\x74\x69\x6f\x6e\x20\x73\x79\x73\x74\x65\x6d\x2e\x0a\x23\x20\x4e\x6f\x74\x65\x3a\x20\x73\x79\x73\x74\x65\x6d\x64\x20\x22\x75\x73\x65\x72\x20\x75\x6e\x69\x74\x73\x22\x20\x64\x6f\x20\x6e\x6f\x74\x20\x73\x75\x70\x70\x6f\x72\x74\x20\x74\x68\x69\x73\x0a\x4c\x69\x6d\x69\x74\x4e\x4f\x46\x49\x4c\x45\x3d\x31\x30\x34\x38\x35\x37\x36\x0a\x4c\x69\x6d\x69\x74\x4e\x50\x52\x4f\x43\x3d\x36\x34\x0a\x0a\x7b\x7b\x20\x65\x6e\x64\x20\x2d\x7d\x7d\x0a\x7b\x7b\x69\x66\x20\x2e\x4d\x75\x6c\x74\x69\x75\x73\x65\x72\x50\x72\x6f\x74\x65\x63\x74\x69\x6f\x6e\x20\x2d\x7d\x7d\x0a\x23\x20\x55\x73\x65\x20\x70\x72\x69\x76\x61\x74\x65\x20\x2f\x74\x6d\x70\x20\x61\x6e\x64\x20\x2f\x76\x61\x72\x2f\x74\x6d\x70\x2c\x20\x77\x68\x69\x63\x68\x20\x61\x72\x65\x20\x64\x69\x73\x63\x61\x72\x64\x65\x64\x20\x61\x66\x74\x65\x72\x20\x74\x68\x65\x20\x73\x65\x72\x76\x69\x63\x65\x20\x73\x74\x6f\x70\x73\x2e\x0a\x50\x72\x69\x76\x61\x74\x65\x54\x6d\x70\x3d\x74\x72\x75\x65\x0a\x23\x20\x55\x73\x65\x20\x61\x20\x6d\x69\x6e\x69\x6d\x61\x6c\x20\x2f\x64\x65\x76\x0a\x50\x72\x69\x76\x61\x74\x65\x44\x65\x76\x69\x63\x65\x73\x3d\x74\x72\x75\x65\x0a\x23\x20\x48\x69\x64\x65\x20\x2f\x68\x6f\x6d\x65\x2c\x20\x2f\x72\x6f\x6f\x74\x2c\x20\x61\x6e\x64\x20\x2f\x72\x75\x6e\x2f\x75\x73\x65\x72\x2e\x20\x4e\x6f\x62\x6f\x64\x79\x20\x77\x69\x6c\x6c\x20\x73\x74\x65\x61\x6c\x20\x79\x6f\x75\x72\x20\x53\x53\x48\x2d\x6b\x65\x79\x73\x2e\x0a\x50\x72\x6f\x74\x65\x63\x74\x48\x6f\x6d\x65\x3d\x74\x72\x75\x65\x0a\x23\x20\x4d\x61\x6b\x65\x20\x2f\x75\x73\x72\x2c\x20\x2f\x62\x6f\x6f\x74\x2c\x20\x2f\x65\x74\x63\x20\x61\x6e\x64\x20\x70\x6f\x73\x73\x69\x62\x6c\x79\x20\x73\x6f\x6d\x65\x20\x6d\x6f\x72\x65\x20\x66\x6f\x6c\x64\x65\x72\x73\x20\x72\x65\x61\x64\x2d\x6f\x6e\x6c\x79\x2e\x0a\x50\x72\x6f\x74\x65\x63\x74\x53\x79\x73\x74\x65\x6d\x3d\x66\x75\x6c\x6c\x0a\x23\x20\x2e\x2e\x2e\x20\x65\x78\x63\x65\x70\x74\x20\x2f\x6f\x70\x74\x2f\x7b\x7b\x20\x2e\x4e\x61\x6d\x65\x20\x7d\x7d\x20\x62\x65\x63\x61\x75\x73\x65\x20\x77\x65\x20\x77\x61\x6e\x74\x20\x61\x20\x70\x6c\x61\x63\x65\x20\x66\x6f\x72\x20\x74\x68\x65\x20\x64\x61\x74\x61\x62\x61\x73\x65\x0a\x23\x20\x61\x6e\x64\x20\x2f\x76\x61\x72\x2f\x6c\x6f\x67\x2f\x7b\x7b\x20\x2e\x4e\x61\x6d\x65\x20\x7d\x7d\x20\x62\x65\x63\x61\x75\x73\x65\x20\x77\x65\x20\x77\x61\x6e\x74\x20\x61\x20\x70\x6c\x61\x63\x65\x20\x77\x68\x65\x72\x65\x20\x6c\x6f\x67\x73\x20\x63\x61\x6e\x20\x67\x6f\x2e\x0a\x23\x20\x54\x68\x69\x73\x20\x6d\x65\x72\x65\x6c\x79\x20\x72\x65\x74\x61\x69\x6e\x73\x20\x72\x2f\x77\x20\x61\x63\x63\x65\x73\x73\x20\x72\x69\x67\x68\x74\x73\x2c\x20\x69\x74\x20\x64\x6f\x65\x73\x20\x6e\x6f\x74\x20\x61\x64\x64\x20\x61\x6e\x79\x20\x6e\x65\x77\x2e\x0a\x23\x20\x4d\x75\x73\x74\x20\x73\x74\x69\x6c\x6c\x20\x62\x65\x20\x77\x72\x69\x74\x61\x62\x6c\x65\x20\x6f\x6e\x20\x74\x68\x65\x20\x68\x6f\x73\x74\x21\x0a\x52\x65\x61\x64\x57\x72\x69\x74\x65\x44\x69\x72\x65\x63\x74\x6f\x72\x69\x65\x73\x3d\x2f\x6f\x70\x74\x2f\x7b\x7b\x20\x2e\x4e\x61\x6d\x65\x20\x7d\x7d\x20\x2f\x76\x61\x72\x2f\x6c\x6f\x67\x2f\x7b\x7b\x20\x2e\x4e\x61\x6d\x65\x20\x7d\x7d\x0a\x0a\x23\x20\x4e\x6f\x74\x65\x3a\x20\x69\x6e\x20\x76\x32\x33\x31\x20\x61\x6e\x64\x20\x61\x62\x6f\x76\x65\x20\x52\x65\x61\x64\x57\x72\x69\x74\x65\x50\x61\x74\x68\x73\x20\x68\x61\x73\x20\x62\x65\x65\x6e\x20\x72\x65\x6e\x61\x6d\x65\x64\x20\x74\x6f\x20\x52\x65\x61\x64\x57\x72\x69\x74\x65\x44\x69\x72\x65\x63\x74\x6f\x72\x69\x65\x73\x0a\x3b\x20\x52\x65\x61\x64\x57\x72\x69\x74\x65\x50\x61\x74\x68\x73\x3d\x2f\x6f\x70\x74\x2f\x7b\x7b\x20\x2e\x4e\x61\x6d\x65\x20\x7d\x7d\x20\x2f\x76\x61\x72\x2f\x6c\x6f\x67\x2f\x7b\x7b\x20\x2e\x4e\x61\x6d\x65\x20\x7d\x7d\x0a\x0a\x7b\x7b\x20\x65\x6e\x64\x20\x2d\x7d\x7d\x0a\x7b\x7b\x69\x66\x20\x2e\x50\x72\x69\x76\x69\x6c\x65\x67\x65\x64\x50\x6f\x72\x74\x73\x20\x2d\x7d\x7d\x0a\x23\x20\x54\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x61\x64\x64\x69\x74\x69\x6f\x6e\x61\x6c\x20\x73\x65\x63\x75\x72\x69\x74\x79\x20\x64\x69\x72\x65\x63\x74\x69\x76\x65\x73\x20\x6f\x6e\x6c\x79\x20\x77\x6f\x72\x6b\x20\x77\x69\x74\x68\x20\x73\x79\x73\x74\x65\x6d\x64\x20\x76\x32\x32\x39\x20\x6f\x72\x20\x6c\x61\x74\x65\x72\x2e\x0a\x23\x20\x54\x68\x65\x79\x20\x66\x75\x72\x74\x68\x65\x72\x20\x72\x65\x74\x72\x69\x63\x74\x20\x70\x72\x69\x76\x69\x6c\x65\x67\x65\x73\x20\x74\x68\x61\x74\x20\x63\x61\x6e\x20\x62\x65\x20\x67\x61\x69\x6e\x65\x64\x20\x62\x79\x20\x74\x68\x65\x20\x73\x65\x72\x76\x69\x63\x65\x2e\x0a\x23\x20\x4e\x6f\x74\x65\x20\x74\x68\x61\x74\x20\x79\x6f\x75\x20\x6d\x61\x79\x20\x68\x61\x76\x65\x20\x74\x6f\x20\x61\x64\x64\x20\x63\x61\x70\x61\x62\x69\x6c\x69\x74\x69\x65\x73\x20\x72\x65\x71\x75\x69\x72\x65\x64\x20\x62\x79\x20\x61\x6e\x79\x20\x70\x6c\x75\x67\x69\x6e\x73\x20\x69\x6e\x20\x75\x73\x65\x2e\x0a\x43\x61\x70\x61\x62\x69\x6c\x69\x74\x79\x42\x6f\x75\x6e\x64\x69\x6e\x67\x53\x65\x74\x3d\x43\x41\x50\x5f\x4e\x45\x54\x5f\x42\x49\x4e\x44\x5f\x53\x45\x52\x56\x49\x43\x45\x0a\x41\x6d\x62\x69\x65\x6e\x74\x43\x61\x70\x61\x62\x69\x6c\x69\x74\x69\x65\x73\x3d\x43\x41\x50\x5f\x4e\x45\x54\x5f\x42\x49\x4e\x44\x5f\x53\x45\x52\x56\x49\x43\x45\x0a\x4e\x6f\x4e\x65\x77\x50\x72\x69\x76\x69\x6c\x65\x67\x65\x73\x3d\x74\x72\x75\x65\x0a\x0a\x23\x20\x43\x61\x76\x65\x61\x74\x3a\x20\x53\x6f\x6d\x65\x20\x66\x65\x61\x74\x75\x72\x65\x73\x20\x6d\x61\x79\x20\x6e\x65\x65\x64\x20\x61\x64\x64\x69\x74\x69\x6f\x6e\x61\x6c\x20\x63\x61\x70\x61\x62\x69\x6c\x69\x74\x69\x65\x73\x2e\x0a\x23\x20\x46\x6f\x72\x20\x65\x78\x61\x6d\x70\x6c\x65\x20\x61\x6e\x20\x22\x75\x70\x6c\x6f\x61\x64\x22\x20\x6d\x61\x79\x20\x6e\x65\x65\x64\x20\x43\x41\x50\x5f\x4c\x45\x41\x53\x45\x0a\x3b\x20\x43\x61\x70\x61\x62\x69\x6c\x69\x74\x79\x42\x6f\x75\x6e\x64\x69\x6e\x67\x53\x65\x74\x3d\x43\x41\x50\x5f\x4e\x45\x54\x5f\x42\x49\x4e\x44\x5f\x53\x45\x52\x56\x49\x43\x45\x20\x43\x41\x50\x5f\x4c\x45\x41\x53\x45\x0a\x3b\x20\x41\x6d\x62\x69\x65\x6e\x74\x43\x61\x70\x61\x62\x69\x6c\x69\x74\x69\x65\x73\x3d\x43\x41\x50\x5f\x4e\x45\x54\x5f\x42\x49\x4e\x44\x5f\x53\x45\x52\x56\x49\x43\x45\x20\x43\x41\x50\x5f\x4c\x45\x41\x53\x45\x0a\x3b\x20\x4e\x6f\x4e\x65\x77\x50\x72\x69\x76\x69\x6c\x65\x67\x65\x73\x3d\x74\x72\x75\x65\x0a\x0a\x7b\x7b\x20\x65\x6e\x64\x20\x2d\x7d\x7d\x0a\x5b\x49\x6e\x73\x74\x61\x6c\x6c\x5d\x0a\x7b\x7b\x20\x69\x66\x20\x2e\x53\x79\x73\x74\x65\x6d\x20\x2d\x7d\x7d\x0a\x57\x61\x6e\x74\x65\x64\x42\x79\x3d\x6d\x75\x6c\x74\x69\x2d\x75\x73\x65\x72\x2e\x74\x61\x72\x67\x65\x74\x0a\x7b\x7b\x2d\x20\x65\x6c\x73\x65\x20\x2d\x7d\x7d\x0a\x57\x61\x6e\x74\x65\x64\x42\x79\x3d\x64\x65\x66\x61\x75\x6c\x74\x2e\x74\x61\x72\x67\x65\x74\x0a\x7b\x7b\x2d\x20\x65\x6e\x64\x20\x7d\x7d\x0a") +var FileDistEtcSystemdSystemNameServiceTmpl = []byte("\x23\x20\x50\x72\x65\x2d\x72\x65\x71\x0a\x23\x20\x73\x75\x64\x6f\x20\x6d\x6b\x64\x69\x72\x20\x2d\x70\x20\x7b\x7b\x20\x2e\x4c\x6f\x63\x61\x6c\x20\x7d\x7d\x2f\x6f\x70\x74\x2f\x7b\x7b\x20\x2e\x4e\x61\x6d\x65\x20\x7d\x7d\x2f\x20\x7b\x7b\x20\x2e\x4c\x6f\x63\x61\x6c\x20\x7d\x7d\x2f\x76\x61\x72\x2f\x6c\x6f\x67\x2f\x7b\x7b\x20\x2e\x4e\x61\x6d\x65\x20\x7d\x7d\x0a\x7b\x7b\x20\x69\x66\x20\x2e\x53\x79\x73\x74\x65\x6d\x20\x2d\x7d\x7d\x0a\x7b\x7b\x2d\x20\x69\x66\x20\x61\x6e\x64\x20\x2e\x55\x73\x65\x72\x20\x28\x20\x6e\x65\x20\x22\x72\x6f\x6f\x74\x22\x20\x2e\x55\x73\x65\x72\x20\x29\x20\x2d\x7d\x7d\x0a\x23\x20\x73\x75\x64\x6f\x20\x61\x64\x64\x75\x73\x65\x72\x20\x7b\x7b\x20\x2e\x55\x73\x65\x72\x20\x7d\x7d\x20\x2d\x2d\x68\x6f\x6d\x65\x20\x2f\x6f\x70\x74\x2f\x7b\x7b\x20\x2e\x4e\x61\x6d\x65\x20\x7d\x7d\x0a\x23\x20\x73\x75\x64\x6f\x20\x63\x68\x6f\x77\x6e\x20\x2d\x52\x20\x7b\x7b\x20\x2e\x55\x73\x65\x72\x20\x7d\x7d\x3a\x7b\x7b\x20\x2e\x47\x72\x6f\x75\x70\x20\x7d\x7d\x20\x2f\x6f\x70\x74\x2f\x7b\x7b\x20\x2e\x4e\x61\x6d\x65\x20\x7d\x7d\x2f\x20\x2f\x76\x61\x72\x2f\x6c\x6f\x67\x2f\x7b\x7b\x20\x2e\x4e\x61\x6d\x65\x20\x7d\x7d\x0a\x7b\x7b\x2d\x20\x65\x6e\x64\x20\x7d\x7d\x0a\x7b\x7b\x20\x65\x6e\x64\x20\x2d\x7d\x7d\x0a\x23\x20\x50\x6f\x73\x74\x2d\x69\x6e\x73\x74\x61\x6c\x6c\x0a\x23\x20\x73\x75\x64\x6f\x20\x73\x79\x73\x74\x65\x6d\x63\x74\x6c\x20\x7b\x7b\x20\x69\x66\x20\x6e\x6f\x74\x20\x2e\x53\x79\x73\x74\x65\x6d\x20\x2d\x7d\x7d\x20\x2d\x2d\x75\x73\x65\x72\x20\x7b\x7b\x20\x65\x6e\x64\x20\x2d\x7d\x7d\x20\x64\x61\x65\x6d\x6f\x6e\x2d\x72\x65\x6c\x6f\x61\x64\x0a\x23\x20\x73\x75\x64\x6f\x20\x73\x79\x73\x74\x65\x6d\x63\x74\x6c\x20\x7b\x7b\x20\x69\x66\x20\x6e\x6f\x74\x20\x2e\x53\x79\x73\x74\x65\x6d\x20\x2d\x7d\x7d\x20\x2d\x2d\x75\x73\x65\x72\x20\x7b\x7b\x20\x65\x6e\x64\x20\x2d\x7d\x7d\x20\x72\x65\x73\x74\x61\x72\x74\x20\x7b\x7b\x20\x2e\x4e\x61\x6d\x65\x20\x7d\x7d\x2e\x73\x65\x72\x76\x69\x63\x65\x0a\x23\x20\x73\x75\x64\x6f\x20\x6a\x6f\x75\x72\x6e\x61\x6c\x63\x74\x6c\x20\x7b\x7b\x20\x69\x66\x20\x6e\x6f\x74\x20\x2e\x53\x79\x73\x74\x65\x6d\x20\x2d\x7d\x7d\x20\x2d\x2d\x75\x73\x65\x72\x20\x7b\x7b\x20\x65\x6e\x64\x20\x2d\x7d\x7d\x20\x2d\x78\x65\x66\x75\x20\x7b\x7b\x20\x2e\x4e\x61\x6d\x65\x20\x7d\x7d\x0a\x0a\x5b\x55\x6e\x69\x74\x5d\x0a\x44\x65\x73\x63\x72\x69\x70\x74\x69\x6f\x6e\x3d\x7b\x7b\x20\x2e\x54\x69\x74\x6c\x65\x20\x7d\x7d\x20\x7b\x7b\x20\x69\x66\x20\x2e\x44\x65\x73\x63\x20\x7d\x7d\x2d\x20\x7b\x7b\x20\x2e\x44\x65\x73\x63\x20\x7d\x7d\x7b\x7b\x20\x65\x6e\x64\x20\x7d\x7d\x0a\x7b\x7b\x20\x69\x66\x20\x2e\x55\x52\x4c\x20\x2d\x7d\x7d\x0a\x44\x6f\x63\x75\x6d\x65\x6e\x74\x61\x74\x69\x6f\x6e\x3d\x7b\x7b\x20\x2e\x55\x52\x4c\x20\x7d\x7d\x0a\x7b\x7b\x20\x65\x6e\x64\x20\x2d\x7d\x7d\x0a\x7b\x7b\x20\x69\x66\x20\x2e\x53\x79\x73\x74\x65\x6d\x20\x2d\x7d\x7d\x0a\x41\x66\x74\x65\x72\x3d\x6e\x65\x74\x77\x6f\x72\x6b\x2d\x6f\x6e\x6c\x69\x6e\x65\x2e\x74\x61\x72\x67\x65\x74\x0a\x57\x61\x6e\x74\x73\x3d\x6e\x65\x74\x77\x6f\x72\x6b\x2d\x6f\x6e\x6c\x69\x6e\x65\x2e\x74\x61\x72\x67\x65\x74\x20\x73\x79\x73\x74\x65\x6d\x64\x2d\x6e\x65\x74\x77\x6f\x72\x6b\x64\x2d\x77\x61\x69\x74\x2d\x6f\x6e\x6c\x69\x6e\x65\x2e\x73\x65\x72\x76\x69\x63\x65\x0a\x0a\x7b\x7b\x20\x65\x6e\x64\x20\x2d\x7d\x7d\x0a\x5b\x53\x65\x72\x76\x69\x63\x65\x5d\x0a\x23\x20\x52\x65\x73\x74\x61\x72\x74\x20\x6f\x6e\x20\x63\x72\x61\x73\x68\x20\x28\x62\x61\x64\x20\x73\x69\x67\x6e\x61\x6c\x29\x2c\x20\x62\x75\x74\x20\x6e\x6f\x74\x20\x6f\x6e\x20\x27\x63\x6c\x65\x61\x6e\x27\x20\x66\x61\x69\x6c\x75\x72\x65\x20\x28\x65\x72\x72\x6f\x72\x20\x65\x78\x69\x74\x20\x63\x6f\x64\x65\x29\x0a\x23\x20\x41\x6c\x6c\x6f\x77\x20\x75\x70\x20\x74\x6f\x20\x33\x20\x72\x65\x73\x74\x61\x72\x74\x73\x20\x77\x69\x74\x68\x69\x6e\x20\x31\x30\x20\x73\x65\x63\x6f\x6e\x64\x73\x0a\x23\x20\x28\x69\x74\x27\x73\x20\x75\x6e\x6c\x69\x6b\x65\x6c\x79\x20\x74\x68\x61\x74\x20\x61\x20\x75\x73\x65\x72\x20\x6f\x72\x20\x70\x72\x6f\x70\x65\x72\x6c\x79\x2d\x72\x75\x6e\x6e\x69\x6e\x67\x20\x73\x63\x72\x69\x70\x74\x20\x77\x69\x6c\x6c\x20\x64\x6f\x20\x74\x68\x69\x73\x29\x0a\x52\x65\x73\x74\x61\x72\x74\x3d\x61\x6c\x77\x61\x79\x73\x0a\x53\x74\x61\x72\x74\x4c\x69\x6d\x69\x74\x49\x6e\x74\x65\x72\x76\x61\x6c\x3d\x31\x30\x0a\x53\x74\x61\x72\x74\x4c\x69\x6d\x69\x74\x42\x75\x72\x73\x74\x3d\x33\x0a\x0a\x7b\x7b\x20\x69\x66\x20\x2e\x55\x73\x65\x72\x20\x2d\x7d\x7d\x0a\x23\x20\x55\x73\x65\x72\x20\x61\x6e\x64\x20\x67\x72\x6f\x75\x70\x20\x74\x68\x65\x20\x70\x72\x6f\x63\x65\x73\x73\x20\x77\x69\x6c\x6c\x20\x72\x75\x6e\x20\x61\x73\x0a\x55\x73\x65\x72\x3d\x7b\x7b\x20\x2e\x55\x73\x65\x72\x20\x7d\x7d\x0a\x47\x72\x6f\x75\x70\x3d\x7b\x7b\x20\x2e\x47\x72\x6f\x75\x70\x20\x7d\x7d\x0a\x0a\x7b\x7b\x20\x65\x6e\x64\x20\x2d\x7d\x7d\x0a\x7b\x7b\x20\x69\x66\x20\x2e\x57\x6f\x72\x6b\x64\x69\x72\x20\x2d\x7d\x7d\x0a\x57\x6f\x72\x6b\x69\x6e\x67\x44\x69\x72\x65\x63\x74\x6f\x72\x79\x3d\x7b\x7b\x20\x2e\x57\x6f\x72\x6b\x64\x69\x72\x20\x7d\x7d\x0a\x7b\x7b\x20\x65\x6e\x64\x20\x2d\x7d\x7d\x0a\x45\x78\x65\x63\x53\x74\x61\x72\x74\x3d\x7b\x7b\x69\x66\x20\x2e\x49\x6e\x74\x65\x72\x70\x72\x65\x74\x65\x72\x20\x7d\x7d\x7b\x7b\x20\x2e\x49\x6e\x74\x65\x72\x70\x72\x65\x74\x65\x72\x20\x7d\x7d\x20\x7b\x7b\x20\x65\x6e\x64\x20\x7d\x7d\x7b\x7b\x20\x2e\x45\x78\x65\x63\x20\x7d\x7d\x7b\x7b\x20\x72\x61\x6e\x67\x65\x20\x24\x61\x72\x67\x20\x3a\x3d\x20\x2e\x41\x72\x67\x76\x20\x7d\x7d\x20\x7b\x7b\x20\x24\x61\x72\x67\x20\x7d\x7d\x7b\x7b\x20\x65\x6e\x64\x20\x7d\x7d\x0a\x45\x78\x65\x63\x52\x65\x6c\x6f\x61\x64\x3d\x2f\x62\x69\x6e\x2f\x6b\x69\x6c\x6c\x20\x2d\x55\x53\x52\x31\x20\x24\x4d\x41\x49\x4e\x50\x49\x44\x0a\x0a\x7b\x7b\x69\x66\x20\x2e\x50\x72\x6f\x64\x75\x63\x74\x69\x6f\x6e\x20\x2d\x7d\x7d\x0a\x23\x20\x4c\x69\x6d\x69\x74\x20\x74\x68\x65\x20\x6e\x75\x6d\x62\x65\x72\x20\x6f\x66\x20\x66\x69\x6c\x65\x20\x64\x65\x73\x63\x72\x69\x70\x74\x6f\x72\x73\x20\x61\x6e\x64\x20\x70\x72\x6f\x63\x65\x73\x73\x65\x73\x3b\x20\x73\x65\x65\x20\x60\x6d\x61\x6e\x20\x73\x79\x73\x74\x65\x6d\x64\x2e\x65\x78\x65\x63\x60\x20\x66\x6f\x72\x20\x6d\x6f\x72\x65\x20\x6c\x69\x6d\x69\x74\x20\x73\x65\x74\x74\x69\x6e\x67\x73\x2e\x0a\x23\x20\x54\x68\x65\x73\x65\x20\x61\x72\x65\x20\x72\x65\x61\x73\x6f\x6e\x61\x62\x6c\x65\x20\x64\x65\x66\x61\x75\x6c\x74\x73\x20\x66\x6f\x72\x20\x61\x20\x70\x72\x6f\x64\x75\x63\x74\x69\x6f\x6e\x20\x73\x79\x73\x74\x65\x6d\x2e\x0a\x23\x20\x4e\x6f\x74\x65\x3a\x20\x73\x79\x73\x74\x65\x6d\x64\x20\x22\x75\x73\x65\x72\x20\x75\x6e\x69\x74\x73\x22\x20\x64\x6f\x20\x6e\x6f\x74\x20\x73\x75\x70\x70\x6f\x72\x74\x20\x74\x68\x69\x73\x0a\x4c\x69\x6d\x69\x74\x4e\x4f\x46\x49\x4c\x45\x3d\x31\x30\x34\x38\x35\x37\x36\x0a\x4c\x69\x6d\x69\x74\x4e\x50\x52\x4f\x43\x3d\x36\x34\x0a\x0a\x7b\x7b\x20\x65\x6e\x64\x20\x2d\x7d\x7d\x0a\x7b\x7b\x69\x66\x20\x2e\x4d\x75\x6c\x74\x69\x75\x73\x65\x72\x50\x72\x6f\x74\x65\x63\x74\x69\x6f\x6e\x20\x2d\x7d\x7d\x0a\x23\x20\x55\x73\x65\x20\x70\x72\x69\x76\x61\x74\x65\x20\x2f\x74\x6d\x70\x20\x61\x6e\x64\x20\x2f\x76\x61\x72\x2f\x74\x6d\x70\x2c\x20\x77\x68\x69\x63\x68\x20\x61\x72\x65\x20\x64\x69\x73\x63\x61\x72\x64\x65\x64\x20\x61\x66\x74\x65\x72\x20\x74\x68\x65\x20\x73\x65\x72\x76\x69\x63\x65\x20\x73\x74\x6f\x70\x73\x2e\x0a\x50\x72\x69\x76\x61\x74\x65\x54\x6d\x70\x3d\x74\x72\x75\x65\x0a\x23\x20\x55\x73\x65\x20\x61\x20\x6d\x69\x6e\x69\x6d\x61\x6c\x20\x2f\x64\x65\x76\x0a\x50\x72\x69\x76\x61\x74\x65\x44\x65\x76\x69\x63\x65\x73\x3d\x74\x72\x75\x65\x0a\x23\x20\x48\x69\x64\x65\x20\x2f\x68\x6f\x6d\x65\x2c\x20\x2f\x72\x6f\x6f\x74\x2c\x20\x61\x6e\x64\x20\x2f\x72\x75\x6e\x2f\x75\x73\x65\x72\x2e\x20\x4e\x6f\x62\x6f\x64\x79\x20\x77\x69\x6c\x6c\x20\x73\x74\x65\x61\x6c\x20\x79\x6f\x75\x72\x20\x53\x53\x48\x2d\x6b\x65\x79\x73\x2e\x0a\x50\x72\x6f\x74\x65\x63\x74\x48\x6f\x6d\x65\x3d\x74\x72\x75\x65\x0a\x23\x20\x4d\x61\x6b\x65\x20\x2f\x75\x73\x72\x2c\x20\x2f\x62\x6f\x6f\x74\x2c\x20\x2f\x65\x74\x63\x20\x61\x6e\x64\x20\x70\x6f\x73\x73\x69\x62\x6c\x79\x20\x73\x6f\x6d\x65\x20\x6d\x6f\x72\x65\x20\x66\x6f\x6c\x64\x65\x72\x73\x20\x72\x65\x61\x64\x2d\x6f\x6e\x6c\x79\x2e\x0a\x50\x72\x6f\x74\x65\x63\x74\x53\x79\x73\x74\x65\x6d\x3d\x66\x75\x6c\x6c\x0a\x23\x20\x2e\x2e\x2e\x20\x65\x78\x63\x65\x70\x74\x20\x2f\x6f\x70\x74\x2f\x7b\x7b\x20\x2e\x4e\x61\x6d\x65\x20\x7d\x7d\x20\x62\x65\x63\x61\x75\x73\x65\x20\x77\x65\x20\x77\x61\x6e\x74\x20\x61\x20\x70\x6c\x61\x63\x65\x20\x66\x6f\x72\x20\x74\x68\x65\x20\x64\x61\x74\x61\x62\x61\x73\x65\x0a\x23\x20\x61\x6e\x64\x20\x2f\x76\x61\x72\x2f\x6c\x6f\x67\x2f\x7b\x7b\x20\x2e\x4e\x61\x6d\x65\x20\x7d\x7d\x20\x62\x65\x63\x61\x75\x73\x65\x20\x77\x65\x20\x77\x61\x6e\x74\x20\x61\x20\x70\x6c\x61\x63\x65\x20\x77\x68\x65\x72\x65\x20\x6c\x6f\x67\x73\x20\x63\x61\x6e\x20\x67\x6f\x2e\x0a\x23\x20\x54\x68\x69\x73\x20\x6d\x65\x72\x65\x6c\x79\x20\x72\x65\x74\x61\x69\x6e\x73\x20\x72\x2f\x77\x20\x61\x63\x63\x65\x73\x73\x20\x72\x69\x67\x68\x74\x73\x2c\x20\x69\x74\x20\x64\x6f\x65\x73\x20\x6e\x6f\x74\x20\x61\x64\x64\x20\x61\x6e\x79\x20\x6e\x65\x77\x2e\x0a\x23\x20\x4d\x75\x73\x74\x20\x73\x74\x69\x6c\x6c\x20\x62\x65\x20\x77\x72\x69\x74\x61\x62\x6c\x65\x20\x6f\x6e\x20\x74\x68\x65\x20\x68\x6f\x73\x74\x21\x0a\x52\x65\x61\x64\x57\x72\x69\x74\x65\x44\x69\x72\x65\x63\x74\x6f\x72\x69\x65\x73\x3d\x2f\x6f\x70\x74\x2f\x7b\x7b\x20\x2e\x4e\x61\x6d\x65\x20\x7d\x7d\x20\x2f\x76\x61\x72\x2f\x6c\x6f\x67\x2f\x7b\x7b\x20\x2e\x4e\x61\x6d\x65\x20\x7d\x7d\x0a\x0a\x23\x20\x4e\x6f\x74\x65\x3a\x20\x69\x6e\x20\x76\x32\x33\x31\x20\x61\x6e\x64\x20\x61\x62\x6f\x76\x65\x20\x52\x65\x61\x64\x57\x72\x69\x74\x65\x50\x61\x74\x68\x73\x20\x68\x61\x73\x20\x62\x65\x65\x6e\x20\x72\x65\x6e\x61\x6d\x65\x64\x20\x74\x6f\x20\x52\x65\x61\x64\x57\x72\x69\x74\x65\x44\x69\x72\x65\x63\x74\x6f\x72\x69\x65\x73\x0a\x3b\x20\x52\x65\x61\x64\x57\x72\x69\x74\x65\x50\x61\x74\x68\x73\x3d\x2f\x6f\x70\x74\x2f\x7b\x7b\x20\x2e\x4e\x61\x6d\x65\x20\x7d\x7d\x20\x2f\x76\x61\x72\x2f\x6c\x6f\x67\x2f\x7b\x7b\x20\x2e\x4e\x61\x6d\x65\x20\x7d\x7d\x0a\x0a\x7b\x7b\x20\x65\x6e\x64\x20\x2d\x7d\x7d\x0a\x7b\x7b\x69\x66\x20\x2e\x50\x72\x69\x76\x69\x6c\x65\x67\x65\x64\x50\x6f\x72\x74\x73\x20\x2d\x7d\x7d\x0a\x23\x20\x54\x68\x65\x20\x66\x6f\x6c\x6c\x6f\x77\x69\x6e\x67\x20\x61\x64\x64\x69\x74\x69\x6f\x6e\x61\x6c\x20\x73\x65\x63\x75\x72\x69\x74\x79\x20\x64\x69\x72\x65\x63\x74\x69\x76\x65\x73\x20\x6f\x6e\x6c\x79\x20\x77\x6f\x72\x6b\x20\x77\x69\x74\x68\x20\x73\x79\x73\x74\x65\x6d\x64\x20\x76\x32\x32\x39\x20\x6f\x72\x20\x6c\x61\x74\x65\x72\x2e\x0a\x23\x20\x54\x68\x65\x79\x20\x66\x75\x72\x74\x68\x65\x72\x20\x72\x65\x74\x72\x69\x63\x74\x20\x70\x72\x69\x76\x69\x6c\x65\x67\x65\x73\x20\x74\x68\x61\x74\x20\x63\x61\x6e\x20\x62\x65\x20\x67\x61\x69\x6e\x65\x64\x20\x62\x79\x20\x74\x68\x65\x20\x73\x65\x72\x76\x69\x63\x65\x2e\x0a\x23\x20\x4e\x6f\x74\x65\x20\x74\x68\x61\x74\x20\x79\x6f\x75\x20\x6d\x61\x79\x20\x68\x61\x76\x65\x20\x74\x6f\x20\x61\x64\x64\x20\x63\x61\x70\x61\x62\x69\x6c\x69\x74\x69\x65\x73\x20\x72\x65\x71\x75\x69\x72\x65\x64\x20\x62\x79\x20\x61\x6e\x79\x20\x70\x6c\x75\x67\x69\x6e\x73\x20\x69\x6e\x20\x75\x73\x65\x2e\x0a\x43\x61\x70\x61\x62\x69\x6c\x69\x74\x79\x42\x6f\x75\x6e\x64\x69\x6e\x67\x53\x65\x74\x3d\x43\x41\x50\x5f\x4e\x45\x54\x5f\x42\x49\x4e\x44\x5f\x53\x45\x52\x56\x49\x43\x45\x0a\x41\x6d\x62\x69\x65\x6e\x74\x43\x61\x70\x61\x62\x69\x6c\x69\x74\x69\x65\x73\x3d\x43\x41\x50\x5f\x4e\x45\x54\x5f\x42\x49\x4e\x44\x5f\x53\x45\x52\x56\x49\x43\x45\x0a\x4e\x6f\x4e\x65\x77\x50\x72\x69\x76\x69\x6c\x65\x67\x65\x73\x3d\x74\x72\x75\x65\x0a\x0a\x23\x20\x43\x61\x76\x65\x61\x74\x3a\x20\x53\x6f\x6d\x65\x20\x66\x65\x61\x74\x75\x72\x65\x73\x20\x6d\x61\x79\x20\x6e\x65\x65\x64\x20\x61\x64\x64\x69\x74\x69\x6f\x6e\x61\x6c\x20\x63\x61\x70\x61\x62\x69\x6c\x69\x74\x69\x65\x73\x2e\x0a\x23\x20\x46\x6f\x72\x20\x65\x78\x61\x6d\x70\x6c\x65\x20\x61\x6e\x20\x22\x75\x70\x6c\x6f\x61\x64\x22\x20\x6d\x61\x79\x20\x6e\x65\x65\x64\x20\x43\x41\x50\x5f\x4c\x45\x41\x53\x45\x0a\x3b\x20\x43\x61\x70\x61\x62\x69\x6c\x69\x74\x79\x42\x6f\x75\x6e\x64\x69\x6e\x67\x53\x65\x74\x3d\x43\x41\x50\x5f\x4e\x45\x54\x5f\x42\x49\x4e\x44\x5f\x53\x45\x52\x56\x49\x43\x45\x20\x43\x41\x50\x5f\x4c\x45\x41\x53\x45\x0a\x3b\x20\x41\x6d\x62\x69\x65\x6e\x74\x43\x61\x70\x61\x62\x69\x6c\x69\x74\x69\x65\x73\x3d\x43\x41\x50\x5f\x4e\x45\x54\x5f\x42\x49\x4e\x44\x5f\x53\x45\x52\x56\x49\x43\x45\x20\x43\x41\x50\x5f\x4c\x45\x41\x53\x45\x0a\x3b\x20\x4e\x6f\x4e\x65\x77\x50\x72\x69\x76\x69\x6c\x65\x67\x65\x73\x3d\x74\x72\x75\x65\x0a\x0a\x7b\x7b\x20\x65\x6e\x64\x20\x2d\x7d\x7d\x0a\x5b\x49\x6e\x73\x74\x61\x6c\x6c\x5d\x0a\x7b\x7b\x20\x69\x66\x20\x2e\x53\x79\x73\x74\x65\x6d\x20\x2d\x7d\x7d\x0a\x57\x61\x6e\x74\x65\x64\x42\x79\x3d\x6d\x75\x6c\x74\x69\x2d\x75\x73\x65\x72\x2e\x74\x61\x72\x67\x65\x74\x0a\x7b\x7b\x2d\x20\x65\x6c\x73\x65\x20\x2d\x7d\x7d\x0a\x57\x61\x6e\x74\x65\x64\x42\x79\x3d\x64\x65\x66\x61\x75\x6c\x74\x2e\x74\x61\x72\x67\x65\x74\x0a\x7b\x7b\x2d\x20\x65\x6e\x64\x20\x7d\x7d\x0a") func init() { err := CTX.Err() diff --git a/serviceman.go b/serviceman.go index c38a2bc..f54cce9 100644 --- a/serviceman.go +++ b/serviceman.go @@ -126,15 +126,16 @@ func add() { conf.Normalize(force) //fmt.Printf("\n%#v\n\n", conf) + if conf.System && !manager.IsPrivileged() { + fmt.Fprintf(os.Stderr, "Warning: You may need to use 'sudo' to add %q as a privileged system service.\n", conf.Name) + } err = manager.Install(conf) if nil != err { fmt.Fprintf(os.Stderr, "%s\n", err) - fmt.Fprintf(os.Stderr, "Use 'sudo' to add service as a privileged system service.\n") - fmt.Fprintf(os.Stderr, "Use '--user' to add service as an user service.\n") } - fmt.Printf("If all went well the logs should have been created at:\n\t%s\n", conf.Logdir) + printLogMessage(conf) fmt.Println() } diff --git a/serviceman_darwin.go b/serviceman_darwin.go new file mode 100644 index 0000000..7d5c388 --- /dev/null +++ b/serviceman_darwin.go @@ -0,0 +1,11 @@ +package main + +import ( + "fmt" + + "git.rootprojects.org/root/go-serviceman/service" +) + +func printLogMessage(conf *service.Service) { + fmt.Printf("If all went well the logs should have been created at:\n\t%s\n", conf.Logdir) +} diff --git a/serviceman_linux.go b/serviceman_linux.go new file mode 100644 index 0000000..b71cea0 --- /dev/null +++ b/serviceman_linux.go @@ -0,0 +1,26 @@ +package main + +import ( + "fmt" + + "git.rootprojects.org/root/go-serviceman/manager" + "git.rootprojects.org/root/go-serviceman/service" +) + +func printLogMessage(conf *service.Service) { + sudo := "" + unit := "--unit" + if conf.System { + if !manager.IsPrivileged() { + sudo = "sudo" + } + } else { + unit = "--user-unit" + } + fmt.Println("If all went well you should be able to see some goodies in the logs:") + fmt.Printf("\t%sjournalctl -xe %s %s.service\n", sudo, unit, conf.Name) + if !conf.System { + fmt.Println("\nIf that's not the case, see https://unix.stackexchange.com/a/486566/45554.") + fmt.Println("(you may need to run `systemctl restart systemd-journald`)") + } +} diff --git a/serviceman_windows.go b/serviceman_windows.go new file mode 100644 index 0000000..7d5c388 --- /dev/null +++ b/serviceman_windows.go @@ -0,0 +1,11 @@ +package main + +import ( + "fmt" + + "git.rootprojects.org/root/go-serviceman/service" +) + +func printLogMessage(conf *service.Service) { + fmt.Printf("If all went well the logs should have been created at:\n\t%s\n", conf.Logdir) +}