web-dev-qa-db-ja.com

tarアーカイブとのrsync

実際のファイルシステム(リモート)とtarアーカイブ(ローカル)をrsyncすることは可能ですか?もしそうなら、どうですか?

問題は、ユーザー/グループ/権限の設定を正しくバックアップする必要があることです。リモートでrootアクセス権を持っている間、ローカルマシンでrootとして実行することを避けたいです。

私の最初の(そして何よりも)使用例は、Buildrootによって生成された.tarからリモート組み込みターゲット(ARM9)を更新することです。私はディスク上に「本物」を持っていません(rootでコピーを作成できます)。rootfs全体を転送していくつかのファイルを更新することは避けたいです。

8
ZioByte

正しい答えは、fakerootを使用してtarアーカイブを解凍し(rootにならないようにするため)、rsyncを使用することです。必要に応じて、アーカイブを再パックしてください。

残念ながら、sshとfakerootの間の相互作用が悪いため、物事はこれほど簡単ではありません。検索する人を助けるために私がしたことを詳しく説明します。

理論は簡単です:

  1. 一時ディレクトリを作成する
  2. tarアーカイブを解凍します
  3. 必要に応じてrysnc
  4. ローカルで何かが変更された場合は、新しいtarアーカイブを再パックしてください
  5. 掃除

すべてのユーザー/グループ/権限を保持するには、ステップ2..4をfakerootで実行する必要があります。

キャッチはrsyncが通信にsshを使用する(そして私はそれを望んでいる!)ため、「偽ルート」されているため、(/ root/.ssh /にある)ルート資格情報を開こうとし、ひどく失敗します。次のオプションのセットは私のために働きます。

#!/bin/bash

target=myHost
here=$(pwd)

# 1. create a temp directory
cd /tmp
mkdir TMPfs
cd TMPfs

fakeroot bash <<- EOF
    # 2. unpack tar archive into it
    tar xf $here/archive.tar
    # 3. rysnc as needed (ssh options are *the* relevant thing)
    rsync -av -e "ssh -i $HOME/.ssh/id_rsa -oUserKnownHostsFile=$HOME/.ssh/known_hosts" . root@$target:/
    # 4. if something changed locally repack int a new tar archive (not needed here)
EOF

# 5. cleanup
rm -rf *
cd ..
rmdir TMPfs

「ディレクトリ '/root/.ssh'を作成できませんでした。」というエラーが引き続き表示されます。しかし、それは無害であるように見えます(ファイルはそこで作成/使用されません)。

1
ZioByte

私は実際にこれを試したことはありませんが、うまくいくはずです。

'archivemount'の使用(ソース:)

http://www.cybernoia.de/software/archivemount/

多くのディストリビューション(suse、redhatなど)に含まれている「libarchive」...

または、事前に作成されたもの:

https://rpmfind.net/linux/rpm2html/search.php?query=archivemount

Linuxのfusermount機能を使用してtarアーカイブをマウントできます。

そこから、最終システムに直接rsyncを使用できるようにする必要があります。

Rsyncのパススルーをテストするための簡単なパススルーバッチファイルを作成しました。

#!/bin/bash
# ussh -- use root@ssh to target system
exec ssh  root@"$@"

次に、テストとして、rsyncを使用してdir 'test1'を 'ishtar'に渡し、ターゲットで/ tmp/test2と呼びます。

RSYNC_RSH=$PWD/Ussh rsync -uva /tmp/test1/ ishtar:/tmp/test2

ターゲットsysのルートログオンのパスワードを要求するか、証明書を介してルートログインを受け入れるようにターゲットシステムを設定して、パスワードが不要になるようにします。

これはseemがあなたが望むことをする最も効率的な方法であると思われます(dir時間などをコピーしないようにrsyncオプションを変更する必要があるかもしれません) )、しかし、これはあなたが探していたタイプのものですか?

-アスタラ

1
Astara