Matrix Systemd Updater
目的
Matrix Systemd Updater 最初是为了能够与crontab 一起自动更新 Matrix 家庭服务器和网桥。最终,它可能成为一个通用的systemd更新工具。
安装
前提条件
- 在你的Linux发行版上安装systemd
- Go 1.12以上(无论何时引入模块)
安装说明
- 确保你的PATH的一部分
- 导航到该目录的根部
- 运行
go install
使用方法
更新器的使用方法非常简单明了。
matrix-systemd-updater { -help | [-configDirectory] configfilePath }
-help: 打印帮助信息,描述如何使用该工具configDirectory: 表示configfilePath 对应的目录configFilePath: 完全合格或相对路径,表示配置的位置,详细说明如何更新 systemd 服务。如果configDirectory 标志不存在,configfilePath 必须对应 YAML 文件。当该标志出现时,configfilePath 对应于一个包含有效YAML文件的目录。
配置文件
属性
配置文件包含以下YAML映射:
workingDirectory(可选) - 更新器应从其执行配置文件中指定的命令的目录exitOnError(可选) - 表示当其中一个预升级命令失败时是否应尝试升级服务。默认值是 ,但如果 ,必须设置为 。falseworkingDirectorytrueserviceName(required) - 被升级的systemd服务的名称preUpgradeCmds(可选) - 在升级程序执行服务升级前需要执行的一连串 (例如: )ConfigCommandgit pullupgradeCmd(required) - 负责为 systemd 服务构建、安装或下载升级后的可执行文件的 。ConfigCommandpostUpgradeCmds(可选) - 在升级完成后但在升级程序重新启动systemd服务前需要执行的一连串 。ConfigCommand
ConfigCommand 结构
preUpgradeCmds,upgradeCmd, 和postUpgradeCmds 都采取单数映射或代表ConfigCommands 的映射序列。ConfigCommand 是一个结构,有以下映射:
command(必填)- 更新器要执行的命令。它应该只包含命令的名称,没有参数。该命令必须存在于当前的 。PATHargs(可选) - 命令的一连串参数。鉴于格式 ,所有的参数、标志和标志约束的参数应该作为单独的条目存在。$command $arg1 $flag1 $arg2 $flag2...
注意事项
Go的exec包不允许使用常见的内置shell函数,如cd (从我的实验来看,甚至连help 都不是一个选项)。这在更新使用virtualenv 设置的基于 python 的 systemd 服务时产生了问题。为了支持这些服务的升级,升级命令ConfigCommand 结构必须:
- 有一个
command属性,其形式为bash -c "source $virtualenvPath/activate && $yourUpgradeCommand $yourUpgradeCommandArgs" - 没有
args
例子
一个有效的配置文件的例子位于test config 目录中。