From e2b9f02e5e1420ea96d0174d75a53d42f5837e00 Mon Sep 17 00:00:00 2001 From: Jordan Augé Date: Thu, 8 Apr 2021 10:05:52 +0200 Subject: [HICN-695] facemgr: add systemd service MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: I6b345944ce3fb4714832798e32ac840a162dc268 Signed-off-by: Jordan Augé --- ctrl/facemgr/CMakeLists.txt | 14 +++ ctrl/facemgr/cmake/Modules/Packaging.cmake | 15 +++ ctrl/facemgr/config/facemgr.conf | 194 +++++++++++++++++++++++++++++ ctrl/facemgr/config/facemgr.service | 24 ++++ ctrl/facemgr/config/post | 5 + ctrl/facemgr/config/postinst | 3 + ctrl/facemgr/config/prerm | 3 + ctrl/facemgr/config/preun | 3 + 8 files changed, 261 insertions(+) create mode 100644 ctrl/facemgr/config/facemgr.conf create mode 100644 ctrl/facemgr/config/facemgr.service create mode 100755 ctrl/facemgr/config/post create mode 100755 ctrl/facemgr/config/postinst create mode 100755 ctrl/facemgr/config/prerm create mode 100755 ctrl/facemgr/config/preun diff --git a/ctrl/facemgr/CMakeLists.txt b/ctrl/facemgr/CMakeLists.txt index 290f96fa0..ba9de9464 100644 --- a/ctrl/facemgr/CMakeLists.txt +++ b/ctrl/facemgr/CMakeLists.txt @@ -94,6 +94,20 @@ add_subdirectory(src) include(Packaging) +# Install service file in linux systems +include(ServiceScript) +install_service_script( + ${CMAKE_CURRENT_SOURCE_DIR}/config/facemgr.service + COMPONENT ${FACEMGR} +) + +# Configuration file +set(FACEMGR_CONF_FILE ${CMAKE_CURRENT_SOURCE_DIR}/config/facemgr.conf) +set(FACEMGR_CONF_FOLDER "/etc/facemgr") +if (${CMAKE_SYSTEM_NAME} STREQUAL "Linux") + install (FILES ${FACEMGR_CONF_FILE} DESTINATION ${FACEMGR_CONF_FOLDER} COMPONENT ${FACEMGR}) +endif() + if(CMAKE_SOURCE_DIR STREQUAL PROJECT_SOURCE_DIR) include(Packager) make_packages() diff --git a/ctrl/facemgr/cmake/Modules/Packaging.cmake b/ctrl/facemgr/cmake/Modules/Packaging.cmake index 3a7e5a85c..bb4fa42fa 100644 --- a/ctrl/facemgr/cmake/Modules/Packaging.cmake +++ b/ctrl/facemgr/cmake/Modules/Packaging.cmake @@ -25,7 +25,22 @@ set(${FACEMGR}_DEB_DEPENDENCIES CACHE STRING "Dependencies for deb/rpm package." ) +set(${HICN_LIGHT}_DEB_PACKAGE_CONTROL_EXTRA + "${CMAKE_CURRENT_SOURCE_DIR}/config/postinst;${CMAKE_CURRENT_SOURCE_DIR}/config/prerm" + CACHE STRING "Control scripts conffiles, postinst, postrm, prerm." +) + set(${FACEMGR}_RPM_DEPENDENCIES "libconfig, libevent-devel, lib${LIBHICNCTRL} >= stable_version" CACHE STRING "Dependencies for deb/rpm package." ) + +set(${HICN_LIGHT}_RPM_POST_INSTALL_SCRIPT_FILE + "${CMAKE_CURRENT_SOURCE_DIR}/config/post" + CACHE STRING "Install script that will be copied in the %post section" +) + +set(${HICN_LIGHT}_RPM_PRE_UNINSTALL_SCRIPT_FILE + "${CMAKE_CURRENT_SOURCE_DIR}/config/preun" + CACHE STRING "Install script that will be copied in the %post section" +) diff --git a/ctrl/facemgr/config/facemgr.conf b/ctrl/facemgr/config/facemgr.conf new file mode 100644 index 000000000..d9c6f5fa9 --- /dev/null +++ b/ctrl/facemgr/config/facemgr.conf @@ -0,0 +1,194 @@ +# +# hICN facemgr configuration file +# + +################################################################################ +# Global settings +################################################################################ + +global = { + +# Default type for face creation +# +# Values: "auto" | "native-udp" | "native-tcp" | "overlay-udp" | "overlay-tcp" +# Default "auto" +# +#face_type = "auto"; +face_type = "overlay-udp" + +# Disable service discovery for overlay creation +# +# This is only meaningful for overlay_* face types. If service discovery is +# disabled, only manually entered overlay information will be used, if any. +# Otherwise, no face will be created. +# +# Values : true | false +# Default: false +# +#disable_discovery = true; + +# Disable IPv4 face creation +# +# Values : true | false +# Default: false +# +#disable_ipv4 = true; + +# Disable IPv6 face creation +# +# Values : true | false +# Default: false +# +#disable_ipv6 = true; + +# overlay +# +# By default, no address is specified, and local and remote ports are set to +# the standard value for hICN (9695). +# + +}; + +################################################################################ +# Per-interface rules +################################################################################ +# +# Rules allow to override the default behaviour of the face manager. +# +# The list of rules must be specified as follows (note that the last one has no +# coma at the end) : +# +# rules = ( +# { ... }, +# { ... }, +# { ... } +# ); +# +# A rule is composed of match and override attributes, and has the following +# syntax: +# +# { +# match = { +# interface_name = STRING; +# interface_type = STRING; +# }; +# override = { +# face_type = STRING; +# disable_discovery = BOOL; +# ignore = BOOL; +# tags = (STRING, STRING, STRING); +# overlay = { +# ipv4 = { +# local_port = PORT; +# remote_addr = IP_ADDRESS; +# remote_port = PORT; +# }; +# ipv6 = { +# local_port = PORT; +# remote_addr = IP_ADDRESS; +# remote_port = PORT; +# }; +# }; +# }; +# } +# +# Match attributes: +# +# Match attributes serve to identify rules and as such defining two rules with +# similar matches is not allowed. However, overlapping match definitions are +# possible, in which case only the first matching rule is considered. +# +# A match is composed of the name of an interface and/or its type (either +# attribute is optional but at least one has to be specified). +# +# * interface_name - a string representing an interface name +# +# * interface_type - the type of interface to match +# +# Values: "wired" | "wifi" | "cellular" +# +# Override attributes: +# +# Those attributes are applied when all specified match attributes correspond, +# and override general settings or default values. +# +# * face_type - type used for face creation +# +# Values: "auto" | "native_udp" | "native_tcp" | "overlay_udp" | "overlay_tcp" +# +# * disable_discovery - disable service discovery for overlay creation +# +# Values : true | false +# +# * ignore - a boolean indicating whether that interface should be ignored +# +# * TODO tags - a (possibly empty) list of tags to be associated to the created face. +# +# Values: "wired" | "wifi" | "cellular" | "trusted" +# +# * overlay +# +# An overlay specification is used to complement any information retrieved +# through service discovery (or replace it if service discovery is +# disabled). +# +# It is possible to specify values for IPv4, IPv6 or both. +# +# Note that it is not currently possible to set different settings for IPv4 and +# IPv6 but overlay specifications. +# +# +# Here are a few example of rule definitions: +# +# rules = ( +# # Ignore localhost interface +# { +# match = { +# interface_name = "lo"; +# }; +# override = { +# ignore = true; +# }; +# }, +# # Set tags for unknown tunnnel interface +# { +# match = { +# interface_name = "utun1"; +# }; +# override = { +# tags = ("WIRED", "TRUSTED"); +# }; +# }, +# # Force cellular connections to use manually specified overlay faces +# { +# match = { +# interface_type = "cellular", +# }; +# override = { +# overlay = { +# ipv4 = { +# local_port = 9695; +# remote_addr = "10.60.16.14"; +# remote_port = 9695; +# }; +# ipv6 = { +# local_port = 9695; +# remote_addr = "2001:420:44f1:10:20c:29ff:fef3:8f8f"; +# remote_port = 9695; +# }; +# }; +# }; +# } +# ); +# +#rules = ( +#); + +################################################################################ +# Logging +################################################################################ + +log: +{ + log_level = "DEBUG"; +} diff --git a/ctrl/facemgr/config/facemgr.service b/ctrl/facemgr/config/facemgr.service new file mode 100644 index 000000000..0f9e818ea --- /dev/null +++ b/ctrl/facemgr/config/facemgr.service @@ -0,0 +1,24 @@ +# Copyright (c) 2017-2019 Cisco and/or its affiliates. +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at: +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +[Unit] +Description=hICN face manager + +[Service] +Environment=CONFIG=/etc/facemgr/facemgr.conf +Environment=LOGFILE=/var/log/facemgr.log +ExecStart=/usr/bin/facemgr -c ${CONFIG} 1>${LOGFILE} 2>&1 +Restart=on-failure + +[Install] +WantedBy=multi-user.target diff --git a/ctrl/facemgr/config/post b/ctrl/facemgr/config/post new file mode 100755 index 000000000..7b2fd57fe --- /dev/null +++ b/ctrl/facemgr/config/post @@ -0,0 +1,5 @@ +#!/bin/bash + +if pidof systemd; then + systemctl enable facemgr +fi diff --git a/ctrl/facemgr/config/postinst b/ctrl/facemgr/config/postinst new file mode 100755 index 000000000..4113b0eca --- /dev/null +++ b/ctrl/facemgr/config/postinst @@ -0,0 +1,3 @@ +#!/bin/bash + +systemctl enable facemgr diff --git a/ctrl/facemgr/config/prerm b/ctrl/facemgr/config/prerm new file mode 100755 index 000000000..b5c486ea5 --- /dev/null +++ b/ctrl/facemgr/config/prerm @@ -0,0 +1,3 @@ +#!/bin/bash + +systemctl disable facemgr diff --git a/ctrl/facemgr/config/preun b/ctrl/facemgr/config/preun new file mode 100755 index 000000000..b5c486ea5 --- /dev/null +++ b/ctrl/facemgr/config/preun @@ -0,0 +1,3 @@ +#!/bin/bash + +systemctl disable facemgr -- cgit 1.2.3-korg