Сборка пакетов для разработки start
Иногда, в процессе разработки более крупных пакетов возникает потребность включать в проект повторяющийся исходный код или заголовки. Обычно, подобные пакеты есть в ALT Linux и они имеют суффикс -devel. Но, если вы начинаете какой-то другой проект и для него нет подобного пакета, то данная статья поможет его создать.
Основы
Обычно, содержимое подобных пакетов (которые включают заголовки *.h, статические библиотеки *.a, код C *.c и пр.) располагается в каталоге /usr/include и hasher при сборке подключает нужные файлы оттуда, если находит их. Нам нужно собрать пакет таким образом, чтобы библиотеки расположились в данном каталоге.
Пример для статьи
Для примера я распишу свой случай, который у меня возник при сборке TDE. Для одного модуля потребовалась библиотека, которой на текущий момент (24.02.2025) нет в репозитории ALT Linux.
Создание
Итак:
1. Идем в репозиторий с библиотеками
https://mirror.git.trinitydesktop.org/gitea/TDE/libltdl
2. Клонируем его
$ git clone https://mirror.git.trinitydesktop.org/gitea/TDE/libltdl.git
3. Создаем каталог для проекта
4. В папке создаем каталог для файлов проекта и копируем их туда (не забудьте удалить папку .git)
5. Получается так
tde-libltdl └── tde-libtdl <- Создали папку с файлами ├── CMakeLists.txt ├── COPYING ├── ltdl.c ├── ltdl.h ├── ltdl_win.c ├── ltdl_win.h └── README
6. Пишем .gear/rules
Прописываем в него, что будем создавать tar-архив из нашего каталога tde-libtdl
tar: tde-libtdl
7. Получается так
tde-libltdl ├── .gear │ └── rules <- создали и расписали этот файл └── tde-libtdl ├── CMakeLists.txt ├── COPYING ├── ltdl.c ├── ltdl.h ├── ltdl_win.c ├── ltdl_win.h └── README
8. Пишем спек
Name: tde-libltdl-devel Version: 14.1.3 Release: alt1 Summary: Libltdl devel library for TDE License: LGPLv2.1 Group: Other Url: https://mirror.git.trinitydesktop.org/gitea/TDE/libltdl Source: tde-libtdl-%version.tar %description Libltdl devel library for TDE %prep %setup -n tde-libtdl-%version %install mkdir -p %buildroot%_includedir/libltdl cp -av * %buildroot%_includedir/libltdl %files %_includedir/libltdl/ %changelog * Mon Feb 24 2025 Petr Akhlamov <ahlamovpm@basealt.ru> 14.1.3-alt1 - Initial build
В нем мы, получается, расписываем:
- Распаковку архива:
%setup -n tde-libtdl-%version
- Создание каталога для заголовков и исходников нашей библиотеки
%buildroot%_includedir/
путь /usr/include - каталог в файловой системе, откуда сборочница, обычно, берет .h-заголовки, .c-коды и пр.
- Копирование файлов заголовков и исходных кодов в определенный для компонента каталог
%install mkdir -p %buildroot%_includedir/libltdl cp -av * %buildroot%_includedir/libltdl
- Расписывание файлов пакета
%files %_includedir/libltdl/
9. Получается так
tde-libltdl ├── .gear │ └── rules ├── tde-libltdl.spec <- создаем этот файл └── tde-libtdl ├── CMakeLists.txt ├── COPYING ├── ltdl.c ├── ltdl.h ├── ltdl_win.c ├── ltdl_win.h └── README
10. Собираем
В заглавном каталоге tde-libltdl создаем git-репозиторий:
$ git init .
Вносим изменения в Git:
$ git add . $ git commit -am "Initial commit"
Запускаем сборку:
$ gear --hasher -- hsh --no-sisyphus-check -v
Результат
Все, в /home/$USER/hasher/repo/x86_64/RPMS.hasher будет новый пакет tde-libltdl-devel-14.1.3-alt1.x86_64.rpm который можно "подложить" к другому собираемому пакету, прописать в BuildRequires и продолжить сборку.