LINUX.ORG.RU

помогите сделать rpm

 


0

2

собственно, предыстория.. у меня есть проектик, и для него я собираю бинарный билд. потом я генерирую из этого билда пакеты в формате deb, pkg.tar.xz (арч), и tgz (слака). делается это маленькими скриптами, которые просто берут набор готовых файлов, генерируют из них нужные метаданные (если они нужны), и пихают это в нужный формат, после чего я заливаю эти пакеты на сайт. все замечательно, все довольны.

естественно, хочется генерировать и rpm. но тут возникла проблема. формат метаданных бинарный, и достаточно сложный (за 20 минут не написать тулзу), скриптом не сгенерировать, а готовых тулзов для моей задачи я не смог найти за неделю поисков.

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

может кто подскажет, как это можно провернуть, без написания своей генерилки rpm с нуля, и без установки rpm-based дистра? у меня арч для сборки 32битных билдов, и дебиан стейбл для 64битных.

★★★★★

Ответ на: комментарий от GreyDoom

вот я пытался сам rpm собрать из aur, и он выругался на ошибке синтаксиса c++.

waker ★★★★★ ()

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

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

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

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

собирать не подходит, использование вебсервисов не подходит. надо создавать пакет из готовых бинарей, локально, скриптом (автоматизация).

waker ★★★★★ ()
Ответ на: комментарий от wota
$ alien -r ./deadbeef_0.5.5~rc1-1_i386.deb
Warning: alien is not running as root!
Warning: Ownerships of files in the generated packages will probably be wrong.
Warning: Skipping conversion of scripts in package deadbeef: postinst postrm
Warning: Use the --scripts parameter to include the scripts.
Can't exec "rpm": No such file or directory at /home/waker/perl5/lib/perl5/Alien/Package.pm line 480.
Package build failed. Here's the log of the command (cd deadbeef-0.5.5-rc1; rpmbuild --buildroot='/home/waker/temp/deadbeef-0.5.5-rc1' -bb --target i386 'deadbeef-0.5.5_rc1-2.spec'):
sh: rpmbuild: command not found

видимо, придется разбираться как поставить rpm и rpmbuild в арче.

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

у rpm в депендах некий libbeecrypt

при попытке его собрать:

In file included from ../../include/beecrypt/c++/util/Hashtable.h:42:0,
                 from ../../include/beecrypt/c++/util/Properties.h:36,
                 from Properties.cxx:25:
../../include/beecrypt/c++/util/AbstractSet.h: In instantiation of ‘bool beecrypt::util::AbstractSet<E>::equals(const beecrypt::lang::Object*) const [with E = beecrypt::util::Map<beecrypt::lang::Object, beecrypt::lang::Object>::Entry]’:
Properties.cxx:228:1:   required from here
../../include/beecrypt/c++/util/AbstractSet.h:59:27: error: ‘containsAll’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
../../include/beecrypt/c++/util/AbstractSet.h:59:27: note: declarations in dependent base ‘beecrypt::util::AbstractCollection<beecrypt::util::Map<beecrypt::lang::Object, beecrypt::lang::Object>::Entry>’ are not found by unqualified lookup
../../include/beecrypt/c++/util/AbstractSet.h:59:27: note: use ‘this->containsAll’ instead
../../include/beecrypt/c++/util/AbstractSet.h: In instantiation of ‘bool beecrypt::util::AbstractSet<E>::equals(const beecrypt::lang::Object*) const [with E = beecrypt::lang::Object]’:
Properties.cxx:228:1:   required from here
../../include/beecrypt/c++/util/AbstractSet.h:59:27: error: ‘containsAll’ was not declared in this scope, and no declarations were found by argument-dependent lookup at the point of instantiation [-fpermissive]
../../include/beecrypt/c++/util/AbstractSet.h:59:27: note: declarations in dependent base ‘beecrypt::util::AbstractCollection<beecrypt::lang::Object>’ are not found by unqualified lookup
../../include/beecrypt/c++/util/AbstractSet.h:59:27: note: use ‘this->containsAll’ instead
make[4]: *** [Properties.lo] Error 1
make[4]: Leaving directory `/tmp/yaourt-tmp-waker/aur-beecrypt/src/beecrypt-4.2.1/c++/util'
make[3]: *** [all-recursive] Error 1
make[3]: Leaving directory `/tmp/yaourt-tmp-waker/aur-beecrypt/src/beecrypt-4.2.1/c++/util'
make[2]: *** [all-recursive] Error 1
make[2]: Leaving directory `/tmp/yaourt-tmp-waker/aur-beecrypt/src/beecrypt-4.2.1/c++'
make[1]: *** [all-recursive] Error 1
make[1]: Leaving directory `/tmp/yaourt-tmp-waker/aur-beecrypt/src/beecrypt-4.2.1'
make: *** [all] Error 2

так что облом-с.

waker ★★★★★ ()

Это deadbeef, я правильно понимаю? На сайте deb и исходники скачать можно?
Могу в виртуалке SuSE запустить и попробовать собрать

ms-dos32 ()
Ответ на: комментарий от ms-dos32

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

anonymous ()
Ответ на: комментарий от ms-dos32

Могу в виртуалке SuSE запустить и попробовать собрать

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

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

yaourt показывает комменты, а оный от 2 мая таки дельный: CXXFLAGS=-fpermissive

спасибо, скомпилялось, буду пробовать.

waker ★★★★★ ()

не могу вообще понять какая тулза конкретно может сделать то что мне нужно

rpmbuild — самый правильный способ создания RPM.

может кто подскажет, как это можно провернуть, без написания своей генерилки rpm с нуля, и без установки rpm-based дистра?

Виртуальные машины прдназначены как раз для этого. Я, например, собираю 32-битные RPM-пакеты в ВМ, чтобы гарантировать их «чистоту».

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

спасибо, но проблема уже решена без виртуалок

Чисто из любопытства: а как вы собранные rpm-пакеты будете трестировать?

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

не понял вопрос. зачем тестировать rpm-пакеты?

Как это зачем? Работает у вас — не значит будет работать у всех. Разные версии библиотек, разное расположение системных файлов — нюансов может быть куча. Да и вообще, если кто-то пришлет багрепорт, что пакет не инсталлируется/не запускается/не работает, что вы будете делать?

Я вот однажды накололся, выложив 32-битный пакет, который на 64-битной системе работал (проверил на своей рабочей ОС), а на 32-битной нет (поленился проверять). Теперь обязательно собираю и тестирую именно на той системе, для которой пакет предназначен. :)

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

Как это зачем? Работает у вас — не значит будет работать у всех.

это статик-билд. он зависит только от glibc и нескольких библиотек со стабильным API. если он не работает на каком-то дистре — то либо дистр слишком старый (glibc<2.7 или gtk<2.12), либо есть какой-то баг. rpm не имеет к этому отношения - это просто средство для доставки билда.

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

если он не работает на каком-то дистре — то либо дистр слишком старый (glibc<2.7 или gtk<2.12), либо есть какой-то баг

Реальность способна преподносить сюрпризы. В общем-то я не настаиваю, просто делюсь опытом.

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

при чем тут rpm?

Сам по себе ни при чем. Я говорю о том, что могут быть, например, ошибки в %pre или %post скриптах, которые вы не обнаружите пока не попытаетесь установить пакет.

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

это, естественно, будет протестировано в виртуалке.

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