Технология сборки пакетов RPM: различия между версиями
Строка 96: | Строка 96: | ||
Теперь зайдем в каталог '''~/RPM/SPEC'''/ и изучим содержание файла spec: | Теперь зайдем в каталог '''~/RPM/SPEC'''/ и изучим содержание файла spec: | ||
Шапка пакета - его описание, | Шапка пакета - его описание, лицензия, откуда можно скачать исходник, или домашняя страница проекта, параметр '''BuildRequires''' указывает какой "нестандартный" пакет требуется для сборки: | ||
<source lang=txt> | <source lang=txt> | ||
Строка 120: | Строка 120: | ||
</source> | </source> | ||
Описание распаковки исходников и наложение патчей: | |||
<source lang=txt> | |||
%prep | %prep | ||
%setup -a0 | %setup -a0 | ||
</source> | |||
Распаковывается первый исходник (Source - hello-2.10.targz) в каталог: | |||
'''~/RPM/BUILD/hello-2.10''' | |||
%build | %build |
Версия от 21:36, 11 мая 2022
Классическая сборка пакетов rpm
Классическая сборка пакета rpm состоит из следующих этапов :
Нахождение исходного текста пакета
Обычно мы находим исходный текст программы. Обычно исходный текст программы можно получить на официальном сайте программы.
Это может быть готовы архив в виде tar, упакованный каким-нибудь компрессором, типа gzip, bzip и т.п.. Так-же это может быть репозиторий git, cvs , меркурий и т.п.
В любом случае мы получаем каталог с текстом программы и инструкцией, как можно программу собрать.
Отдельным источником можно назвать пакет src.rpm или deb-src из другого дистрибутива. В этом случае можно "подсмотреть как собирают пакеты другие" этот пакет.
На этом этапе надо понять как в принципе собирается данный пакет.
Написание инструкции сборки пакета
На втором этапе, зная алгоритм сборки пакета, мы записываем алгоритм в виде spec-файла.
Сборку пакета из исходников можно разделить на следующие основные этапы :
- Распаковка исходного текста пакета и наложение патчей на него (например, исправляющие makefile пакета, чтобы он собирался не куда-нибудь в /opt, а каталог предназначенный для сборки пакета).
(секция %pre)
- Компиляция и линковка программ пакета (секция %setup)
- Размещение программ в каталог, который будет упаковываться в rpm (секция %install)
- Написание скриптов нестандартных действий, которые выполняться при установке и удалении пакета (секции %post и %postust)
- Сама упаковка пакета и проверка его "правильности" (верификация пакета).
Для тренировки сборки пакета, советую попробовать взять готовый пакет [1], готовый src.rpm можно взять из репозитория, Например из Сизифа (ссылка скоро может устареть,в случае смены версии пакета) [2]
Непосредственная сборки пакета
После того, как вы написали спек и подготовили исходники, можно переходить непосредственно к сборке пакета.
Это лучше делать внутри хэшера, так как установка кучи необходимых для сборки программ, во первых грозит безопасности вашей операционной системы, а во вторых, засоряет её ненужными вам в дальнейшем пакетами.
Каждому этапу сборки можно привести опцию rpm, которая это выполняет:
- Распаковка исходника :
rpmbuild -bp имя_спек_файла.spec
- Компиляция и линковка программ (сборка) пакета (секция %setup)
rpm -bc имя_спек_файла.spec
или
rpm -bc --short-circuit имя_спек_файла.spec
разница состоит в том, что если запустить с ключом -bc, то rpm заново повторит распаковку пакета , а потом уже начнёт компиляцию. Если вы собираете пакет первый раз,по шагам, то вы могли внести в исходный текст пакета исправления, которые можно потом оформить в патчи, то распаковка исходников заново уничтожит ваши исправления.
- Установка пакета в заданный каталог (%install)
rpm -bi --short-circuit имя_спек_файла.spec
- Создание непосредственно самого пакета rpm (и src.rpm)
rpm -ba --short-circuit имя_спек_файла.spec
- Упаковка src.rpm пакета
rpm -bs - имя_спек_файла.spec
Для ключа bs не требуется параметр --short-circuit , так как он непосредственно упаковывает ваши исходники и патчи в src.rpm, не выполняя действий по распаковке, компиляции и установке пакета.
Пример классической сборки пакета
Для всех примеров мы будем использовать пакет hello. Он есть и в репозитории и в git.altlinux.org.
Ссылка на src.rpm пакета - ссылка может
Допустим, мы скачали hello-2.10-alt1.1.src.rpm , от имени пользователя устанавливаем его от имени пользователя:
rpm -ihv путь_до_каталога_с_файлом/hello-2.10-alt1.1.src.rpm
В результате в каталоге пользователя ~/RPM/SPEC/[1] появвляется файл hello.spec, а в ~/RPM/SOURCE файл hello-2.10.tar.gz
Теперь зайдем в каталог ~/RPM/SPEC/ и изучим содержание файла spec:
Шапка пакета - его описание, лицензия, откуда можно скачать исходник, или домашняя страница проекта, параметр BuildRequires указывает какой "нестандартный" пакет требуется для сборки:
Name: hello
Version: 2.10
Release: alt1.1
Summary: GNU hello, THE greeting printing program
Group: Development/C
License: GPLv3+
Url: ftp://ftp.gnu.org/gnu/hello/
Source: %name-%version.tar.gz
# explicitly added texinfo for info files
BuildRequires: texinfo
%description
The GNU `hello' program produces a familiar, friendly greeting. It
allows nonprogrammers to use a classic computer science tool which
would otherwise be unavailable to them. Because it is protected by the
GNU General Public License, users are free to share and change it.
Описание распаковки исходников и наложение патчей:
%prep
%setup -a0
Распаковывается первый исходник (Source - hello-2.10.targz) в каталог:
~/RPM/BUILD/hello-2.10
%build
%autoreconf
%configure
%make_build
%install %makeinstall %find_lang %name
%files -f %name.lang %doc AUTHORS ChangeLog ChangeLog.O NEWS README THANKS TODO %doc %name-%version %_bindir/* %_infodir/* %_mandir/man?/*
%changelog
- Thu Dec 03 2015 Igor Vlasenko <viy@altlinux.ru> 2.10-alt1.1
- NMU: added BR: texinfo
......
- Thu Oct 23 2003 Andrey Rahmatullin <wrar@altlinux.ru> 2.1.1-alt1
- initial build
</source>
Сборка внутри хэшера
Сборка с использованием инструментов работы с git репозиториями
Ссылки
Полезные ссылки:
- ↑ в .rpmmacros прописаны стандартные для ALT пути: %_topdir %homedir/RPM %_tmppath %homedir/tmp