facebook LinkedIn
Google Book Search
Прегледи

Създаване на пакети. Въведение в RPM и Koji

от Курс за ССОК

Така наречените пакети в Линукс са механизъм за разпространение и обновяване на софтуер в дадена дистрибуция. В тази тема ще опишем нагледно каква е ролята на собственика на пакети и какво стой зад нея.

Съдържание

Роля на собственика на пакети

Собственик на пакети (package owner) е човек, който се грижи за предоставянето на пакети готови за инсталация. Това много често е самият разработчик на софтуера, но не е задължително. В редки случаи е необходимо перфектното познаване на технологиите или програмните езици, използвани в софтуера. Във всички случаи обаче е нужно добро познаване на пакетиращата система, използвана от дистрибуцията и указанията за създаване на пакети.

При всяко излизане на нова версия на софтуера, той трябва да бъде пакетиран и направен достъпен за потребителите на операционната система. В някои случай се налага и поправянето на грешки, причинени от самия инсталационен пакет, а не от софтуера в него.

Какво да пакетираме

Отговора на този въпрос зависи от доста неща, но най-кратко би звучал така:
Софтуер, който използваме, но не е наличен от операционната система.

Част от собствениците на пакети са потребители със технически познания, които просто имат нужда от дадения софтуер. За изчерпателен списък с предложения за пакетиране погледнете списъка на вашата ОС. За Федора този списък е достъпен на:
http://fedoraproject.org/wiki/PackageMaintainers/WishList

Независимо от мотивацията за избор на софтуер или съдържание за пакетиране ще се налага да отделяте време на тази дейност. Това означава, че други хора ще инсталират и използват софтуера, ще намират грешки или неточности и вие ще бъдете един от първите хора, който ще научават за тях.

RPM

RPM е файлов формат и съвкупност от библиотеки и помощни програми за работа с инсталационни пакети. Той е широко използван в много дистрибуции и е сертифициран от LSB.

Ще покажем с кратък пример създаването на rpm пакет и инсталирането му на операционната система. Подробна информация за възможностите на rpm може да бъде намерена във връзките в края на темата.

Стъпките за други видове пакети са подобни, но за подробна информация се обърнете към документацията на вашата ОС.

.spec файлът

RPM използва файлове с разширение .spec, в които се съдържа информация за създаването на пакета. Системата изхожда от концепта за първичен изходен код(pristine source), т.е. код, от който с модификации, може да се възпроизведе софтуера. Това гарантира, че всеки път създадения пакет ще бъде един и същ.

Ще създадем примерен пакет с име fosscourse-example, съдържащ README файл и съответния .spec файл.

fosscourse-example.spec изглежда така:

Summary: Примерен rpm пакет
Name: fosscourse-example
Version: 0.1
Release: 1
Source: %{name}-%{version}.tar.gz
License: GPL
Group: Examples
URL: http://fosscourse.org
BuildRoot:  %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
BuildArch: noarch

%description                                             
Примерен rpm пакет от Курс за ССОК.

%prep
%setup -c

#%build
#make build

%install
/usr/bin/install -d %{buildroot}/usr/share/%{name}
/usr/bin/install -m 644 README %{buildroot}/usr/share/%{name}
/usr/bin/install -m 644 %{name}.spec %{buildroot}/usr/share/%{name}

%clean
rm -rf %{buildroot}

%files
%defattr(-,root,root)
/usr/share/%{name}/README
/usr/share/%{name}/%{name}.spec

%changelog
* Mon Jun 23 2008 Александър Тодоров <alexx.todorov@NO_SPAM.gmail.com>
- Първа версия

Обърнете внимание на секциите с имена build, install, clean. Тези секции управляват процеса на създаване на пакета от изходния код. Секцията build е закоментиране, т.к. не е необходима тук.

От нея също се вижда, че може да се използва Makefile, даже това е препоръчително. Използването на Makefile е добра програмистка практика и води до четлив .spec файл и лесно отстраняване на грешки. Пример за широко използване на Makefile, включително за създаване на rpm пакет, може да бъде видян на: http://openfmi.net/plugins/scmsvn/cgi-bin/viewcvs.cgi/?root=olpc

или

svn checkout https://svn.openfmi.net/olpc

Създаване на пакета

  1. Създаваме архив съдържащ изходния код на примера
    tar -czvf fosscourse-example-0.1.tar.gz fosscourse-example.spec README
  2. Копираме изходния код в директорията по подразбиране, където rpmbuild ще го търси
    cp fosscourse-example-0.1.tar.gz /usr/src/redhat/SOURCES/
  3. Извикваме rpmbuild с параметър .spec файла
    rpmbuild -ba fosscourse-example.spec
  4. Новият rpm пакет се намира в /usr/src/redhat/RPMS/noarch/
  5. В /usr/src/redhat/SRPMS/ се намира и специален rpm пакет, наречен source rpm. Той съдържа изходния код и .spec файла и се използва, за да се пресъздаде rpm пакета по всяко време.

Внимание
Никога не създавайте пакети като потребител root. Променете правата за запис на /usr/src/redhat, за да можете да работите като обикновен потребител.

Забележка
Разгледайте съдържанието на /usr/src/redhat/!

Инсталиране, проверка, премахване

  1. Инсталиране на пакета (като root)
    rpm -ihv fosscourse-example-0.1-1.noarch.rpm
  2. Проверка на инсталацията
    rpm -q fosscourse-example
    rpm -ql fosscourse-example
  3. Премахване (като root)
    rpm -ev fosscourse-example

Koji

Koji е системата за автоматизирано създаване на пакети във Федора. Koji притежава следните черти:

  • изтегля изходния код от хранилището преди да създаде пакет
  • разпределя работата между наличните машини (builders)
  • използва make и Makefile
  • предоставя уеб интерфейс и статистики
  • предоставя команден интерфейс
  • пакетите имат определени етикети, като етикетите се наследяват

Koji се използва за всички пакети налични в дистрибуцията Федора. Собственикът на пакет е необходимо да стартира задача за компилиране (build job), без да чака нейното завършване.

За повече информация:

Връзки

Локални линукс групи RSS
Дискусии