LINUX.ORG.RU

[Gentoo] [emerge] как установить пакет, если исходники были изменены?

 ,


1

2

В общем, нужно было мне поправить исходники. Все поправил, запаковал обратно в .tar.bz2, положил в /usr/portage/distfiles, пытаюсь его установить, но не получается. Как я понял - portage сверяет хеш суммы скачанного архива, и если они не совпадают, то архив с исходниками автоматически начинается качаться с репозитория.

Есть ли возможность обойти этот подводный камень и установить программу именно из своих, исправленных сырцов?



Последнее исправление: Stereo (всего исправлений: 1)

Нужно обновить контрольную сумму в manifest-е:
копируешь ебилд в 1.ebuild и далее
создаёшь кс ebuild 1.ebuild manifest
собираешь ebuild 1.ebuild package

uzbl
()
Ответ на: комментарий от uzbl

Да, ебыдл должен лежать в каталоге с тем же названием, но без версии.

uzbl
()

По-грязному — ebuild manifest. По-хорошему — сделать патч со своими изменениями и положить его в локальный оверлей вместе с копией исходного ебилда и files.

const86 ★★★★★
()

Все поправил, запаковал обратно в .tar.bz2

чо? :)

cp sorce.c sorce.c.bak && vim sorce.c && diff -u sorce.c.bak sorce.c > sorce-zuppa.patch

как оверлей сделать не скажу , сикрет обшшегентушный
на это не 5 мин. тратится - 5 лет !
читается весь генту вики на саамом неродном языке
и одним ебилдом не обойдешся - правится весь портеж!
причем не по одной строчке , а полностью (бо црц в манифестах)
...

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

ладно , облегчу чуть:

после создания локального
cd /my_zuppalay/ && mkdir -p zuppa-cat/zuppa-prog && cd zuppa-cat/zuppa-prog && mkdir files && cp gdetotam/sorce-zuppa.patch files/ && cp /usr/portage/zuppa-cat/zuppa-prog/zuppa-prog-666.ebuild . && vim zuppa-prog-666.ebuild && ebuild zuppa-prog-666.ebuild digest && emerge -va zuppa-prog

во время редактирования
src_prepare() {
...
epatch «${FILESDIR}»/sorce-zuppa-configure.patch
...

например

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

и не забывайте про TAB, а то я так и вижу как человек руками пути набирает ... :)

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

Ну дык, дебиан и генту это небо и земля - apt vs portage, редкие, но стабильные релизы, vs bleeding edge, ну и уровни пользователей отличаются.

aptyp ★★★★
()

Может оформить изменения в виде патча и поправить ебилд?

alix ★★★★
()

То каким способом вы изменили исходники не правильно, посмотрите любой ebuild и вы увидите, что там за основу в берётся архив с исходнми кодами скачанный с официального источника разработчиков, если в него нужно внести изменения то прописывается директива epatch, в директорию files в директории с ebuild`ом помещается собственно сам patch.

Дальше при установке ebuild`а проходят следующие этапы:

  • ebuild fecth - скачивание и проверка исходных кодов и проверка наличия патчей;
  • ebuild unpack - распаковка архива с исходными кодами в директорию сборки;
  • ebuild prepare - наложение патчей на оригинальный исходный код и прочие подготовительные операции;
  • ebuild configure - запуск скрипта настройки сборочного окружения;
  • ebuild compile - собственно сборка программы;
  • далее;

Так вот к чему я это менять оригинальный архив с исходными кодами это не правильно, если нужно внести в него изменения то в ebuild`е указываете на соответствующем этапе наложить ваш патч.

И если всё же хотите вносить изменения в ebuild`ы лучше использовать локальный оверлэй, делается он не сложно.

В /etc/make.conf прописываете директиву PORTDIR_OVERLAY=«» с указанием пути до вашего оверлэя, к примеру PORTDIR_OVERLAY=«/usr/local/portage».
В нём создаёте структуру категорий и названий пакетов как в дереве portage, к примеру для firefox это будет так:

mkdir -p /usr/local/portage/www-client/firefox/
mkdir /usr/local/portage/www-client/firefox/files
Далее копируете оригинальный ebuild в ваш оверлэй, изменив его ревизию , индекс "-rN", если в оригинальном ebuild`е накладываются патчи и они вам нужны то копируйте и их в директорию files:
cp /usr/portage/www-client/firefox/firefox-8.0.ebuild /usr/local/portage/www-client/firefox/firefox-8.0-r1.ebuild
...
cp /usr/portage/www-client/firefox/files/* /usr/local/portage/www-client/firefox/files

Помещаете ваш патч в директорию files, затем редактируете ebuild и указываете в нём наложение патчей в разделе unpack или prepare:

cd /usr/local/portage/www-client/firefox/
vim firefox-8.0-r1.ebuild
...
epatch "${FILESDIR}"/my-patch.patch
...

После внесения изменений в ebuild обновляем Manifest с записями контрольных сумм ebuild`а и фалов патчей.

ebuild firefox-8.0-r1.ebuild digest

Всё теперь можете ставить ваш ebuild, в котором будет применяться ваш патч.

О написании ebuild`ов читайте здесь http://devmanual.gentoo.org/quickstart/index.html так же есть и более полное руководство.

На самом деле то, что я написал делается за пару минут, это только на взгляд кажется сложным, но зато после создания локального оверлея вы можете легко накладывать патчи, изменять use флаги, написать ebuild для новой версии программы, которой ещё нет в дереве портов. А если вы его (ваш ebuild) поместите в основное дерево портов то после первого 'emerge --sync' он будет удалён.

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

А проще вариантов нет?

Есть. Просто положить свой патч в /etc/portage/patches/$CATEGORY/$PACKAGE.

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