Збираємо rpm пакет своїми руками

вступ

У першій частині статті ви ознайомилися з основами роботи RPM. Але часто буває так, що вам необхідно зібрати пакет з необхідними опціями (включити підтримку mysql, postgresql або cyrus-sasl2 і т.п.), які відсутні в rpm пакеті, що поставляється на диску з дистрибутивом. Виходом з цієї ситуації є збірка свого власного пакета.

Для полегшення складання rpm пакетів існує спеціально призначений для цих цілей пакет - rpm-build.

Як видно з опису цей пакет містить набір скриптів і програм, призначених для збирання пакетів.

Для того, щоб зібрати будь-якої пакет для початку необхідно завантажити т.зв. исходники для зборки пакета, як правило, це файли з розширенням src.rpm. Іноді, як у випадку з courier-imap, spec файл включається в вихідні коди.

Дуже зручним для пошуку rpm і src.rpm пакетів є сайт www.rpmfind.net. Наприклад, ми знайшли необхідний нам пакет - postfix, squid і т.д. Ми відразу можемо дізнатись, які пакунки, необхідні для його складання. Ось стандартна сторінка містить інформацію про пакунок для postix і для squid. Також там зазначається контрольна сума для перевірки цілісності пакету.

Після того, як ми отримали вихідні коди і перевірили їх цілісність, необхідно встановити відповідний пакет.

Після виконання даної операції вихідні postfix і всі необхідні пачті, а також скрипти були встановлені в / usr / src / redhat / SOURCES /, а spec файл (інструкція для збірки rpm пакета) в / usr / src / redhat / SPECS /.

Це стандартне розташування файлів при установці src.rpm. В принципі назви папок говорять самі за себе.

/ Usr / src / redhat / BUILD
До цієї папку розпаковуються вихідні коди відповідного пакета. За замовчуванням після складання пакета вихідні коди не видаляються, для того, щоб їх видалити, необхідно при складанні вказати ключ --clean.

/ Usr / src / redhat / RPMS / arch-name
де arch-name ім'я архітектури і може приймати одне з наступних значень: athlon, i386, i486, i586, i686, noarch. Після завершення збирання готовий rpm пакет буде поміщений в відповідну папку, в залежності від того, яку ви задасте архітектуру при складанні пакету за допомогою ключа --target.

/ Usr / src / redhat / SOURCES
після установки src.rpm пакета в дану папку поміщаються безпосередньо вихідні коди самого пакету, а також різні патчі і скрипти. Якщо вам треба накласти якийсь патч, то його необхідно копіювати саме в цю папку.

/ Usr / src / redhat / SPECS
в цій папці розташовується т.зв. spec файл, в якому вказується послідовність дій для збірки rpm пакета.

/ Usr / src / redhat / SRPMS
після закінчення складання rpm пакета в дану папку буде записаний відповідний src.rpm пакет.

І так, для того, щоб почати збирати пакет необхідно перейти в папку з spec файлом і виконати наступну команду

З останніх рядків видно, що готовий rpm пакет називається postfix-2.2.8-1.2.i686.rpm і збережений в папці / usr / src / redhat / RPMS / i686 /, так як при складанні пакету ми вказали ключ --target = i686 .

Власне збірка не повинна викликати ніяких проблем. Але що якщо нам необхідно зібрати пакет зі своїми опціями, наприклад, включити підтримку mysql або sasl2 і т.п. Для цих цілей необхідно буде підправити spec файл.

Структура spec файлу

Сруктурной spec файл складається з 6 розділів.

Заголовок
Тема має кілька стандартних полів:

Prep
Це другий розділ в spec-файлі. Він використовується для того, щоб зробити вихідні тексти готовими до побудови. Як правило, тут відбувається розпакування исходников і накладення відповідних патчів.

Build
В даному розділі розміщуються команди, які необхідно виконати для побудови програмного забезпечення, після того, як воно було розпаковано і були накладені відповідні патчі.

Install
В даному розділі розміщуються команди необхідні для установки пакета.

Скрипти, що виконуються до і після установки / видалення пакета

  • % Pre - макрос для виконання предустановочной скрипта.
  • % Post - макрос для виконання послеустановочного скрипта.
  • % Preun - макрос для виконання скрипта перед видаленням пакета.
  • % Postun - макрос для скрипта виконуваного після видалення пакета.

Files
Тут розташовується список фалів, які будуть включені в бінарний rpm пакет.

Розглянемо частину spec файлу postfix, треба зауважити, що у postfix так сказати нестандартний spec файл.

Наприклад, ми захотіли зібрати postfix з підтримкою MySQL, для цього на самому початку міняємо .efine MYSQL 0 на .efine MYSQL 1. і знову виконуємо команду

Він нам пише, що для побудови необхідно встановити пакет mysql-devel. Зверніть увагу, що версія не вказується, це означає, що можна встановити будь-яку версію, яку підтримує postfix або потрібний вам пакет.

Якби ви збирали з вихідних кодів, то вам довелося б самому шукати, які пакунки необхідні для складання даного пакета. В цьому і полягає одна з переваг збірки з src.rpm в порівнянні з tar.gz або tar.bz2.

Встановлюємо відповідний пакет

І заново запускаємо збірку postfix. На цей раз ми бачимо, що всі необхідні пакети для збирання встановлені і тепер необхідно, лише дочекатися закінчення зборки.

Все пакет у нас зібраний, тепер необхідно встановити його і радіти життю.

Для кращого розуміння розглянемо збірку squid, який має більш стандартну структуру spec файлу. Як завжди для початку встановлюємо src.rpm, при цьому не забуваємо перевірити розмір і контрольну суму.

Дізнатися всі можливі ключі можна наступним чином.

Після того, як ви знайшли необхідний ключ, додаємо його в% configure. Наприклад, ми хочемо зібрати squid з підтримкою ssl. З допомогою ми визначили, що для цього, необхідно додати два ключа --enable-ssl і --with-openssl. Вносимо відповідні зміни

Зберігаємо файл і починаємо збірку.

Все squid у нас зібраний успішно, тепер залишилося тільки встановити або оновити його.

Схожі статті