9.2. Пакет с исходными текстами на C++
Программа Notification выводит системное уведомление о текущей дате и времени в формате: День недели, месяц, число, чч:мм:сс, год.
В репозитории находятся следующие файлы:
.gear — каталог с правилами gear и spec-файлом;
Makefile — набор инструкций для программы make, которая собирает данный проект;
notify.cpp — исходный код программы;
notify.service — юнит данной программы для systemd;
notify.timer — юнит systemd, запускающий вывод уведомления о дате и времени с периодичностью в один час.
В каталоге
.gear находятся два файла:
Содержимое файла
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, Version, Release — стандартная схема Name-Version-Release, содержащая в себе имя пакета, его версию и релиз сборки;
Summary — краткое описание пакета;
License — лицензия, под которой выпускается данное ПО. В данном случае — GPLv3;
Group — категория, к которой относится пакет. В примере указана группа «Other»;
BuildRequires — пакеты, необходимые для сборки. Так как исходный код написан на c++, необходим компилятор g++, система сборки программы — make и библиотека для работы с модулями systemd — libsystemd-devel;
Source0 — путь к архиву с исходниками (%name-%version.tar).
В теле spec-файла описываются процесс сборки и инструкции к преобразованию исходных файлов:
секция %description содержит описание того, что делает программа. В данном примере — вывод системного уведомления с датой и временем;
секция %prep отвечает за подготовку программы к сборке. Макрос %setup с флагом –q распаковывает архив, описанный в секции Source0;
секция %build описывает сборку исходного кода. Так как в примере присутствует Makefile для автоматизации процесса сборки, то в секции указан макрос %make_build, использующий Makefile для сборки программы;
секция %install эмулирует конечные пути при установке файлов в систему. Так как файла три, для каждого должен быть прописан конечный путь:
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/. В окружении buildroot создается каталог: mkdir –p %buildroot%_sysconfdir/xdg/systemd/user/. В пути использован макрос %_sysconfdir, который заменяется путем /etc. Следующая строка: cp %name.timer %name.service %buildroot%_sysconfdir/xdg/systemd/user/ — переносит данные файлы по заданному пути в окружении buildroot;
секция %files — описывает файлы и каталоги, которые будут скопированы в систему при установке пакета.