Основная команда для управления пакетами DEB является dpkg-deb.
Чтобы распаковать пакет, создайте пустой каталог и переключитесь на него, затем запустите, dpkg-debчтобы извлечь его управляющую информацию и файлы пакета. Используйте dpkg-deb -bдля перекомпоновки пакета.
mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb
Помните, что если ваш сценарий не запущен от имени пользователя root, права доступа и владение файлами будут повреждены на этапе извлечения. Один из способов избежать этого - запустить ваш скрипт fakeroot. Обратите внимание, что вам нужно запускать всю последовательность fakeroot, а не каждую по dpkg-debотдельности, поскольку именно этот fakerootпроцесс хранит в памяти разрешения файлов, которые не могут быть созданы такими, какие они есть.
fakeroot sh -c '
mkdir tmp
dpkg-deb -R original.deb tmp
# edit DEBIAN/postinst
dpkg-deb -b tmp fixed.deb
'
Вместо того, чтобы связываться с разрешениями, вы можете сохранить архив данных без изменений и изменять только контрольный архив. dpkg-debне предоставляет способ сделать это. К счастью, пакеты deb находятся в стандартном формате: они являются arархивами. Таким образом, вы можете использовать, arчтобы извлечь контрольный архив, изменить его файлы и использовать arснова, чтобы заменить контрольный архив новой версией.
mkdir tmp
cd tmp
ar p ../original.deb control.tar.gz | tar -xz
# edit postinst
cp ../original.deb ../fixed.deb
tar czf control.tar.gz *[!z]
ar r ../fixed.deb control.tar.gz
Вы должны добавить запись в журнал изменений и изменить номер версии, если вы что-то изменили в пакете. Инфраструктура для работы с пакетами Debian предполагает, что если два пакета имеют одинаковые имя и версию, это один и тот же пакет. Добавьте суффикс к части debian_revision в конце номера версии; по причинам сортировки суффикс должен начинаться с ~, например, 1.2.3-4.1становится 1.2.3-4.1~johnjumper1.
Вместо использования инструментов оболочки вы можете использовать Emacs. dpkg-dev-elПакет (который является его собственным вверх по течению , как это родной пакет Debian) содержит режимы для редактирования .debфайлов и редактирование списков изменений Debian. Emacs можно использовать в интерактивном режиме или по сценарию.
-eпереключатель FPM изменить файл управления:fpm -e -s deb -t deb ../old.deb. Это откроет контрольный файл в вашем редакторе.