gzip圧縮されたtarアーカイブを一回で作成してパイプする

gzip圧縮されたtarアーカイブを一回で作成してパイプする

私は、Android 上のさまざまなシステム パーティションの gzip 圧縮アーカイブを作成する効果的な方法を考え出そうとしています。すべてを stdout にパイプして、 経由で渡されるときに暗号化できるようにしますgpg

ワークフローは次のようになります。

adb shell "/data/dobackup.sh" | gpg --output suchbackup.tar.gz.gpg --encrypt --sign --recipient [email protected]

シェル スクリプトは基本的に次の操作を実行する必要があります。

cat /dev/block/platform/msm_sdcc.1/by-name/recovery > recovery.img
cat /dev/block/platform/msm_sdcc.1/by-name/system > system.img
...

しかし、ご覧のとおり、私はこのすべてを adb シェル実行で実行し、すべてが USB 経由でメモリに転送され、すぐに暗号化されてディスクに書き込まれるようにし、つまり暗号化されていない痕跡を残さないようにしたいと思います。

私が抱えている問題は、スクリプトの内部を複数のファイル/ソースで構成された tar.gz ファイルに作成する方法がわからないことです。基本的に、このスクリプトから stdout から tar.gz ファイルを出力し、その中に次のファイルが含まれるようにしたいと考えています。

/recovery.img
/system.img
/userdata.img
/cache.img
/...

これを実現する方法はありますか? これまでの旅行ではこのような問題に遭遇したことはありません。

答え1

ftar を使用してアーカイブを作成し、それを標準出力に送信することを意味していると仮定すると、出力をファイルに送信するオプションを使用しない場合、デフォルトで次のようになります。

tar cz /{recovery,system,userdata,cache}.img | ...

問題がファイルシステム上に実際には存在しない「ファイル」をアーカイブすることである場合、tarファイルの形式のために少し複雑になります。各ファイルは先行するファイル サイズを含むヘッダーによって。ヘッダー内のファイル サイズは正確でなければなりません。これが、tar次のヘッダー エントリがどこから始まるかを知る唯一の方法だからです。

したがって、生成されるファイルオブジェクトのサイズを正確に予測できる場合にのみ、これを行うことは可能です。それができる場合は、たとえば標準のPythonライブラリを使用してtarファイルを構築できるはずです。tarファイルモジュール。

答え2

チェックしたいスレッドハク5フォーラムでは、Bash のその他のマジックを活用した、現在作業中のプロジェクトへの道が示されますmkfifo... 一度設定すれば、ほぼあらゆるものの暗号化が容易になり、一括復号化ツールもあることがわかりました。

教授はプリンの中にいるのでトラビスCI現在、テスト文字列、ファイル、ディレクトリの回復を含むすべての動作機能を表示するために使用されています。これは、Busybox と chroot Linux を使用して Android でテストされていますが、ソース コードの大部分は限られたシステム向けに設計されているため、busybox のみが必要になる場合があります (電子メールへの出力ローテーションが無効になっている場合)。

具体的なヒントとしてはtar、過去数日間のビルドログを確認すると、髪の毛を引っ張る末尾を付け忘れたり-、テストのためにいじったりした場合の経験v

関連情報