В этом материале будет рассказана практическая часть использования git,  какие основные команды нужно знать, как пользоваться, и как они помогают решать повседневные задачи. 

RPM (Red Hat Package Manager)— это система управления пакетами программного обеспечения, которая используется для установки, обновления, запроса, проверки и удаления пакетов программного обеспечения в системах на базе Linux. Изначально она была разработана компанией Red Hat, а затем перенята многими другими дистрибутивами Linux.

RPM-пакеты, обычно обозначаемые расширением .rpm, содержат все необходимые файлы, метаданные и скрипты, необходимые для установки программного обеспечения в системе Linux и управления им.Базовый синтаксис RPM в Linux

Базовый синтаксис команды rpm выглядит следующим образом:

Здесь

  • [options] представляют собой различные параметры командной строки, которые управляют поведением команды rpm.
  • [package_name] обозначает имя пакета RPM, с которым вы хотите работать.

Параметры, доступные в команде rpm в Linux

Эти параметры обеспечивают широкий спектр функций и возможностей управления при работе с пакетами RPM в системах Linux. С их помощью можно эффективно устанавливать, обновлять, запрашивать пакеты и управлять ими.

Options

Description

-i, —install

Установите пакет RPM.

-U, —upgrade

Обновите пакет RPM.

-q, —query

Запрос к пакету(ам) RPM или отображение информации об установленных пакетах.

-a, —all

При использовании с параметром -q выводит список всех установленных пакетов.

-V, —verify

Проверьте целостность установленных пакетов.

-e, —erase

Удаление или очистка пакета RPM

-F, —freshen

Обновляйте пакеты, но только если пакет с таким же названием уже установлен.

—nodes

Игнорировать зависимости пакетов при установке или удалении.

—test

Тестовый режим; показывает, что сделала бы команда rpm без каких-либо изменений.

-h, —hash

Отображение хэштегов (#) для обозначения хода установки или удаления.

—force

Принудительная установка, даже если она приводит к перезаписи файлов из других пакетов или вызывает другие проблемы.

—reinstall

Переустановите пакет RPM.

—import

Импортируйте ключ GPG для проверки подписи пакета.

—resign

Переподпишите пакет RPM с помощью нового ключа GPG.

-F, —file

При использовании с параметром -q определяет, какому пакету принадлежит тот или иной файл.

—package

При использовании с параметром -q запрашивает информацию о файле или пакете RPM.

—setperms

Установите для файлов пакета права доступа по умолчанию.

—setugids

Установите для файлов пакета права собственности пользователя и группы по умолчанию.

—nodigest

Отключите проверку дайджестов при установке или обновлении пакетов.

—rebuilddb

Перестройте базу данных RPM.

—testsig

Проверьте цифровую подпись пакета RPM.

—showrc

Показать параметры конфигурации RPM.

-h, —help

Отобразите справочную информацию.

—version

Отобразите версию RPM.

Итак — старт

Сборка RPM-пакета включает несколько этапов: подготовку среды, создание файла спецификации (spec-файла), подготовку исходных файлов и запуск процесса сборки с помощью утилиты 

на самом деле информации мого, но все они написаны не совсем понятно. Я опишу процесс сборки по шагам на основе linux CentOS 8.3

Установка необходимого программного обеспечения

Для создания пакета RPM необходимо установить следующие пакеты:

После установки rpmdevtools создайте дерево файлов, необходимое для сборки пакетов RPM:

Вы собираете RPM-пакеты как обычный пользователь (не root), хотя можно и от root — ничего страшного в этом нет, поэтому среда сборки находится в вашем домашнем каталоге. Она содержит следующую структуру каталогов, созданную предыдущей командой:

  • Каталог BUILD используется в процессе сборки RPM-пакета. Здесь хранятся, перемещаются и т. д. временные файлы.
  • В каталоге RPMS находятся RPM-пакеты, собранные для разных архитектур и noarch, если это указано в .spec файле или в процессе сборки.
  • В каталоге SOURCES, как следует из названия, хранятся исходные коды. Это может быть простой скрипт, сложный проект на языке C, который нужно скомпилировать, предварительно скомпилированная программа и т. д. Обычно исходные файлы сжимаются в .tar.gz или .tgz файлов.
  • В каталоге SPEC находятся файлы .spec . Файл .spec определяет способ сборки пакета. Подробнее об этом позже.
  • В каталоге SRPMS находятся пакеты .src.rpm . Исходный пакет RPM не привязан к архитектуре или дистрибутиву. Фактическая сборка пакета .rpm основана на пакете .src.rpm .

Пакет .src.rpm очень гибок в использовании, поскольку его можно собрать и пересобрать для любого другого дистрибутива на основе RPM и любой другой архитектуры.

Теперь вы знаете, что находится в каждом каталоге, так что давайте создадим простой скрипт для распространения:

В результате создается сценарий оболочки под названием hello.sh, который выводит на терминал сообщение «Hello world». Это простой пример, но его достаточно, чтобы продемонстрировать процесс упаковки.

Поместите сценарий в указанный каталог

. Чтобы создать пакет для своего сценария, поместите его в каталог, в котором его ожидает система сборки RPM. Создайте для него каталог, используя семантическое управление версиями, как это делают в большинстве проектов, а затем переместите hello.sh в него:

Большая часть исходного кода распространяется в виде архива, поэтому для создания архивного файла используйте команду tar:

Затем переместите только что созданный архив в каталог SOURCES:

Создайте файл .spec

. Пакет RPM определяется файлом .spec . Синтаксис файла .spec строг, но rpmdev  может сгенерировать для вас шаблонный файл:

В результате создается файл с именем hello.spec, который необходимо переместить в каталог SPECS . Запустите tree ~/rpmbuild , чтобы увидеть структуру каталогов:

Сгенерированный hello.spec файл — хорошая отправная точка, но в нем нет конкретной информации о том, что именно вы собираете. Сгенерированный .spec файл предполагает, что я собираюсь скомпилировать и собрать программное обеспечение.

Вы упаковываете Bash-скрипт, поэтому его можно немного упростить. Например, здесь нет процесса Build, потому что нет кода, который нужно компилировать. Я добавил BuildArch: noarch, потому что этот пакет подходит для 32-битных, 64-битных систем, Arm и любых других архитектур процессоров, на которых работает Bash.

Я также добавил Requires: bash, чтобы пакет гарантировал установку Bash. Этот простой скрипт «Hello World» работает в любой оболочке, но это не относится ко всем скриптам, так что это хороший способ продемонстрировать зависимости.

Как вы можете заметить, в .spec файлах много ярлыков. Они называются макросами, и в документации по упаковке Fedora есть отличный список того, что доступно. Важно использовать макросы в ваших .spec файлах. Они помогают обеспечить согласованность во всех системах RPM, помогают избежать ошибок в именах файлов и нумерации версий, а также упрощают обновление .spec файла при выпуске новой версии вашего скрипта.

Например, необходимо указать, какие именно файлы устанавливаются в разделе %files. Здесь я явно указал следующую строку:

Это работает, потому что я хочу, чтобы скрипт устанавливался в %{_bindir} (это макрос, который по умолчанию преобразуется в /usr/bin, но его можно настроить, если пользователь хочет установить программу в другое место, например в /usr/local/bin). Значения макросов можно проверить, выполнив следующую команду:

Другие полезные макросы:

  • %{name}имя пакета (как указано в поле Name:)
  • %{version}версия пакета (как указано в поле Version:)
  • %{_datadir} общие данные (/usr/sbin по умолчанию)
  • %{_sysconfdir} каталог конфигурации (/etc по умолчанию)

Проверка файла .spec на наличие ошибок (rpmlint)

Команда rpmlint может находить ошибки в .spec файлах:

Обнаружены 2 ошибки, но обе они допустимы. Код для сборки отсутствует, поэтому нет необходимости в разделе %build, а исходный архив представляет собой локальный файл без сетевого URL.

Все выглядит хорошо.

Сборка пакета (rpmbuild)

Чтобы собрать пакет RPM, используйте команду rpmbuild . Ранее в этом руководстве я рассказывал о разнице между .src.rpm (исходным пакетом RPM) и пакетом .rpm .

Чтобы создать пакет .src rpm:

Флаги -bs имеют следующие значения:

  • -b: сборка
  • -s: исходный код

Чтобы создать бинарный пакет .rpm:

Флаги -bb имеют следующие значения:

  • -b: сборка
  • -b: бинарный файл

Используйте -ba для сборки обоих проектов.

После завершения процесса сборки у вас будет следующая структура каталогов:

Установка RPM-пакета

После успешной сборки пакета вы можете установить его с помощью команды dnf:

Его также можно установить с помощью команды rpm напрямую:

Убедитесь, что пакет установлен

Чтобы убедиться, что пакет установлен правильно, выполните следующую команду:

Также можно просмотреть запись %changelog в пакете:

Посмотрите, что входит в пакет RPM

Посмотреть, какие файлы содержит пакет RPM, очень просто:

Удаление пакета RPM

Удалить пакет из системы так же просто, как и установить его. Для этого можно использовать команду dnf:

Или используйте команду rpm напрямую:

Заключительные мысли

В этом документе я рассказал об основах работы с пакетами, в том числе о том, как создавать, устанавливать и удалять пакеты RPM из вашей системы. Файл .spec может стать очень сложным, если вы разрабатываете более продвинутое программное обеспечение, но вы можете изучить реальные примеры из общедоступных репозиториев программного обеспечения, таких как src.fedoraproject.org, чтобы узнать больше.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *