19 Полезни команди и програми
Полезни команди и програми.
Списък 19.1. Файл със спецификации за порт програма
Резюме: Програма за управление на вашето серийно устройство
Опаковчик: Денис Колисниченко [[email protected]]
Програмата за порт е предназначена да следи състоянието на серийния номер
порт. При получаване на сигнал (1) на който и да е щифт на посочения порт,
port изпраща съобщение до потребителя, който го е стартирал, на посочения имейл
За да изградите пакета, трябва да въведете командата:
# rpm -bb /root/port/port.spec
Ако не сте направили никакви грешки при създаването на файла със спецификации, ще видите нещо подобно на екрана:
Изпълнява се (%инсталиране): /bin/sh –e /var/tmp/rpm-tmp.33439
Обработка на файлове: port-1.0-99
Намирането осигурява: (с помощта на /usr/lib/rpm/find-provides)…
Изисквания за намиране: (с помощта на /usr/lib/rpm/find-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/порт
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 %/ИЗТОЧНИЦИ
-14 _specdir %/SPECS
-14 _srcrpmdir %/SRPMS
Имам тези поддиректории в директорията /usr/src/RPM. Както можете да видите, тази директория съдържа поддиректории BUILD, RPMS, SOURCES, SPECS, SRPMS.
RPM пакет се създава в директорията BUILD. Директорията SOURCES съдържа компресиран изходен код за програмата. Генерираните пакети се поставят в директорията RPMS. По-точно се поставят в някоя от поддиректорите му, в коя - зависи от архитектурата. Пакетите, съдържащи програмни изходни текстове, се поставят в директорията SRPMS. Директорията SPECS съдържа файловете със спецификации. Обикновено спецификационният файл се нарича program-name-version-release.8res.
Например акоАко имате програмния източник в архива, от който искате да създадете RPM пакет, копирайте го в директорията SOURCES:
# cf source_code-1.0.tar.gz /usr/src/RPM/SOURCES.
По подразбиране RPM мениджърът работи с пакети, намиращи се в директория с име, което съответства на името и версията на пакета. За нашия порт пакет това ще бъде директорията port-1.0-99. Мениджърът на пакети ще компилира нашия пакет в директорията /usr/src/RPM/port-1.0-99.
Мисля, че това е достатъчно информация за RPM директориите. Сега да преминем към файла със спецификациите. Файлът на спецификацията се състои от четири сегмента: заглавен, подготвителен, файл, инсталационен. Заглавката съдържа обща информация за пакета. В листинг 19-1 сегментът на заглавката включва таговете Резюме, Име, Версия, Издание, Група и Лиценз. Няма да се спираме на тях, тъй като целта им е ясна от листинг 19.1.
Има и много полезен таг: BuildRoot. Той променя местоположението на дървото BUILD. Стойността по подразбиране е /usr/src/RPM или друга директория, указана от променливата на средата $RPM_BUILD_ROOT. За да спестите дисково пространство, е полезно да изтриете дървото %RPM_BUILD_ROOT след инсталирането. Но това дърво по подразбиране може да съдържа други файлове, свързани с други пакети. Следователно, първо, използвайки маркера BuildRoot, трябва да зададете някаква временна директория и след инсталирането да я изтриете.
Всеки сегмент съдържа макроси. С някои вече сме запознати - това са % описание, % файлове, % doc, % инсталация. В табл. Вижте 19.34 за пълно описание на макросите.
Таблица на макроси 19.34
%описание | Пълно описание на пакета |
% преп | Подготовка на архив. Ето командите за извличане на изходния текстпрограма и нейното разопаковане, допълнителна подготовка на изходния текст. Макросът %prep е последван от редовни команди на обвивката. |
%настройвам | Макро команда за извличане на файлове от архиви. Опцията -n ви позволява да посочите директорията, в която ще бъде създаден новият пакет. Обикновено архивът, намиращ се в директорията SOURCES, се разопакова в директорията BUILD |
% изграждане | компилационен макрос. Това обикновено е мястото, където make се изпълнява с необходимите опции. |
% файлове | Указва списък с файлове, включени в пакета. Когато посочвате имена на файлове, трябва да се посочи пълният път, а не относителен път. Можете да използвате променливата на средата $RPM_BUILD_ROOT, за да посочите пълния път. Необходимите файлове трябва вече да са поставени в директорията BUILD. Това може да се постигне с макроса %setup или с макроса %pre (вижте по-долу) |
%config списък | Указва списък с файлове, които да бъдат поставени в директорията /etc |
%doc списък | Указва списък с файлове, които да бъдат поставени в директорията /usr/doc/[package]–[ver]–[release] |
%Инсталирай | Етап на инсталиране на софтуер. Тук трябва да напишете командите, които ще инсталират файловете, включени в пакета. По-удобно е да използвате командата за инсталиране, която използвах в листинг 19.1 |
%пред | Действия, които трябва да бъдат извършени преди инсталирането на пакета |
%пост | Действия, които трябва да бъдат извършени след инсталиране на пакета |
%preun | Стъпки, които трябва да предприемете, преди да деинсталирате пакет |
%postun | Действия, които трябва да се предприемат след деинсталиране на пакета |
% чист | Премахване на дървото BUILD. Използва се вместо опцията -clean на програмата rpm.Обикновено съдържа една команда: rm –rf $RPM_BUILD_ROOT |
Трябва да се направи малка бележка относно макросите %config и %doc. В този случай списъкът е указан различно от макроса %files. Докато макросът %files може просто да бъде последван от един файл на ред, в макроса %doc всеки файл (или списък) трябва да бъде предшестван от командата %doc. Например:
%doc README TODO Промени
Още веднъж отбелязвам, че наличието на всички макроси в спецификационния файл не е задължително.
Когато създавахме пакета, използвахме опцията -bb на програмата rpm. Ако зададете тази опция, се създава само двоичният RPM пакет, ако искате да създадете и пакет, съдържащ изходния код на програмата, използвайте опцията -ba. Генерираният пакет се поставя в директорията SRPMS и ще бъде наречен port-1.0-99.src.rpm. Тоест, вместо името на архитектурата, ще бъде посочено, че този пакет съдържа изходния код на програмата. За да създадете такъв пакет, изходният код на програмата трябва да бъде в директорията SOURCES.
За да завършим картината, остава да разгледаме опциите на rpm manager, които се използват за създаване на пакети (вижте Таблица 19.35).