Складання rpm-пакетів - Форум системних адміністраторів

Часто найскладнішим завданням стає складання ПЗ належним чином. Одна з потенційних проблем – існування залежностей програмного забезпечення від інших програм та бібліотек. У процесі роботи зmake слід звертати увагу на сторонні бібліотеки, які потрібні для збирання. Ці залежності повинні бути включені в специфікацію пакета на стадії побудови rpm. У загальному випадку кожна залежність задовольняється власним rpm-пакетом, таким чином потрібно буде перейматися забезпеченням доступності цих rpm-пакетів.

Коли досягнуто трьох цілей: забезпечено відтворюване складання, сплановані оновлення, задоволені всі залежності, можна приступати до власне складання rpm-пакету.

Розгортання структури директорій

У системі Red Hat Linux батьківським каталогом для дерева каталогів збирання зазвичай буває /usr/src/redhat. Оскільки спочатку RPM був спроектований для побудови дистрибутивів Linux в цілому, цей шлях може відрізнятися від вказаного в інших системах і його можна змінити редагуванням файлів rpmrc.

Найлегший спосіб - використовувати вже наявний у системі шлях до каталогів збирання. Для збирання під непривілейованим користувачем може знадобитися змінити права доступу до них. Слід пам'ятати, що помилки складання rpm-пакетів можуть призвести до серйозних проблем у системі, якщо складання здійснюється від користувача root.

Для того, щоб приступити до збирання пакета, залишилося виконати дві дії:

  • - помістити вихідний код у SOURCE; - розмістити spec-файл у SPECS.

Розміщення вихідного коду в дереві збирання

Взагалі кажучи, можна помістити в SOURCES дерево каталогів із вихідним кодом проекту. Але набагато зручніше (і так і робиться), особливо,якщо збирається багато пакетів, помістити туди тарбол. Тоді в простому випадку на кожен пакет, що збирається, буде припадати один файл з архівом. Розкриватиметься архів за допомогою макросів RPM, тривіально з погляду користувача. Це допомагає тримати вихідний код різних проектів окремо один від одного, оскільки всі вони знаходяться у директорії SOURCES.

Угода про іменування тарболів з вихідним кодом пропонує таку форму імен: имя_пакета-версия.tar.gz. Помістивши архів у SOURCES, оператор робить скрипти збирання, вихідний код і все необхідне для RPM.

Створення spec-файлу

Spec-файл, скорочення від "файл специфікації", визначає всі дії утилітиrpmbuild, які повинні бути виконані при побудові програми, так само як і всі дії, необхідні при установці/видаленні програми . Кожен src.rpm-пакет має у своєму складі spec-файл для подальшого перескладання пакета.

Spec-файл – це текстовий файл. Угода про іменування пропонує називати spec-файл таким чином:

Текст усередині spec-файлу має спеціальний синтаксис. Синтаксичні визначення мають значення, що задають порядок складання, номер версії, інформацію про залежності і взагалі всю інформацію про пакет, яка згодом може бути запитана з БД RPM.

Секція загальної інформації (introduction)

Секція загальної інформації містить відомості про пакет, які після встановлення можуть бути запитані командою rpm -qi имя_пакета. Наприклад:

Для відстеження змін вимог від версії до rpm можна проаналізувати spec-файли пакетів сучасних збірок і порівняти їх з колишніми збірками.

Секція prep

Секція підготовки відповідає за команди, необхідні для початку збирання. Наприклад, якщо у SOURCESпокладено тарбол проекту, його необхідно розпакувати. У секції вказуються при цьому відповідні макроси rpm:

Секція починається з рядка%prep. Цей приклад використовує макрос%setup, який вміє розпаковувати компресовані архіви. Як правило, це єдиний рядок у цій секції.

Секція build

Секція build містить команди збирання ПЗ. Зазвичай тут присутні лише кілька команд, наприклад:

У цьому прикладі задіяні два параметри скрипта configure (прапори оптимізації компілятора та ім'я тимчасового каталогу складання) та команда make (без параметра, тобто для мети all). Секція починається рядком %build.

Секція install

Секція містить команди встановлення файлів пакета до системи. Наприклад:

На цій стадії очищаємо каталог складання і копіюємо файли пакета в каталог, визначений опцією <->prefix . Якщо не очистити каталог складання, файли від попередніх складання можуть порушити чистоту установки. Секція починається рядком%install.

Секція clean

Команди у цій секції вичищають файли, створені інших стадіях:

Секція починається рядком%clean.

Секція files

І, нарешті, команди в секції files задають списки файлів і каталогів, які з відповідними атрибутами повинні бути скопійовані з дерева збірки в пакет rpm і потім копіюватися в цільову систему при встановленні цього пакета. Наприклад:

Секція починається рядком%files. Макрос%doc зазначає файли документації. Це дозволяє скласти документацію з відповідних файлів проекту.

Після закінчення редагування spec-файлу залишилося помістити його в каталог SPECS під /usr/src/redhat, а тарбол з вихідним кодом SOURCES. Все готове для збирання rpm.

Секція

Re: Складання rpm-пакетів

ПовідомленняRaven » 14 Гру 2010, 12:49