Сборка rpm-пакетов в Mageia
Введение
В этой статье рассматривается более не рекомендуемый способ сборки rpm-пакетов. Рекомендуется aum++.
Глава I. Сборка rpm-пакета из исходников если Mageia установлена.
В этой главе рассмотрим сборку простого rpm-пакета из исходников. Нам нужен установленный дистрибутив Mageia, его можно установить также на виртуальную машину. Для сборки rpm-пакета потребуется интернет.
Рассмотрим сборку простейшего rpm-пакета xroot, сборка пакетов будет рассматриваться с административными привилегиями (root-привилегиями) в KDE, но лучше если Вы будете собирать пакеты под пользователем, выполняя под root лишь действия, на которые у Вас не хватит прав.
Начнем с подключения источников. В Центре Управления Mageia->Управление программами->Настройка источников установки/обновления ПО нажмем кнопку «Добавить» и выберем «Полный набор источников» (на этот момент у Вас уже должен быть доступ в интернет):
Далее отметим галочками все пункты, кроме пунктов содержащих слова «Testing» «Debug»:
Нажмите «ОК».
Теперь через Установку и удаление программ установите пакеты rpm-build (обязательно) и gftp (необязательно), не забудьте указать фильтр поиска «Все», так как rpm-build — это не графический пакет.
Зайдите в терминал и напишите команду
su -
затем введите пароль root (он вводится, но не отображается):
Рассмотрим сборку rpm-пакета в dolphin (Вы можете использовать только консоль, но рассмотрим всё графически), можно использовать программу mc — любой файловый менеджер.
Создадим в каталоге /root каталог rpmbuild, то есть /root/rpmbuild/ (если собирать пакеты под пользователем, то каталог rpmbuild создаётся в домашнем каталоге пользователя: /home/пользователь/rpmbuild/):
В каталоге /root/rpmbuild/ создадим субкаталоги BUILD, BUILDROOT, RPMS, SOURCES, SPECS, SRPMS:
Мы подготовили сборочную. Не забывайте очищать каталоги BUILD, BUILDROOT, RPMS, SOURCES, SPECS, SRPMS при сборке/пересборке нового пакета.
Теперь загрузим из интернета исходники программы xroot:
http://code.google.com/p/xroot/ из раздела Downloads (нас интересует архив исходников tar.gz, но архивы могут быть любые) xroot-src-версия.tar.gz:
Рассмотрим сборку xroot версии 0.0.4. Скачанные исходники надо положить в каталог /root/rpmbuild/SOURCES (в этот же каталог надо положить патчи если они есть):
Теперь перейдем в каталог /root/rpmbuild/SPECS и создадим файл xroot.spec:
%define rel 1 %define suff mrc.mga2 Summary: GUI interface for su sudo Name: xroot Version: 0.0.4 Release: %{rel}.%{suff} License: GPL2 Group: System Url: http://code.google.com/p/xroot/ Source0: %{name}-src-%{version}.tar.gz BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root BuildRequires: %{_lib}x11-devel, gcc, fpc-src >= 2.6.0, fpc >= 2.6.0, unzip, wget %description Tool for quick and easy elevate privileges to root %prep %setup -q -n %{name}-src-%{version} %build if [ -f ./msegui/VERSION.TXT ] then echo "Msegui не может быть загружено, так как каталог msegui присутствует и не пустой" else echo "Каталог msegui пустой или отсутствует. Получаем msegui из интернета." ./get_msegui_32_64 fi %ifarch x86_64 ./build_xroot_without_gui_64 %else ./build_xroot_without_gui_32 %endif %install rm -rf %{buildroot} mkdir -p %{buildroot}%{_bindir} cp -f ./xroot/%{name} %{buildroot}%{_bindir} mkdir -p %{buildroot}%{_datadir}/pixmaps cp -f ./%{name}.png %{buildroot}%{_datadir}/pixmaps/ mkdir -p %{buildroot}%{_datadir}/applications cp -f ./%{name}.desktop %{buildroot}%{_datadir}/applications/ %clean rm -rf %{buildroot} %files %defattr(-,root, root) %{_bindir}/%{name} %{_datadir}/pixmaps/%{name}.png %{_datadir}/applications/%{name}.desktop %changelog
Мы не случайно выбрали xroot для изучения сборки rpm-пакетов, так как этот пакет содержит в себе всего 3 файла: 1) исполняемый файл xroot 2) файл xroot.desktop, который нужен чтобы программа появилась в Меню 3) файл xroot.png, который нужен чтобы в Меню была картинка Поэтому spec-файл предельно простой. Чтобы пакет был собран для Mageia Russian Community репозитория необходимо соблюсти требование этого репозитория — указание суффикса mrc.mga2, где 2-это версия Mageia. Для этого мы внесли в самое начало spec-файла строки:
%define rel 1 %define suff mrc.mga2
Где rel — это номер пересборки пакета, а Release указали как:
Release: %{rel}.%{suff}
После того как spec-файл будет написан, можно приступить непосредственно к сборке rpm-пакета. Находясь в каталоге /root/rpmbuild/SPECS/ в dolphin под root можно нажать кнопку F4 и появится консоль:
В консоли надо написать команду (не забывайте проверить, что находитесь в каталоге /root/rpmbuild/SPECS/):
# rpmbuild -ba ./xroot.spec
где xroot.spec — это имя spec-файла.
От нас требуется установить зависимости, которые необходимы для сборки rpm-пакета. Для пакета xroot от нас затребовали libx11-devel, fpc-src, fpc.
В этой же консоли можно ввести команду urpmi и через пробел перечислить эти зависимости (или устанавливать по одному пакету):
# urpmi libx11-devel fpc-src fpc
Вовсе не обязательно использовать консольный urpmi для установки пакетов, можно воспользоваться графическим менеджером "Установка и удаление программ":
По поиску libx11-devel ничего найти не удалось (при этом консольный urpmi нашёл), ничего страшного, изменим критерий поиска:
Теперь мы нашли нужную зависимость, поставим галочку и нажмём «Применить», согласимся с установкой. И так далее.
Установив все зависимости, которые от нас требовались, вновь выполним команду:
# rpmbuild -ba ./xroot.spec
Сборка прошла успешно:
Если всё ОК, то готовый пакет находится в папке /root/rpmbuild/RPMS/:
А src.rpm - в папке /root/rpmbuild/SRPMS/:
Осталось залить в репозиторий:
Глава II. Пересборка rpm-пакета если Mageia установлена.
В предыдущей главе мы, собирая пакет из исходников .tar.gz, получили на выходе пакет .src.rpm. Этот пакет .src.rpm хорош тем, что он содержит в себе всё необходимое для пересборки пакета: исходники, патчи, spec-файл. Задача сводится к тому, чтобы извлечь всё это, разложить по директориям сборки, поправить spec-файл и просто пересобрать.
Открыть пакет .src.rpm можно с помощью любого архиватора (например, ark, file-roller) или mc.
Выделим мышкой то, что надо извлечь и распакуем:
Если пользоваться mc, то надо зайти также в CONTENTS.cpio:
spec-файл копируем в /root/rpmbuild/SPECS/, а всё остальное в /root/rpmbuild/SOURCES.
Теперь надо привести spec-файл к требованиям репозитория и пересобрать пакет как то было описано в первой главе.
Глава III. Добавление патча методом замены, локализация rpm-пакета.
Часто требуется изменить в исходниках один из файлов на другой, например, изменить файл локализации ru.po.
Допустим, у нас уже есть свой файл ru.po, которым надо заменить ru.po в оригинальном исходнике. Для этого надо положить в папку SOURCES файл ru.po, а в spec-файле вписать (после Source указать любую свободную цифру):
Source1: ru.po
В секции %prep написать куда скопировать ru.po (в данном случае это %SOURCE1) относительно корня распакованного исходника:
cp -f %SOURCE1 ./po/
После этого собрать rpm-пакет.