Проект Syncthing обновляется как минимум раз в месяц и в целях безопасности рекомендуется устанавливать новые версии.
Для дистрибутивов, в которых приложение устанавливается пакетным менеджером (Arch, Ubuntu, Debian и т.д.), проблем с установкой и обновлением нет.
Всем остальным дистрибутивам остаётся установка и обновление вручную.
В этой статье описан механизм, который обеспечивает автоматическое обновление Syncthing.
syncthing
set -e
TARGET_USER=CHANGE-ME
# ---
TEMP_DIR=/tmp/syncthing-update
DISTRIB_FILE=syncthing-update.tar.gz
UPDATE_DIR=syncthing-update
SYNCTHING_BIN=syncthing
TARGET_FILE_PATH=/usr/local/bin/${SYNCTHING_BIN}
# Подготовка временных каталогов
mkdir -p $TEMP_DIR
cd $TEMP_DIR
mkdir -p $UPDATE_DIR
URL=$(curl --silent "https://api.github.com/repos/syncthing/syncthing/releases/latest" | jq -r '.assets[] | select(.name | contains("syncthing-linux-amd64")) | .browser_download_url ')
# Скачивание свежего дистрибутива
wget $URL -O $DISTRIB_FILE
# Распаковка
tar xvzf ${DISTRIB_FILE} -C ${UPDATE_DIR}
find ${UPDATE_DIR}/ -type f -name ${SYNCTHING_BIN}
# Поиск исполняемого файла в дистрибутиве
BINARY=$(find ${UPDATE_DIR}/ -maxdepth 2 -name ${SYNCTHING_BIN})
# Остановка службы
systemctl stop syncthing@${TARGET_USER}
# Обновление исполняемого файла
cp -f ${BINARY} ${TARGET_FILE_PATH}
chmod +x ${TARGET_FILE_PATH}
# Запуск службы
systemctl start syncthing@${TARGET_USER}
# Удаление временного каталога
rm -rf ${TEMP_DIR}
yum -y install curl wget jq tar
/root/scripts/syncthing-update.sh
Редактируем внутри скрипта переменную TARGET_USER
, указываем пользователя, для которого будем обновлять Syncthing.
И даём ему право на запуск:
chmod +x /root/scripts/syncthing-update.sh
crontab -e
Добавляем такую строчку:
0 13 * * * /root/scripts/syncthing-update.sh
Здесь важно указать то время, в которое будет обновляться приложение. Например, в 13:00
.
Готово. Теперь каждый день в 13:00 приложение Syncthing будет обновляться до последней версии.