packaging: add configure option to preprocess and install systemd files
authorAurelien Aptel <aaptel@suse.com>
Thu, 14 Dec 2017 15:47:49 +0000 (16:47 +0100)
committerAndrew Bartlett <abartlet@samba.org>
Mon, 8 Jan 2018 02:34:18 +0000 (03:34 +0100)
Turn the systemd service files under packaging into template (.in) files
with @VAR@ substitutions and add configure options to install and tweak
them.

Signed-off-by: Aurelien Aptel <aaptel@suse.com>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
Reviewed-by: Garming Sam <garming@catalyst.net.nz>
packaging/systemd/nmb.service.in [moved from packaging/systemd/nmb.service with 62% similarity]
packaging/systemd/samba.service.in [moved from packaging/systemd/samba.service with 62% similarity]
packaging/systemd/smb.service.in [moved from packaging/systemd/smb.service with 62% similarity]
packaging/systemd/winbind.service.in [moved from packaging/systemd/winbind.service with 59% similarity]
packaging/wscript [new file with mode: 0644]
packaging/wscript_build [new file with mode: 0644]
wscript
wscript_build

similarity index 62%
rename from packaging/systemd/nmb.service
rename to packaging/systemd/nmb.service.in
index 6231118abe8a5463fc49c7dbd5ad3860a5a68585..b0ba92f2244814a0d7313b6640852c8c5081d59e 100644 (file)
@@ -6,11 +6,12 @@ After=syslog.target network.target network-online.target
 [Service]
 Type=notify
 NotifyAccess=all
-PIDFile=/run/nmbd.pid
-EnvironmentFile=-/etc/sysconfig/samba
-ExecStart=/usr/sbin/nmbd --foreground --no-process-group $NMBDOPTIONS
+PIDFile=@PIDDIR@/nmbd.pid
+EnvironmentFile=-@SYSCONFDIR@/sysconfig/samba
+ExecStart=@SBINDIR@/nmbd --foreground --no-process-group $NMBDOPTIONS
 ExecReload=/usr/bin/kill -HUP $MAINPID
 LimitCORE=infinity
+@systemd_nmb_extra@
 
 [Install]
 WantedBy=multi-user.target
similarity index 62%
rename from packaging/systemd/samba.service
rename to packaging/systemd/samba.service.in
index 79b22a0da7a29044f76479fde9085a2abfbf16bf..c418150946143293a12f2f34b41b538bd97aa80c 100644 (file)
@@ -6,11 +6,12 @@ After=syslog.target network.target network-online.target
 [Service]
 Type=notify
 NotifyAccess=all
-PIDFile=/run/samba.pid
+PIDFile=@PIDDIR@/samba.pid
 LimitNOFILE=16384
-EnvironmentFile=-/etc/sysconfig/samba
-ExecStart=/usr/sbin/samba --foreground --no-process-group $SAMBAOPTIONS
+EnvironmentFile=-@SYSCONFDIR@/sysconfig/samba
+ExecStart=@SBINDIR@/samba --foreground --no-process-group $SAMBAOPTIONS
 ExecReload=/usr/bin/kill -HUP $MAINPID
+@systemd_samba_extra@
 
 [Install]
 WantedBy=multi-user.target
similarity index 62%
rename from packaging/systemd/smb.service
rename to packaging/systemd/smb.service.in
index adf6684c7d907524685ef6711b045b92a63b9efa..f829bcbaee5b234efb4d8a6de39d5ff4ded35438 100644 (file)
@@ -5,12 +5,13 @@ After=syslog.target network.target nmb.service winbind.service
 [Service]
 Type=notify
 NotifyAccess=all
-PIDFile=/run/smbd.pid
+PIDFile=@PIDDIR@/smbd.pid
 LimitNOFILE=16384
-EnvironmentFile=-/etc/sysconfig/samba
-ExecStart=/usr/sbin/smbd --foreground --no-process-group $SMBDOPTIONS
+EnvironmentFile=-@SYSCONFDIR@/sysconfig/samba
+ExecStart=@SBINDIR@/smbd --foreground --no-process-group $SMBDOPTIONS
 ExecReload=/usr/bin/kill -HUP $MAINPID
 LimitCORE=infinity
+@systemd_smb_extra@
 
 [Install]
 WantedBy=multi-user.target
similarity index 59%
rename from packaging/systemd/winbind.service
rename to packaging/systemd/winbind.service.in
index 46b3797251dc362695abc1bd2c40032d8461d953..5ac5adc846f4f40a6dcdc497cf5143e1a67398ba 100644 (file)
@@ -5,11 +5,12 @@ After=syslog.target network.target nmb.service
 [Service]
 Type=notify
 NotifyAccess=all
-PIDFile=/run/winbindd.pid
-EnvironmentFile=-/etc/sysconfig/samba
-ExecStart=/usr/sbin/winbindd --foreground --no-process-group "$WINBINDOPTIONS"
+PIDFile=@PIDDIR@/winbindd.pid
+EnvironmentFile=-@SYSCONFDIR@/sysconfig/samba
+ExecStart=@SBINDIR@/winbindd --foreground --no-process-group "$WINBINDOPTIONS"
 ExecReload=/usr/bin/kill -HUP $MAINPID
 LimitCORE=infinity
+@systemd_winbind_extra@
 
 [Install]
 WantedBy=multi-user.target
diff --git a/packaging/wscript b/packaging/wscript
new file mode 100644 (file)
index 0000000..76158e9
--- /dev/null
@@ -0,0 +1,50 @@
+#!/usr/bin/env python
+
+import Options
+
+def set_options(opt):
+    gr = opt.option_group('systemd installation options')
+
+    gr.add_option('--systemd-install-services',
+                  help=("install systemd service files to manage daemons (default=no)"),
+                  action="store_true", dest="systemd_install_services", default=False)
+
+    gr.add_option('--with-systemddir',
+                  help=("systemd service directory [PREFIX/usr/lib/systemd/system]"),
+                  action="store", dest="SYSTEMDDIR",
+                  default="${PREFIX}/usr/lib/systemd/system")
+    #
+    # extra service directives
+    #
+
+    gr.add_option('--systemd-smb-extra',
+                  metavar="Option=Value",
+                  help=("Extra directives added to the smb service file."
+                        +" Can be given multiple times."),
+                  action="append", dest="systemd_smb_extra", default=[])
+
+    gr.add_option('--systemd-nmb-extra',
+                  metavar="Option=Value",
+                  help=("Extra directives added to the nmb service file."
+                        +" Can be used multiple times."),
+                  action="append", dest="systemd_nmb_extra", default=[])
+
+    gr.add_option('--systemd-winbind-extra',
+                  metavar="Option=Value",
+                  help=("Extra directives added to the winbind service file."
+                        +" Can be used multiple times."),
+                  action="append", dest="systemd_winbind_extra", default=[])
+
+    gr.add_option('--systemd-samba-extra',
+                  metavar="Option=Value",
+                  help=("Extra directives added to the samba service file."
+                        +" Can be used multiple times."),
+                  action="append", dest="systemd_samba_extra", default=[])
+
+def configure(conf):
+    conf.env.systemd_install_services = Options.options.systemd_install_services
+    conf.env.systemd_smb_extra = '\n'.join(Options.options.systemd_smb_extra)
+    conf.env.systemd_nmb_extra = '\n'.join(Options.options.systemd_nmb_extra)
+    conf.env.systemd_winbind_extra = '\n'.join(Options.options.systemd_winbind_extra)
+    conf.env.systemd_samba_extra = '\n'.join(Options.options.systemd_samba_extra)
+    conf.env.SYSTEMDDIR = Options.options.SYSTEMDDIR
diff --git a/packaging/wscript_build b/packaging/wscript_build
new file mode 100644 (file)
index 0000000..fbcd4e5
--- /dev/null
@@ -0,0 +1,16 @@
+#!/usr/bin/env python
+
+systemd_services = [
+    'systemd/smb.service',
+    'systemd/nmb.service',
+    'systemd/winbind.service',
+    'systemd/samba.service'
+]
+
+for srv in systemd_services:
+    bld.CONFIGURE_FILE(srv)
+    if bld.env.systemd_install_services:
+        bld.INSTALL_FILES(bld.env.SYSTEMDDIR, srv, flat=True)
+
+if bld.env.systemd_install_services:
+    bld.INSTALL_FILES('${SYSCONFDIR}/sysconfig', 'systemd/samba.sysconfig', destname='samba')
diff --git a/wscript b/wscript
index 83eec709f9df1b6ba5d24870060329b0067506c1..0985aa948676e1bfcf515cc0fbdd8275cd3f9bac 100644 (file)
--- a/wscript
+++ b/wscript
@@ -37,6 +37,7 @@ def set_options(opt):
     opt.PRIVATE_EXTENSION_DEFAULT('samba4')
     opt.RECURSE('lib/replace')
     opt.RECURSE('dynconfig')
+    opt.RECURSE('packaging')
     opt.RECURSE('lib/ldb')
     opt.RECURSE('selftest')
     opt.RECURSE('source4/lib/tls')
@@ -46,6 +47,8 @@ def set_options(opt):
     opt.RECURSE('lib/util')
     opt.RECURSE('lib/crypto')
     opt.RECURSE('ctdb')
+
+
     opt.samba_add_onoff_option('pthreadpool', with_name="enable", without_name="disable", default=True)
 
     opt.add_option('--with-system-mitkrb5',
@@ -240,6 +243,7 @@ def configure(conf):
         conf.RECURSE('ctdb')
     conf.RECURSE('lib/socket')
     conf.RECURSE('auth')
+    conf.RECURSE('packaging')
 
     conf.SAMBA_CHECK_UNDEFINED_SYMBOL_FLAGS()
 
index e2b1f87201774505ec9aa47ea0cb28f3c0e6aa37..8a59bdf6cabdd78628ddafe250fa9f605b3cde36 100644 (file)
@@ -147,6 +147,7 @@ bld.RECURSE('source3')
 bld.RECURSE('dfs_server')
 bld.RECURSE('file_server')
 bld.RECURSE('lib/krb5_wrap')
+bld.RECURSE('packaging')
 
 bld.RECURSE('testsuite/headers')