Как собрать rpm пакет

Аватар пользователя Goga777

подскажите, плиз, основные шаги

- как из исходников собрать srch.rpm
- как из srch.rpm собрать rpm пакет

насколько я понимаю, рекомендуемый способ установки и обновления программ - именно через rpm пакеты.

возможно ли воспользоваться этими рекомендациями, чтобы установить себе
досточно тяжелый wine http://www.winehq.org/ или легкий sven http://sven.linux.kiev.ua/

где брать spec файлы для этих пакетов ?

Второй вопрос. Если при обновлении какой-либо программы в новой версии появились новые опции в кофигурационных файлах, то каким обрахом они будут добавлены в уже существующие и настроенные ранее конфиги ?

Аватар пользователя Archont

Re: Как собрать rpm пакет

http://www.linux.org.ru/books/HOWTO/RPM-HOWTO.html

spec-файл можно:
1) Написать самому;
2) Использовать имеющийся в архиве исходников (иногда есть и такое, правда далеко не всегда);
3) Взять за основу spec-файл от чьей-то сборки другой версии пакета, например здесь http://freshrpms.net/packages/;
4) Не морочиться со spec-файлом и воспользоваться программой checkinstall, но это желательно только для небольших проектов.

По второму вопросу: никак, просто при установке будет создан новый файл конфигурации с суффиксом rpmnew, или старый будет сохранен с суффиксом rpmsave, а делать из них рабочий конфиг - дело администратора.

Аватар пользователя Goga777

Re: Как собрать rpm пакет

Archont

Цитата:
3) Взять за основу spec-файл от чьей-то сборки другой версии пакета, например здесь http://freshrpms.net/packages/;

а если я возьму spec файл от более ранней версии пакета с дисков ASPLinux ? нормально будет ?

Аватар пользователя DRVTiny

Re: Как собрать rpm пакет

Цитата:
или легкий sven http://sven.linux.kiev.ua/

Вот что я нарыл для Sven'а:
spec-файлы для дистрибуива ALTLinux (по идее, должны и для ASP'а подойти) лежат здесь:
http://sisyphus.ru/srpm/sven/spec
http://alt.linux.kiev.ua/srpm/sven/spec [бета сайта]
Также прилагаю к этому сообщению spec, по которому сам разработчик собирает rpm-пакет ("снапшот", как он это обозвал).
В общем, как соберёшь пакет, перешли мне его на мейл, хорошо? А я у себя на сайте (пусть и не совсем к месту это будет, но не суть - пакет всё равно маленький) его размещу и дам ссылку в разделе "загрузки".

ВложениеРазмер
spec.txt 2.77 КБ
Аватар пользователя Goga777

Re: Как собрать rpm пакет

я тоже нашел spec файл для свена 0.4.3 для асп10
ftp://ftp.msiu.ru/pub/asplinux-10/updates/testing/SRPMS/SPECS/sven.spec

Аватар пользователя DRVTiny

Re: Как собрать rpm пакет

Цитата:
я тоже нашел spec файл для свена 0.4.3 для асп10

Ну а пакет-то - собрал или как?

Аватар пользователя Goga777

Re: Как собрать rpm пакет

на выходных попробую - счас компа с линуксом нет.

Аватар пользователя Goga777

Re: Как собрать rpm пакет

вот пробую - не получается Грустный

[root@localhost SOURCES]# rpmbuild -bb /usr/src/asplinux/SPECS/sven.spec
Выполняется(%prep): /bin/sh -e /var/tmp/rpm-tmp.69381
+ umask 022
+ cd /usr/src/asplinux/BUILD
+ cd /usr/src/asplinux/BUILD
+ rm -rf sven-25.01.06
+ /usr/bin/bzip2 -dc /usr/src/asplinux/SOURCES/sven-25.01.06.tar.bz2
+ tar -xf -
+ STATUS=0
+ '[' 0 -ne 0 ']'
+ cd sven-25.01.06
++ /usr/bin/id -u
+ '[' 0 = 0 ']'
+ /bin/chown -Rhf root .
++ /usr/bin/id -u
+ '[' 0 = 0 ']'
+ /bin/chgrp -Rhf root .
+ /bin/chmod -Rf a+rX,u+w,g-w,o-w .
+ exit 0
Выполняется(%build): /bin/sh -e /var/tmp/rpm-tmp.69381
+ umask 022
+ cd /usr/src/asplinux/BUILD
+ cd sven-25.01.06
+ CFLAGS='-O2 -g -march=i386 -mcpu=i686'
+ export CFLAGS
+ CXXFLAGS='-O2 -g -march=i386 -mcpu=i686'
+ export CXXFLAGS
+ FFLAGS='-O2 -g -march=i386 -mcpu=i686'
+ export FFLAGS
+ ./configure --host=i686-redhat-linux-gnu --build=i686-redhat-linux-gnu --target=i386-asplinux-linux --program-prefix= --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib --libexecdir=/usr/libexec --localstatedir=/var --sharedstatedir=/usr/com --mandir=/usr/share/man --infodir=/usr/share/info
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
checking whether to enable maintainer-specific portions of Makefiles... no
checking whether to enable maintainer-specific portions of Makefiles... no
checking for style of include used by make... GNU
checking for i686-redhat-linux-gnu-gcc... no
checking for gcc... no
checking for i686-redhat-linux-gnu-cc... no
checking for cc... no
checking for cc... no
checking for i686-redhat-linux-gnu-cl... no
checking for cl... no
configure: error: no acceptable C compiler found in $PATH
See `config.log' for more details.
ошибка: Неверный код возврата из /var/tmp/rpm-tmp.69381 (%build)

Ошибки сборки пакетов:
Неверный код возврата из /var/tmp/rpm-tmp.69381 (%build)
[root@localhost SOURCES]#

что-то с компилятором - но вот что ??

Аватар пользователя woodoo

Re: Как собрать rpm пакет

Goga777

Цитата:
configure: error: no acceptable C compiler found in $PATH

gcc не найден в каталогах, перечисленных в $PATH.
Скорее всего - пакет не установлен.

Аватар пользователя DRVTiny

Re: Как собрать rpm пакет

Что там у тебя по which gcc видно?

Аватар пользователя Goga777

Re: Как собрать rpm пакет

да, конечно же gcc не был установлен (хорошо, что я вопрос в разделе для чайников задал Улыбка
Установил gcc-3.3.3-7asp.i386.rpm
gcc34-3.4.0-1.i386.rpm
gcc-c++-3.3.3-7asp.i386.rpm

все пошло. Но вот еще 2 ошибки выскочило при компиляции- не знаю как с ними бороться

lpthread -march=i386 -mcpu=i686 -Wl,-soname -Wl,libsven.so.2 -o .libs/libsven.so.2.0.0
/usr/bin/ld: cannot find -lpangoxft-1.0
collect2: ld returned 1 exit status
make[2]: *** [libsven.la] Ошибка 1
make[2]: Leaving directory `/usr/src/asplinux/BUILD/sven-25.01.06/libsven'
make[1]: *** [all-recursive] Ошибка 1
make[1]: Leaving directory `/usr/src/asplinux/BUILD/sven-25.01.06'
make: *** [all] Ошибка 2
ошибка: Неверный код возврата из /var/tmp/rpm-tmp.53504 (%build)

Ошибки сборки пакетов:
Неверный код возврата из /var/tmp/rpm-tmp.53504 (%build)

Аватар пользователя woodoo

Re: Как собрать rpm пакет

Goga777

Цитата:
/usr/bin/ld: cannot find -lpangoxft-1.0

Пакеты pango-devel, pango.

Аватар пользователя Goga777

Re: Как собрать rpm пакет

[goga@localhost emu]$ rpm -q pango-devel
pango-devel-1.8.1-0.10.0.1asp
[goga@localhost emu]$ rpm -q pango
pango-1.10.2-1asp

стоят эти пакеты у меня...

Аватар пользователя sergeil

Re: Как собрать rpm пакет

Goga777

Цитата:
lpthread -march=i386 -mcpu=i686 -Wl,-soname -Wl,libsven.so.2 -o .libs/libsven.so.2.0.0
/usr/bin/ld: cannot find -lpangoxft-1.0

Проверь целостность пакетов pango и pango-devel.
root# rpm -V pango
root# rpm -V pango-devel

Проверьте наличие /usr/lib/libpangoxft-1.0.so
[root@homedesk ~]# ll /usr/lib/libpangoxft-1.0*
lrwxrwxrwx 1 root root 27 Jan 28 19:34 /usr/lib/libpangoxft-1.0.so -> libpangoxft-1.0.so.0.1001.0
lrwxrwxrwx 1 root root 27 Jan 28 19:32 /usr/lib/libpangoxft-1.0.so.0 -> libpangoxft-1.0.so.0.1001.0
-rwxr-xr-x 1 root root 24556 Nov 2 17:15 /usr/lib/libpangoxft-1.0.so.0.1001.0

Если все на месте, возможно, следует перестроить кешь доступных библиотек. Для этого необходимо запустить:
root# ldconfig

Внимание, Ваши библиотеки могут отличатся... У меня ASPLinux-11b, последняя редакция, доступная для скачивания (их было несколько).

Аватар пользователя Goga777

Re: Как собрать rpm пакет

по совету опытного товарища сделал вот что -

1. обновил компилятор и pango
[root@localhost lib]# rpm -q gcc
gcc-3.4.4-2asp
[root@localhost lib]# rpm -q pango
pango-1.10.2-1asp

то же самое и для с++ и для devel

после этого компиляция прошла нормально.
За исключением небольшой проблемки

[root@localhost SPECS]# rpmbuild -bl sven.spec
Обрабатываются файлы: sven-25.01.06-1asp
ошибка: Файл не найден: /var/tmp/sven-25.01.06-1asp-root-root/usr/share/applications/sven.desktop
ошибка: Файл не найден: /var/tmp/sven-25.01.06-1asp-root-root/usr/share/pixmaps/sven.png

Ошибки сборки пакетов:
Файл не найден: /var/tmp/sven-25.01.06-1asp-root-root/usr/share/applications/sven.desktop
Файл не найден: /var/tmp/sven-25.01.06-1asp-root-root/usr/share/pixmaps/sven.png
[root@localhost SPECS]#

пришлось скопировать эти 2 иконки из уже установленного дистрибутива в
/var/tmp/sven-25.01.06-1asp-root-root/usr/share/

сама установка свена тоже прошла без проблем. Счас печатаю с помощью его.
Глюков намного меньше, чем в предыдущей версии.

Однако, с новыми библиотеками отказались загружаться licq и sylpheed-claws

/usr/lib/licq/licq-bin: error while loading shared libraries: libstdc++.so.5: cannot open shared object file: No such file or directory

пришлось ручками копировать эту библиотеку и делать симлинк на нее.
Есть ли какие еще другие способы решения этой проблемы ?

вдобавок еще вопросы

- какая разница между 2 способами установки программ из исходников -

из исходников автора программы с файлом spec
или из src.rpm ? src.rpm тоже разные бывают - для разных дистров, какие тут нюансы есть в плане установки их на АСП10 ?

что предпочтительнее ?

Всем спасибо за помощь.

PS пока мучался с библиотеками, успел rpm для простенького кеширующего DNS сервера собрать - pdnsd. Мы его в форуме про privoxy успели чуть обсудить. Работает, однако Улыбка

свой скромный труд - rpm пакет для sven я загрузил сюда
www.webfile.ru/793951

Имя файла - sven-25.01.06-1asp.i386.rpm , размер 1252 Кбайт. Файлу присвоен номер 793951, он будет доступен до 12.02.2006 21:42.емы ?

Аватар пользователя sergeil

Re: Как собрать rpm пакет

Goga777

Цитата:
по совету опытного товарища сделал вот что -
1. обновил компилятор и pango
[root@localhost lib]# rpm -q gcc
gcc-3.4.4-2asp
[root@localhost lib]# rpm -q pango
pango-1.10.2-1asp
то же самое и для с++ и для devel
после этого компиляция прошла нормально.

Если пакеты из обновлений Вашего дистрибутива, то это абсолютно верное решение...

Цитата:
За исключением небольшой проблемки
[root@localhost SPECS]# rpmbuild -bl sven.spec
Обрабатываются файлы: sven-25.01.06-1asp
ошибка: Файл не найден: /var/tmp/sven-25.01.06-1asp-root-root/usr/share/applications/sven.desktop
ошибка: Файл не найден: /var/tmp/sven-25.01.06-1asp-root-root/usr/share/pixmaps/sven.png
...
пришлось скопировать эти 2 иконки из уже установленного дистрибутива в
/var/tmp/sven-25.01.06-1asp-root-root/usr/share/

Это дефект пакета или, скорее всего, spec файла. Если недостающие файлы были созданы или могли быть созданы в момент сборки пакета, но не находятся в нужном месте, то это ошибка spec-файла.

Цитата:
Однако, с новыми библиотеками отказались загружаться licq и sylpheed-claws
/usr/lib/licq/licq-bin: error while loading shared libraries: libstdc++.so.5: cannot open shared object file: No such file or directory
пришлось ручками копировать эту библиотеку и делать симлинк на нее.
Есть ли какие еще другие способы решения этой проблемы ?

Произошло нарушение целостности уже существующих пакетов. Это говорит о том, что Вы, скорее всего, взяли обновления пакетов не из своего репозитария или Ваш пакет нарушил эту целостность. То есть, обновление или установка прошла недостаточно корректно...

Цитата:
- какая разница между 2 способами установки программ из исходников -
из исходников автора программы с файлом spec или из src.rpm?

IHMO, разница между tar.gz+spec и srpm в том, что srpm может содержать дополнительные патчи и подпись (все в одном пакете). Для tar.gz+spec это все будет отдельно... Да и с подписью непонятно...

Цитата:
src.rpm тоже разные бывают - для разных дистров, какие тут нюансы есть в плане установки их на АСП10 ?

Разница в том, что spec, написанный под один дистрибутив, может быть неприменим для другого дистрибутива. Яркий тому пример - пакеты от ALT-Linux. Его spec-и практически невозможна использовать для ASPLinux.

Цитата:
Имя файла - sven-25.01.06-1asp.i386.rpm , размер 1252 Кбайт. Файлу присвоен номер 793951, он будет доступен до 12.02.2006 21:42.емы ?

1. Вы так и не назвали дистрибутив, под который пакет был собран.
2. Ваш пакет может привести к проблемам в целостности системы.

Я-бы на Вашем месте просто выложил spec. Тот, кому это нужно и кто чувствует в себе силы самостоятельно восстановить свою систему или доработать Ваш spec - пусть пробует. Установка такого бинарного пакета для неподготовленного пользователя - большой и неоправданный риск. Кстати, лично я не рискнул-бы его себе ставить.

Аватар пользователя Goga777

Re: Как собрать rpm пакет

>>Если пакеты из обновлений Вашего дистрибутива, то это абсолютно верное >>решение...

новые пакеты для своего АСП10 я брал с http://updates.msiu.ru/

>>Вы так и не назвали дистрибутив, под который пакет был собран

у меня стоит АСП10

>>Я-бы на Вашем месте просто выложил spec.

а спек я брал вот здесь ftp://ftp.msiu.ru/pub/asplinux-10/updates/testing/SRPMS/SPECS/sven.spec чуть-чуть его подкорректировав

Аватар пользователя Goga777

Re: Как собрать rpm пакет

sergeil

Цитата:
Цитата:
Однако, с новыми библиотеками отказались загружаться licq и sylpheed-claws
/usr/lib/licq/licq-bin: error while loading shared libraries: libstdc++.so.5: cannot open shared object file: No such file or directory
пришлось ручками копировать эту библиотеку и делать симлинк на нее.
Есть ли какие еще другие способы решения этой проблемы ?
Произошло нарушение целостности уже существующих пакетов. Это говорит о том, что Вы, скорее всего, взяли обновления пакетов не из своего репозитария или Ваш пакет нарушил эту целостность. То есть, обновление или установка прошла недостаточно корректно..

поясню более подробно. Когда я обновлял пакеты, то rpm честно вывел мне инфу о том, что многие программы используют библиотеку libstdc++.so.5 . Я предположил, что обновление до версии libstdc++.so.6 не должно принести вреда , надеясь на совместимость новой версии, запустил rpm с опцией --nodeps
Давайте тогда разберем, как правильно надо было действовать.

Аватар пользователя sergeil

Re: Как собрать rpm пакет

Goga777

Цитата:
поясню более подробно. Когда я обновлял пакеты, то rpm честно вывел мне инфу о том, что многие программы используют библиотеку libstdc++.so.5 . Я предположил, что обновление до версии libstdc++.so.6 не должно принести вреда , надеясь на совместимость новой версии, запустил rpm с опцией --nodeps
Давайте тогда разберем, как правильно надо было действовать.

1. Обычно предупреждения в Linux немногословны и, в отличии от винды, по-делу...
2. RPM предупредил Вас, что некоторые приложения используют libstdc++.so.5. То есть, новые библиотеки не обеспечат Вам необходимый уровнень совместимости. Если обновление абсолютно безопасно, RPM предупреждений не выдает...
3. Есть несколько жестких приемов, без которых иногда не удается обойтись:
3.1/ rpm --nodeps
3.2/ kill -9,
3.3/ кнопка reset

Когда Вы понимаете, что обычные методы бесполезны, вы применяете радикальные. При этом Вы или очень хорошо понимаете что делаете или внутренне соглашаетесь с неминуемыми потерями и возможными проблемами...

Я-бы на Вашем месте попытался не обновлять, а поставить новую библиотеку параллельно со старой. Достаточно часто это удается...

Если это невозможно, то найти и пересобрать пакет, зависящий от старой библиотеки, под новую библиотеку...

Если и это проблематично, то подумал-бы о более свежем дистрибутиве...

Если и это сложно, то согласился-бы с тем, что зависящий от старой библиотеки софт работать не будет...

Аватар пользователя Goga777

Re: Как собрать rpm пакет

sergeil

Цитата:
Я-бы на Вашем месте попытался не обновлять, а поставить новую библиотеку параллельно со старой. Достаточно часто это удается...

а вы не подскажете, каким образом это возможно сделать ?

Аватар пользователя sergeil

Re: Как собрать rpm пакет

Goga777

Цитата:
а вы не подскажете, каким образом это возможно сделать ?

yum install <название пакета>
Если yum не обругает, значит такая установка - штатная ситуация...

rpm -i --test <название файла пакета>
Если rpm не обругает, значит такая установка достаточно безопасна и пакет можна устанавливать...
rpm -i <название файла пакета>

Аватар пользователя Goga777

Re: Как собрать rpm пакет

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

Аватар пользователя sergeil

Re: Как собрать rpm пакет

Goga777

Цитата:
ну, раз у меня этот способ установки не прошел (rpm и yum ругались , что не хотят обновлять существующую библиотеку, т.к. она установлена и используется целым рядом пакетов) то остался последний корректный способ - обновить сами пакеты - как вы и пишете.

`rpm -i` не обновляет, а устанавливает пакет. Таким способом, например, вы можете установить несколько ядер. Если Вы не используете проприетарные драйвера видео, то очень легко организовать загрузку под разные ядра (если есть такая необходимость).
Боюсь, что более правильно не обновлять множество пакетов, а установить более свежий дистрибутив...

Аватар пользователя Archont

Re: Как собрать rpm пакет

Goga777

Цитата:
а вы не подскажете, каким образом это возможно сделать ?

RPM умеет ставить файлы в каталоги, нужные пользователю. Даже тогда, когда пакет является неперемещаемым.
man rpm
--prefix <путь>
Установить префикс установки в <путь> для переместимых пакетов.

--relocate <старый_путь>=<новый_путь>
Для переместимых пакетов: преобразовывает файлы, которые должны были бы быть
установлены в <старый_путь> в <новый_путь>.

--badreloc
Для использования вместе с --relocate. Производит перемещение даже если пакет не
переместимый.

Таким образом можно поставить несколько версий одного пакета, правда для "неосновной" версии (более новой, чем системная, или наоборот более старой) возможно прийдется применять --nodeps или даже --force.
Желательно после подобной установки подкорректировать /etc/ld.so.conf для указания пути к вновь установленным библиотекам и сделать ldcofig.

RSS-материал