В Debian пересборка пакета выполняется достаточно легко. Допустим вы системный администратор и решили что вам нужно что-то поменять в исходном коде программы для получения доступа к отключенной возможности или правке критической ошибки, да много чего еще. Вот тут вам и поможет моя запись ;)
Итак, разберем пересборку пакета на примере squid3.
Перед тем как начать, убедитесь что у вас включены источники исходных кодов в /etc/apt/sources.list (это которые начинаются не на deb , а на deb-src). Эти источники дадут вам скачать исходные коды всех программ имеющихся в репозитории.
К примеру у вас запись будет:
deb http://security.debian.org/ stable/updates main contrib non-free
Это значит, что у вас не будет исходных текстов squid3 — только уже готовые, собранные кем-то за вас пакеты.
Все что вам нужно — это добавить такую же строку следом, и изменить deb на deb-src. Получится вот так:
deb http://security.debian.org/ stable/updates main contrib non-freedeb-src http://security.debian.org/ stable/updates main contrib non-free
Сохраните ваш /etc/apt/sources.list и выполните
#apt update
Скачиваем исходный код и зависимости для сборки
Мы добавили репозитории с исходными кодами и обновили свой список файлов. Теперь качаем squid3
#apt source squid
После скачивания исходников самого squid3 нам нужно скачать зависимости для сборки пакета. То есть — те пакеты которые требуются для установки чтобы собрать наш пакет.
#apt build-dep squid3
Эта команда установит пакеты требуемые для сборки — если, конечно, вы их не ставили до этого. Теперь мы можем приступать к модификации исходных кодов нужного нам пакета и пересборке.
Модификация и пересборка
В этой заметке мы включим http-violations в squid3. Переходим к исходникам которые мы скачали. Правим файл debian/rules — добавим туда опцию —enable-http-violations и сохраняем его.
Сборка
Перед самой сборкой, убедимся что у нас есть установленные devscripts.
#apt install devscripts
Если установили, то возвращаемся в корень директории с исходными кодами и запускаем сборку.
$debuild -uc -us -b
Пересборка пакета запустится и вы увидите в терминале что-то вроде вот такого:
[...] dh_gencontrol -psquid dpkg-gencontrol: warning: package squid: unused substitution variable ${perl:Depends} dh_md5sums -psquid dh_builddeb -psquid dpkg-deb: building package 'squid' in '../squid_3.5.19-1_amd64.deb'. dh_gencontrol -psquid-dbg dh_md5sums -psquid-dbg dh_builddeb -psquid-dbg dpkg-deb: building package 'squid-dbg' in '../squid-dbg_3.5.19-1_amd64.deb'. dh_gencontrol -psquidclient dh_md5sums -psquidclient dh_builddeb -psquidclient dpkg-deb: building package 'squidclient' in '../squidclient_3.5.19-1_amd64.deb'. dh_gencontrol -psquid-cgi dh_md5sums -psquid-cgi dh_builddeb -psquid-cgi dpkg-deb: building package 'squid-cgi' in '../squid-cgi_3.5.19-1_amd64.deb'. dh_gencontrol -psquid-purge dh_md5sums -psquid-purge dh_builddeb -psquid-purge dpkg-deb: building package 'squid-purge' in '../squid-purge_3.5.19-1_amd64.deb'. dpkg-genchanges --build=any,all >../squid3_3.5.19-1_amd64.changes dpkg-genchanges: info: binary-only upload (no source code included) dpkg-source --after-build squid3-3.5.19 dpkg-buildpackage: info: binary-only upload (no source included) Now running lintian... N: 1 tag overridden (1 warning) Finished running lintian.
Пакет собран и будет находиться в родительской директории. Теперь нам его надо переустановить.
#dpkg -i squid3*.deb
На этом всё. Удачи :)