Сборка пакетов для разработки start: различия между версиями
(Новая страница: «{{Category navigation|title=Начинающему разработчику|category=Начинающему разработчику|sortkey={{SUBPAGENAME}}}} Категория:Сборка пакетов») |
Нет описания правки |
||
(не показано 10 промежуточных версий этого же участника) | |||
Строка 1: | Строка 1: | ||
Иногда, в процессе разработки более крупных пакетов возникает потребность включать в проект повторяющийся исходный код или заголовки. Обычно, подобные пакеты есть в ALT Linux и они имеют суффикс {{cmd|-devel}}. Но, если вы начинаете какой-то другой проект и для него нет подобного пакета, то данная статья поможет его создать. | |||
{{Note|Чтобы лучше понять данную статью, для начала ознакомьтесь с [[Сборка пакетов start|базовыми знаниями по сборке пакета]]}} | |||
==Основы== | |||
Обычно, содержимое подобных пакетов (которые включают заголовки {{cmd|*.h}}, статические библиотеки {{cmd|*.a}}, код C {{cmd|*.c}} и пр.) располагается в каталоге {{path|/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. Получается так | |||
<pre> | |||
tde-libltdl | |||
└── tde-libtdl <- Создали папку с файлами | |||
├── CMakeLists.txt | |||
├── COPYING | |||
├── ltdl.c | |||
├── ltdl.h | |||
├── ltdl_win.c | |||
├── ltdl_win.h | |||
└── README | |||
</pre> | |||
6. Пишем {{path|.gear/rules}} | |||
Прописываем в него, что будем создавать tar-архив из нашего каталога tde-libtdl | |||
tar: tde-libtdl | |||
7. Получается так | |||
<pre> | |||
tde-libltdl | |||
├── .gear | |||
│ └── rules <- создали и расписали этот файл | |||
└── tde-libtdl | |||
├── CMakeLists.txt | |||
├── COPYING | |||
├── ltdl.c | |||
├── ltdl.h | |||
├── ltdl_win.c | |||
├── ltdl_win.h | |||
└── README | |||
</pre> | |||
8. Пишем спек | |||
<pre> | |||
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 | |||
</pre> | |||
В нем мы, получается, расписываем: | |||
*Распаковку архива: | |||
%setup -n tde-libtdl-%version | |||
*Создание каталога для заголовков и исходников нашей библиотеки | |||
{{path|%buildroot%_includedir/}} | |||
путь {{path|/usr/include}} - каталог в файловой системе, откуда сборочница, обычно, берет .h-заголовки, .c-коды и пр. | |||
*Копирование файлов заголовков и исходных кодов в определенный для компонента каталог | |||
%install | |||
mkdir -p %buildroot%_includedir/libltdl | |||
cp -av * %buildroot%_includedir/libltdl | |||
*Расписывание файлов пакета | |||
%files | |||
%_includedir/libltdl/ | |||
9. Получается так | |||
<pre> | |||
tde-libltdl | |||
├── .gear | |||
│ └── rules | |||
├── tde-libltdl.spec <- создаем этот файл | |||
└── tde-libtdl | |||
├── CMakeLists.txt | |||
├── COPYING | |||
├── ltdl.c | |||
├── ltdl.h | |||
├── ltdl_win.c | |||
├── ltdl_win.h | |||
└── README | |||
</pre> | |||
10. Собираем | |||
В заглавном каталоге tde-libltdl создаем git-репозиторий: | |||
$ git init . | |||
Вносим изменения в Git: | |||
$ git add . | |||
$ git commit -am "Initial commit" | |||
Запускаем сборку: | |||
$ gear --hasher -- hsh --no-sisyphus-check -v | |||
===Результат=== | |||
Все, в {{path|/home/$USER/hasher/repo/x86_64/RPMS.hasher}} будет новый пакет {{pkg|tde-libltdl-devel-14.1.3-alt1.x86_64.rpm}} который можно "подложить" к другому собираемому пакету, прописать в BuildRequires и продолжить сборку. | |||
{{Category navigation|title=Начинающему разработчику|category=Начинающему разработчику|sortkey={{SUBPAGENAME}}}} | {{Category navigation|title=Начинающему разработчику|category=Начинающему разработчику|sortkey={{SUBPAGENAME}}}} | ||
[[Категория:Сборка пакетов]] | [[Категория:Сборка пакетов]] |
Текущая версия от 15:45, 24 февраля 2025
Иногда, в процессе разработки более крупных пакетов возникает потребность включать в проект повторяющийся исходный код или заголовки. Обычно, подобные пакеты есть в 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 и продолжить сборку.