[BSD] corrupted ports tree?

Adam Szilveszter sziszi at bsd.hu
2006. Nov. 30., Cs, 20:07:09 CET


On Thu, Nov 30, 2006 at 06:20:45PM +0100, Laszlo Nagy wrote:
> 
> > Hm. A package-k, amiket használnál sajnos amúgy is eléggé régiek (a
> > 6.1-release-hez valók ha az URL-ből jól látom) ami miatt később lehet,
> > hogy úgy is szinte kompletten le kellene gyalulnod mindent, ami a
> > gtk-t/glibet használja, mert az a nagy váltás, amire célozgattam pár
> > levéllel ezelőtt és ami az /usr/ports/UPDATING-ban van leírva, a 6.1
> > után történt meg és a 6.2-höz készült csomagokban lesz majd benne.
> OK, akkor viszont a kernelt meg minden mást is 6.2-re kell előtte 
> upgrade-elnem. Azt meg nem akarom, mert ezt a gépet sokan használják, és 
> a 6.2 az még csak release candidate, ugye?

Igen, az még csak RC. De jó hír, hogy nem kell az alaprendszert
upgradelned ahhoz, hogy az RC csomagjait használhasd, csak a pkg_add-nak
meg kell mondani, hogy hol keresse a cuccot :-)

> Egyébként sem értem, hogy ha a 6.1-hez teszek föl csomagokat (a portsnap 
> is onnan töltötte le a ports tree-t) akkor miért tesz föl olyan libet 
> ami csak 6.2-vel működik?

Hm. Nem ismerem eléggé a portsnap-et, de én úgy tudom, hogy amellett,
hogy le lehet vele szedni és extract-olni egy ports fa snapshotot,
amellett upgradelni is lehet vele a ports fát. Ha ezt teszed, akkor
viszont már nem a 6.1-es ports fája lesz meg, hanem a legújabb, ami most
már lassan a 6.2-é lesz.

> Szerintem (de nyilván nincs igazam) az lenne a 
> normális, ha a 6.1 Latest-ben olyan binárisok lennének amik a 6.1-es 
> kernellel mennek; és ha nem mondom neki külön akkor azokat töltené le. 

Itt nem ezzel van a gond, a legtöbb bináris csont nélkül megy 6.1-en és
6.2-n is, nem a kernel változott. A kérdés csak az, hogy amikor
fordítasz egy portot és csinálsz belőle egy package-t, akkor ugye a
package tartalmazni fogja a függőségeit, mégpedig pontosan megjelölve a
függőség verziószámát is. Tehát nem simán azt, hogy kell neki a libz,
hanem, hogy neki mondjuk a libz-2.1.1_1 kell. Így ha neked akár a
libz-2.1.1_2 van, akár a libz_2.1.1_0, akkor a pkg_add -r szépen neki
fog állni feltenni a libz-2.1.1_1-t, és persze bebukja. Ez minden olyan
csomagkezelő rendszerben így van, ahol pontosan rögzítik a
dependenciákat.

> Ha meg valami miatt a gtk/glib legújabb verziója nem kompatibilis a 6.1 
> kernellel, akkor tessék őket szépen beletenni a 6.2 Latest csomagok 
> közé, a 6.1 csomagokat meg békén lehetne hagyni. Biztosan rosszul 
> gondolom, és szeretném megérteni hogy miért úgy van most, ahogy van. :-)

Itt sem a glib/gtk és a kernel kompatibilitásával van gond, csak
annyiról van szó, hogy a 6.1-hez még a Gnome 2.14.x volt mellékelve, a
6.2-höz már a 2.16.x lesz, ami azt jelenti, hogy minden érintett
könyvtár, így a glib/gtk verziója is ugrott, úgyhogy ha valaki csak
simán upgradel pl portupgrade-vel akkor is újra kell tennie őket
ilyenkor.

> Ez meg szerintem (nyilván megint nincs igazam) úgy lenne illdomos, hogy 
> mondjuk ezeket telepítené:
> 
> /usr/local/lib/libopenldap-client.2.2.so
> /usr/local/lib/libopenldap-client.2.3.so
> 
> és az éppen preferált verzió meg egy szimbólikus link lenne 
> valamelyikre. Mondjuk így:
> 
> /usr/local/lib/libopenldap-client.so -> 
> /usr/local/lib/libopenldap-client.2.3.so
> 
> Aztán ha egy program tudja magáról hogy ő bizony csak a 2.2-vel működik, 
> akkor azt tölti be. Ha meg nem tudja, akkor a verzió nélkülit (ami a 
> "preferált").

Ezt elvileg lehetne csinálni, de egyrészt minden állományt ugyanilyen
gondosan el kellene különíteni, másrészt bizony a fordításnál a linker
nem a libxxxx.so.6-ot keresi, hanem csak simán a libxxxx.so-t, és amire
éppen az mutat, azt fogja a binárishoz linkelni. Ezért a javasolt
megoldásod csak akkor működik, ha valaki csak kész binárisokat használ,
ami szerintem FreeBSD-n nem tipikus (a Linux terjesztésekkel
ellentétben) Máskülönben akkor használják, ha pl frissült egy library,
de a már meglevő alkalmazások még a régit használják, de bármi amit
fordítasz már ekkor is az újat kapja meg.

> Igaz hogy így néha több verzió is lenne a memóriában (max. kettő?), ez 
> viszont az összes package dependency problémát megoldaná. Nem 
> kerülhetnénk olyan helyzetbe, hogy A csomaghoz L1 kell, B csomaghoz L2 
> de L1 meg L2 kizárják egymást, ezért A és B csomagot nem teheted föl 
> egyszerre. Ráadásul mindezt úgy, hogy az legfrissebb official ports 
> tree-t használjuk! :-(

Nem a memória foglaltsággal van gond, hanem azzal, amit fentebb írtam:
csak akkor működik, ha mindig bináris package-ket használsz, és nem
fordítasz, de FreeBSD-n nem ez a tipikus használat.

Bővebben lásd a következő levelemet.

Sz.
-- 
BSD: An Operating System, Not a Religion.



További információk a(z) BSD levelezőlistáról