Составьте и передайте gzip-архив tar за один раз

Составьте и передайте gzip-архив tar за один раз

Я пытаюсь придумать эффективный способ создания сжатого архива gzip различных системных разделов на Android, выводя все данные на стандартный вывод, чтобы иметь возможность шифровать их по мере их поступления через 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, состоящий из нескольких файлов/источников. По сути, я хочу вывести файл tar.gz из stdout этого скрипта, который включает в себя следующие файлы:

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

Можно ли это как-то сделать? Пока что я не сталкивался с такой проблемой в своих путешествиях.

решение1

Предположим, вы имеете в виду, что хотите использовать tar для создания архива и отправки его на стандартный вывод. Вот что происходит по умолчанию, если вы не используете опцию fотправки вывода в файл:

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

Если проблема заключается в архивировании «файлов», которые на самом деле не существуют в файловой системе, то это немного сложнее из-за формата tar-файлов: каждый файлпредшествовалзаголовком, который включает размер файла. Размер файла в заголовке должен быть правильным, поскольку это единственный способ tarузнать, где начинается следующая запись заголовка.

Так что это возможно сделать только если вы можете точно предсказать размер сгенерированного объекта файла. Если вы можете это сделать, вы должны быть в состоянии создать файл tar, используя, например, стандартную библиотеку pythontarfileмодуль.

решение2

Тема, которую вы, возможно, захотите просмотретьХак5форумы покажут путь к проекту, над которым ведется работа, в котором используются mkfifoи другие магические возможности Bash... Я обнаружил, что после настройки он позволяет легко шифровать практически все, и есть инструменты для массового дешифрования.

Профессор в пудинге, так чтоТрэвис-CIв настоящее время используется для отображения всех рабочих функций, включая восстановление тестовых строк, файла и каталога. Это было протестировано на Android с Busybox и chroot Linux, но вам может понадобиться только busybox (если отключена ротация вывода на электронную почту), поскольку большая часть исходного кода разработана для ограниченных систем.

Подсказка tar: проверьте журналы сборки за последние несколько дней, и вы увидите, что это может бытьтаскание за волосыопыт, если вы забыли поставить конечный -или испортить его vдля тестирования.

Связанный контент