Примеры сборки пакетов с использованием инструментов ALT
Для примера сборки пакета будем использовать программу для вывода системных уведомлений о текущей дате и времени. Ссылка на github-репозиторий с исходными текстами программ на языках C++ (Notification) и Python (DBusTimer_Example)
Структура репозиториев для данных программ идентична: Главный файл (.cpp/.py) и два юнита systemd (.service и .timer)
Создание пакета из проекта на Python
Файл
.timer— по истечении времени запустит скрипт, который выводит уведомление о дате и времени. После срабатывания таймер снова начинает отсчёт до запуска скрипта;Файл
.service- содержит описание, расположение скрипта и интерпретатора, который будет обрабатывать скрипт.
Первым шагом необходимо клонировать репозиторий в рабочую директорию, используя команду git:
$ git clone https://github.com/danila-Skachedubov/DBusTimer_example.gitСоздайте каталог .gear и перейдите в него:
$ mkdir .gear
$ cd .gear/Создайте два файла: правила для Gear (rules) и Spec-файл (dbustimer.spec):
$ touch rules dbustimer.specПосле всех изменений содержание каталога проекта примет следующий вид:
$ ls -a
.gear .git script_dbus.py script_dbus.service script_dbus.timer
$ ls .gear/
dbustimer.spec rulesSpec-файл и правила Gear
В файле .gear/rules укажите следующее:
tar: .
spec: .gear/dbustimer.specИнформация
Первая строка указывает, что проект будет упакован в tar-архив; Вторая строка указывает путь к Spec-файлу.
В заголовке или шапке Spec-файла находятся директивы Name, Version, Release, Summary, License, Group, BuildArch, BuildRequires и Source0. Заполните эти директивы:
Name: dbustimer
Version: 0.4
Release: alt1
Summary: Display system time
License: GPLv3+
Group: Other
BuildArch: noarch
BuildRequires: rpm-build-python3Информация
- Стандартная схема
Name-Version-Release, содержащая в себе имя пакета, его версию и релиз сборки; Summaryвключает в себя краткое описание пакета;License— лицензия, под которой выпускается программа ( данном случае - GPLv3);Group— категория, к которой относится пакет. Так как это тестовый пакет для примера, выставим группуOther;BuildRequires— пакеты, необходимые для сборки. Так как исходный код написан на Python 3, необходим пакетrpm-build-python3с макросами для сборки скриптов Python;Source0— путь к архиву с исходниками (%name-%version.tar).
Заполните %description и %prep.
%description
This program displays notifications about the system time with a frequency of one hour.
%prep
%setup -qИнформация
- В секции
%descriptionнаходится краткое описание программы; - Секция
%prepотвечает за подготовку программы к сборке; - Макрос
%setupраспаковывает исходный код перед компиляцией.
В секции %install описаны инструкции, как установить файлы пакета в систему конечного пользователя.
Вместо того, чтобы писать пути установки файлов вручную, будем использовать предопределённые макросы:
%python3_sitelibdir_noarchбудет раскрываться в путь/usr/lib/python3/site-packages. По этому пути будет создан каталог с именем пакета, в который будет помещён файлscript_dbus.pyс правами доступа 755;- Аналогичная операция будет проведена с файлами
script_dbus.timerиscript_dbus.service. Они должны быть установлены по пути/etc/xdg/systemd/user. Так как макроса, раскрывающегося в данный путь нет, будет использован макрос%_sysconfdir, который раскрывается в путь/etc.
%install
mkdir -p %buildroot%python3_sitelibdir_noarch/%name/
install -Dm0755 script_dbus.py %buildroot%python3_sitelibdir_noarch/%name/
mkdir -p %buildroot%_sysconfdir/xdg/systemd/user/
cp script_dbus.timer script_dbus.service %buildroot%_sysconfdir/xdg/systemd/user/Информация
Первая команда создаёт каталог dbustimer в окружении buildroot по пути /usr/lib/python3/site-packages.
Вторая устанавливает файл script_dbus.py с правами 755 в каталог /usr/lib/python3/site-packages/dbustimer/ в окружении buildroot.
Аналогично создаётся каталог %buildroot%_sysconfdir/xdg/systemd/user/, в который копируются файлы .service и .timer
В секции %files описано, какие файлы и каталоги с соответствующими атрибутами должны быть скопированы из дерева сборки в rpm-пакет, а затем копироваться в целевую систему при установке этого пакета. Все три файла из пакета будут распакованы по путям, описанным в секции %install:
%files
%python3_sitelibdir_noarch/%name/script_dbus.py
/etc/xdg/systemd/user/script_dbus.service
/etc/xdg/systemd/user/script_dbus.timerСекция %changelog — описаны изменения внесённые в ПО, патчи, изменения методологии сборки:
%changelog
* Thu Apr 13 2023 Danila Skachedubov <dan@altlinux.org> 0.4-alt1
- Update system
- Changed access rightsПолный Spec-файл
Name: dbustimer
Version: 0.4
Release: alt1
Summary: Display system time
License: GPLv3+
Group: Other
BuildArch: noarch
BuildRequires: rpm-build-python3
Source0: %name-%version.tar
%description
This program displays notifications about the system time with a frequency of one hour.
%prep
%setup
%install
mkdir -p %buildroot%python3_sitelibdir_noarch/%name/
install -Dm0755 script_dbus.py %buildroot%python3_sitelibdir_noarch/%name/
mkdir -p %buildroot%_sysconfdir/xdg/systemd/user/
cp script_dbus.timer script_dbus.service %buildroot%_sysconfdir/xdg/systemd/user/
%files
%python3_sitelibdir_noarch/%name/script_dbus.py
/etc/xdg/systemd/user/script_dbus.service
/etc/xdg/systemd/user/script_dbus.timer
%changelog
* Thu Apr 13 2023 Danila Skachedubov <dan@altlinux.org> 0.4-alt1
- Update system
- Changed access rightsПерейдите в основную директорию репозитория и добавьте файлы в отслеживание git-репозитория:
$ git add .gear/rules .gear/dbustimer.specПосле добавление файлов, запустите сборку с помощью инструментов Gear и Hasher следующей командой:
$ gear-hsh --no-sisyphus-check --commit -vЕсли сборка прошла успешно, собранный пакет dbustimer-0.4-alt1.noarch.rpm будет находится в каталоге ~/hasher/repo/x86_64/RPMS.hasher/.
Создание пакета из проекта на C++
Ссылка на GitHub репозиторий: Notification.
В репозитории находятся следующие файлы:
.gear— каталог с правилами Gear и Spec-файломMakefile— набор инструкций для программы Make, которая собирает данный проект.notify.cpp— исходный код программыnotify.service— юнит данной программы дляsystemdnotify.timer— юнитsystemd, запускающий вывод уведомления о дате и времени с переодичностью в один час.
В каталоге .gear находятся два файла:
rules— правила для упаковки архива для Gearnotify.spec— файл спецификации для сборки пакета
rules
tar: .
spec: .gear/notify.specПервая строка - указания для Gear, в какой формат упаковать файлы для последующей сборки. В данном проекте архив будет иметь вид name-version.tar.
Вторая строка - путь к Spec-файлу с инструкциями по сборке текущего пакета.
notify.spec
Содержание файла
Name: notify
Version: 0.1
Release: alt1
Summary: Display system time every hour
License: GPLv3+
Group: Other
BuildRequires: make
BuildRequires: gcc-c++
BuildRequires: libsystemd-devel Работа с ключами разработчика.
Создание заявки
Source0: %name-%version.tar
%description
This test program displays system date and time every hour via notification
%prep
%setup -q
%build
%make_build
%install
mkdir -p \
%buildroot/bin/
install -Dm0644 %name %buildroot/bin/
mkdir -p \
%buildroot%_sysconfdir/xdg/systemd/user/
cp %name.timer %name.service \
%buildroot%_sysconfdir/xdg/systemd/user/
%files
/bin/%name
/etc/xdg/systemd/user/%name.service
/etc/xdg/systemd/user/%name.timer
%changelog
* Thu Apr 13 2023 Sergey Okunkov <sok@altlinux.org> 0.1-alt1
- Finished my taskПреамбула Spec-файла:
Name: notify
Version: 0.1
Release: alt1
Summary: Display system time every hour
License: GPLv3+
Group: Other
BuildRequires: make
BuildRequires: gcc-c++
BuildRequires: libsystemd-devel
Source0: %name-%version.tarИнформация
- Стандартная схема
Name-Version-Release, содержащая в себе имя пакета, его версию и релиз сборки; Summaryвключает в себя краткое описание пакета;License— лицензия, под которой выпускается программа ( данном случае - GPLv3);Group— категория, к которой относится пакет. Так как это тестовый пакет для примера, выставим группуOther;BuildRequires— пакеты, необходимые для сборки. Так как исходный код написан на C++, необходимы пакетыg++(компилятор),make(система сборки) иlibsystemd-devel(библиотека работы с модулямиsystemd);Source0— путь к архиву с исходниками (%name-%version.tar).
Тело Spec-файла, или же его основная часть:
%description
This test program displays system date and time every hour via notification
%prep
%setup -q
%build
%make
%install
mkdir -p \
%buildroot/bin/
install -Dm0644 %name %buildroot/bin/
mkdir -p \
%buildroot%_sysconfdir/xdg/systemd/user/
cp %name.timer %name.service \
%buildroot%_sysconfdir/xdg/systemd/user/
%files
/bin/%name
/etc/xdg/systemd/user/%name.service
/etc/xdg/systemd/user/%name.timer%description— краткое описание программы;%prep— подготовка программы к сборке;%setup— макрос для распаковки исходного кода перед компиляцией;
%build— сборка проекта;%make_build— макрос, использующийMakefileдля сборки программы;
%install— эмуляция конечных путей при установке файлов в систему. Перенос файлов в%buildrootв те пути, куда файлы будут помещены после установки пакета в систему пользователя. Так как файла три, для каждого пропишем конечный путь:notify— скомпилированный бинарный файл. В Unix-подобных системах бинарные файлы располагаются в каталоге/bin;mkdir -p %buildroot/bin— команда создания/binв окружении%buildroot;install -Dm0644 %name %buildroot/bin/— установка бинарного файлаnotifyв каталог%buildroot/binс правами доступа 644.%name.timer,%name.service— юнитыsystemd. Данные юниты относятся к пользовательским и находятся в/etc/xdg/systemd/user/.mkdir -p %buildroot%_sysconfdir/xdg/systemd/user/— команда создания/etc/xdg/systemd/user/в окружении%buildroot, где%_sysconfdirзаменится на/etc;cp %name.timer %name.service %buildroot%_sysconfdir/xdg/systemd/user/— перенос файлов по заданному пути в окружении%buildroot.
%files— описывает какие файлы и директории будут скопированы в систему при установке пакета.