Я использую сервер Ubuntu 12.04 LTS. В настоящее время у меня есть проблема, из-за которой один из моих использованных пакетов имеет раздражающую ошибку. Вместо того, чтобы удалять его и просто собирать из исходного кода, я хочу интегрировать его в управление пакетами Ubuntus / Debians.
Исходя из ArchLinux, мы сделали это, скопировав оригинальный PKGBUILD и изменив его таким образом, чтобы он компилировал новый пакет . Это очень простой процесс, но он информирует менеджера пакетов об этом пакете, даже если он отсутствует в локальных репозиториях.
Есть ли подобный способ для Ubuntu / Debian? Могу ли я легко основать свой пакет на устаревшей версии Ubuntu и установить этот пакет вместо оригинальной версии репозитория?
Примечание : соответствующее программное обеспечение - libvirt (по крайней мере, мне нужно 0.9.13, 12.04 работает с 0.9.8), и хотя я хотел бы найти решение для этого конкретного пакета в комментариях, я ищу более общее решение для таких проблем, если они возникнут в будущем.
Вопреки вопросам Как я могу вручную собрать свой собственный пакет «трудным путем»? и Что такое простое Руководство по созданию пакетов Debian? Я не заинтересован в создании новый пакет, но вместо этого использующий существующие ресурсы и обновляющий их до более новой версии.
Я бы сначала скачал исходный код и зависимости сборки для версии Ubuntu:
apt-get install dpkg-dev
apt-get build-dep <package>
apt-get source <package>
Немодифицированный исходный источник, на котором основана версия Ubuntu, будет в файле < pkg > _ < ver > .orig.tar.gz (схема сжатия может отличаться) - я распаковываю это в один каталог (назовем его «dir A»), затем загружаю исходный код с исправленной ошибкой в другой каталог («dir B») ), а затем сгенерируйте патч для того, что изменилось:
diff -Nur <dirA> <dirB> >/tmp/upgrade.patch
Затем перейдите в каталог, где apt-get source распаковал модифицированную версию Ubuntu, и примените патч
patch -p1 </tmp/upgrade.patch
Предполагая, что между двумя вышестоящими версиями было не так много изменений, и они не конфликтовали ни с какими изменениями в пакере Ubuntu, это должно работать. Затем отредактируйте файл debian / changelog в пакете Ubuntu, чтобы присвоить ему новый номер версии, и dpkg-buildpackage должен создать вам пользовательскую версию.
Просто для того, чтобы подрезать мой собственный рог, у меня есть решение именно для этого обстоятельства. Вы можете загрузить, распаковать, собрать и переустановить пакет Debian с помощью 2 или 3 команд.
Это скрипт оболочки debtool , который доступен на GitHub по вышеупомянутой ссылке.
Сборка пакетов Debian из исходного кода может быть громоздкой, особенно на ежедневном драйвере, который не обязательно путать с многочисленными зависимостями сборки и тому подобным.
Предполагая, что libvirt доступна через источники, выполните следующую команду:
debtool --download --unpack libvirt
Приведенная выше команда только что загрузила файл libvirt_0.9.8_all.deb и распаковал его в каталог libvirt_0.9.8_all .
В качестве альтернативы вы можете распаковать версию libvirt , которая в настоящее время установлена в вашей системе:
debtool --unpack libvirt
На этом этапе вы должны внести все свои изменения в файлы в каталог. Вы также, вероятно, захотите увеличить номер версии пакета (например, 0.9.8-custom1), расположенный в ./ libvirt_0.9.8_all / DEBIAN / control .
Теперь соберите пакет, выполнив следующую команду:
debtool --build ./libvirt_0.9.8_all
Теперь ваш готовый пакет находится в текущем каталоге как libvirt_0.9.8-custom1_all.deb .
Вы можете быстро переустановить этот пакет, запустив debtool --reinst ./libvirt_0.9.8-custom1_all.deb
или альтернативно debtool --build --reinst ./libvirt_0.9.8_all
, чтобы собрать и переустановить одним махом.
Вы также можете выполнить несколько других связанных задач с debtool .
Если в репозиториях доступно несколько версий пакета, вы можете перечислить их следующим образом:
debtool --show zsh
Приведенная выше команда вернет следующее:
zsh 5.0.5-4ubuntu1~ubuntu14.04.1 amd64
zsh 5.0.2-3ubuntu6 amd64
Если вы хотите загрузить пакеты вручную, вы можете использовать опцию --show-format
.
debtool --show --show-format zsh
Возвращает следующее:
apt-get download zsh=5.0.5-4ubuntu1~ubuntu14.04.1 -a=amd64
apt-get download zsh=5.0.2-3ubuntu6 -a=amd64
Вы можете загрузить самую последнюю версию пакета следующим образом:
debtool --download zsh
Вы можете скачать определенную версию следующим образом:
debtool --download zsh=5.0.2-3ubuntu6
Вы можете распаковать пакет на жесткий диск:
debtool --unpack package.deb
Вы также можете распаковать пакет, который в настоящее время установлен в вашей системе:
debtool --unpack package
Если вы внесли изменения в любой из установленных файлов, они также будут включены. Это идеально, если вы хотите работать с пакетом, который больше не доступен из исходников, или если вы хотите включить ранее исправленные исправления в «исправленный» deb.