Clone do Git através do rsnapshot falha

Clone do Git através do rsnapshot falha

Estou tentando executar meu script de backup personalizado por meio do rsnapshot. Ele simplesmente clona um determinado repositório git para o diretório de trabalho atual. Funciona bem quando executado sem rsnapshot.

/etc/rsnapshot.config:

backup_script   /usr/local/bin/gitbackup.py -r https://foo.bar/myrepo.git -u username -f /root/.pwd git/myrepo.git/

Isso cria um diretório com um .git abaixo de myrepo/.git no local de backup e um erro:

# rsnapshot -v daily
[...]
error: could not lock config file /var/cache/rsnapshot/tmp/myrepo/.git/config: No such file or directory
fatal: could not set 'remote.origin.fetch' to '+refs/heads/*:refs/remotes/origin/*'

Ambos, o usuário rsnapshot e o root, obtiveram um ~/.gitconfig em seus diretórios pessoais.

Também tentei executá-lo com sudo. Isto resulta em:

Cloning into 'myrepo'...
/bin/rm -rf /var/cache/rsnapshot/tmp/ 
/bin/rm: cannot remove '/var/cache/rsnapshot/tmp/myrepo/.git': Directory not empty
----------------------------------------------------------------------------
rsnapshot encountered an error! The program was invoked with these options:
/usr/bin/rsnapshot -v daily 
----------------------------------------------------------------------------
ERROR: Warning! /bin/rm failed.
ERROR: Could not rm_rf("/var/cache/rsnapshot/tmp/");
rm -f /var/run/rsnapshot.pid 
fatal: remote-curl: fetch attempted without a local repo

Alguma ideia do que está errado? Talvez alguns env vars para git precisem ser definidos?

Responder1

O problema era um diretório de trabalho não especificado. Aparentemente, o rsnapshot é usado /var/cache/rsnapshot/tmp/por padrão e /var/cache/rsnapshotpode ser lido e gravado apenas pelo usuário do rsnapshot (enquanto o backup_script é executado como root).

Meu script de backup agora altera o diretório de trabalho, faz check-out /home/rsnapshot/git_backupe esse diretório é copiado usando uma backupdiretiva normal.

backup_script   /usr/local/bin/gitbackup.py -r https://foo.bar/myrepo.git -u username -f /root/.pwd -w /home/rsnapshot/git_backup  git_tmp/myrepo.git/
backup  /home/rsnapshot/git_backup/ localhost_git/

Agora entendi o problema: os checkouts sincronizados (não clonados) abaixo /var/cache/rsnapshot/daily.0/localhost_gitcontêm apenas um ~/.gitdiretório e nada mais, mas esse é um problema diferente.

informação relacionada