19 Корисні команди та програми
Корисні команди та програми.
Лістинг 19.1. Файл специфікації для port
Summary: Program для управління вашим серіальним пристроєм
Packager: Denis Kolisnichenko [[email protected]]
Програма port призначена для моніторингу стану послідовного
порту. При отриманні сигналу (1) на якийсь контакт зазначеного порту,
port відправляє повідомлення користувачу, що її запустив, на вказаний email
Для побудови пакета необхідно ввести команду:
# rpm –bb /root/port/port.spec
Якщо ви не припустилися жодних помилок при створенні файлу специфікацій, на екрані ви побачите приблизно таке повідомлення:
Executing(%install): /bin/sh –e /var/tmp/rpm-tmp.33439
Processing files: port-1.0-99
Finding Provides: (за допомогою /usr/lib/rpm/find-provides)…
Finding Requires: (за допомогою /usr/lib/rpm/find-requires)…
Requires: ld-linux.so.2 libc.so.6 libc.so.6(GLIBC_2.0)
При цьому буде створено пакет port-1.0-99.i686.rpm. Цей пакет буде поміщений у каталог /usr/src/RPM/RPMS/i686.
При видаленні такого пакета він буде видалений з бази RPM, але видалення файлів не відбудеться. Дії, які потрібно виконати до та після видалення пакета з бази RPM, можна визначити в макрокомандах %preun і %postun відповідно. Наприклад
rm –f /usr/bin/port
rm -f /usr/man/man1/port.1
Такий підхід — найпростіший вихід зі становища, проте він не дуже коректний. Вирішення цієї проблеми залишаю вам як домашнє завдання.
А зараз проведемо невеликий експеримент. Запустіть Midnight Commander (mc), перейдіть у каталог /usr/src/RPM/RPMS/i686/ і «увійдіть» у пакет port-1.0-99.i686.rpm як у звичайний каталог. У ньому буде «підкаталог» INFO, в якому міститьсявся інформація про пакет.
Що ж, ви успішно розібралися з побудовою простого пакета, але для створення реальних пакетів встановлення ваших знань досі не вистачає. Тепер настала черга тієї сухої теорії, про яку я згадав на початку цього пункту. Традиційно процедура створення RPM-пакетів складається з наступних етапів:
1. Вилучення вихідних текстів програми з архіву.
2. Компілювання програми із вихідних текстів.
3. Створення RPM-пакету.
Перші два етапи можна пропустити, що ми зробили під час створення пакета. Таке можна зробити лише у випадку, якщо програму вже відкомпілювали з вихідних текстів.
Програма RPM використовує конфігураційний файл rpmrc. Пошук цього файлу здійснюється у каталогах /usr/lib/rpm, /etc, $HOME. Переглянути цей файл можна за допомогою команди:
Запис topdir файлу конфігурації rpmrc містить назву каталогу, де знаходиться дерево підкаталогів, яке використовується менеджером RPM для побудови пакетів. Введіть команду:
# rpm --showrc grep topdir
-14 _builddir %/BUILD
-14 _sourcedir %/SOURCES
–14 _specdir %/SPECS
–14 _srcrpmdir %/SRPMS
У мене ці підкаталоги знаходяться у каталозі /usr/src/RPM. Як ви бачите, у цьому каталозі знаходяться підкаталоги BUILD, RPMS, SOURCES, SPECS, SRPMS.
В каталозі BUILD створюється пакет RPM. У каталозі SOURCES є стислі вихідні тексти програми. До каталогу RPMS розміщуються створені пакети. Точніше, вони поміщаються в один із його підкаталогів, в якому саме це залежить від архітектури. У каталог SRPMS розміщуються пакети, що містять вихідні тексти програми. У каталозі SPECS є файли специфікацій. Зазвичай файл специфікації називається назва-програми-версія-реліз.8рес.
Наприклад, якщоу вас є вихідний текст програми в архіві, з якого хочете створити пакет RPM, скопіюйте його в каталог SOURCES:
# СР source_code-1.0.tar.gz /usr/src/RPM/SOURCES.
За замовчуванням менеджер RPM працює з пакетами, розташованими в каталозі з ім'ям, що збігається з назвою пакета та його версією. Для нашого пакету port це буде каталог port-1.0-99. Менеджер пакетів буде компілювати наш пакет у каталог /usr/src/RPM/port-1.0-99.
Думаю, вже достатньо інформації про каталоги RPM. Тепер перейдемо файл специфікацій. Файл специфікацій складається із чотирьох сегментів: заголовка, підготовчого, файлового, настановного. У заголовку вказується загальна інформація про пакет. У лістингу 19.1 до сегменту заголовка належать теги Summary, Name, Version, Release, Group та License. На них ми зупинятися не будемо, оскільки їхнє призначення зрозуміле з лістингу 19.1.
Є ще дуже корисний мітка: BuildRoot. Він змінює розташування дерева BUILD. Стандартним значенням є /usr/src/RPM або інший каталог, що задається змінною оточення $RPM_BUILD_ROOT. З метою економії дискового простору корисно після встановлення видалити дерево %RPM_BUILD_ROOT. Але це дерево за промовчанням може містити інші файли, які стосуються інших пакетів. Тому спочатку за допомогою тега BuildRoot потрібно задати якийсь тимчасовий каталог, а після встановлення видалити його.
У кожному сегменті є макрокоманди. З деякими ми вже знайомі це %description, %files, %doc, %install. У табл. 19.34 наведено повний опис макрокоманд.
Макрокоманди Таблиця 19.34
| %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 яку я використав у лістингу 19.1 |
| %pre | Дії, які будуть виконані до інсталяції пакета |
| %post | Дії, які будуть виконані після інсталяції пакету |
| %preun | Дії, які будуть виконані перед видаленням пакету |
| %postun | Дії, які будуть виконані після видалення пакету |
| %clean | Видалення дерева BUILD. Використовується замість опції – clean програми rpm.Зазвичай містить одну команду: rm –rf $RPM_BUILD_ROOT |
Потрібно зробити невелике зауваження щодо макрокоманд %config та %doc. У цьому випадку список задається не так, як у макрокоманді %files. Якщо після макрокоманди %files можна було просто вказати по одному файлу в кожному рядку, то макрокоманді %doc кожному файлу (або кожному списку) повинна передувати команда %doc. Наприклад:
%doc README TODO Changes
Ще раз зазначу, що наявність всіх макрокоманд у файлі специфікацій не є обов'язковою.
Під час створення пакета ми використовували опцію –bb програми rpm. При вказанні цієї опції створюється лише двійковий RPM-пакет, якщо ви хочете створити пакет, що містить вихідний текст програми, використовуйте опцію –ba. Створений пакет міститься в каталогі SRPMS і матиме ім'я port-1.0-99.src.rpm. Тобто замість назви архітектури буде вказано, що цей пакет містить вихідний текст програми. Для створення такого пакета у каталозі SOURCES мають бути вихідні тексти програми.
Для повноти картини залишилося розглянути налаштування менеджера rpm, які використовуються для створення пакетів (див. табл. 19.35).