Створення RPM-пакетів
Нижче представлена сторінка, лише частина величезного сайту присвяченого різної комп'ютерної документації, на сайті зібрано більше 800 мб інформації. Якщо Ви не знайшли в цій статті, то, що Ви шукаєте, спробуєте подивитися тут, запитати на форумі або пошукати необхідну Вам інформацію в нашому каталозі посилань сайтів комп'ютерної тематики.
Якщо ж Ви хочете придбати паперову копію представлених тут матеріалів, звертайтесь до нашої книгарні.
З повагою, команда розробників eManual.ru
Створення RPM-пакетів
Програма RPM призначена для виконання всіх видів операцій із програмним забезпеченням, у тому числі і для створення пакетів для встановлення (RPM-пакетів).
Перш ніж описати багато сухих фактів, взятих із документації, розглянемо простий приклад створення невеликого RPM-пакету. Я створив цей пакет для своєї програми, яка контролює стан вказаного послідовного порту.
Вважатимемо, що програма вже відкомпільована і всі файли, необхідні для її роботи, вже підготовлені. Нам потрібні такі файли: port – відкомпільований бінарний файл README – файл port.1 – файл для довідкової системи man
Усі ці файли я помістив у каталог /root/port. Звичайно, це не зовсім коректно, але про це буде сказано трохи згодом.
Для створення пакету потрібно створити файл специфікацій. У файлі специфікацій вказується вся інформація про пакет, що створюється: назва, версія, файли програм, файли документації, дії, що виконуються при встановленні пакета і при його видаленні.
Для створення пакету потрібно ввести команду: # rpm -bb /root/port/port.spec
Якщо ви не припустилися жодних помилок при створенні файлу специфікацій, на екрані ви побачите приблизно таке повідомлення:Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.33439 Processing files: port-1.0-99 Finding Prov >При цьому буде створено пакет port-1.0-99.i686.rpm. Цей пакет буде поміщений у каталог /usr/src/RPM/RPMS/i686
Проведемо невеликий експеримент. Запустіть M & gt; Тепер настала черга тієї сухої теорії, про яку я згадав на початку статті.
Традиційно, процедура створення RPM-пакетів складається з наступних етапів: Вилучення вихідних текстів програми з архіву Компілювання програми з вихідних текстів Створення RPM-пакету
Перші два етапи можна пропустити, що ми зробили під час створення нашого пакета. Це можна зробити лише у випадку, якщо програму вже відкомпілювали з вихідних текстів.
Програма RPM використовує конфігураційний файл rpmrc. Пошук цього файлу відбувається у каталогах /usr/lib/rpm, /etc, $HOME. Переглянути цей файл можна за допомогою команди: # rpm --showrc
Запис topdir файлу конфігурації rpmrc містить назву каталогу, в якому знаходиться дерево підкаталогів, яке використовується менеджером RPM для побудови пакетів. Введіть команду: # rpm --showrc grep topdir -14: _builddir %/BUILD -14: _rpmdir %/RPMS -14: _sourcedir %/SOURCES -14: _specdir %/SPECS -14: _srcrpmdir %/SRPMS -14: _top /RPM
У мене ці підкаталоги знаходяться у каталозі /usr/src/RPM. Як ви бачите, у цьому каталозі знаходяться підкаталоги BUILD, RPMS, SOURCES, SPECS, SRPMS.
В каталозі BUILD створюється пакет RPM. У каталозі SOURCES є стислі вихідні тексти програми. До каталогу RPMS розміщуються створені пакети. Точніше, вони поміщаються в один з його підкаталогів, в якій саме це залежить відархітектури. У каталог SRPMS розміщуються пакети, що містять вихідні тексти програми.
У каталозі SPECS є файли специфікацій. Зазвичай файл специфікації називається назва_програми-версія-реліз.spec.
Наприклад, якщо у вас є вихідний текст програми в архіві, з якого ви хочете створити пакет RPM, скопіюйте його в каталог SOURCES #cp source_code-1.0.tar.gz /usr/src/RPM/SOURCES
За замовчуванням менеджер RPM працює з пакетами, розташованими в каталозі з ім'ям, що збігається з назвою пакета та його версією. Для нашого пакету port це буде каталог port-1.0-99. Менеджер пакетів компілюватиме наш пакет у каталозі /usr/src/RPM/port-1.0-99
Думаю, вже достатньо інформації про каталоги RPM. Тепер перейдемо файл специфікацій. Файл специфікацій складається із чотирьох сегментів: заголовка, підготовчого, файлового, настановного.
У заголовку вказується загальна інформація про пакет. У лістингу 1 до сегменту заголовка відносяться теги Summary, Name, Version, Release, Group та Licese. На них ми зупинятися не будемо, оскільки їхнє призначення зрозуміле з лістингу 1.
Є ще дуже корисний мітка: BuildRoot. Він змінює розташування дерева BUILD. Стандартним значенням є /usr/src/RPM або інший каталог, що задається змінною оточення $RPM_BUILD_ROOT. З метою економії дискового простору корисно після встановлення видалити дерево %RPM_BUILD_ROOT. Але дерево за промовчанням може містити інші файли, які стосуються інших пакетів. Тому спочатку за допомогою тега BuildRoot потрібно задати якийсь тимчасовий каталог, а після встановлення видалити його.
У кожному сегменті є макрокоманди. З деякими ми вже знайомі – %description, %files, %doc, %install. У таблиці 1 наведено повний опис макрокоманд.
Таблиця 1.
| Макрокоманда | Опис |
| %description | Повний опис пакету |
| %prep | Підготовка архіву Тут задаються команди для отримання вихідного тексту програми та його розпакування, додаткова підготовка вихідного тексту. Після макрокоманди %prep задаються стандартні команди shell. |
| %setup | Макрокоманда вилучення файлів із архівів. Опція -n дозволяє вказати каталог, у якому буде створюватись новий пакет. Зазвичай розпаковується архів, розташований у каталозі SOURCES у каталог BUILD |
| %build | Макрокоманда компілювання. Зазвичай тут запускається програма make із необхідними параметрами |
| %files | Задає список файлів, які входять до складу пакета. При вказівці імен файлів має бути вказаний повний, а чи не відносний шлях. Для вказівки повного шляху можна використовувати змінну оточення $RPM_BUILD_ROOT. Необхідні файли вже мають бути поміщені до каталогу BUILD. Цього можна досягти за допомогою макрокоманди %setup або за допомогою %pre (див. нижче) |
| %config список | Задає список файлів, які будуть розміщені в каталогі / etc |
| %doc список | Задає список файлів, які будуть розміщені в каталогі /usr/doc/[package]-[ver]-[release]. |
| %install | Етап встановлення програмного забезпечення. Тут потрібно записати команди, які встановлюватимуть файли, що входять до складу пакета. Зручніше використовувати команду install, яку я використав у лістингу. |
| %pre | Дії, які будуть виконані до інсталяції пакета |
| %post | Дії, які будуть виконані після інсталяції пакету |
| %preun | Дії, які будуть виконані перед видаленнямпакету |
| %postun | Дії, які будуть виконані після видалення пакету |
| %clean | Видалення дерева BUILD. Використовується замість опції --clean програми rpm. Зазвичай містить одну команду: rm -rf $RPM_BUILD_ROOT |
Потрібно зробити невелике зауваження щодо макрокоманд %config та %doc. У цьому випадку список задається не так, як у макрокоманді %files. Якщо після макрокоманди %files можна було просто вказати по одному файлу в кожному рядку, то макрокоманді %doc кожному файлу (або кожному списку) повинна передувати команда %doc. Наприклад, %doc README TODO Changes %doc Install, а не %doc README TODO Changes Install
Ще раз зазначу, що наявність всіх макрокоманд у файлі специфікацій не є обов'язковою.
Під час створення пакета ми використовували опцію -bb програми rpm. При вказанні цієї опції створюється тільки двійковий RPM-пакет, якщо ви хочете створити пакет, що містить вихідний текст програми, використовуйте опцію -ba. Створений пакет міститься в каталогі SRPMS і матиме ім'я port-1.0-99.src.rpm. Тобто замість назви архітектури буде зазначено, що пакет містить вихідний текст програми. Для створення такого пакета у каталозі SOURCES мають бути вихідні тексти програми.
Для повноти картини залишилося розглянути налаштування менеджера rpm, які використовуються для створення пакетів.