Общий процесс сборки RPM-пакета:
установка программы из исходников во временную директорию;
подготовка среды для сборки;
сборка и финальная корректировка rpm-пакета.
Данные о лабораторном стенде |
Данные о собираемой программе |
NAME="Red Hat Enterprise Linux" VERSION="8.7 (Ootpa)" ID_LIKE="fedora" VERSION_ID="8.7" PRETTY_NAME="Red Hat Enterprise Linux 8.7 (Ootpa)" |
Python-3.11.4 Исходники: https://www.python.org/ftp/python/3.11.4/Python-3.11.4.tgz This is the fourth maintenance release of Python 3.11. Python 3.11.4 is the newest major release of the Python programming language, and it contains many new features and optimizations. |
Установка программы из исходников во временную директорию
Скачаем архив с исходниками программы c официального сайта и перенесем в домашнюю директорию vm:
ls -l
-rw-rw-r--. 1 smirnov-nk smirnov-nk 26526163 Jul 27 20:29 Python-3.11.4.tgz
Создадим временную директорию ~/tmp:
mkdir ~/tmp
ls -l
-rw-rw-r--. 1 smirnov-nk smirnov-nk 26526163 Jul 27 20:29 Python-3.11.4.tgz
drwxrwxr-x. 2 smirnov-nk smirnov-nk 6 Jul 27 20:35 tmp
Установим все необходимые инструменты для компиляции программы:
sudo yum install -y make gcc python3-devel
Установим все необходимые зависимости для работы программы:
sudo yum install -y openssl-devel libffi-devel bzip2-devel
Распакуем ранее загруженный архив и выполним установку программы во временную директорию:
tar -xvf Python-3.11.4.tgz
cd Python-3.11.4
./configure --enable-optimizations && make && make install DESTDIR=~/tmp
После успешной установки программы, можно модифицировать ее - например, как в случае с интерпретатором python, обновить или дополнительно установить пакеты через pip.
Перед сборкой rpm-пакета python на данном этапе, для последующей корректной работы модуля pip, необходимо внести правки в исполняемый файл ~/tmp/usr/local/bin/pip3.11: #!/usr/local/bin/python3.11 |
Подготовка среды для сборки пакета
Установим необходимые инструменты для сборки:
sudo yum install -y ./rpmrebuild-2.16-3.el8.noarch.rpm rpmdevtools rpmlint tree
sudo yum group install -y "Development Tools"
* пакет rpmrebuild-2.16-3.el8.noarch.rpm был скачан из открытого источника и загружен в домашнюю директорию vm
Создадим среду для сборки:
rpmdev-setuptree
cd rpmbuild/
mkdir -p BUILDROOT/python-3.11.4-3.11.4-stable.x86_64
В результате мы получим директорию ~/rpmbuild со следующей внутренней структурой:
tree
.
├── BUILD
├── BUILDROOT
│ └── python-3.11.4-3.11.4-stable.x86_64
├── RPMS
├── SOURCES
├── SPECS
└── SRPMS
Создадим и подготовим SPEC-файл:
vi SPECS/python-3.11.4.spec
Содержание SPEC-файла следующее:
Name: python-3.11.4
Version: 3.11.4
Release: stable
Summary: This is the stable release of Python 3.11.0
License: GPL
URL: https://www.python.org/ftp/python/3.11.4/Python-3.11.4.tgz
Requires: openssl-devel >= 1.1.1, libffi-devel bzip2-devel
%description
python-3.11.4 made by Nikolay
%files
%defattr(-,root,root)
%{_prefix}
%changelog
* Thu May 18 2023 nikolay
Проверим SPEC-файл на корректность:
rpmlint ~/rpmbuild/SPECS/python-3.11.4.spec
Результаты проверки:
/home/smirnov-nk/rpmbuild/SPECS/python-3.11.4.spec: W: no-%prep-section
/home/smirnov-nk/rpmbuild/SPECS/python-3.11.4.spec: W: no-%build-section
/home/smirnov-nk/rpmbuild/SPECS/python-3.11.4.spec: W: no-%install-section
0 packages and 1 specfiles checked; 0 errors, 3 warnings.
Перенесем содержание временной директории ~/tmp в директорию ~/rpmbuild/BUILDROOT/python-3.11.4-3.11.4-stable.x86_64:
cp -rv ~/tmp/* ~/rpmbuild/BUILDROOT/python-3.11.4-3.11.4-stable.x86_64/
Сборка и финальная корректировка rpm-пакета
Выполним сборку пакета:
rpmbuild -bb ~/rpmbuild/SPECS/python-3.11.4.spec
Переместим пакет в домашнюю директорию и выполним корректировку автоматически сгенерированного в процессе сборки SPEC-файла:
mv ~/rpmbuild/RPMS/x86_64/python-3.11.4-3.11.4-stable.x86_64.rpm ~/python-3.11.4-3.11.4-stable.x86_64_tmp.rpm
rpmrebuild -enp ~/python-3.11.4-3.11.4-stable.x86_64_tmp.rpm
Во избежание ошибок при последующей установке нового пакета, в SPEC-файле необходимо удалить несколько строк:
# rpmrebuild autogenerated specfile BuildRoot: /home/smirnov-nk/.tmp/rpmrebuild.68368/work/root #RPMVERSION: 4.14.3 #OS: linux URL: https://www.python.org/ftp/python/3.11.4/Python-3.11.4.tgz Provides: python-3.11.4 = 3.11.4-stable |
Финальная версия rpm-пакета расположена по пути ~/rpmbuild/RPMS/x86_64/python-3.11.4-3.11.4-stable.x86_64.rpm
Комментарии (5)
sT331h0rs3
18.12.2023 07:30Рекомендую почитать RPM Packaging Guide и Fedora Packaging Guidelines для понимания хороших практик сборки RPM пакетов.
0Bannon
18.12.2023 07:30А по deb пакетам можно что-то такое же?
Johan_Palych
18.12.2023 07:30Руководство начинающего разработчика Debian
https://www.debian.org/doc/manuals/maint-guide/index.ru.html
https://help.ubuntu.ru/wiki/сборка_пакетов
ajijiadduh
18.12.2023 07:30есть ещё вот такая простая инструкция для пересборки старого пакета в новый https://wiki.centos.org/HowTos(2f)RebuildSRPM.html
sT331h0rs3
Рекомендую почитать RPM Packaging Guide и Fedora Packaging Guidelines для понимания хороших практик сборки RPM пакетов.