Иногда может понадобиться создать свой 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, а вторая печатает наш текст в консоль. Проверим:
- Сделаем файл исполняемым: chmod +x hello-pingvinus
- Запустим: ./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
- Name — имя пакета.
- Version — версия программы.
- Release — версия RPM пакета. Если программу (даже с множеством выпусков за многолетнюю историю) упаковывают в RPM впервые — ставят единицу. После неё по желанию можно поставить точку и название дистрибутива, особенно если есть несколько RPM-файлов для разных дистрибутивов, чтобы знать где какой.
- Summary — короткое описание пакета в одно короткое предложение. Пишется как правило на английском.
- Summary(ru) — Summary на русском языке. Если у пользователя русская локаль — он увидит именно его. Аналогично можно и для других языков.
- License — название лицензии Вашей программы. Например MIT, GPLv2 и т. п.
- Source0 — архив из которого будем собирать программу. Пока не обращайте внимание, он будет следующим пунктом.
- BuildArch — архитектура Вашего пакета. Поскольку пакет который содержит всего лишь простую bash-комманду не зависит от конкретной архитектуры вроде x86_64 или ARM, работая везде — ставим noarch.
- URL — ссылка на сайт Вашей программы.
- Requires — зависимости. Для данного пакета можно было ничего не писать поскольку bash есть везде, но для более сложных программ здесь указываются зависимости.
На этом шапка закончилась. Дальше - секции.
- %description — длинное описание, в отличии от короткого Summary. Можно на разных языках по примеру русского.
- %setup — распаковывает файлы из архива про который в следующем пункте. -q — не показывает вывод распаковки архива, -n - флаг после которого имя папки в архиве, которая содержит файлы и главное, SPEC-файл.
- %prep — подготовка к сборке RPM.
- %install — создаёт сборочную папку с файлами. Нужно знать, что чтобы ввести в терминал например «hello-pingvinus» или любую другую команду, надо чтобы в папке /usr/bin/ был файл с таким названием. Поэтому создаём эти папки, и копируем наш файл с кодом «hello-pingvinus» туда.
- %files — перечисляет файлы которые нужно включить в RPM пакет. Если мы скопировали в секции %install файл в сборочную папку, но в секции %files он не перечислен — в RPM он не попадёт.
Создание TAR архива
Самый простой способ создать RPM - создать TAR архив, в котором одна главная папка (в данном случае - hello-pingvinus), которая содержит:
- SPEC файл,
- Файлы программы (в данном случае — hello-pingvinus).
Делаем. Думаю писать как это сделать не надо - любой менеджер архивов из среды рабочего стола это умеет. Чтобы проверить - откройте менеджер архивов; если там папка "hello-pingvinus", а в ней 2 наших файла - всё правильно. Если там сразу 2 файла (в корне архива, а не в hello-pingvinus - неправильно.
Упаковка в RPM
Настало время наконец создать RPM. Установим утилиту rpmbuild (ищем в репозитории) и вводим в терминал следующую команду:
rpmbuild -tb hello-pingvinus.tar --define "_topdir $PWD"
На выходе получим наш RPM файл. Он должен быть в папке RPMS/noarch/. Пробуем установить. Можно через графический интерфейс, а можно и через dnf или zypper:
- dnf: sudo dnf install ./hello-pingvinus-1.0-1.opensuse.noarch.rpm
- zypper: sudo zypper install ./hello-pingvinus-1.0-1.opensuse.noarch.rpm
Если всё успешно установилось, при вводе в консоль hello-pingvinus получим "Привет из RPM, Пингвинус!".
Комментарии
14:29
16:25
16:38
16:51
18:14
10:39
19:46
10:01
10:06
10:01
12:24
16:06