rsnapshot 経由の Git クローンが失敗する

rsnapshot 経由の Git クローンが失敗する

rsnapshot を通じてカスタム バックアップ スクリプトを実行しようとしています。これは、指定された git リポジトリを現在の作業ディレクトリにクローンするだけです。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/

これにより、バックアップの場所に myrepo/.git の下に .git を含むディレクトリが作成され、エラーが発生します。

# 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/*'

rsnapshot ユーザーと root の両方が、ホーム ディレクトリに ~/.gitconfig を取得しました。

また、sudo で実行してみました。結果は次のようになります:

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

何が間違っているのか分かりますか? おそらく、git の環境変数をいくつか設定する必要があるのでしょうか?

答え1

問題は、指定されていない作業ディレクトリでした。どうやら rsnapshot は/var/cache/rsnapshot/tmp/デフォルトで を使用し、/var/cache/rsnapshotrsnapshot ユーザーのみが読み取りおよび書き込み可能です (backup_script は root として実行されます)。

バックアップ スクリプトは作業ディレクトリを変更し、チェックアウトし/home/rsnapshot/git_backup、このディレクトリは通常のbackupディレクティブを使用してバックアップされます。

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/

今、問題が発生しました。以下の同期されたチェックアウト (クローンされたチェックアウトではない) にはディレクトリ/var/cache/rsnapshot/daily.0/localhost_gitのみが含まれ~/.git、他には何も含まれていませんが、これは別の問題です。

関連情報