Настройка первого borg-репо без шифрования

2024-07-29

Настройка первого репо для бэкапов

  1. Если первый каталог для хранения первого репо будет создан вне домашнего каталога УЗ borg, то пробросьте линк к нему в корень домашнего каталога. По этой короткой ссылке будет удобно в borg-командах указывать просто название репо для архивов, вместо длинного полного пути к бэкап-каталогу. Иначе создайте каталог внутри домашней директории УЗ borg:

    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} ~/"
  2. Создайте ssh-ключи для будущих клиентов этого репо. Кстати, здесь их хранить не обязательно, и даже вредно. И, наверное, будет правильней для каждого репо создавать отдельные ключи.

    SSHKEYNAME="borg_${REPONAME}"
    
    sudo -u ${BORGUSERNAME} /bin/bash -c "ssh-keygen -t ed25519 -q -N '' -f ~/.ssh/${SSHKEYNAME}"
  3. Если в каталоге ~/.ssh файл authorized_keys отсутствует, то создаём его с единственной записью-комментом "Требуется указывать полный путь к каждому репо".

    FILE='~/.ssh/authorized_keys'
    
    sudo -u ${BORGUSERNAME} /bin/bash -c "[ ! -f ${FILE} ] && \
      umask 077 && \
      echo '# Требуется указывать полный путь к каждому репо!' \
      > ${FILE}"
  4. Добавьте в 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}"
  5. Инициализируйте первый репо без шифрования:

    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'
  6. Проверьте целостность репо:

    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.