LINUX.ORG.RU

Пакетный менеджер. Удобная модификация пакетов.


0

0

Какие пакетные менеджеры предоставляют возможность удобной модификации пакетов?

Интересует возможность работы на уровне:

$ get source
# modify source
# modify dependences
# modify compile commands (например изменение параметров передаваемых ./configure)
$ create modified package

Опционально хотелось бы иметь возможность добавлять этот пакет в локальный репозиторий.

Я понимаю, что в каком-то виде такие возможности предоставляют все пакетные менеджеры, так что напишите, пожалуйста, как можно осуществить вышеуказанные операции при помощи используемого вами менеджера пакетов.

Арч:
# abs repo/package
$ cp /var/abs/repo/package/PKGBUILD ./
$ makepkg --nobuild
#тут меняем сорцы
#
#меняем зависимости и команды компиляции
$ $EDITOR PKGBUILD
#всё готово, можно делать пакет
$ makepkg

Опционально заменить последний makepkg на makepkg -I.

x3al ★★★★★
()
Ответ на: комментарий от xorik

>Нет ничего проще emerge something :)
ебилд сначала написать надо

nu11 ★★★★★
()

yaourt или ручной makepkg. Присоединяю Арч, там с этим можно о-о-очень вдумчиво сидеть — гибкости подчас гента позавидует.

Хотя при «пользовательском» взгляде на мир и нежелании копать тысячи опций configure — портаж и юз-флаги заруливают всё

DoctorSinus ★★★★★
()
Ответ на: комментарий от nu11

слака же. Нет ничего проще ./configure && make && make install

«Помойка в Слаке начинается с /»

athost ★★★★★
()
Ответ на: комментарий от x3al

Спасибо за ответ. В дебиане и основанных на нём дистрибутивах подобная операция выглядит как

$ apt-get source package
$ cd package-version
# Меняем код
$ dch -i # необязательно. Прописать изменения в Changelog
$ $EDITOR debian/control # меняем зависимости
$ $EDITOR debian/rules   # меняем команды компиляции
$ fakeroot debian/rules binary
$ dpkg -i ../package_version_arch.deb

А в gentoo

$ emerge -f package # получить исходники
# изменить исходный код, сделать патч
$ mkdir -p /usr/local/portage/category/package/files
$ cd /usr/local/portage/category/package
$ cp -r /usr/portage/category/package ..
$ mv /path/to/created.path /usr/local/portage/category/package/files/
$ $EDITOR package.ebuild
# Поменять зависимости, поменять команды сборки
# в функцию src_unpack() добавить команду "epatch "${FILESDIR}"/created.path"
$ ebuild package.ebuild digests
$ emerge package

Работа получается в этих трёх случаях почти одинаковая, но в случае ebuild'ов и PKGBUILD'ов можно заменить, к примеру, путь откуда скачивать уже пропатченные исходные коды, так что эти системы более удобны. Кроме того мне кажется, что PKGBUILD имеет более простой, чем ebuild, формат.

Всем спасибо за ответы. Тут же задам второй вопрос, а не разрабатывались source-based системы управления пакетами в которых в скрипте, описывающем правила сборки можно было бы сказать что-нибудь вроде:

use packagename

fetch -replace () { some code }
prepare -after () { apply own patch }
after_build -before () { modify cofigs }

так, чтобы при использовании этого скрипта использовались все правила для установки пакета packagename, кроме fetch (было бы заменено полностью), после правила prepare пакета packagename вызывалась наша функция prepare, а перед after_build пакета packagename вызывалась бы наша after_build?

kim-roader ★★
() автор топика
Ответ на: комментарий от kim-roader

Слакварь, немного скриптов и прямые руки могут всё :)
Есть набор скриптов для слаквари, называется simplepkg - http://simplepkg.sarava.org/ . В нём есть скрипт mkbuild, который используется для генерации слакбилдов. Там есть некое подобие того, о чём ты толкуешь. А может и не оно совсем :) Но при желании можно допилить до нужного вида, там всё просто.

Laz ★★★★★
()
Ответ на: комментарий от kim-roader

> $ apt-get source package

$ cd package-version

# Меняем код


$ dch -i



не меняем код, а cp my.patch debian/patches/

yltsrc
()
Ответ на: комментарий от kim-roader

> fakeroot debian/rules binary

Более кошерный способ: dpkg-buildpackage -rfakeroot -b

Biga
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.