随着 SemaphoreUI 的 snap 安装方法逐渐被弃用,我最近开始了迁移到另一种托管方法的过程。我选择在同一系统上安装 Semaphore 的软件包版本。我最初打算在全新安装上使用备份和恢复功能,但遇到了多个问题,这些问题似乎都是已经修复的错误,但影响了 snap 中的最新版本的 Semaphore。于是我采取了不同的路线,建议在此将其作为文档路径添加,以便其他人迁移。

将 Semaphore Snap 文件迁移到包管理器或二进制安装的步骤: 注意:此方法将 boltdb 作为 SemaphoreUI 的数据库

  1. 通过 sudo su - 或其他有效方法以 root 身份登录
  2. 停止 SemaphoreUI 的 snap 版本 snap stop semaphore.semaphored
  3. 将 snap 中的文件复制到新目录,该目录将是名为 semaphore 的新系统用户的主目录 cp -rf /root/snap/semaphore/common /home/semaphore
  4. repositories 文件夹移动到新的临时文件夹位置 mv -f /home/semaphore/repositories /tmp/semaphore
  5. 更新 config.json 中的数据库和临时文件夹的新路径 sed -i 's/\/root\/snap\/semaphore\/common\/database.boltdb/\/home\/semaphore\/database.boltdb/' /home/semaphore/config.json sed -i 's/\/root\/snap\/semaphore\/common\/repositories/\/tmp\/semaphore/' /home/semaphore/config.json
  6. 创建一个名为 semaphore 的新系统用户和组,主文件夹为 /home/semaphore adduser --system --group --home /home/semaphore --no-create-home --shell /bin/bash semaphore
  7. /home/semaphore 及其所有文件的所有权转移给新系统用户 chown -R semaphore:semaphore /tmp/semaphore chmod o-rwx /home/semaphore chown -R semaphore:semaphore /home/semaphore

完成这些步骤后,通过包管理器安装和设置 Semaphore,使用 semaphore 作为服务用户或组。所有设置和之前的运行应该会在新的 SemaphoreUI 实例中显示。一旦满意,可以通过 sudo snap remove semaphore 删除 snap 实例。

我最终通过这个 bash 文件自动化了所有这些步骤:

migrate-semaphore-snap.sh
#/bin/bash
#File: migrate-semaphore-snap.sh
#Migrate SemaphoreUI from snap as root to package/binary as semaphore
sudo su -l root <<EOF
set -x
snap stop semaphore.semaphored
cp -rf /root/snap/semaphore/common /home/semaphore
mv -f /home/semaphore/repositories /tmp/semaphore
sed -i 's/\/root\/snap\/semaphore\/common\/database.boltdb/\/home\/semaphore\/database.boltdb/' /home/semaphore/config.json
sed -i 's/\/root\/snap\/semaphore\/common\/repositories/\/tmp\/semaphore/' /home/semaphore/config.json
adduser --system --group --home /home/semaphore --no-create-home --shell /bin/bash semaphore
cp /etc/skel/.* /home/semaphore/
chown -R semaphore:semaphore /tmp/semaphore
chmod o-rwx /home/semaphore
chown -R semaphore:semaphore /home/semaphore
EOF