Сборка rpm-пакетов в Mageia

Материал из Mageia Russian Community Wiki
Перейти к: навигация, поиск

Введение

В этой статье рассматривается более не рекомендуемый способ сборки rpm-пакетов. Рекомендуется aum++.

Глава I. Сборка rpm-пакета из исходников если Mageia установлена.

В этой главе рассмотрим сборку простого rpm-пакета из исходников. Нам нужен установленный дистрибутив Mageia, его можно установить также на виртуальную машину. Для сборки rpm-пакета потребуется интернет.

Рассмотрим сборку простейшего rpm-пакета xroot, сборка пакетов будет рассматриваться с административными привилегиями (root-привилегиями) в KDE, но лучше если Вы будете собирать пакеты под пользователем, выполняя под root лишь действия, на которые у Вас не хватит прав.

Начнем с подключения источников. В Центре Управления Mageia->Управление программами->Настройка источников установки/обновления ПО нажмем кнопку «Добавить» и выберем «Полный набор источников» (на этот момент у Вас уже должен быть доступ в интернет):

Снимок1.png

Далее отметим галочками все пункты, кроме пунктов содержащих слова «Testing» «Debug»:

Снимок2.png

Снимок3.png

Нажмите «ОК».

Теперь через Установку и удаление программ установите пакеты rpm-build (обязательно) и gftp (необязательно), не забудьте указать фильтр поиска «Все», так как rpm-build — это не графический пакет.

Снимок4.png

Снимок5.png

Зайдите в терминал и напишите команду

su -

затем введите пароль root (он вводится, но не отображается):

Снимок6.png

Рассмотрим сборку rpm-пакета в dolphin (Вы можете использовать только консоль, но рассмотрим всё графически), можно использовать программу mc — любой файловый менеджер.

Создадим в каталоге /root каталог rpmbuild, то есть /root/rpmbuild/ (если собирать пакеты под пользователем, то каталог rpmbuild создаётся в домашнем каталоге пользователя: /home/пользователь/rpmbuild/):

Снимок7.png

Снимок8.png

В каталоге /root/rpmbuild/ создадим субкаталоги BUILD, BUILDROOT, RPMS, SOURCES, SPECS, SRPMS:

Снимок9.png

Мы подготовили сборочную. Не забывайте очищать каталоги BUILD, BUILDROOT, RPMS, SOURCES, SPECS, SRPMS при сборке/пересборке нового пакета.

Теперь загрузим из интернета исходники программы xroot:

http://code.google.com/p/xroot/ из раздела Downloads (нас интересует архив исходников tar.gz, но архивы могут быть любые) xroot-src-версия.tar.gz:

Снимок10.png

Рассмотрим сборку xroot версии 0.0.4. Скачанные исходники надо положить в каталог /root/rpmbuild/SOURCES (в этот же каталог надо положить патчи если они есть):

Снимок11.png

Теперь перейдем в каталог /root/rpmbuild/SPECS и создадим файл xroot.spec:

Снимок12.png

%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}

Снимок13.png

После того как spec-файл будет написан, можно приступить непосредственно к сборке rpm-пакета. Находясь в каталоге /root/rpmbuild/SPECS/ в dolphin под root можно нажать кнопку F4 и появится консоль:

Снимок14.png

В консоли надо написать команду (не забывайте проверить, что находитесь в каталоге /root/rpmbuild/SPECS/):

# rpmbuild -ba ./xroot.spec

где xroot.spec — это имя spec-файла.

От нас требуется установить зависимости, которые необходимы для сборки rpm-пакета. Для пакета xroot от нас затребовали libx11-devel, fpc-src, fpc.

Снимок15.png

В этой же консоли можно ввести команду urpmi и через пробел перечислить эти зависимости (или устанавливать по одному пакету):

# urpmi  libx11-devel fpc-src fpc

Снимок17.png

Снимок18.png

Вовсе не обязательно использовать консольный urpmi для установки пакетов, можно воспользоваться графическим менеджером "Установка и удаление программ":

Снимок19.png

По поиску libx11-devel ничего найти не удалось (при этом консольный urpmi нашёл), ничего страшного, изменим критерий поиска:

Снимок20.png

Теперь мы нашли нужную зависимость, поставим галочку и нажмём «Применить», согласимся с установкой. И так далее.

Снимок21.png

Установив все зависимости, которые от нас требовались, вновь выполним команду:

# rpmbuild -ba ./xroot.spec

Снимок22.png

Сборка прошла успешно:

Снимок23.png

Если всё ОК, то готовый пакет находится в папке /root/rpmbuild/RPMS/:

Снимок24.png

А src.rpm - в папке /root/rpmbuild/SRPMS/:

Снимок25.png

Осталось залить в репозиторий:

Снимок26.png

Глава II. Пересборка rpm-пакета если Mageia установлена.

В предыдущей главе мы, собирая пакет из исходников .tar.gz, получили на выходе пакет .src.rpm. Этот пакет .src.rpm хорош тем, что он содержит в себе всё необходимое для пересборки пакета: исходники, патчи, spec-файл. Задача сводится к тому, чтобы извлечь всё это, разложить по директориям сборки, поправить spec-файл и просто пересобрать.

Открыть пакет .src.rpm можно с помощью любого архиватора (например, ark, file-roller) или mc.

Выделим мышкой то, что надо извлечь и распакуем:

Снимок27.png

Снимок28.png

Снимок31.png

Снимок32.png

Если пользоваться mc, то надо зайти также в CONTENTS.cpio:

Снимок29.png

Снимок30.png

spec-файл копируем в /root/rpmbuild/SPECS/, а всё остальное в /root/rpmbuild/SOURCES.

Теперь надо привести spec-файл к требованиям репозитория и пересобрать пакет как то было описано в первой главе.

Глава III. Добавление патча методом замены, локализация rpm-пакета.

Часто требуется изменить в исходниках один из файлов на другой, например, изменить файл локализации ru.po.

Допустим, у нас уже есть свой файл ru.po, которым надо заменить ru.po в оригинальном исходнике. Для этого надо положить в папку SOURCES файл ru.po, а в spec-файле вписать (после Source указать любую свободную цифру):

Source1: ru.po

Aaa12.jpeg

В секции %prep написать куда скопировать ru.po (в данном случае это %SOURCE1) относительно корня распакованного исходника:

cp -f %SOURCE1 ./po/

Aaa13.jpeg

После этого собрать rpm-пакет.