Update velia

Due to recent changes in velia, where we split the daemon into several
smaller ones, this commit adds service files for those new daemons
(veliad-{health,hardware,system}) and also installs a new YANG model
that is needed for the veliad-system functionality.

Also sync all dependencies, that's required due to the way the build
system picks versions of sysrepo, etc. And that in turn required a
sanity sweep over unit dependencies.

NOTE: anything that uses sysrepo must be listed in the reset-sysrepo
package, otherwise Bad Things(TM) happen.

Change-Id: I5aae8da2d7af95ead80070ad4cd18d7143e0f736
Co-authored-by: Jan Kundrát <jan.kundrat@cesnet.cz>
diff --git a/package/cla-sysrepo/cla-appliance.service.in b/package/cla-sysrepo/cla-appliance.service.in
index 0d5e8f3..548d189 100644
--- a/package/cla-sysrepo/cla-appliance.service.in
+++ b/package/cla-sysrepo/cla-appliance.service.in
@@ -1,7 +1,7 @@
 [Unit]
 Description=CzechLight __MODEL__ driver
 After=syslog.target network.target czechlight-install-yang.service cfg-restore-sysrepo.service
-Before=rauc-mark-good.service
+Before=rauc-mark-good.service velia-hardware.service
 PartOf=netopeer2.service
 Requires=czechlight-install-yang.service cfg-restore-sysrepo.service
 StartLimitIntervalSec=0
@@ -24,3 +24,4 @@
 
 [Install]
 WantedBy=multi-user.target
+RequiredBy=velia-hardware.service
diff --git a/package/cla-sysrepo/czechlight-install-yang.sh b/package/cla-sysrepo/czechlight-install-yang.sh
index 37bc2c7..37bc349 100755
--- a/package/cla-sysrepo/czechlight-install-yang.sh
+++ b/package/cla-sysrepo/czechlight-install-yang.sh
@@ -104,5 +104,10 @@
     sysrepoctl --change czechlight-lldp --permissions 0664 --apply
 fi
 
+if [[ ! -f ${REPO}/czechlight-system@2021-01-13.yang ]]; then
+    sysrepoctl --search-dirs /usr/share/velia/yang --install /usr/share/velia/yang/czechlight-system@2021-01-13.yang
+    sysrepoctl --change czechlight-system --permissions 0664 --apply
+fi
+
 # If not do not copy here from startup -> running, running might be stale.
 sysrepocfg -C startup
diff --git a/package/reset-sysrepo/reset-sysrepo.mk b/package/reset-sysrepo/reset-sysrepo.mk
index 3b56fd8..8fd3976 100644
--- a/package/reset-sysrepo/reset-sysrepo.mk
+++ b/package/reset-sysrepo/reset-sysrepo.mk
@@ -22,7 +22,8 @@
 		lldp-systemd-networkd-sysrepo.service \
 		netopeer2.service \
 		sysrepo-persistent-cfg.service \
-		velia.service \
+		velia-system.service \
+		velia-hardware.service \
 	; do \
 		echo "Adding systemd drop-ins $${UNIT} <-> /run/sysrepo"; \
 		$(INSTALL) -d -m 0755 $(TARGET_DIR)/usr/lib/systemd/system/$${UNIT}.d/ ; \
diff --git a/package/velia/velia-hardware.service b/package/velia/velia-hardware.service
new file mode 100644
index 0000000..d84140f
--- /dev/null
+++ b/package/velia/velia-hardware.service
@@ -0,0 +1,23 @@
+[Unit]
+Description=Tracking hardware metrics
+After=syslog.target network.target czechlight-install-yang.service cfg-restore-sysrepo.service
+Before=rauc-mark-good.service
+PartOf=netopeer2.service
+Requires=czechlight-install-yang.service cfg-restore-sysrepo.service
+ConditionKernelCommandLine=czechlight
+
+[Service]
+Type=simple
+ExecStart=/usr/bin/veliad-hardware --log-level=4 --appliance=czechlight-clearfog
+PrivateTmp=yes
+PrivateDevices=no
+ProtectSystem=yes
+ProtectHome=yes
+Restart=always
+RestartSec=10s
+LogRateLimitIntervalSec=10
+LogRateLimitBurst=30000
+SyslogLevel=alert
+
+[Install]
+WantedBy=multi-user.target
diff --git a/package/velia/velia.service b/package/velia/velia-health.service
similarity index 77%
rename from package/velia/velia.service
rename to package/velia/velia-health.service
index 5eb6fc5..2506f85 100644
--- a/package/velia/velia.service
+++ b/package/velia/velia-health.service
@@ -1,5 +1,5 @@
 [Unit]
-Description=Velia is a health tracking for embedded devices running Linux
+Description=Health tracking of the whole system
 Requires=multi-user.target
 After=multi-user.target
 ConditionKernelCommandLine=czechlight
@@ -7,10 +7,10 @@
 [Service]
 Type=simple
 ExecStartPre=/bin/sh -c 'for COLOUR in red green blue; do echo none > /sys/class/leds/status:$${COLOUR}/trigger; echo 0 > /sys/class/leds/status:green/brightness; done'
-ExecStart=/usr/bin/veliad --log-level=4 --systemd-ignore-unit=systemd-journal-upload.service --appliance=czechlight-clearfog
+ExecStart=/usr/bin/veliad-health --log-level=4 --appliance=czechlight-clearfog --systemd-ignore-unit=systemd-journal-upload.service
 ExecStopPost=/bin/sh -c 'for COLOUR in red green blue; do echo 0 > /sys/class/leds/status:$$COLOUR/brightness; done; [[ "$EXIT_CODE" == "exited" ]] && COLOUR="green" || COLOUR="red"; echo timer > /sys/class/leds/status:$$COLOUR/trigger; echo 256 > /sys/class/leds/status:$$COLOUR/brightness'
 PrivateTmp=yes
-PrivateDevices=no
+PrivateDevices=yes
 ProtectSystem=yes
 ProtectHome=yes
 Restart=always
diff --git a/package/velia/velia-system.service b/package/velia/velia-system.service
new file mode 100644
index 0000000..af00c14
--- /dev/null
+++ b/package/velia/velia-system.service
@@ -0,0 +1,23 @@
+[Unit]
+Description=System management via sysrepo
+After=syslog.target network.target czechlight-install-yang.service cfg-restore-sysrepo.service
+Before=rauc-mark-good.service
+PartOf=netopeer2.service
+Requires=czechlight-install-yang.service cfg-restore-sysrepo.service
+ConditionKernelCommandLine=czechlight
+
+[Service]
+Type=simple
+ExecStart=/usr/bin/veliad-system --log-level=4
+PrivateTmp=yes
+PrivateDevices=no
+ProtectSystem=yes
+ProtectHome=yes
+Restart=always
+RestartSec=10s
+LogRateLimitIntervalSec=10
+LogRateLimitBurst=30000
+SyslogLevel=alert
+
+[Install]
+WantedBy=multi-user.target
diff --git a/package/velia/velia.mk b/package/velia/velia.mk
index b09a0e9..a32c38e 100644
--- a/package/velia/velia.mk
+++ b/package/velia/velia.mk
@@ -7,16 +7,22 @@
 VELIA_LICENSE = Apache-2.0
 VELIA_LICENSE_FILES = LICENSE.md
 
+define VELIA_PREPARE_SERVICE
+    $(INSTALL) -D -m 0644 \
+            $(BR2_EXTERNAL_CZECHLIGHT_PATH)/package/velia/$1.service \
+            $(TARGET_DIR)/usr/lib/systemd/system/
+    ln -sf ../$1.service $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants/
+endef
+
 define VELIA_INSTALL_INIT_SYSTEMD
         mkdir -p $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants/
         $(INSTALL) -D -m 0644 \
-                $(BR2_EXTERNAL_CZECHLIGHT_PATH)/package/velia/velia.service \
-                $(TARGET_DIR)/usr/lib/systemd/system/
-        ln -sf ../velia.service $(TARGET_DIR)/usr/lib/systemd/system/multi-user.target.wants/
-
-		$(INSTALL) -D -m 0644 \
                 $(BR2_EXTERNAL_CZECHLIGHT_PATH)/package/velia/max_match_rules.conf \
                 $(TARGET_DIR)/usr/share/dbus-1/system.d/
+
+        $(call VELIA_PREPARE_SERVICE,velia-health)
+        $(call VELIA_PREPARE_SERVICE,velia-hardware)
+        $(call VELIA_PREPARE_SERVICE,velia-system)
 endef
 
 $(eval $(cmake-package))