Пакет RPM - это просто файл, содержащий другие файлы и информацию о них, необходимую для развёртывания файлов в операционной системе. Для сборки RPM-пакета мною использовалась операционная система CentOS 7.
На систему требуется установить следующие пакеты:
1 | yum install rpm-build rpm-devel rpmlint rpmdevtools |
Основные команды для сборщика RPM-пакетам содержатся в SPEC-файле RPM-пакета.
Для начала работы из домашней директории текущего пользователя выполните команду в терминале:
1 | rpmdev-setuptree |
В результате выполнения команды в домашней директории текущего пользователя появится папка rpmbuild следующей структуры:
- BUILD
- RPMS
- SOURCES
- SPECS
- SRPMS
Сборка RPM-пакета
Для сборки потребуется:
- SPEC-файл (в нашем случае LinuxInstaller-2.15.2.4.spec), который нужно расположить в папке SPECS
- Архив tar.gz (в нашем случае LinuxInstaller-2.15.2.4.tar.gz) с бинарниками, и в нашем случае bash-скриптом install, который нужно расположить в папке SOURCES
Важно, чтобы имя архива (в нашем случае LinuxInstaller-2.15.2.4.tar.gz) и указанные в SPEC-файле параметры Name, Version и Release соответствовали друг другу!
Перед сборкой RPM-пакета рекомендуется применить линтер к SPEC-файлу командой в терминале:
1 | rpmlint rpmbuild/SPECS/LinuxInstaller-2.15.2.4.spec |
и поправить ошибки и критические замечания обнаруженные линтером в указанном файле.
Для сборки RPM-пакета из домашней директории текущего пользователя выполните следующую команду в терминале:
1 | rpmbuild -bb rpmbuild/SPECS/LinuxInstaller-2.15.2.4.spec |
Ключ -bb означает, что RPM-пакет будет собираться из готовых бинарников. Также RPM-пакет можно собрать из исходников. SPEC-файл разворачивает бинарники из папки SOURCES в папку BUILD, копирует их в новую папку BUILDROOT и упаковывает их в RPM-пакет, который появится в папке RPMS (подпапке x86_64) в rpm-файле LinuxInstaller-2.15.2-4.x86_64.rpm. При установке rpm-пакет разворачивает содержимое во временную папку /tmp/LinuxInstaller-2.15.2.4/, запускает bash-скрипт install командой /bin/bash /tmp/%{name}-%{version}.%{release}/install
и после установки удаляет временную папку. Основная логика развёртывания файлов вынесена в bash-скрипт install, несущественного для рассматриваемого здесь вопроса.
Развёртывание RPM-пакета
Развернуть RPM-пакет можно как из терминала под root-пользователем, так и из специальной программы в графической оболочке операционной системы.
Для развёртывания RPM-пакета из терминала выполните под root-пользователем следующую команду:
1 | rpm -i LinuxPrintClientInstaller-2.15.2-4.x86_64.rpm |
Для удаления RPM-пакета из терминала выполните под root-пользователем следующую команду:
1 | rpm -ev LinuxPrintClientInstaller-2.15.2-4 |
Обратите внимание, что при удалении x86_64.rpm указывать в конце пакета не надо!
Обновление RPM-пакета
Обновление пакета требует собрать версию с большими значениями Version и Release. Обратите внимание, что имя и содержимое архива tar.gz также должены соответствовать этим Version и Release.
Если для обновления использовать GUI операционной системы, то RPM-пакет предыдущей версии будет удалён автоматически в случае успешного развертывания пакета обновления. При установке обновления из командной строки предыдущую версию придётся удалять из операционной системы вручную также из командной строки.
Хорошая Инструкция по RPM-пакетам.