LINUX.ORG.RU

Сборка rpm

 ,


0

1

Я докатился до такой жизни, что собираю первый в жизни rpm. Суть пакета в том чтобы раскидать файлы по директориям и выполнить специальные действия, вроде создания БД и рестарта апача.
Вопросы:
1. Я правильно понимаю, что достаточно указать нужные файлы в %files, и они сами установятся куда следует, в %install писать ничего не нужно?
2. Что делать со служебными файлами? Вроде схемы БД, которые нужны только в процессе установки? Можно конечно их куда-то запихнуть, а после выполения всех нужных действий в postinst вручную удалить, а как правильно? Может можно как-то сказать «вот этот файл никуда копировать не надо, пусть остаётся во времнной директории»?

★★★★★

1. В целом да, нужно только правильно выставить разрешения и там еще директории по-моему нужно указывать. Секция install нужна только в том случае, если по этому спеку будет проводиться также сборка софта. Т. е. по одному спеку можно делать несколько разных пакетов, в частности пакет с сорцами и бинпакет.

2. Если без служебного файла никак (в некоторых случаях можно же то же самое сделать при помощи выполнения команд), то по-моему только удалять вручную в %postinst. Вообще по-моему файлы ни в каких временных директориях не хранятся во время установки, они сразу копируются в место назначения, как при извлечении из архива. Честно говоря, я не очень понимаю, зачем нужны такие файлы именно в процессе установки.

Да, кстати. Если при удалении пакета какой-то файл (за исключением специально отмеченных конфигурационных) не будет найден, по-моему rpm выдаст ворнинг. Но точно не помню.

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

в некоторых случаях можно же то же самое сделать при помощи выполнения команд

У меня там sql здоровенный. Базу создать и справочниками заполнить.

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

http://pkgs.fedoraproject.org/cgit/phpMyAdmin.git/tree/ вот тут пример можешь посмотреть, или найти пакет который создает sql базу, возможно от какой-нибудь cms?, в нем должно быть все что ты хочешь.

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

Я не понимаю его. Я ему написал в спеке
BuildArch: noarch
Я ему даже добавил, на случай непонимания
ExclusiveArch: noarch
ExcludeArch: x86-64

И что я вижу при попытке сборки? Я вижу error: Directory not found: тра-ля-ля.x86-64

Это «особенность» rpm?

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

Эмм.. Это очень странно: у меня нормально работает безо всяких Exclusive и Exclude. Можно какой-нибудь минимальный примерчик неработающего spec?

Kiborg ★★★
()

Я правильно понимаю, что достаточно указать нужные файлы в %files, и они сами установятся куда следует, в %install писать ничего не нужно?

Да

Что делать со служебными файлами?

Либо опакечивай, либо вставляй heredoc в %pre/%post%/etc. Что, естественно, сделает нечитабельным и несопровождабельным spec.

Может можно как-то сказать «вот этот файл никуда копировать не надо, пусть остаётся во времнной директории»?

Нет конечно. Что rpm, что dpkg - примитивное и абсолютно негибкое наследие тяжёлых 90-х, которое удобно только для того, чтобы вытягивать из репо сразу пачками по зависимостям разную мелочёвку типа -dev[el] и прочего базового юзерленда. Вот там оно работает хорошо и без костылей.

Можно конечно их куда-то запихнуть, а после выполения всех нужных действий в postinst вручную удалить

Это извращение будет проваливать верификацию у фронтенда (если он её делает).

а как правильно?

В твоём случае - http://megastep.org/makeself/.

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

http://megastep.org/makeself/

Это какой-то костыль, который мне не нравится. Мне ещё зависимости проверять, наличие нужных пакетов в системе...

Это извращение будет проваливать верификацию у фронтенда (если он её делает).

Подробнее?

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

Мне ещё зависимости проверять, наличие нужных пакетов в системе...

Так проверяй в скрипте, кто не даёт.

Подробнее?

Всё служебное файло, все схемы будут зарегистрированы в бд rpm как установленные, а самих файлов на жёстком диске не будет, потому что ты их потрёшь в %post.

d_a ★★★★★
()

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

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

Хм. Беда. Но как-то же это должно обходиться. Или забить и пусть лежит... Надо будет с коллегами посоветоваться.

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

mock - build SRPMs in a chroot

srpm - это по идеологии то, что требует доп. обработки (компиляции) для работы.

ты можешь чего-то не указать в зависимостях

Не могу. Если я не указал, и этого не будет, оно просто не заработает.

у тебя в системе могут быть установлены те или иные пакеты, которые нужны для твоего собираемого, а у других людей нет

И что? Поставят, куда они денутся. Всё, чего нет в дистрибутиве, я тащу с собой.

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

srpm - это по идеологии то, что требует доп. обработки (компиляции) для работы.

нет.

Не могу. Если я не указал, и этого не будет, оно просто не заработает.

предположим, что у тебя есть пакет А, без которого не будет твой пакет. Ты его не указал в зависимостях. у тебя твой пакет будет работать - у других не факт.

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

предположим, что у тебя есть пакет А, без которого не будет твой пакет. Ты его не указал в зависимостях

«Предположим, у нас сосуд». Если я не указал правильно зависимости - я ссзб, и руки мне надо оторвать и пришить туда, где должны находиться.

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

Оказалось, что несмотря на BuildArch, ему нужно вручную написать rpmbuild --buildarch noarch. Тогда собирается из .noarch, иначе требует наличия файлов в директории .x86-64. Шёл 21 век...

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

RPM, кстати, очень интересно зависимости автозаполняет. Если в пакете есть, к примеру, скрипт на перле, то RPM может автоматически воткнуть в зависимости интерпретатор perl. Также он проходит по двоичным файлам и составляет список их зависимостей по выводу ldd.

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

Посмотрю, как на работе буду, но по-моему у меня и без этого флага работало.. opensuse 11.4, кстати, если что.

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

Он ещё и из скриптов выцепляет модули, до которых может дотянуться, и сам подставляет в зависимости.

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