diff --git a/project.zsh b/project.zsh index 7aa3e13..dd9fb1f 100644 --- a/project.zsh +++ b/project.zsh @@ -21,12 +21,22 @@ type[src/config.cr]=script sources[src/config.cr]=src/config.cr.in install[src/config.cr]=false auto[src/config.cr]=true # Don’t display it in `make help`. +chmod[src/config.cr]=0644 for file in services/*.spec; do targets+=($file) type[$file]=script install[$file]='$(SHAREDIR)/services' auto[$file]=true + chmod[$file]=0644 +done + +for file in templates/*.j2; do + targets+=($file) + type[$file]=script + install[$file]='$(SYSCONFDIR)/templates' + auto[$file]=true + chmod[$file]=0644 done # FIXME: This should be upstreamed. diff --git a/src/config.cr.in b/src/config.cr.in index 2610078..d375c60 100644 --- a/src/config.cr.in +++ b/src/config.cr.in @@ -5,6 +5,8 @@ RC_DIRECTORY = "@SYSCONFDIR@/rc/services" LOG_DIRECTORY = "@VARSTATEDIR@/log" SERVICES_DIRECTORY = "@SHAREDIR@/services" ENVIRONMENTS_DIRECTORY = "@SYSCONFDIR@/rc/environments" +SYSTEM_CONFIGURATION_DIRECTORY = "@SYSCONFDIR@" +SHARED_DATA_DIRECTORY = "@SHAREDIR@" OWN_LIBEXEC_DIR = "@LIBEXECDIR@/service" CACHE_DIRECTORY = "@VARSTATEDIR@/cache" diff --git a/src/gen-config.cr b/src/gen-config.cr index d4498c0..11c2c19 100644 --- a/src/gen-config.cr +++ b/src/gen-config.cr @@ -1,5 +1,7 @@ require "crinja" +require "./config.cr" + def sanitize_path(path) path.gsub /\/\/+/, "/" end @@ -41,11 +43,9 @@ class Configure::Context def generate(template, target : String, options : Hash(String, String | Array(String) | Crinja::Callable::Instance | Hash(String, String))) target_file = File.open target, "w" - # FIXME: Alter default sources at build-time. - # FIXME: We’ll want a way to alter those context-wide. sources = [ - "/etc/templates", - "/usr/share/templates" + "#{SYSTEM_CONFIGURATION_DIRECTORY}/templates", + "#{SHARED_DATA_DIRECTORY}/templates" ] sources = sources diff --git a/src/service.cr b/src/service.cr index 4b4104d..ba87c6f 100644 --- a/src/service.cr +++ b/src/service.cr @@ -129,7 +129,8 @@ begin end end elsif args[0] == "status" - child = Process.run "#{OWN_LIBEXEC_DIR}/status", [args[1]], + args.shift + child = Process.run "#{OWN_LIBEXEC_DIR}/status", args, output: Process::Redirect::Inherit, error: Process::Redirect::Inherit return_value = (child.exit_status / 256).to_i diff --git a/src/status.cr b/src/status.cr index 01b0a21..210260e 100644 --- a/src/status.cr +++ b/src/status.cr @@ -10,10 +10,33 @@ Service.load RC_DIRECTORY LibC.setuid 0 LibC.setgid 0 -Service.get_by_id(ARGV[0]).try do |service| - puts service.status PID_DIRECTORY - exit 0 +services = ARGV +if services.size == 0 + services = Service.all +else + services = services.map do |id| + Service.get_by_id id + end end -exit 1 +if services.size == 1 + services[0]?.try do |service| + puts service.status PID_DIRECTORY + exit 0 + end + + exit 1 +else + service_not_found = false + + services.each do |service| + if service.nil? + service_not_found = true + else + puts "#{service.id}: #{service.status PID_DIRECTORY}" + end + end + + exit 1 if service_not_found +end