Как создать свой простой RPM пакет. Linux статьи
Написать статью
Войдите, чтобы писать статьи

Как создать свой простой RPM пакет

12

Как создать RPM пакет

Материал написан пользователем сайта.

Иногда может понадобиться создать свой RPM пакет для распространения обоев, программ и тому подобного. В этой статье подробно показано, как новичку как создать свой простой базовый RPM-пакет.

Что такое RPM вообще?

Допустим, есть файл wood.png, и его надо установить в /usr/share/wallpapers/. Это делает RPM файл. Это такой архив, внутри которого созданы папки "usr", в ней - "share", в ней - "wallpapers", в ней - wood.png. При установке он копирует wood.png в /usr/share/wallpapers.

Подготовим то, что будем упаковывать

Упаковывать можно что угодно. Давайте для примера возьмём простую программу на языке bash. Bash есть у всех (то что мы вводим в терминал, это на самом деле комманды bash), он прост, поэтому возьмём именно его. Она будет выводить "Привет из RPM, Пингвинус!". Напишем её: создадим файл под названием hello-pingvinus и вставим туда вот этот текст:

#!/usr/bin/env bash
echo 'Привет из RPM, Пингвинус!'

Первая строка говорит, что надо запускать через bash, а вторая печатает наш текст в консоль. Проверим:

  1. Сделаем файл исполняемым: chmod +x hello-pingvinus
  2. Запустим: ./hello-pingvinus

В консоли увидим вывод "Привет из RPM, Пингвинус!". После установки созданного по данной статье RPM пакета можно будет вводить в терминал "hello-pingvinus" и получать данный вывод.

Создадим SPEC файл

Именно SPEC файл указывает как именно собирать RPM и содержит информацию о самом пакете. Создадим файл hello-pingvinus.spec. О пунктах объясню ниже.

Name: hello-pingvinus
Version: 1.0
Release: 1.opensuse
Summary: Prints a greeting to the console
Summary(ru):  Выводит в консоль приветствие
License: MIT
Source0: hello-pingvinus.tar
BuildArch: noarch
URL: https://pingvinus.ru
Requires: bash

%description
A simple program that prints "Привет из RPM, Пингвинус!" to the console.

%description -l ru
Простая программа, которая выводит "Привет из RPM, Пингвинус!" в консоль.

%prep
%setup -q -n hello-pingvinus

%install
mkdir -p %{buildroot}/usr/bin
cp hello-pingvinus %{buildroot}/usr/bin

%files
/usr/bin/hello-pingvinus
  1. Name — имя пакета.
  2. Version — версия программы.
  3. Release — версия RPM пакета. Если программу (даже с множеством выпусков за многолетнюю историю) упаковывают в RPM впервые — ставят единицу. После неё по желанию можно поставить точку и название дистрибутива, особенно если есть несколько RPM-файлов для разных дистрибутивов, чтобы знать где какой.
  4. Summary — короткое описание пакета в одно короткое предложение. Пишется как правило на английском.
  5. Summary(ru) — Summary на русском языке. Если у пользователя русская локаль — он увидит именно его. Аналогично можно и для других языков.
  6. License — название лицензии Вашей программы. Например MIT, GPLv2 и т. п.
  7. Source0 — архив из которого будем собирать программу. Пока не обращайте внимание, он будет следующим пунктом.
  8. BuildArch — архитектура Вашего пакета. Поскольку пакет который содержит всего лишь простую bash-комманду не зависит от конкретной архитектуры вроде x86_64 или ARM, работая везде — ставим noarch.
  9. URL — ссылка на сайт Вашей программы.
  10. Requires — зависимости. Для данного пакета можно было ничего не писать поскольку bash есть везде, но для более сложных программ здесь указываются зависимости.

На этом шапка закончилась. Дальше - секции.

  1. %description — длинное описание, в отличии от короткого Summary. Можно на разных языках по примеру русского.
  2. %setup — распаковывает файлы из архива про который в следующем пункте. -q — не показывает вывод распаковки архива, -n - флаг после которого имя папки в архиве, которая содержит файлы и главное, SPEC-файл.
  3. %prep — подготовка к сборке RPM.
  4. %install — создаёт сборочную папку с файлами.  Нужно знать, что чтобы ввести в терминал например «hello-pingvinus» или любую другую команду, надо чтобы в папке /usr/bin/ был файл с таким названием. Поэтому создаём эти папки, и копируем наш файл с кодом «hello-pingvinus» туда.
  5. %files — перечисляет файлы которые нужно включить в RPM пакет. Если мы скопировали в секции %install файл в сборочную папку, но в секции %files он не перечислен — в RPM он не попадёт.

Создание TAR архива

Самый простой способ создать RPM - создать TAR архив, в котором одна главная папка (в данном случае - hello-pingvinus), которая содержит:

  1. SPEC файл,
  2. Файлы программы (в данном случае — hello-pingvinus).

Делаем. Думаю писать как это сделать не надо - любой менеджер архивов из среды рабочего стола это умеет. Чтобы проверить - откройте менеджер архивов; если там папка "hello-pingvinus", а в ней 2 наших файла - всё правильно. Если там сразу 2 файла (в корне архива, а не в hello-pingvinus - неправильно.

Упаковка в RPM

Настало время наконец создать RPM. Установим утилиту rpmbuild (ищем в репозитории) и вводим в терминал следующую команду:

rpmbuild -tb hello-pingvinus.tar --define "_topdir $PWD"

На выходе получим наш RPM файл. Он должен быть в папке RPMS/noarch/. Пробуем установить. Можно через графический интерфейс, а можно и через dnf или zypper:

  1. dnf: sudo dnf install ./hello-pingvinus-1.0-1.opensuse.noarch.rpm
  2. zypper: sudo zypper install ./hello-pingvinus-1.0-1.opensuse.noarch.rpm

Если всё успешно установилось, при вводе в консоль hello-pingvinus получим "Привет из RPM, Пингвинус!".

Лайков: +11
войдите, чтобы ставить лайки
12

Комментарии

xKDE
Активный пользователь
Активный
10.07.2025
14:29
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
Заменить #!/usr/bin/env bash на #!/bin/bash и годно! Handmade всегда в цене!)
igorborisov
Активный пользователь
Активный
10.07.2025
16:25
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийxKDEРодительский комментарий
0
войдите, чтобы ставить лайки
Убрать из shebang env, потому что это устаревший стиль?
xKDE
Активный пользователь
Активный
10.07.2025
16:38
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийigorborisovРодительский комментарий
0
войдите, чтобы ставить лайки
Скорее env это от новоявленных любителей смузи, не слышавших за безопасность и единообразие. #!/usr/bin/env bash на одной и той же железяке может давать разный результат в зависимости от PATH, а уж как повысить привилегии до root любого произвольного кода, думаю, объяснять не надо!)
igorborisov
Активный пользователь
Активный
10.07.2025
16:51
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийxKDEРодительский комментарий
0
войдите, чтобы ставить лайки
А если новичок скопирует вредоносный bash-код и запустит его от пользователя root? Тогда уж ничего не поможет. Сейчас это распространено как "капча", которую нужно выполнить в командной оболочке
vantiki
Активный пользователь
Активный
10.07.2025
18:14
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
Классный материал! В быту точно может пригодиться. Уже тысячу лет не гонял RPM-дистрибутивы, думаю снова сусю качнуть на тест в ближайшем времени. Ради практики попробую собрать nekoray в RPM, как раз гайд подъехал :)
igorborisov
Активный пользователь
Активный
14.07.2025
10:39
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийvantikiРодительский комментарий
0
войдите, чтобы ставить лайки
Поздравляю с дистрохоп-аватаркой!
scorpii
Активный пользователь
Активный
10.07.2025
19:46
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
+1
войдите, чтобы ставить лайки
Вполне годный материал, практически тот же bash, только в профиль.
igorborisov
Активный пользователь
Активный
11.07.2025
10:01
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийscorpiiРодительский комментарий
0
войдите, чтобы ставить лайки
Причем тут bash?
scorpii
Активный пользователь
Активный
11.07.2025
10:06
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийigorborisovРодительский комментарий
+1
войдите, чтобы ставить лайки
Потому как в основе лежат те же скриптовые команды оболочки, просто потом все упаковывается в один архив
igorborisov
Активный пользователь
Активный
11.07.2025
10:01
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
0
войдите, чтобы ставить лайки
То чувство, когда 3 года собираешь RPM за деньги
admxans
12.07.2025
12:24
Постоянная ссылка на комментарийПостоянная ссылка на комментарий
0
войдите, чтобы ставить лайки
mkdir -p %{buildroot}/usr/bin - а зачем? Сомнительно, что этот каталог отсутствует в системе.
KittyBlanc
Активный пользователь
Активный
12.07.2025
16:06
Постоянная ссылка на комментарийПостоянная ссылка на комментарийРодительский комментарийadmxansРодительский комментарий
+2
войдите, чтобы ставить лайки
Вы видимо не поняли. Этот каталог надо создать не в системе, а в сборочной папке пакета в процессе сборки. Ведь чтобы установить файл hello-pingvinus в /usr/bin/ у целевого пользователя , надо так бы сказать создать макет этого пути внутри rpm.

Написать комментарий

Ник:
Текст комментария:
  • Уважать других.
  • Не ругаться.
  • Без оскорблений.
  • Без грубости.
  • Не переходить на личности.
  • Писать на русском языке.
  • Без политики.
  • Без флуда.
Правила