This program is licensed under GPL version 3 or later.
-Copyright (C) 2021-2023 Simon Ruderich
+Copyright (C) 2021-2024 Simon Ruderich
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
# Build remote helpers for all operating systems and architectures which are
# supported as target hosts
-# Copyright (C) 2021-2023 Simon Ruderich
+# Copyright (C) 2021-2024 Simon Ruderich
#
# 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
// Helper copied to the remote host to run commands and deploy configuration
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// Config: parse commands.yaml
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// Config: parse config.yaml
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// Config: load files/ directory tree
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// Config: parse groups.yaml
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// Config: parse hosts.yaml
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// Config: parse packages.yaml
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// Config: parse permissions.yaml
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// Config: parse services.yaml
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// Config: parse templates.yaml and expand templates
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// Config: parse triggers.yaml
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// "fixperms" sub-command: apply proper permissions in files/ directories
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// Command line tool to manage remote hosts
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// Embed remote helper binaries
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// "sync" sub-command: sync data to remote hosts
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// "sync" sub-command: collect information from remote host
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// "sync" sub-command: sync files
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// "version" sub-command: display version information
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// Frontend: Format changes
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// Frontend: Connection functions for programs using the safcm library
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// Frontend: Logging functions for programs using the safcm library
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// Frontend: Host synchronization and logging event loop for programs using
// the safcm library
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// Frontend: Functions for terminal output
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// RPC primitives for safcm: basic connection implementation
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// RPC primitives for safcm: logging constants
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
//
// FAI: https://fai-project.org
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// MsgInfoReq: collect information about the remote host
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// Logging helpers
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// Helper copied to the remote host to run commands and deploy configuration
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// Helper type to run and log commands
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// Interface to run commands
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// MsgSyncReq: run commands on the remote host
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// MsgSyncReq: copy files to the remote host
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// MsgSyncReq: copy files to the remote host; Windows compatibility
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// Utility functions useful for file-related tests
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// MsgSyncReq: install packages on the remote host
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// MsgSyncReq: install packages on the remote host (Debian)
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// MsgSyncReq: enable and start services on the remote host
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// MsgSyncReq: enable and start services on the remote host (systemd)
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// MsgSyncReq: sync data on the remote host
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// MsgSyncReq: run triggers for changed files
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// Simple RPC-like protocol: implementation of connection and basic actions
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// Simple RPC-like protocol: establish new connection and upload helper
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// Utility functions useful for tests
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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
// RPC primitives for safcm: message and additional types
-// Copyright (C) 2021-2023 Simon Ruderich
+// Copyright (C) 2021-2024 Simon Ruderich
//
// 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