Збірка RPM-пакета на прикладі Nginx

Збірка RPM-пакета на прикладі Nginx

09:45, 27.01.2023

Зміст статті
arrow

  • Попереднє налаштування операційної системи CentOS
  • Налаштування оточення користувача
  • Створення RPM пакетів з вихідних кодів
  • Основні операції з інсталяційним пакетом
  • Як додати модуль SPNEGO?
  • Налаштування конфігурації NGINX
  • Перевірка підпису RPM-пакета

RPM – пакетний менеджер, який використовується в операційних системах Linux на базі Red Hat. Зберігання даних у форматі RPM здійснюється за допомогою архівного контейнера cpio, який стискає дані за допомогою утиліти gzip, bzip2, LZMA, XZ або XAR, залежно від версії. Назва кожного RPM пакета містить 4 елементи:

  • назва програми;
  • версія;
  • номерне позначення версії;
  • вказівка архітектури, під яку пакет збирався.

Далі в статті ми розповімо, як зібрати власний RPM пакет для CentOS на прикладі Nginx з модулем SPNEGO. Рухатися до цієї мети будемо в кілька етапів: від створення найпростішого пакета до додавання до нього окремих модулів з редагуванням конфігураційного файлу.

Попереднє налаштування операційної системи CentOS

Насамперед потрібно встановити кілька важливих пакетів:

yum install wget rpm-build rpmdevtools gcc make

За допомогою однієї лише цієї команди ми завантажуємо в систему утиліту для скачування файлів мережею, софт для збирання інсталяційного пакета, компілятор СІ, утиліту для збирання початкових кодів, а також програму для створення робочого середовища у вигляді каталогів. Усе це нам знадобиться далі.

Далі потрібно встановити залежності:

yum install openssl-devel zlib-devel pcre-devel

Усі зазначені в команді пакети потрібні для нашого варіанту RPM збірки. У вашому випадку можуть знадобитися й інші залежності, просто пропишіть їх через пробіл. Якщо потрібних пакетів у системі не виявиться, ви отримаєте повідомлення про помилку при першій же спробі виконати збірку.

Останній крок попереднього налаштування операційної системи – створення окремого користувача. Робити це від імені користувача з правами доступу рівня root не варто, тому що будь-яка помилка під час зазначення шляхів може призвести до того, що якісь файли або навіть цілі директорії буде втрачено. Отже, виконайте команду:

useradd creator -m

Таким чином ми створили користувача creator і окремий домашній каталог для нього. Щоб усі подальші дії будемо здійснювати від його імені, пропишіть:

su - creator 

Налаштування оточення користувача

Переконайтеся, що перебуваєте в потрібному каталозі. Як цей каталог може виступати абсолютно будь-яка папка, створена для цієї мети. У розглянутому прикладі використовуємо домашню директорію користувача creator, яку створили раніше.

Щоб упевнитися, що перебуваєте в потрібній директорії, пропишіть команду:

$ pwd

Якщо консоль видасть вам повідомлення "/home/creator", ви в правильному місці. Якщо бачите щось інше, просто перейдіть до домашнього каталогу за допомогою команди:

$ cd ~

І потім створіть структуру каталогів для збірки:

$ rpmdev-setuptree

Тепер у нашому домашньому каталозі користувача creator з'явиться папка rpmbuild, що містить таку структуру:

  • BUILD – тут розташовані файли, що з'являються в процесі створення RPM-пакета.
  • RPMS – тут лежатимуть готові пакети.
  • SOURCES – містить вихідні коди для складання RPM-пакетів.
  • SPECS – тут містяться файли з описом збірки.
  • SRPMS – містить вихідні коди RPM-файлів.

Тепер ми з вами готові до завантаження вихідного файлу і його підготовки до подальших процесів.

Створення RPM пакетів з вихідних кодів

Перейдіть на сторінку завантаження пакетів Nginx і виберіть ті з них, які потрібні конкретно для вашої операційної системи. Ми збираємо RPM на базі CentOS 7. Якщо ви теж – можете відразу ж перейти у відповідний розділ. Тут ви знайдете вихідні коди для конкретної версії ОС. Копіюйте посилання і далі завантажте вихідник через консоль:

$ wget https://nginx.org/packages/mainline/centos/7/SRPMS/nginx-1.19.3-1.el7.ngx.src.rpm

І тепер встановлюємо вихідник за допомогою команди:

$ rpm -Uvh nginx-1.19.3-1.el7.ngx.src.rpm

Після цього в каталозі rpmbuild/SOURCES ви зможете побачити вихідні файли, що з'явилися, для збірки RPM з потрібною для вас версією веб-сервера Nginx.

Переходимо до створення збірки інсталяційного RPM-пакета:

$ rpmbuild -bb rpmbuild/SPECS/nginx.spec

Результатом стане поява пакета в каталозі rpmbuild/RPMS/x86_64, який містить два файли:

  • nginx-1.19.3-1.el7.ngx.x86_64.rpm: інсталяційний пакет.
  • nginx-debuginfo-1.19.3-1.el7.ngx.x86_64.rpm: інсталяційний пакет із відомостями для налагодження.

Тепер ми готові до встановлення.

Збірка rpm-пакета на прикладі nginx

Основні операції з інсталяційним пакетом

Щоб встановити зібраний пакет, пишемо команду:

rpm -Uvh <шлях до зібраного пакета>

Ключі -Uvh забезпечують послідовне оновлення, виведення відомостей про хід встановлення та демонстрацію статусу. Під час ініціювання команди ви маєте бути розташовані в каталозі, в якому розміщено пакет RPM.

Далі, щоб запустити Nginx, прописуємо по черзі команди:

systemctl enable nginx
systemctl start nginx

Перша команда потрібна для автоматичного запуску веб-сервера, друга ж ініціює його запуск тут і зараз.

Якщо потрібно буде видалити пакет, також потрібно буде ввести дві команди:

systemctl disable nginx
systemctl stop nginx

Щоб отримати інформацію про повну назву встановленого у вашій ОС пакета, пропишіть таку команду:

rpm -qa | grep nginx

Після зупинки веб-сервера видалити пакет можна командою:

rpm -e nginx-1.19.3-1.el7.ngx.x86_64

Як додати модуль SPNEGO?

Додати модуль SPNEGO до збірки легко. Послідовно введіть низку команд:

yum install git
su - creator
$ cd ~
$ git clone https://github.com/stnoonan/spnego-http-auth-nginx-module.git /tmp/spnego-http-auth-nginx-module
$ vi vi rpmbuild/SPECS/nginx.spec

Перед вами відкриється файл nginx.spec, в якому потрібно:

  • Знайти рядок "%define BASE_CONFIGURE_ARGS ...".
  • Після --with-... додати --add-dynamic-module=/tmp/spnego-http-auth-nginx-module.

Тепер знайдіть %description і після нього додайте:

%package module-spnego
Group: %{_group}
Requires: nginx = %{?epoch:%{epoch}:}%{main_version}-%{main_release}
Summary: nginx spnego module
%description module-spnego
Dynamic Spnego module for nginx.

Далі знаходимо %build і додаємо:

echo 'load_module "%{_libdir}/nginx/modules/ngx_http_auth_spnego_module.so";' \
	> %{buildroot}%{_sysconfdir}/nginx/modules/spnego-http-auth-nginx-module.conf

І останнє – знаходимо %files і додаємо:

%files module-spnego
%{_libdir}/nginx/modules/spnego-http-auth-nginx-module.conf
%{_libdir}/nginx/modules/ngx_http_auth_spnego_module.so

Тепер, щоб запустити збірку, вводимо команду:

$ rpmbuild -bb rpmbuild/SPECS/nginx.spec

Щоб встановити збірку, нам знадобляться два RPM-пакети:

  • nginx-1.19.3-1.el7.ngx.x86_64.rpm
  • nginx-module-spnego-1.19.3-1.el7.ngx.x86_64.rpm

Обидва вони розташовані в каталозі RPMS.

Коли встановлення буде завершено, виконайте команду:

nginx -V

Відшукайте опцію ... --add-dynamic-module=/tmp/spnego-http-auth-nginx-module ... - це і є опція вашої збірки.

Щоб модулі довантажувалися, відредагуємо конфіг Nginx:

vi /etc/nginx/nginx.conf

У корінь необхідно додати такий текст:

user  nginx;
worker_processes  1;
 
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
 
include /etc/nginx/modules/*.conf;
 
events {

...

Налаштування конфігурації NGINX

Далі розповімо, як зробити підпис пакета і перевірити його, щоб можна було гарантувати авторство збірки. Для створення підпису прописуємо кілька команд від імені користувача з правами доступу рівня root:

# yum install rpm-sign pinentry

Далі перемикаємося на користувача creator, якого ми створили раніше, і генеруємо ключ:

$ gpg2 --gen-key

Перед вами з'явиться запит, на який потрібно відповісти "4" – це означатиме, що RSA ключ тільки для підпису. Розмір ключа залишайте за замовчуванням, а ось період актуальності ключа встановіть уже на свій розсуд.

Підтвердити коректність даних можна стандартним "y".

Тепер потрібно ввести дані ключа. Наприклад, так:

Real name: Volt
Email address: rpm@volt.com
Comment:

Коректність даних підтверджується ключем "O". Після цього двічі введіть пароль.

Зрештою відкрийте другу версію SSH і введіть послідовно три команди:

dd if=/dev/sda of=/dev/zero
$ gpg -K
$ vi ~/.rpmmacros ~/.rpmmacros

Додайте в цей файл такі рядки:

%_signature gpg
%_gpg_name Вольт
%_gpgbin /usr/bin/gpg2
%__gpg_sign_cmd %{__gpg} gpg --force-v3-sigs --batch --verbose --no-armor --no-secmem-warning -u "%{_gpg_name}" -sbo %{__signature_filename} --digest-algo sha256 %{__plaintext_filename}''

Залишається лише підписати пакет:

$ rpm --addsign rpmbuild/RPMS/x86_64/nginx-1.19.3-1.el7.ngx.x86_64.rpm

Підтвердіть дію за допомогою пароля.

Перевірка підпису RPM-пакета

Для перевірки підпису спершу експортуйте public key:

gpg2 -a --export Volt > RPM-GPG-KEY-Volt

Після цього ви отримаєте ключ RPM-GPG-KEY-Volt, його потрібно перенести на цільовий ПК, де і виконати перевірку підпису. Імпортуємо ключ від імені користувача з правами root:

rpm --import RPM-GPG-KEY-Volt

І перевіряємо підпис:

rpm --checksig nginx-1.19.3-1.el7.ngx.x86_64.rpm

У результаті ви побачите перед собою повідомлення, схоже на це:

nginx-1.19.3-1.el7.ngx.x86_64.rpm: digests signatures OK

Сподіваємося, наша стаття допомогла вам розібратися, як зібрати RPM-пакет на прикладі Nginx. Якщо виникнуть складнощі, звертайтеся до фахівців HostZealot. Всього доброго!

views 2m, 5s
views 2
Поділитися

Чи була ця стаття корисною для вас?

Популярні пропозиції VPS

Інші статті на цю тему

cookie

Чи приймаєте ви файли cookie та політику конфіденційності?

Ми використовуємо файли cookie, щоб забезпечити вам найкращий досвід роботи на нашому сайті. Якщо ви продовжуєте користуватися сайтом, не змінюючи налаштувань, вважайте, що ви згодні на отримання всіх файлів cookie на сайті HostZealot.