freebsd-update -r 9.2-RELEASE upgrade - cast 2, porty

Dan Lukes dan at obluda.cz
Fri Mar 7 00:25:57 CET 2014


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



More information about the Users-l mailing list