Product SiteDocumentation Site

9.2. Пакет с исходными текстами на C++

Программа Notification выводит системное уведомление о текущей дате и времени в формате: День недели, месяц, число, чч:мм:сс, год.
В репозитории находятся следующие файлы:
  • .gear — каталог с правилами gear и spec-файлом;
  • Makefile — набор инструкций для программы make, которая собирает данный проект;
  • notify.cpp — исходный код программы;
  • notify.service — юнит данной программы для systemd;
  • notify.timer — юнит systemd, запускающий вывод уведомления о дате и времени с периодичностью в один час.
В каталоге .gear находятся два файла:
  • rules — правила для упаковки архива для gear;
  • notify.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, 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 — описывает файлы и каталоги, которые будут скопированы в систему при установке пакета.