Создать rpm пакет centos

Обновлено: 06.07.2024

Официальные репозитории CentOS содержат тысячи пакетов RPM, которые можно установить с помощью yum утилиты командной строки. Пакеты, которые недоступны в стандартных репозиториях CentOS, можно легко установить, включив соответствующий репозиторий.

Но не все поставщики программного обеспечения предоставляют репозиторий yum для своих приложений. Чаще всего в таких ситуациях у них будет страница загрузки, с которой можно загрузить и установить пакет RPM или загрузить и скомпилировать программное обеспечение из источников.

Прежде чем вы начнете

При установке RPM-пакетов убедитесь, что они созданы для вашей системной архитектуры и вашей версии CentOS .

Вам следует избегать использования этого метода для замены или обновления важных системных пакетов, таких как glibc, systemd или других служб и библиотек, которые необходимы для правильного функционирования вашей системы. Это может привести к ошибкам и нестабильности системы.

Чтобы установить пакеты RPM, вы должны войти в систему как пользователь root или пользователь с привилегиями sudo .

Обычно вы используете веб-браузер для поиска и загрузки файла RPM. Найдя файл, вы можете загрузить его с помощью браузера или с помощью инструмента командной строки, такого как curl или wget

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

yum - является инструментом менеджера пакетов по умолчанию в CentOS. Он используется для установки, удаления, загрузки, запроса и обновления пакетов из официальных репозиториев CentOS, а также других сторонних репозиториев.

Первым шагом является загрузка файла RPM, который вы хотите установить:

Чтобы установить пакет, используйте yum localinstall команду с указанием пути к имени пакета:

yum предложит вам подтверждение. Ответьте, y и RPM-пакет будет установлен, при условии, что он совместим с вашей системой, и все зависимости соблюдены.

Если пакет RPM зависит от других пакетов, которые в данный момент не установлены, и если эти пакеты доступны в репозиториях, включенных в вашей системе, yum будут установлены все зависимости. В противном случае yum будет напечатан список всех отсутствующих зависимостей, которые вам придется загрузить, и вручную установите эти пакеты.

Вместо загрузки и последующей установки пакета RPM вы можете просто передать URL-адрес пакета RPM yum localinstall команде:

Чтобы обновить пакет RPM, который уже установлен с yum, используйте ту же процедуру, что и при установке пакета.

Если по какой-то причине вы хотите удалить установленный пакет, используйте стандартную yum remove команду с именем пакета:

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

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

Для установки пакета RPM используйте rpm -i команду, после которой следует имя пакета RPM:

-v Опция указывает , rpm чтобы показать подробный вывод и -h показать хэш отмечен прогресс бар.

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

Вместо загрузки и установки пакета RPM вы можете использовать URL-адрес пакета RPM в качестве аргумента:

Чтобы обновить пакет, используйте -U параметр:

Если пакет, который вы пытаетесь обновить, не установлен, rpm -U команда установит его.

Чтобы установить пакет RPM без установки всех необходимых зависимостей в системе, используйте --nodeps параметр:

Чтобы удалить (стереть) пакет, используйте rpm -e команду с именем пакета:

Вывод

В этом руководстве мы показали вам, как установить RPM-пакеты в CentOS.

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

Следуйте за нами на Фейсбуке, в Твиттере и других социальных сетях.

Содержание

Внимание: данная страница не является частью официальной документации.

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

В данной статье я приведу пример, как создать свой RPM-пакет для «ДокуВики», в котором определены все необходимые зависимости и начальные настройки. Задача пакета будет состоять в установке ПО, настройке веб-сервера Apache, настройке прав доступа, при желании можно добавить и базовые настройки «ДокуВики». Устанавливать «ДокуВики» по умолчанию будем в каталог /opt/dokuwiki .

Отказ от ответственности

Установка и настройка rpm-build

Я не буду подробно описывать технологию создания RPM-пакетов, в сети есть немало руководств на данную тему, написанных умными людьми. Здесь я просто приведу шаги, которые достаточны для того, чтобы начать создавать свои пакеты.

Для начала установите пакет rpm-build, запустив в сеансе root’а команду:

Зайдите в систему под своим постоянным пользователем, который не имеет привелегированных прав. Допустим его имя: user .

Создадим нужные каталоги и поределим нужный макрос:

Всё, теперь можно приступать созданию пакета.

Подготовка исходников

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

Тут же создадим файл настройки каталога для сервера Apache, скажем

/workspace/redhat/SOURCES/dokuwiki.conf , следующего содержания:

На этом пока остановимся.

Подготовка SPEC-файла

/workspace/redhat/SPECS/ создадим файл dokuwiki-2009-12-25c.spec со следующим содержанием:

Обратите внимание на кострукции « Summary(ru) » и « %description -l ru », аналогичным образом вы можете определить краткое и полное описание для других языков.

Обратите внимание на аргумент noreplace у макроса %config , он означает, что данный конфигурационный файл не будет перезаписываться, если он существует.

Генерация RPM-пакета

Просто выполните команду:

Если нигде нет никаких ошибок, то в каталоге

/workspace/redhat/SRPMS/ обнаружите файл dokuwiki-20091225c-1.src.rpm , а в каталоге

/workspace/redhat/RPMS/noarch/ будет находиться наш RPM-пакет dokuwiki-20091225c-1.noarch.rpm , в котором уже определены минимально нужные зависимости.

RPM-пакет с предопределёнными настройками «ДокуВики»

Лень — двигатель прогресса, чтобы не запускать постоянно install.php , я определил начальные установки для «ДокуВики» и включил их в свой RPM-файл. Начальные настройки у меня таковы:

И т. д. по мелочи то, что можно в дальнейшем переопределить.

Далее я в каталог

/workspace/redhat/SOURCES/ добавил следующие файлы:

В SPEC-файле в секции глобальных переменных определил:

В секции %build добавил следующее:

И пересобрал пакет:

Добавление страниц вики в RPM-пакет

Вики с нуля — это всегда грустно, желающим добавить в RPM-пакет страницу по умолчанию, свои статьи, или просто более подробную документацию по «ДокуВики» достаточно создать нужные страницы с форматированием «ДокуВики» в виде файлов с расширением «txt» и настроить SPEC-файл на копирование данных файлов в соответсвующие подкаталоги каталога /opt/dokuwiki/data/pages/ .

Приведу пример добавления свой страницы по умолчанию (у меня это index.html ). Итак, в каталоге

/workspace/redhat/SOURCES создадим файл index.html.txt , с нужным вам содержанием, например:

В SPEC-файле определим глобальную переменную:

В секцию %build добавим создание нужного каталога и копирование туда файла:

И определим наш файл в секции %files :

И пересоберём наш пакет:

Главное, при добавлении своих страниц в пакет указать, что они не должны перезаписываться, вы же не желаете восстанавливать при каждом обновлении стартовую страницу?

Добавление медиафайлов вики (картинок, звуков, видео) в RPM-пакет

Здесь всё тоже очень просто, всё абсолютно как в разделе Добавление страниц вики в RPM-пакет, только целевой каталог другой: /opt/dokuwiki/data/media/ .

Пример RPM-пакета с плагином для «ДокуВики»

Ну раз вы установили «ДокуВики» из RPM-пакета, то не марать же теперь руки ручной установкой плагинов к «ДокуВики», приведу пример SPEC-файла для плагина include, который я создавал для себя и на базе которого вы сможете создать свой RPM-пакет.

В файл include.txt я просто скопировал описание с синтаксисом плагина на его страничке, если вам этого не надо, можете просто это удалить.

Как видите, создать RPM-пакет для плагина - не трудно. Скопировать исходник в соответствующий каталог, скопировать текст из SPEC-файла другого плагина, изменить значение переменной pluginname , версию плагина, описание, ну, и по мелочи (не забудьте удалить или изменить описание добавления справки по плагину).

Для рабо­ты по сбор­ке паке­тов луч­ше исполь­зо­вать отдель­ный ком­пью­тер, вир­ту­аль­ную маши­ну или кон­тей­нер Docker.

1. Уста­но­вим пакеты:

yum install rpmdevtools rpmlint

  • rpmdevtools — поз­во­лит нам исполь­зо­вать ути­ли­ту rpmdev-setuptree, с помо­щью кото­рой мы смо­жем создать рабо­чую сре­ду в виде ката­ло­гов для сборки.
  • rpmlint — поз­во­ля­ет про­те­сти­ро­вать пакет RPM .

yum group install "Development Tools"

* дан­ная груп­па паке­тов вклю­ча­ет все необ­хо­ди­мое для сбор­ки. Ее не реко­мен­ду­ет­ся ста­вить на рабо­чий ком­пью­тер, так как уста­нав­ли­ва­ет­ся мно­го ненуж­но­го для стан­дарт­ной систе­мы мусора.

2. Созда­ем пользователя.

Делать гото­вые уста­но­воч­ные сбор­ки паке­тов очень опас­но от поль­зо­ва­те­ля root. Если мы допу­стим ошиб­ку с путя­ми, фай­лы могут пере­те­реть или уда­лить важ­ные для рабо­ты дирек­то­рии. Сто­ит создать отдель­но­го поль­зо­ва­те­ля и рабо­тать под ним. Одна­ко, если мы рабо­та­ем в вир­ту­аль­ной сре­де или кон­тей­не­ре Docker, нам это не страш­но. Тогда дан­ный пункт мож­но про­пу­стить и рабо­тать из под root.

useradd builder -m

* в дан­ном при­ме­ре мы созда­дим поль­зо­ва­те­ля builder. Опция -m сра­зу создаст домаш­ний ката­лог для пользователя.

Теперь захо­дим под дан­ным поль­зо­ва­те­лем — после­ду­ю­щие коман­ды мы будем выпол­нять от него:

3. Созда­дим струк­ту­ру ката­ло­гов для сборки:

В нашей теку­щем ката­ло­ге долж­на появить­ся пап­ка rpmbuild — а в ней:

  1. BUILD — содер­жит все фай­лы, кото­рые появ­ля­ют­ся при созда­нии пакета.
  2. RPMS — сюда будут скла­ды­вать­ся гото­вые пакеты.
  3. SOURCES — для исход­ни­ков, из кото­рых и будут соби­рать­ся RPM-пакеты.
  4. SPECS — для фай­лов с опи­са­ни­ем про­цес­са сборки.
  5. SRPMS — для исход­ни­ков RPM-файлов.

Мы гото­вы к сборке.

Сборка из исходников

Созда­дим файл spec:

rpmdev-newspec rpmbuild/ SPECS /pg_redis_pubsub.spec

Теперь откро­ем его и при­ве­дем к виду:

vi rpmbuild/ SPECS /pg_redis_pubsub.spec

BuildRequires : postgresql-devel postgresql-server-devel

* что­бы понять, как запол­нить spec-файл, реко­мен­ду­ет­ся для нача­ла собрать и уста­но­вить при­ло­же­ние вруч­ную с помо­щью make и make install. Так­же необ­хо­ди­мо изу­чить доку­мен­та­цию уста­нав­ли­ва­е­мо­го паке­та или (при нали­чие воз­мож­но­сти) пого­во­рить с раз­ра­бот­чи­ка­ми про­грамм­но­го обеспечения.

Уста­но­вим зави­си­мо­сти, кото­рые необ­хо­ди­мы для сбор­ки (BuildRequires). В дан­ном при­ме­ре это:

yum install epel-release

yum install postgresql-devel postgresql-server-devel hiredis-devel

* кон­крет­но, в моем при­ме­ре для уста­нов­ки hiredis-devel необ­хо­ди­мо поста­вить репо­зи­то­рий epel-release. Спи­сок паке­тов, необ­хо­ди­мый для сбор­ки кон­крет­но­го паке­та необ­хо­ди­мо уточ­нить в документации.

Теперь копи­ру­ем исход­ник на свой ком­пью­тер. В моем при­ме­ре кло­ни­ру­ем репозиторий:

Гото­вим архив и поме­ща­ем его в ката­лог rpmbuild/ SOURCES :

tar -czvf rpmbuild/ SOURCES /pg_redis_pubsub-1.0.2.tar.gz pg_redis_pubsub

Про­ве­ря­ем кор­рект­ность SPEC-файла:

rpmlint rpmbuild/ SPECS /pg_redis_pubsub.spec

В моем при­ме­ре коман­да вер­ну­ла ответ:

rpmbuild/ SPECS /pg_redis_pubsub.spec: W: invalid-url Source0: pg_redis_pubsub-1.0.2.tar.gz
0 packages and 1 specfiles checked; 0 errors, 1 warnings.

Дан­ное пре­ду­пре­жде­ние мож­но проигнорировать.

rpmbuild -bb rpmbuild/ SPECS /pg_redis_pubsub.spec

Если она прой­дет без оши­бок, мы долж­ны най­ти RPM-пакет в ката­ло­ге rpmbuild/ RPMS /x86_64, где x86_64 — архи­тек­ту­ра пакета.

Описание файла SPEC

Дан­ный файл явля­ет­ся инструк­ци­ей по сбор­ке паке­та. В нем мы опи­сы­ва­ем сам пакет, зада­ем мета­дан­ные и ука­зы­ва­ем, как извле­кать фай­лы и куда их копи­ро­вать при уста­нов­ке паке­та. Син­так­сис фай­ла вклю­ча­ет такие эле­мен­ты, как раз­де­лы, мак­ро­сы, опе­ра­то­ры, опции. Рас­смот­рим их отдельно.

Опции заголовка

Опре­де­ля­ют опи­са­ние паке­та, а так­же неко­то­рые важ­ные для сбор­ки параметры.

Разделы (теги)

В каж­дом раз­де­ле опи­сы­ва­ет­ся своя часть логи­ки про­цес­са сбор­ки пакета.

Раз­дел Опи­са­ние
%description Опи­са­ние паке­та. Может состо­ять из несколь­ких строк, но каж­дая стро­ка долж­на содер­жать до 73 символов.
%prep Пред­ва­ри­тель­ная обра­бот­ка. Исполь­зу­ет­ся для под­го­тов­ки исход­ни­ков. Как пра­ви­ло, в дан­ном раз­де­ле про­ис­хо­дит их рас­па­ков­ка. Так­же на дан­ном эта­пе могут при­ме­нять­ся патчи.
%build Этап сбор­ки паке­та. Как пра­ви­ло, это make.
%install Уста­нов­ка паке­та. Это может быть make install или копи­ро­ва­ние кон­крет­ных фай­лов в кон­крет­ные дирек­то­рии или запуск про­из­воль­но­го скрипта.
%clean Раз­дел содер­жит инструк­ции по уда­ле­нию уста­рев­ших фай­лов, кото­рые боль­ше не нужны.
%files Пере­чис­ля­ем фай­лы, кото­рые долж­ны попасть в конеч­ную систе­му при уста­нов­ке пакета.
%changelog Спи­сок изме­не­ний в рабо­те про­грамм­но­го обеспечения.

Макросы для команд

Неко­то­рые систем­ные коман­ды луч­ше писать не напря­мую, а через мак­ро­сы. Это поз­во­лит добить­ся боль­шей ста­биль­но­сти при сбор­ке на раз­лич­ных систе­мах. При­ве­дем в при­мер дан­ные команды:

Мак­рос Коман­да Опи­са­ние
% rm Уда­ле­ние файлов
% mv Пере­нос файлов
% tar Рас­па­ков­ка или созда­ние архивов

* пол­ный спи­сок мак­ро­сов мож­но полу­чить коман­дой rpm --showrc.

Макросы для каталогов

Ката­ло­ги луч­ше писать не бук­валь­но, а через макросы:

Мак­рос Путь
% /usr
% %/lib64
% %/share
% %

* обра­ти­те вни­ма­ние, что неко­то­рые мак­ро­сы ведут не на кон­крет­ные пути, а на дру­гие макросы.
* пол­ный спи­сок мак­ро­сов мож­но полу­чить коман­дой rpm --showrc.

Операторы сравнения

SPEC файл поз­во­ля­ет зада­вать логи­ку с помо­щью опе­ра­то­ров срав­не­ния. При­ве­дем при­ме­ры их использования:


Установка CheckInstall on Linux.

Чтобы установить Checkinstall на Debian/Ubuntu и остальных debian-оподобных ОС, выполните:

Чтобы установить Checkinstall в дистрибутивах основанных на Red Hat, вам нужно будет скачать встроенных .rpm в Checkinstall, можете использовать мой.

Для начала пробуем его найти в ОС:

Если покажет что есть пакет, то его можно установить:

Или качаем пакет:

После установки Checkinstall, вы можете использовать следующий формат чтобы собрать пакет для конкретной ОС:

Сборка RPM или DEB пакета с CheckInstall

Первое что нужно сделать, так это скачать исходный код с официального сайта. Я привык сохранять все архивы в /usr/local/src. Скачиваем исходный код программы и распаковываем ее, и переходим в папку с кодом для дальнейших действий:

Вот команды, чтобы собрать пакет Htop:

2. Вы можете ввести краткое описание пакета, а затем нажмите Enter два раза.

checkInstall Unix/Linux пример

checkInstall Unix/Linux пример

После чего Checkinstall создаст .rpm или .deb пакет автоматически, в зависимости от вашей системы Linux.

На CentOS 7 выглядит это так:

CheckInstall CentOS/RedHat/Fedora

На Debian 7 выглядит это так:

CheckInstall Debian/Ubuntu

Опции Checkinstall

*Выбор тип пакета*

-S
Собрать пакет для Slackware.

*Опции для установки собранных пакетов*

*Опции для скриптов*

*Опции выводимой информации*

-d<0|1|2>
Установить уровни для debug.

-si
Запустить интерактивную установку команды.

-ss
Запустите интерактивный скрипт установки для Slackware.

* Параметры настройки пакета *

* Параметры очистки *

Читайте также: