
Общий процесс сборки 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
