Сборка пакетов для разработки start

Материал из ALT Linux Wiki

Иногда, в процессе разработки более крупных пакетов возникает потребность включать в проект повторяющийся исходный код или заголовки. Обычно, подобные пакеты есть в 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 и продолжить сборку.