Hlavní navigace

Solaris Packaging - jednoduchý návod

Peter Ronai

Robíte s Linuxom nejakú dobu a chcete skúsiť niečo nové. Skúsite Solaris a zistíte, že niektoré veci su predsalen odlišné. Tak napríklad packaging je vec, ktorej sa skusený správca tažko vyhne. Vec pomerne jednoduchá a neproblémová, ale pre našinca nová, iná. Cielom tohoto článku je popísať, ako tvoriť pkg file na Solarise.

Predpokladané auditórium sa skladá z ľudí pochopivších jadro problematiky ako takej (Pre-requisites: Správa balíčků s RPM I a II).

Pre linuxáka, ktorý by chcel skúsiť niečo nové, je Solaris x86 pomerne dostupným riešením. Je množstvo vecí, ktoré fungujú na Solarise podobne alebo rovnako (SCO potvrdí ;-) ). Oba systémy vychádzajú zo spoločných základov správania sa a implementácie, majú však za sebou oddelený vývoj a rozličný backround. Z toho potom vyplýva rozličné riešenie podobných problémov.

Iste mi dáte za pravdu, že make install na prehľadnosti nainštalovaných vecí nepridá. Na riešenie tohoto problému existuje packaging. Nebudeme zabiehať do pripodrobných historických detailov, ale je vhodné spomenúť, že Solaris používa sys V packaging. Na rozdiel od na Linuxe mne známeho rpm sa balík robí až z existujúcich bináriek a teda je predovšetkým na tvorcovi balíka, aby izoloval komponenty do oddeleného adresára a vytvoril všetky náležitosti v oddelenom adresári. Skúsený užitateľ iste vtipne poznamená paralelu s BSD. Predpokladajme teda, že túto záležitosť sme elegantne zvládli (zopar trikov si popíšeme neskôr). Je treba vytvoriť pomyslenú dátovú štruktúru na systéme v oddelenom adresári a táto bude zachovaná v balíku ako takom. Sú balíky, ktoré majú presné umiestnenie a zmena tohoto umiestnenia by im škodila, sú iné, ktoré zmenu znesú. Vychádzajúc z podmienok, ktoré nám aplikácia dovoľuje vytvoríme do adresárovej hĺbky čo najkratšiu štruktúru, ktorá musí zostať nemenná. Neskôr do konfiguračného súboru pridáme predponu ako default path (=východiskovú lokáciu) pre strom dát, ktorý sme vytvorili. Tento postup môže byť z rôznych dôvodov nepohodlný až nemožný, a tak máme tiež možnosť použiť existujúce štruktúry z nainštalovaných programov (napr. pokiaľ sme použili make install) prípadne môžeme premapúvať existujúce súbory v konfigurácii.

Predpokladám teda, že máme balík pripravený na zabalenie (t.j. máme binárky v separátnom strome alebo vieme, kde na systéme presne sú), musíme ho však opatriť potrebnými informáciami. Na toto slúžia súbory pkginfo a prototype.
Súbor pkginfo je v podstate veľmi jednoduchý súbor popisujúci balík ako taký. Jeho syntax sa skladá zo súboru premenných a ich hodnôt.

PKG = Názov balíka (napr SUNWlibC)
NAME = Názov, zvyčajne sa zhoduje s DESC
ARCH = Architektúra, pre väčšinu čitatelov i386
VERSION = Verzia
CATEGORY = Kategória je povinná, zvyčajne sa
  sem dáva application ako default
VENDOR = Kto napísal software
EMAIL = E-mail
DESC = Popis, zvyčajne sa zhoduje s NAME
PSTAMP = Značka toho kto balík balil
BASEDIR = prefix kde sa má balík defaultne nainštalovať
CLASSES = pre nás stačí dať none*

* možnosť profilovať balík na jednotlivé classy, ktore majú postupnosť pri instálacii – ocení, kto chce urobiť balík z oracle klienta, viac o classoch sun tutorial.

Ako príklad si zoberme tento jednoduchý pkginfo súbor:

PKG="PRONglib"
NAME="Glib, basic library needed by Gnome"
ARCH="i386"
VERSION="2.2.1"
CATEGORY="application"
VENDOR="GNU"
EMAIL="support@domena.com"
DESC="Glib, basic library needed by Gnome"
PSTAMP="Dzony"
BASEDIR="/usr/local"
CLASSES="none"

Samozrejme toto nie sú všetky prípustné parametre, pre tvorbu jednoduchého balíka však postačia.

Keď máme pkginfo vytvoríme si ešte prototype. Na to slúži utilitka pkgproto, ktorá očakáva na vstupe cestu k súboru a na výstupe vypisuje typ, triedu (none), cestu, chmod a vlastníka súboru. Tento výstup presmerujeme do súboru prototype. Na vrch pridáme riadok s informáciou kde je pkginfo a nutné podmienky pre balík sme splnili.

i pkginfo=./pkginfo
f none booklist.txt 0644 bin bin
d none books 0755 bin bin
d none books/ABOUTDOC 0755 bin bin
d none books/ABOUTDOC/ebt 0755 bin bin
f none books/ABOUTDOC/ebt/ABOUTDOC.dat 0644 bin bin
f none books/ABOUTDOC/ebt/ABOUTDOC.edr 0644 bin bin
f none books/ABOUTDOC/ebt/ABOUTDOC.tag 0644 bin bin
s none books/ABOUTDOC/ebt/search.tdr=./toc.tdr
f none books/ABOUTDOC/ebt/toc.tdr 0644 bin bin
d none books/ABOUTDOC/index 0755 bin bin
f none books/ABOUTDOC/index/index.dat 0644 bin bin
f none books/ABOUTDOC/index/vocab.dat 0644 bin bin
f none books/ABOUTDOC/styles.ent 0644 bin bin

Keď sa pozrieme bližšie na prvý riadok výpisu, všimneme si ze súbor pkginfo je naznačený inou syntaxou ako ostatné súbory. Je logické, že popis práv nie je nutný keďže pkginfo nie je priamo obsiahnutý v balíku. Namiesto toho je tam = a cesta. Toto je spôsob, ako premapovať do balíka súbory, ktore chceme mať v balíku na inom mieste, ako sú momentálne, resp. nachádzajú sa inde na fs.

Samozrejme je možné tiež použiť závislosti, pred a po inštalačné a deinštalačné skripty atď. Keďže je okolo toho celá exaktná veda, doporučím vybrať si len to, čo vás zaujíma a nájdete to na docs.sun.com.

Predpokladajme, že (tí najsnaživejší už prečítali Originálny návod a píšu obsiahlu kritiku na môj článok) sme teda pridali všetky info súbory, ktore sme chceli. V tom prípade nám zostáva už len vytvoria balík pkgmk -r`pwd`; cd /var/spool/pkg; pkgtrans -s `pwd` /export/pkgrepos/glib-2.2.1-intel. pkgmk pridá k súborom checksumy a celý content zabalí a „spoolne“ (spravte si pkginfo -d/var/spool/pkg -l a pozrite sa na status). Balíky na inštalačnom CD solarisu sú v takejto forme. Pokial je nám bližšia možnosť uschovať balíky do pkg súboru, použijeme príkaz pkgtrans.

Keď som hovoril na začiatku článku o trikoch, podviedol som vás. Okrem best practises, tak ako pri rpm, nie sú žiadne triky, ktoré vytiahnem ako čarodejník z rukáva. Možete si myslím ale ušetriť kopec námahy, ak pomyslíte na nasledujúcich pár bodov.
Neexistuje žiadna zaručená metóda na zistenie polohy súborov po make install, ale mnoho ľudí, keď nie je možné spraviť make prefix=$PATH2inst install používa chroot. To je však vhodné len ak robíte väčšie množstvo balíkov pretože chroot prostredie treba vytvoriť (libky, základné binárky atd.). Pokiaľ kompilujete balík na Solarise, skúste si aspoň trial verziu Forte Compilera, Sun kompiluje všetko ním a C++ závislosť na kompileri nám je všetkým známa. Solaris je záludný mnohými neuvedenými PATH a teda pre správnu kompiláciu budete musieť zmeniť niekoľko systémových premenných. Myslite potom na stav systému, ako je v okamihu kompilácie a aký môže byť v okamihu inštalácie, je ľahko možné, že bude treba zmeniť systémový LD_LIBRARY_PATH cez crle, nastaviť PATH a pod. Používajte postinstall skripty. Dajte si pozor na ownera súborov pred vytvorením súboru prototype, pretože nechcete inštalovať do /usr ako user jano. Neuvádzajte sharované adresáre do vlastníctva packagu – znamená to zmenu atribútov pri inštalácii, čo nie je vždy vhodné.

Dalšie zdroje informácií:

Rýchly tutorial na www.sunfreewa­re.com/pkgadd­.html
Tutorial na docs.sun.com/db/doc/­806–7008

Našli jste v článku chybu?