BORGUSERNAME="borg"
BORGHOMEDIR='/srv/borg'
REPONAME="repo1"
REPODIR="~/${REPONAME}"
sudo -u ${BORGUSERNAME} /bin/bash -c "mkdir ${REPODIR}"
#sudo -u ${BORGUSERNAME} /bin/bash -c "ln -s ${REPODIR} ~/"
Настройка первого borg-репо без шифрования
2024-07-29
Настройка первого репо для бэкапов
-
Если первый каталог для хранения первого репо будет создан вне домашнего каталога УЗ borg, то пробросьте линк к нему в корень домашнего каталога. По этой короткой ссылке будет удобно в borg-командах указывать просто название репо для архивов, вместо длинного полного пути к бэкап-каталогу. Иначе создайте каталог внутри домашней директории УЗ borg:
-
Создайте ssh-ключи для будущих клиентов этого репо. Кстати, здесь их хранить не обязательно, и даже вредно. И, наверное, будет правильней для каждого репо создавать отдельные ключи.
SSHKEYNAME="borg_${REPONAME}" sudo -u ${BORGUSERNAME} /bin/bash -c "ssh-keygen -t ed25519 -q -N '' -f ~/.ssh/${SSHKEYNAME}"
-
Если в каталоге
~/.ssh
файлauthorized_keys
отсутствует, то создаём его с единственной записью-комментом "Требуется указывать полный путь к каждому репо".FILE='~/.ssh/authorized_keys' sudo -u ${BORGUSERNAME} /bin/bash -c "[ ! -f ${FILE} ] && \ umask 077 && \ echo '# Требуется указывать полный путь к каждому репо!' \ > ${FILE}"
-
Добавьте в
authorized_keys
запись для доступа к репо:sudo -u ${BORGUSERNAME} /bin/bash -c " \ printf 'command=\"~/.local/bin/borg serve \ --restrict-to-path ${REPODIR}\",restrict \ $(cat ${BORGHOMEDIR}/.ssh/${SSHKEYNAME}.pub)' >> ${FILE}"
-
Инициализируйте первый репо без шифрования:
BORGUSERNAME='borg' REPONAME='repo1' SSHKEYNAME="borg_${REPONAME}" export BORG_RSH="ssh -i ~/.ssh/${SSHKEYNAME}" export BORG_REPO="${BORGUSERNAME}@localhost:${REPONAME}" # Вызываем sudo -EH для передачи переменных # окружения в borg и смены HOME. sudo -EH -u ${BORGUSERNAME} /bin/bash -c '~/.local/bin/borg init -e none'
-
Проверьте целостность репо:
sudo -EH -u ${BORGUSERNAME} /bin/bash -c '~/.local/bin/borg check -v'
Ожидаемый примерный вывод:
Remote: Starting repository check Remote: finished segment check at segment 1 Remote: Starting repository index check Remote: Index object count match. Remote: Finished full repository check, no problems found. Starting archive consistency check... Archive consistency check complete, no problems found.