用于更新与矩阵协议相关的各种组件(网桥、家庭服务器)的CLI

104 阅读2分钟

Matrix Systemd Updater

目的

Matrix Systemd Updater 最初是为了能够与crontab 一起自动更新 Matrix 家庭服务器和网桥。最终,它可能成为一个通用的systemd更新工具。

安装

前提条件

  • 在你的Linux发行版上安装systemd
  • Go 1.12以上(无论何时引入模块)

安装说明

  1. 确保你的GOROOTGOROOT是PATH的一部分
  2. 导航到该目录的根部
  3. 运行go install

使用方法

更新器的使用方法非常简单明了。

matrix-systemd-updater { -help | [-configDirectory] configfilePath }

-help: 打印帮助信息,描述如何使用该工具configDirectory: 表示configfilePath 对应的目录configFilePath: 完全合格或相对路径,表示配置的位置,详细说明如何更新 systemd 服务。如果configDirectory 标志不存在,configfilePath 必须对应 YAML 文件。当该标志出现时,configfilePath 对应于一个包含有效YAML文件的目录。

配置文件

属性

配置文件包含以下YAML映射:

  • workingDirectory (可选) - 更新器应从其执行配置文件中指定的命令的目录
  • exitOnError (可选) - 表示当其中一个预升级命令失败时是否应尝试升级服务。默认值是 ,但如果 ,必须设置为 。false workingDirectory true
  • serviceName (required) - 被升级的systemd服务的名称
  • preUpgradeCmds (可选) - 在升级程序执行服务升级前需要执行的一连串 (例如: )ConfigCommand git pull
  • upgradeCmd (required) - 负责为 systemd 服务构建、安装或下载升级后的可执行文件的 。ConfigCommand
  • postUpgradeCmds (可选) - 在升级完成后但升级程序重新启动systemd服务需要执行的一连串 。ConfigCommand

ConfigCommand 结构

preUpgradeCmds,upgradeCmd, 和postUpgradeCmds 都采取单数映射或代表ConfigCommands 的映射序列。ConfigCommand 是一个结构,有以下映射:

  • command (必填)- 更新器要执行的命令。它应该只包含命令的名称,没有参数。该命令必须存在于当前的 。PATH
  • args (可选) - 命令的一连串参数。鉴于格式 ,所有的参数、标志和标志约束的参数应该作为单独的条目存在。$command $arg1 $flag1 $arg2 $flag2...

注意事项

Go的exec包不允许使用常见的内置shell函数,如cd (从我的实验来看,甚至连help 都不是一个选项)。这在更新使用virtualenv 设置的基于 python 的 systemd 服务时产生了问题。为了支持这些服务的升级,升级命令ConfigCommand 结构必须:

  1. 有一个command 属性,其形式为bash -c "source $virtualenvPath/activate && $yourUpgradeCommand $yourUpgradeCommandArgs"
  2. 没有args

例子

一个有效的配置文件的例子位于test config 目录中。