Provide systemd files

+ move example cfg from etc/ to cfg/

Change-Id: I437b3e2aaca55539ff110f5a46e411b34e0a0b9c
Reviewed-on: https://forge.frm2.tum.de/review/c/sine2020/secop/playground/+/21319
Tested-by: JenkinsCodeReview <bjoern_pedersen@frm2.tum.de>
Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
This commit is contained in:
Enrico Faulhaber 2019-09-25 11:18:54 +02:00
parent 0c1a63538c
commit 9b33e07260
21 changed files with 92 additions and 4 deletions

59
etc/secop-generator Executable file
View File

@ -0,0 +1,59 @@
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# *****************************************************************************
# Copyright (c) 2015-2019 by the authors, see LICENSE
#
# This program is free software; you can redistribute it and/or modify it under
# the terms of the GNU General Public License as published by the Free Software
# Foundation; either version 2 of the License, or (at your option) any later
# version.
#
# This program is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
# details.
#
# You should have received a copy of the GNU General Public License along with
# this program; if not, write to the Free Software Foundation, Inc.,
# 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# Module authors:
# Alexander Lenz <alexander.lenz@frm2.tum.de>
# Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
#
# *****************************************************************************
import os
import sys
import fnmatch
from os import path
from secop.lib import getGeneralConfig
def main():
normal_dir = sys.argv[1]
global_config = getGeneralConfig()
config_dir = global_config['confdir']
secop_unit = '/lib/systemd/system/secop@.service'
wants_dir = normal_dir + '/secop.target.wants'
all_servers = [base for (base, ext) in
map(path.splitext, os.listdir(config_dir)) if ext == '.cfg']
all_servers.sort()
for srv in all_servers:
symlink = '%s/secop@%s.service' % (normal_dir, srv)
os.symlink(secop_unit, symlink)
# the stamp file signals successful run of the generator
open(normal_dir + '/secop.stamp', 'w').close()
if __name__ == '__main__':
try:
main()
except Exception:
pass # don't signal an error here

8
etc/secop.target Normal file
View File

@ -0,0 +1,8 @@
[Unit]
Description=Start all SECoP SEC-nodes
Requires=network-online.service
Wants=network-online.service
After=network-online.service
[Install]
WantedBy=multi-user.target

12
etc/secop@.service Normal file
View File

@ -0,0 +1,12 @@
[Unit]
Description=SECoP SEC-node: %i
After=network-online.service
[Service]
Type=notify
ExecStart=/usr/bin/secop-server %I
Restart=on-abnormal
RestartSec=30
[Install]
WantedBy=multi-user.target

View File

@ -40,7 +40,7 @@ repodir = path.abspath(path.join(path.dirname(__file__), u'..', u'..'))
CONFIG = {
u'piddir': os.path.join(repodir, u'pid'),
u'logdir': os.path.join(repodir, u'log'),
u'confdir': os.path.join(repodir, u'etc'),
u'confdir': os.path.join(repodir, u'cfg'),
u'basedir': repodir,
} if os.path.exists(os.path.join(repodir, u'.git')) else {
u'piddir': u'/var/run/secop',

View File

@ -43,12 +43,19 @@ setup(
author='Enrico Faulhaber',
author_email='enrico.faulhaber@frm2.tum.de',
description='SECoP Playground core system',
packages=find_packages(),
packages=find_packages(exclude=['test']),
package_data={'secop': ['RELEASE-VERSION'] + uis},
data_files=[('/etc/init.d', ['etc/secop-server'])],
data_files=[
('/etc/init.d', ['etc/secop-server']),
('/lib/systemd/system-generators', ['etc/secop-generator']),
('/lib/systemd/system', ['etc/secop@.service',
'etc/secop.target']),
('/var/log/secop', []),
('/var/run/secop', []),
],
scripts=scripts,
classifiers=[
'Development Status :: 6 - Mature',
'Development Status :: 5 - Production/Stable',
'Intended Audience :: Developers',
'Intended Audience :: Science/Research',
'Natural Language :: English',
@ -57,6 +64,8 @@ setup(
'Programming Language :: Python',
'Programming Language :: Python :: 2',
'Programming Language :: Python :: 2.7',
'Programming Language :: Python :: 3',
'Programming Language :: Python :: 3.6',
'Topic :: Scientific/Engineering',
'Topic :: Scientific/Engineering :: Human Machine Interfaces',
'Topic :: Scientific/Engineering :: Physics',