Fedora: сборка пакетов из src.rpm
Записная книжка рассеянного [в пространстве и времени] программиста
Fedora: сборка пакетов из src.rpm
Чаще всего то не требуется обычному пользователю. Но бывает ситуации, когда пакет собран с поддержкой библиотеки исключенной из дистрибутива.
Недавно это случилось с chromium в centos, а с драйверами от epson случается постоянно.
А еще это может потребоваться если мы хотим поставить пакет, который распространяется только в src.rpm.
Устанавливаем тулчейн для сборки
Нам потребуется группа пакетов для сборки RPM
Подготавливаем окружение
Команда подготовит необходимую структуру папок в домашнем каталого.
Достаем пакет с исходниками
Вы же видели репозитарии source (например, russianfedora-nonfree-updates-testing-source. Все эти репозитарии откючены в конфиге и включать их нет необходимости потому что пакеты из них обычным способом поставить нельзя.
Установка src.rpm осуществляется под аккаунтом пользователя и производится в каталог rpmbuild, который был подготовлен выше.
Сначала пакет нужно скачать (либо руками, либо из репозитария). В случае репозитария это делается через dnf.
Установка зависимостей
Для сборки многим пакетам требуются заголовочые файлы или библиотеки для линковки, которые принадлежат другим пакетам. Все зависимости описываются в самом файле с исходниками и для их установки нужно только вызвать команду builddep.
Установка исходников
Теперь пакет нужно поставить (не забываем, что все операции выполняются под аккаунтом текущего пользователя, а не рута).
Сборка
Для сборки следует проверить, что спецификация нужного пакета появилась в каталоге
/rpmbuild/SPECS и собрать его при помоощи rpmbuild. Сначала используем опцию -bp, которая выполнит подготовку к сборке и тем самым мы сможем убедиться (хотя бы теоретически), что тулчейн заработал и это вообще можно собрать. И тольео после того, как все прошло удачно заюзаем -ba или -bb.
В случае imagescan весь процесс происходит очень болезненно. Поэтому я пропущу детали поиска решения и лишь покажу процесс.
Дополнительная опция –define позволяет определять и переопределять макросы, которые будут использоваться тулчейном.
Таких ошибок встретится превеликое множество из-за довольно старых исходников, которые не адаптированы под свежий стандарт c++. Решением будет установка целой группы флагов через глобальную переменную CXXFLAGS.
Флаг debug_package добавлен из-за того, что попытка сборки пакета debugpackage приподит к ошибке из-за отсутствия нужных определений в файле спецификации.
Источник
Как собрать пакет из src.rpm ?
Добрый вечер. я наткнулся на оф. сайте на файл keepass-2.47-34.13.src.rpm Решил его собрать. Пошерстив на эту тему нашёл несколько вариантов по этому поводу:
В обоих случаях, вижу команду: rpmbuild –rebuild package_name.src.rpm Запускаю её у себя. Читаю.. Написано, что мол «This will create a RPM, normally located in /usr/src/packages/………» Но как понять отработала эта команда вообще? Создала ли она rpm-пакет?
Сделай проще, поставь mock, дефолтные настройки могут подойти, по умолчанию он должен собирать под твою систему, на всякий случай открой архиватором *.src.rpm и загляни в *.spec, бывает надо подправить. Когда закончишь эксперименты, просто удали mock и почисть от него /var/lib/mock и /var/cache/mock , тогда в системе ничего не останется.
Лучше возьми src.rpm отсюда, под 34-ю уже собрали, если у тебя 33-я, то этот тупо может встать, если зависимости не позволяют установить, то пересобери mock-ом.
С чего вдруг для установку на OpenSuse Федоровские пакеты лучше, чем Сусовские?
Так а те команды, которые по моим ссылкам вообще не актуальные? Реурсы опубликовали ложь? Реально удивительно..
С чего вдруг для установку на OpenSuse Федоровские пакеты лучше
Ну, извини, я не вчитывался в абракадбру на ссылках.
Так а те команды, которые по моим ссылкам вообще не актуальные?
Нормальные команды, просто собирать будешь на своей системе, а mock тебе сделает это в chroot и без черной магии, всё чистенько, изолировано, впрочем, если пакетик без особых сборочных зависимостей, то фиг с ним, но моком всё равно будет проще.
и всё, идешь в каталог result и забираешь keepass*.rpm
Если подправил spec, то
если надо добавить зависимость для сборки в мок, которой нет в репозитории, то
А вообще, его можно прикольно настроить, но ради одного пакета не стоит.
В смысле как понять? Оно вообще то кучу всего в оутпут напишет. В том числе и какие пакеты были созданы и где лежат. Я через rpmbuild -ba собираю, собирается в хомяке, без /usr’ов.
Не связывайся с этой бюррократией. Собирай по старинке в /opt. Это в разы проще. Только зависимости установи (для этого надо установить src.rpm от root).
А в зюзерепах mock вообще есть? Из-под rhel/centos под зюзю моком можно собирать, а вот про саму зюзю не уверен.
Гм… не подумал бы, но походу нет, судя по pkgs.org: https://pkgs.org/download/mock
Даже для деба, бунты и… слаки есть! А для суси нет, дела…
В итоге в этой ветке ни слова о реальном способен сборки пакета из src.prm. Как это сделать? Как я понимаю нативно никак? Если завируалить Центос, федору или Редхат и там собрать? Что предпочтительнее? Имею ввиду, какой пакет из тех систем более подходящ для Суса?
Если завируалить Центос, федору или Редхат и там собрать?
Точняк, вариант, накати контейнер, туда mock.
И ещё скажи ему собирать под сусю, варианты смотри в /etc/mock, например
Дай ссылку на src.rpm, и скажи свою версию системы, просто интересно, попробую собрать.
Ну как, обычно так:
Предварительно нужно все сборочные и рабочие зависимости установить. Их можно подглядеть в спеках (src.rpm). А если deb based и прога есть в репах (но не той версии или глючная, например) то есть команда установки сборочных зависимостей sudo apt build-dep app без пляски с src.rpm
Посмотреть зависимости бинарника:
ldd показывает также зависимости зависимостей (по цепочке) и проверяет удовлетворены ли они (какие либы юзает бинарник).
В итоге в этой ветке ни слова о реальном способен сборки пакета из src.prm. Как это сделать?
Тебе же дали ссылку на ALT вики. Была где-то инструкция для SUSE, но сейчас найти не могу (свой OBS пиарят). src.rpm пересобирается во всех rpm дистрах примерно одинаково и легко. Так что можешь почитать инструкции для Fedora (там самая лучшая документация). Для каждого дистра есть такая документация, даже для Mageia. Но мне кажется рановато тебе еще. И главное зачем? Поищи для начала готовый пакет (только не на помойках).
Вкрадце: устаналиваются зависимости из src.rpm, устанавливается src.rpm в хомяк (не под root!), команда пересборки, установка получившегося rpm (пакетным менеджером из под root). Имей в виду, при обновлении системы твой пакет может замениться системным, имеет смысл подправить версию. Но ты рискуешь поломать что-нибудь в системе. Так как это ставится все в системный /usr
Выполняются те самые опции, что я давал в посте выше. Только на автомате. То что в спеках записано.
src.rpm можно сразу установить из под root, тогда сборка будет проходить в /usr/local/src вроде бы.
Прочитать вывод команды, посмотреть содержимое /usr/src/packages не вариант?
ЕМНИП, в случае ошибок в конце будет ″RPM build errors:″.
Извиняюсь за задерку ответа. Я замотался эти дни. Вот на этой странице https://keepass.info/download.html можно увидеть пакет для openSUSE_Tumbleweed Вот ссылка на этот репозитрий https://download.opensuse.org/repositories/Mono/openSUSE_Tumbleweed/src/ В принципе, я уже использую такую же программу с более современным дизайном keepassxc Хотя, конечно, интересно науится собирать эти пакеты.
Процесс сборки будет показан от начала до конца.
Вот страница загрузки исходнияка keepassxc https://keepassxc.org/download/#source Как узнать, где внутри архива бинарник? Для команд ldd или readlf.
Я это уже проходил. Вот что вижу в терминале:
Я никогда не устанавливал эту команду, она у меня всегда была в системе.
Какая у вас система? У меня openSUSE..
У меня тоже openSUSE, правда из позапрошлого десятилетия )
Я читал. Судя по всему, в последних релизах эту команду вырубили. Попробую выкачать Федорыча. Возможно там это работает.
Вряд ли. А внутри пакета rpm этой команды нет?
Нет. Только install внутри. А build — нет.
Погугли, в каком пакете он нахоидтся. По-моему, пакет и называется build.
Да, без проблем собрался пакет, могу тебе его закинуть куда-нибудь, или сам раздобудь рхел или федору и сделай несколько команд.
Всё! Пакет будет лежать в
То есть, тебе нужен в точности такой же пакет, только keepassxc, а не просто keepass?
Я не поленился и собрал для SLES 11. Это очень старая версия openSUSE (из позапрошлого десятилетия). Во всех более новых версиях openSUSE мой пакет должен работать. Пробуй.
Предыдущий раз вы предлагали собрать пакет в CentOS, но в ним какой-то головняк в KVM. Интернета нет. Хотя, всё что кроме него устанавливал, везде всё в порядке. В итоге только что установил Fedora. Я вчитался в команду:
Откуда вы взяли opensuse-tumbleweed-x86_64 ? Как я понял, это опция. Какая из опций в мане в данном случае используется? Ман, если не в терминале можно посмотреть по ссылке http://rpm.pbone.net/manpage_idpl_28340461_numer_1_nazwa_mock.html, как я понимаю. Так же интересно, почему здесь нужна лишь команда –init ? Кроме того, по ссылке https://fedoraproject.org/wiki/Using_Mock_to_test_package_builds я вижу, что процесс сборки пакета происходит как-то совсем иначе:
Это ещё больше пугает..
То есть, тебе нужен в точности такой же пакет, только keepassxc, а не просто keepass?
На самом деле, не обязательно. Я лишь хочу понять, как собирать пакеты. Реально удобно научится. Не всегда в наличии пакеты для определённой системы. Поэтому собирать пакет весь полезный навык.
Предыдущий раз вы предлагали собрать пакет в CentOS
Без разница — рхел, центос или федора.
Откуда вы взяли opensuse-tumbleweed-x86_64 ?
Так же интересно, почему здесь нужна лишь команда -init ?
Да можно и без —init , наверно, просто разбил на два этапа, сначала инициализация чрута под целевую платформу, а потом сборка в нём.
я вижу, что процесс сборки пакета происходит как-то совсем иначе: mock -r configfile –rebuild package-1.2-3.src.rpm
— это и есть целевая платформа, а —rebuild — опция по умолчанию, можно не писать.
Так ты соберешь пакет для платформы по умолчанию, если ничего не настраивать, то будет собрано под хост, вот так посмотреть:
У меня рхел-8, твой keepass собрался без проблем, я заглядывал в keepass.spec: зависимостей немного, все они простые, и что-то сусе-специфичное, всё хорошо кароче.
В общем с нуля с моком не просто разобраться, как и во всём, что касается шаляпных дистров, вот такая специфика, ну нет у них одного большого вики про всё(тут арч никто не переплюнет, да), зато, немного наловчившись, будь уверен — обязательно всю инфу найдешь.
Надо понять, что мок работает в чрут, то есть в систему ничего для сборки не попадает, только сам мок, потом можно его удалить и почистить за ним
По умолчанию он собирает под текущую систему, но можно настроить довольно гибко, в том числе с добавлением сторонних репозиториев, для начала надо выбрать нужную платформу в /etc/mock , кстати, работает автодополнение
Настроить платформу по умолчанию так
Кастомизируется мок в
Все возможные опции(они же настройки по умолчанию) смотреть в
Запутаться можно, только если надо добавить в чрут сторонние пакеты для сборки, тем более, если ты их сам и собираешь, ибо мок перед началом работы и в конце(даже неудачном) очищает чрут, а в начале ещё и директорию result , ну, ясно почему. Поэтому надо либо настроить result в другое место, тогда он тупо будет туда складывать, либо не забывать опцию —resultdir=/path/to/your-result-dir .
А вот с установкой пакетов веселее. Подкинуть пакет в чрут
Он их не вычистит после первого захода, а вот для сборки надо сказать ему, чтобы не чистил перед началом работы
Если поправил спек, то
Вроде этого хватит, если без затей.
> Я лишь хочу понять, как собирать пакеты.
cd Загрузки
rpmbuild —rebuild dosbox-0.74.src.rpm
А вот с установкой пакетов веселее. Подкинуть пакет в чрут
По сути, пакет я собрал. Многие моменты понял. Но это странно. Ведь, если пакет собран зачем нам это нужно? Разве нельзя установить как обычно менеджером пакетов? В том же openSUSE это zypper. Ведь команду: mock -i package1-devel.rpm В openSUSE я не выполню т.к. пакета mock там нет..
Он их не вычистит после первого захода, а вот для сборки надо >сказать ему, чтобы не чистил перед началом работы
Тоже не однозначно. Если я в Федоре собираю пакет под openSUSE зачем это нужно?
Устанавливает src rpm и пишешь rpmbuid –ba путь к spec файлу
mock по умолчанию чистит себя перед и после работы, чтобы не разжиреть, вот причина этих действий, или надо его настраивать, чтобы он вел себя иначе.
Ведь, если пакет собран зачем нам это нужно?
Смотри, тебе бы хватило моего первого поста с тремя командами, дальше я просто изложил для общей картины, ибо этот mock не сразу заходит, всё таки инструмент не для хомяков.
Это случай, когда чего-то в репах, о которых «знает» мок, нет, вот и всё. В твоём случае это не пригодиться скорее всего, так как у суси, видимо, богатые репы.
Разве нельзя установить как обычно менеджером пакетов? В том же openSUSE это zypper.
Мок находится в chroot, он всё своё носит с собой, общее у него с хостом только ядро, так думать правильно. Вот смотри
В openSUSE я не выполню т.к. пакета mock там нет..
Мы говорим о сборке под федорой-шляпой-центос
Если я в Федоре собираю пакет под openSUSE зачем это нужно?
Забей, не пригодиться, если в репах суси всё есть.
Источник