[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