Технология сборки пакетов RPM: различия между версиями
Нет описания правки |
|||
Строка 97: | Строка 97: | ||
<source lang=txt> | <source lang=txt> | ||
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 | |||
%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> | </source> |
Версия от 21:12, 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:
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
%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
Сборка внутри хэшера
Сборка с использованием инструментов работы с git репозиториями
Ссылки
Полезные ссылки:
- ↑ в .rpmmacros прописаны стандартные для ALT пути: %_topdir %homedir/RPM %_tmppath %homedir/tmp