Tentokrat se budu odvolavat na predchozi email (cast 1, OS) protoze cast veci je podobna az shodna.
Hruba osnova. C) Zacneme od "repository" - to je "bezny" pocitac s instalaci metodou "kompilace ze zdrojaku" a zdrojovymi kody udrzovanymi metodou 'svn'. C.1) porizeni a udrzba stromu portu Udrzba samotneho stromu portu je natolik podobna udrzbe /usr/src, ze ji samostatne nebudu popisovat, prectete si A, A.1, A.1.* a aplikujte primerene. Jako zdroj pouzivam https://svn0.eu.freebsd.org/ports/head Po aktualizaci stromu nezapomenout na 'make index' JE TREBA si precist /usr/ports/UPDATINGS C.2) Obecne problemy udrzby portu Pouzivam 'portupgrade' Zakladni problem je nemoznost prelozit port dvakrat s ruznymi optiony. Zatim tento problem u me nikdy nevyustil v neresitelny problem, byt' to v nekterych pripadech znamena, ze na konkretnim stroji mam port zkompilovany s vetsim zaberem, nez by bylo v danem pripade bezpodminecne nutne. Sekundarni problem je nemoznost udrzovat na jednim systemu vzajemne se vylucujici portu. Proste nemuzete mit soucasne MySQL verze 5.5 a 5.6 Tercialni problem je vzajemna konzistence portu. Upgrade nekterych portu vyzaduje predchozi upgrade portu na kterych zavisi. Upgrade nekterych portu vynucuje upgrade portu, ktere na nich zavisi. Je prakticky nemozne spolehlive rozpoznat, kdy je nutne upgradovat zavisle nebo zavisejici portu. Instrukce v UPDATING je nutne nasledovat, nejsou tam vsak uvedeny zdaleka vsechny konsekvence te ci one zmeny. C.2.a) To vede k nasledujicicm zasadam: System je nainstalovany jako celek a jako takovy ho je treba udrzovat. Pokud se do stabilniho systemu zasahuje, je treba to chapat jako zasah do celku jehoz vysledek ma byt zase funkcni celek. Zapomente na izolovane upgrady/instalace jednotlivych portu. Jestlize potrebuju aktualizovat/instalovat modul php5-openssl a v aktualnim stromu je verze php5-openssl-5.4.25, ale na stroji na kterem to chci aktualizovat je php5-5.4.24 tak proste musim jako soucast manipulace s timto jednim portem zaktualizovat vsechno co s tim jakkoliv souvisi. V tomto konkretnim pripade muze jit nejen o samo PHP5, ale treba i OpenSSL (pokud se v portech zmenilo a porty jsou prelozeny proti portovemu OpenSSL) nebo Apache. A jestli budete instalovat php5-mysqli-5.4.25 ktery v repository prekladate za pritomnosti MySQL 5.6 a stroj na kterem to pridavate ma na sobe MySQL 5.5 tak roste musite nejprve zaktualizovat MySQL 5.5 na 5.6 Obdobna vazba plati k verzi OS jako takovem. Pokud porty prekladam na 8.3-R-p7 tak neni dobry napad hotove package instalovat na 8.3-R-p2 a vyslovene spatny napad je instalovat je na jakoukoliv 8.2-R Muzu to rict taky obracene. Jestlize na nekterem stroji nemuzete aktualizovat nektery konkretni port a cely operacni system, pak na tomto stroji nemuzete zaktualizovat ani doinstalovat proste nic. System je celek a bud' aktualizuju celek nebo nic. Pokud po ne nekdo chce instalaci noveho portu, automaticky to znamena update OS i vsech portu na aktualni posledni verzi. Howgh. Muzete se zkusit od teto zasady odchylit. V konkretnich pripadech to nemusi mit zadne nasledky. Upozornuju pouze, ze nekonzistence mezi programy a dynamickymi knihovnami pripadne mezi knihovnami navzajem mohou byt zdrojem velmi nedeterministickych a velice spatne analyzivatelnych problemu. Byli jste varovani. Ano, jsem si naprosto vedom, ze to znamena pomerne znacnou unifikaci tech stroju. Bud' mam vsude MySQL 5.0 a na 5.6 neprechazim nikde nebo mam vsude 5.6 a nikde nemuze zustavat 5.0 (samozrejme muze, ale jen pokud se na ten system opravdu nesaha a nic noveho se tam neinstaluje). Ale cely tenhle system je o prave schopnosti spravovat efektivne velke mnozstvi stroju a zvolenou metodou je centralizovany server. Pokud vam to nevyhovuje a potrebujete mit kazdy stroj konfiguracne soliterni, pak tato metoda neni pro vas a reste porty na kazdem takovem stroji samostatne. C.2.b) prekladaci optiony Na FreeBSD je prilis mnoho metod kam se daji napsat optiony pouzivane pro preklad portu. make.conf, 'config' subsystem systemy portu, v pripade pouziti portupgrade take pkgtools.conf Je bezpodminecne nutne v tom udrzet poradek. Nedoporucuju pouzivat vic zpusobu soucasne. make.conf je prilis globalni a obtizne zacilitelny na jednotlive konkretni porty (ne, ze by to neslo uplne) 'config' je prilis malo pod vasi kontrolou - se zmene verze portu muze kdykoliv dojit ke zmenam, ktere jsou v tomhle pripade spatne vitelne. Ja mam optiony vyhradne v pkgtools.conf. Muzete se podivat: > http://www.freebsd.cz/~dan/pkgtools.conf Soubor obsahuje nekolik triku, napriklad optiony pouzite u prekladu jakehokoliv portu zajistujici, ze se me to nebude explicitne ptat zda souhlasim s licenci a zejmena, ze se me to nebude ptat s jakymi optiony to chci prelozit (a dokocne si to pak nekam ukladat a pouzivat to priste). C.3) Preklad portu ze zdrojaku Pridani noveho portu je otazkou portupgrade -pN x/y To 'p' je tam proto, aby mi na zaver vytvoril package, ktere budeme potrebovat pro instalace na jine pocitace. Pred prekladem noveho portu doporiucuju prohlednout jake ma optiony a primerene tomu upravit pkgtools.conf. NESPOLEHEJTE na defaulty a piste tam i defaultni hodnoty, protoze defaulty se mohou kdykoliv zmenit, kdezto to co jste si explicitne napsali do konfigurace zustava. Uz dost na tom, ze i tak mohou optiony pribyvat, mizet nebo se prejmenovavat. Podivejte se take na porty na kterych dany port zavisi a pokud je v systemu jeste nemate pak i u nich se stoji za to podivat na optiony. C.4) Vlastni patche portu Tomu, s dovolenim, venuji samostatny mail. C.5) export s pouzitim NFS Viz podobna kapitola v mailu venovanemu OS C.6) Verifikace C.6.a) Konzistence binaru a knihoven Pokud nebudete po kazde zmene prekompilovavat vsechny porty ale jen nektere (coz uspori ohromne mnozstvi casu) nelze se proste vyhnout obcasnym nekonzistencim. Pro verifikaci, ze se v systemu nenachazeji binary zavisejici na neexistujicich knihovnach pouzivam nasledujici slozeny prikaz, ktery "neuspokojene" binary vypise: > rm /usr/local/lib/compat/pkg/* 2>/dev/null ; find /bin /sbin /lib /usr/bin > /usr/sbin /usr/lib /usr/libexec /usr/local/lib /usr/local/bin /usr/local/sbin > /usr/local/libexec -type f | ( LD_LIBRARY_PATH="$( ldconfig -r | sed -n 's/^ > *search directories: *//p' > ):/usr/local/lib/libreoffice/ure/lib:/usr/local/lib/seamonkey" ; export > LD_LIBRARY_PATH ; xargs ldd 2>/dev/null ) | sed > '/^\//{h;d;};G;s/^\(.*\)\n\(.*\)/\2\1/' | grep -E "not found|/compat/pkg/" | > cut -d: -f1 | sort -u Zjistene nekonzistence je treba vyresit - zjistit do jakeho portu postizeny binar patri a takovy port znovu prelozit. Znovu verifikovat system. Opakovat tak dlouho, dokud kontrolni prikaz nachazi problemy. C.6.b) Kontrola aktualnosti balicku Obcas se port prelozi, ale nevytvori se balicek (stava se zejmena pokud se prekladal implicitne jako zavislost). Obcas balicek zastara ne proto, ze zastaral samotny port, ale proto, ze se zmenila verze nektere zavislosti (pak to pri instalaci hlasi, ze balicek zavisi na necem starsim nez co v systemu je). Vytvoreni chybejicich balicku a prebaleni balicku po zmene zavislosti provadi nasledujici prikaz: > for i in /var/db/pkg/* ; do i=`basename "$i"` ; [ -f > "/var/db/pkg/$i/+CONTENTS" ] || continue ; if [ ! -r > "/usr/ports/packages/All/$i.tbz" -o "/var/db/pkg/$i/+CONTENTS" -nt > "/usr/ports/packages/All/$i.tbz" ] ; then pkg_create -vb "$i" > "/usr/ports/packages/All/$i.tbz" ; fi ; done ; portsclean -PD ANO, jsem si vedom, ze tohle funguje pouze na puvodnim balickovacim frameworku (zadne pkgng). --------------- Tak - ted tedy mame pouzitelne centralni repozitory portu. K cemu nam to je ? D) Aktulizace konkretniho stroje z centralniho repository mount_nfs -o tcp name.of.repository.cz:/usr/ports /usr/ports Alternativne si muzeme cesty napsat do /etc/fstab takze od priste bude stacit prosty mount /usr/ports: /etc/fstab: > name.of.repository.cz:/usr/ports /usr/ports nfs tcp,ro,noauto > 0 0 Samotny upgrade se pak provadi pomoci portupgrade -aPP Pritom je treba zohlednit z informace z /usr/ports/UPDATING I zde je riziko nekonzistence binaru a knihoven, takze doporucuju aplikovat postu popsany v C.6.a -------------------------------------------------------------------- Pokud je ten-ktery bod nejasny, nebo nejaky zcela chybi, ptejte se. Tak - to mame udrzbu portu na centralnim repository a update z nej na jinych strojich. Nemame vlastni patche (pro OS ani porty) a nemame vlastni cele porty. Saga pokracuje ... Dan -- FreeBSD mailing list ([email protected]) http://www.freebsd.cz/listserv/listinfo/users-l
