от Курс за ССОК
Така наречените пакети в Линукс са механизъм за разпространение и обновяване на софтуер в дадена дистрибуция. В тази тема ще опишем нагледно каква е ролята на собственика на пакети и какво стой зад нея.
Роля на собственика на пакети
Собственик на пакети (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
Създаване на пакета
- Създаваме архив съдържащ изходния код на примера
tar -czvf fosscourse-example-0.1.tar.gz fosscourse-example.spec README
- Копираме изходния код в директорията по подразбиране, където
rpmbuild ще го търси
cp fosscourse-example-0.1.tar.gz /usr/src/redhat/SOURCES/
- Извикваме
rpmbuild с параметър .spec файла
rpmbuild -ba fosscourse-example.spec
- Новият rpm пакет се намира в /usr/src/redhat/RPMS/noarch/
- В /usr/src/redhat/SRPMS/ се намира и специален rpm пакет, наречен source rpm. Той съдържа изходния код и .spec файла и се използва, за да се пресъздаде rpm пакета по всяко време.
Внимание
Никога не създавайте пакети като потребител root. Променете правата за запис на /usr/src/redhat, за да можете да работите като обикновен потребител.
Забележка
Разгледайте съдържанието на /usr/src/redhat/!
Инсталиране, проверка, премахване
- Инсталиране на пакета (като root)
rpm -ihv fosscourse-example-0.1-1.noarch.rpm
- Проверка на инсталацията
rpm -q fosscourse-example
rpm -ql fosscourse-example
- Премахване (като root)
rpm -ev fosscourse-example
Koji
Koji е системата за автоматизирано създаване на пакети във Федора. Koji притежава следните черти:
- изтегля изходния код от хранилището преди да създаде пакет
- разпределя работата между наличните машини (builders)
- използва make и Makefile
- предоставя уеб интерфейс и статистики
- предоставя команден интерфейс
- пакетите имат определени етикети, като етикетите се наследяват
Koji се използва за всички пакети налични в дистрибуцията Федора. Собственикът на пакет е необходимо да стартира задача за компилиране (build job), без да чака нейното завършване.
За повече информация:
Връзки