Легко распакуйте DEB, отредактируйте postinst и переупакуйте DEB

Я думаю Ваш /etc/network/interfaces немного чрезмерно увеличен в размере.

Существует несколько точек для упоминания здесь:

  • Почему Вы определяете default- интерфейс? Это не имеет смысла мне, так как Вы уже полностью определили каждый интерфейс.
  • Для eth0 Вы решаете поднимать его на a hotplug- событие и на запуск Вашей системы. Как eth0 не является сменным, Вы не должны указывать обоих.
  • Это - хорошая практика для расположения с отступом опций для данного интерфейса

Но давайте возвратимся к теме:

Я думаю для сменных устройств, которые всегда рекомендуется указать allow-hotplug и опустите auto строка файла конфигурации. Я попробовал бы следующее /etc/network/interfaces:

auto lo
auto eth0
allow-hotplug wlan0
allow-hotplug wlan1

# pattern of an interface definition
#
# iface [name of physical/logical interface] [name of address family] [method to configure the interface]
#     [option 1]
#     [option 2]
#     ...
#     [option n]

iface lo inet loopback

iface eth0 inet static
    address 192.168.2.201
    netmask 255.255.255.0

iface wlan0 inet manual
    wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf

iface wlan1 inet static
    address 10.0.0.1
    netmask 255.255.255.0

Между прочим: у Вас есть какие-либо убедительные причины не пойти с инструментом автоматической настройки сети как wicd или networkmanager?

136
18.07.2019, 05:26
2 ответа

Основной командой для работы с 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 packg находятся в стандартном формате: это архивы 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 может использоваться в интерактивном режиме или с помощью скриптов.

.
214
27.01.2020, 19:29

Вы можете использовать fpm с опцией --after-install для замены скрипта postinst, например, так:

fpm -e --after-install ../DEBIAN/postinst.new -s deb -t deb ../old.deb
8
27.01.2020, 19:29

Теги

Похожие вопросы