[BSD] corrupted ports tree?

Laszlo Nagy gandalf at designaproduct.biz
2006. Nov. 30., Cs, 20:48:27 CET


> 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 :-)
>   
Na ezt nem tudtam! Akkor most lehet hogy ez lesz:

pkg_delete -a
rm -fr /usr/ports
rm -fr /var/db/pkg

aztán kezdek mindent előről. Szép kis munka lesz. :-) Még szerencse hogy 
egy gyors gépről van szó.
> 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.
>   
Reméltem, hogy mivel 6.1-RELEASE rendszerem van, ezért a 6.1-RELEASE-hez 
tartozó ports tree-t fogja majd használni. De most már kezdem látni a 
ports tree-től az erdőt. :-) Egyetlen ports tree van!

> 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.
>   
Valahogy mégis megoldják, hogy a magasabb verziót elfogadja, ilyenkor 
csak warning-ot ad. Szóval a csomag nevétől a verziója különbözik, és 
külön is van tárolva.

> 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.
>   
Na itt a bökkenő. Feltéve hogy csak egy ports tree van (tehát nincs 
külön 6.1-hez és 6.2-höz), és feltéve hogy egy átlag user nem tud 
mindent port-ból fordítani, bátran kijelenthetjük hogy a ports tree 
állandóan egy "átmeneti" állapotban van, és lehetnek benne 
megoldhatatlan problémák. Amiket eddig leírtál abból az következik, hogy 
a csomagok és a portok együttes használata egy katyvalék, és el kell 
kerülni. Mondjuk ezt így még nem láttam leírva. Sőt! A portupgrade-nek 
van -P kapcsolója ami arra enged következtetni, hogy mások is szokták 
keverni a csomagokat és a portokat.  A manual ezt írja:

   -P
     --use-packages         Use packages instead of ports whenever 
available.
                            portupgrade searches the local directories 
listed
                            in PKG_PATH for each package to install or 
upgrade
                            the current installation with, and if none is
                            found, pkg_fetch(1) is invoked to fetch one 
from a
                            remote site.  If it doesn't work either, the 
port
                            is used.

Csakhogy alapból nincsen beállítva PKG_PATH, és azt "elfelejtették" 
odaírni, hogy ilyenkor a csomagot letölti a freebsd.org-ról. Azt is 
elfelejtették beleírni, hogy ez összezagyválja az egész rendszert. :-(

> 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. 
Na ez azért így nem igaz. Az .so (shared object) állomány egyáltalán 
nincsen linkelve semmihez. :-) Ami meg nem shared az statikus, tehát ha 
statikusan linkeled a könyvtárat egy bináris programhoz, akkor az a 
program egyáltalán nem fog függeni az adott könyvtártól (mivel már 
tartalmazza a megfelelő verziót).

Aláírom, ha package-ből teszel föl a statikusan linkelhető könyvtárat, 
és port-ból fordítassz hozzá egy programot ami használni akarja, akkor 
igaz amit mondtál. De ez akkor már nem a ports tree problémája, hanem a 
szoftver problémája. Példa: régen a  mod_python az apache1-től függött. 
Nekem ugyan apache2 volt fönt, de föl tudtam rakni a mod_python-t 
portból. Hogy miért? Azért mert a mod_python build elején van egy 
configure script, ami jól kitalálta hogy nekem apache2 van, és az egész 
szépen lefordult. Persze ha valaki úgy írja meg egy szoftver forrását, 
hogy az kizárólag a 2.2 verzióval megy, akkor attól elvárható hogy a 2.2 
verziót linkelje, igaz? De általában nem ez a helyzet. Általában az van, 
hogy a programok egyszerre többféle verzióval is működőképesek, és a 
configure script megtalálja hogy neked milyen verzió van.
> 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.
>   
Nem tipikus, viszont elkerülhetetlen. Megnézném hogy egy P2 gépen ki az 
a marha, aki openoffice.org-ot fordít. Eltarhat neki egy hétig (ha 
egyáltalán sikerül). És mivel elkerülhetetlen, és mivel a ports tree nem 
működhet együtt gond nélkül a bináris csomagokkal, ezért azt is 
kijelenthetjük, hogy az egész ports tree rendszer nem működhet gond 
nélkül. :-(

   Laci





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