LINUX.ORG.RU

Как правильно готовить ebuild? Ошибка на этапе установки.

 , ,


0

0

Никогда ebuild'ов не писал (как и подобает настоящему хомяку), но [ВНЕЗАПНО] возникла необходимость в libpng14 (проприетарщина - зло).

Набросал вот такой libpng-1.4.12.ebuild. Библиотека собирается, но на фазе установки ругается sandbox :(

Как пофиксить не отключая sandbox?

Сперва хотелось бы понять, зачем оказалась нужна libpng14.

beresk_let ★★★★★
()
src_install() {
        newlib.so .libs/libpng14.so.0.* libpng14.so.0
}
tiandrey ★★★★★
()

mv: невозможно переместить «/var/tmp/portage/media-libs/libpng-1.4.12/work/libpng-1.4.12/.libs/libpng14.so.14.12.0» в «/usr/lib/libpng14.so.14.12.0»: Отказано в доступе

А самому догадаться?
Ебилды собираются в песочнице. Запись из ебилда вне /var/tmp/portage/<category>/<name> запрещена. Ебилд должен собрать образ в /var/tmp/portage/<category>/<name>/image, а этот образ уже сам portage смёрджит с корневой ФС, записав при этом в базу данных список всех его файлов с их таймстампами и контрольными суммами. Потому что это одна из главных задач любой системы портов/пакетного менеджера - контролировать, что внес в систему собранный порт/установленный пакет.
http://devmanual.gentoo.org/ebuild-writing/variables/index.html

D Path to the temporary install directory. Value: «${PORTAGE_BUILDDIR}/image».

Соответственно, mv «${WORKDIR}/${P}»/.libs/libpng14.so* ${D}/usr/lib
Хотя хз, зачем тебе понадобилось писать ебилд libpng, который и так есть в portage.

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

записав при этом в базу данных список всех его файлов

Вот этого и хочется избежать, т.к. конфликтует с libpng15. Хочется переместить/скопировать 3 файла из sandbox.

который и так есть в portage

А вот и нет:

$ ls /usr/portage/media-libs/libpng | grep libpng
libpng-1.2.49.ebuild
libpng-1.2.50.ebuild
libpng-1.5.10.ebuild
libpng-1.5.11.ebuild
libpng-1.5.12.ebuild
tiandrey
 * ERROR: media-libs/libpng-1.4.12 failed (install phase):
 *   !!! newlib.so: .libs/libpng14.so.0.* does not exist

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

Вот этого и хочется избежать, т.к. конфликтует с libpng15. Хочется переместить/скопировать 3 файла из sandbox.

Чтоб они перезаписали файлы установленного libpng15 прямо во время выполнения ебилда, не во время мёрджа?
Портедж в любом случае не даст тебе повредить собранный, это фича. Она выключается, но если ты хочешь ее выключить - ты наверняка не понимаешь, что ты делаешь и что тебе нужно.
Скорее всего, тебе нужно оставить в ${D} какой-нибудь один единственный /usr/lib/libpng14.so.14, который ни с чем не конфликтует.

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

Значит, нет или источника, или приемника копирования. Наверное, нужно создать ${D}/usr/lib.
А вообще, иди читай девмануал уже. Там написано, в какой директории выполняется какая фаза, и куда из нее можно/нельзя писать.

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

nCdy, tiandrey

newlib.so .libs/libpng14.so* libpng14.so*
не работает
newlib.so .libs/libpng14.so libpng14.so
newlib.so .libs/libpng14.so.14 libpng14.so.14
newlib.so .libs/libpng14.so.14.12.0 libpng14.so.14.12.0
работает, но вместо симлинков копирует libpng14.so.14.12.0. Как бы исправить?

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

пока остановился на:

newlib.so .libs/libpng14.so.14.12.0 libpng14.so.14.12.0
dosym /usr/libpng14.so.14.12.0 /usr/lib/libpng14.so.14
dosym /usr/lib/libpng14.so.14.12.0 /usr/lib/libpng14.so

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

Посмотрел иные ebuild'ы... конструкция вида «/usr/lib» вполне себе используется для создания симлинков... Пусть так и остается.

Old_Hamster ★★★
() автор топика

Дарю ебилд из CVS портажа, слегка подправленный. Осторожно: куча устаревших конструкций, но если тебе ехать, а не шашечки - работать будет. Адаптировать под новый синтаксис лично мне влом...

http://pastebin.com/yZ2GpXSv

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

да не костыляй ты с newlib, если emake всё нормально ставит

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

И в догонку:
Благодарность всем отписавшимся :)

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

Вариант с emake еще меньше и прозрачнее, особенно при бампах ебилда. Ты уверен, что авторы не изменят процедуру установки, добавив/удалив какой-нибудь компонент? Если тебе ебилд на одну намертво прибитую гвоздями версию(1.4.12), то тогда побоку, а если будешь бампать - придется за всем этим следить самому

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