Kérdéseim FreeBSD (7.x) csomagkezeléssel kapcsolatban

Fórumok

Lassan harmadjára futok neki a FreeBSD csomagkezelésének de még mindig van ami nem világos.
Ezeket a kérdéseimet ide fogom ömleszteni :)

Első kérdés:

Telepítettem egy FreeBSD 7.2 alaprendszert. sysinstall alól kiválasztottam néhány binárist, mert elsőre nem volt kedvem fordítani őket, pl Apache, PHP, Mysql, stb. Plusz telepítettem néhány csomagot még "pkg_add -r"-rel is.
Világos számomra, hogy ezek bináris package-ek és nem ports-ból vannak telepítve.

Most itt járok a kézikönyvben.
A freebsd-update sok mindent nem talált de ez most érthető is. Azonban a "portupgrade -af" az összes bináris csomagot (= pkg_info kimenete) újra akarja telepíteni! Gyanítom forrásból? A kérdés az lenne, hogy miért?

Since portupgrade allows you to upgrade your installed packages with-
out rebuilding and reinstalling dependent packages, upgraded packages
may occasionally cause binary incompatibilities. To cope with this
situation, use the -f, -r and -R options as necessary.

Ezt a részt értem, de ha jól látom, akkor ezek nem frissülő csomagok, hanem csak újratelepítené őket!

Második kérdés:
Van egy ilyen listám:

[root@bsd-test ~]# portversion -v | grep '<'
bash-4.0.17 < needs updating (port has 4.0.24)
gio-fam-backend-2.20.1 < needs updating (port has 2.20.2)
glib-2.20.1 < needs updating (port has 2.20.2)

Ezek pkg-ból települtek, gyanítom azért frissítené őket mert ports-ban van újabb??
Ezeket, hogy tudom frissíteni?

Harmadik kérdés

Negyedik kérdés

Hozzászólások

A két kérdés szerintem ugyanaz. A bináris csomagok régebbiek, mint a port-fa, ezért szeretne a portupgrade mindent frissíteni.

Akkor ezek szerint kettő forrásból is megnézi, hogy van-e frissítés?
Mi van akkor, ha egyáltalán nincs ports telepítve? Akkor hogyan frissíti azokat a csomagokat, amelyből nincs bináris?

Például muszáj volt felraknom a ports-t mert például screen csomag nincs binárisban. Bár ha belegondolok akkor ports nélkül ezeket fel se tudnám rakni? Na most megkavarodtam kicsit :)

--
\\-- blog --//

A portversion más forrásból néz, mint a portupgrade.
Ha nincs port telepítve, akkor a portversion nem tud verzióeltérést mondani, ha PKG_PATH beálítva, akkor a portupgrade nem tud frissíteni.

Igen, ha nincs portod, akkor nem tudsz olyan programot felrakni, amiből nincs bináris.

Akkor sorrendben ha jól értettem...

Ha eleresztem a portupgradet úgy, hogy "portupgrade -afP" akkor frissít amit tud binárisból, és ha valamit nem tud, akkor megpróbálja frissíteni a helyi ports fából? Ergo akkor célszerű a ports fát is relatíve naprakészen tartani, különben idővel a kettő eléggé "szétcsúszik" egymáshoz képest?

--
\\-- blog --//

Igen.

-P 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.

man portupgrade:

-f
--force Force the upgrade of a package even if it is to be a downgrade or just a reinstall of the same version, or the port is held by user using the HOLD_PKGS variable in pkgtools.conf.

Amiatt akar mindent újrainstalálni.

Ami neked kell az elmondásod alapján:
portupgrade -ar

Ez elvben mindent csomagot levfrissít függőségi sorrendben, de azokat amiknek nem változott a verziója békénhagyja.

vagy ha konkrét csomagot akarsz csak frissíteni:
portupgrade csomagnév
vagy
portupgrade -r csomagnév
Ez esetben az adott csomagot frissíti és azokat amik attól a csomagtól függenek.

Továbbá olvasd el a /usr/ports/UPDATING file-t néha frissítenek olyan csomagot aminek más az ajánlott frissítési menete olyankor ebbe a fileba beleírják.

Pepe

Az összes csomag frissítés "portupgrade -arR", ez a dependeket is frissíti.

Harmadik kérdés

Van-e valamilyen normálisabb keresési lehetőség az alábbiak helyett?


cd /usr/ports/ && make search name=bash
cd /usr/ports/ && make search key=bash

Lehetőleg valami olyan, ahol nem kell regexpet írni arra, ha az érdekel, hogy hívják az openoffice-t.
A pkg_which nem nagyon jött be.


> pkg_which openoffice
openoffice: not found

>pkg_which mc
mc-4.6.2

Szerk: látom a pkg_which nem arra való amire gondoltam. :(

--
\\-- blog --//

nah jó, tudom, hogy find, grep, less, more parancsokkal is elő lehet varázsolni :)
engem pont az érdekelne, hogy olyasmi létezik-e, mint pl. eix, emerge -s, aptitude search, stb.
ne kelljen egysoros bash scriptet írni arra, hogy mi a rák a neve az openoffice-nak.

--
\\-- blog --//

Tekintettel arra az apróságra, hogy lehetnek olyan emberek is, akik nem, vagy nem ebben az évezredben használtak (utoljára) Debian-t, Gentoo-t, stb - jó lenne ha megfogalmaznád, hogy mit szeretnél.

Ha fenn van az a rohadt OOo, akkor pl:

$ pkg_info -ox openoffice
Information for hu-openoffice.org-3.1.0:

Origin:
editors/openoffice.org-3

Ha nincs fenn, akkor pedig elégedj meg a make search -csel, és használd ki a UNIX rendszerek válogatott lehetőségeit a parancssori eszközök terén. Bocs, de az, hogy az ember begépel egy 3-4-5 elemű csövet, az nem script-írás, az a rendszer szerves része. Ha nem így lenne, akkor minden kurva parancsnál lehetne nyafogni, hogy miért nincs /PAGE kapcsolója (mint pl. VMS alatt), miért kell | more -t írni.

Alapvetoen igen, csakhogy a make search nem a legkenyelmesebb, mert nem szabalyozhato, hogy a nevben, vagy a leirasban akarok keresni. Peldaul, van egy olyan altalanos szavam, hogy office. Namarmost, ez jo esetben az abiword-tol az evolution-on at egeszen a tasks-ig elofordulhat, vagyis ad kabe nyolcvan talalatot, holott a csomagnevben igazabol csak 3 csomag eseteben szerepel.
Tul sok a metadata, es ehhez kepest tul kevesse parameterezheto a kereses. Nekem mar az is eleg lenne, ha vmi az INDEX fajl alapjan kepes lenne keresni...
--


()=() Ki oda vagyik,
('Y') hol szall a galamb
C . C elszalasztja a
()_() kincset itt alant.

Meg egy tanacs: hasznalj portmaster-t (/usr/ports/ports-mgmt/portmaster)

akkor a 2. kerdesed igy nez ki:


[root@bsd-test ~]# pkg_version -v | grep '<'
bash-4.0.17 < needs updating (port has 4.0.24)
gio-fam-backend-2.20.1 < needs updating (port has 2.20.2)
glib-2.20.1 < needs updating (port has 2.20.2)

[root@bsd-test ~]# portmaster -GBa

vagy egy portra:

[root@bsd-test ~]# portmaster -GB bash-4.0.17

hogy tovabb bovitsem a dokumentacios tarhazat: man sh - es az alanti korrektebb megoldast ugy, hogy ne okozzon problemat a $2 megvedese:


awk "/Path:.+$1/ "'{print $2}'

Mint lathato, csak annyi tortent, hogy a zaro-idezojel utan azonnal nyitottam egy nyito aposztrofot. (Azt mar csak igy - zarojelben jegyzem meg, hogy az aposztrof, idezojel es hanyatt-tortvonal mindegyiket "takarasra" valo, azaz arra, hogy "megvedjunk". Szoval kell az igy is, ugy is.)

[root@freebsd:/usr/ports/ports-mgmt/portaudit]$ portsearch -u -vv
Creating store
Previous store does not exist, creating from scratch
==> accessibility/accerciser
==> accessibility/at-poke
[...]
==> x11-wm/xmonad
==> x11-wm/xmonad-contrib

[root@freebsd:/usr/ports/ports-mgmt/portaudit]$ portsearch -n apache-2.2
Port: apache-2.2.9
Path: /usr/ports/www/apache22
Info: Version 2.2 of Apache web server with prefork MPM.
Maint: clement@FreeBSD.org
B-deps: autoconf-2.61_2 autoconf-wrapper-20071109 expat-2.0.1 libiconv-1.11_1 libtool-1.5.26 m4-1.4.11,1 perl-5.8.8_1
R-deps: expat-2.0.1 libiconv-1.11_1 perl-5.8.8_1
WWW: http://httpd.apache.org/

forras
--
1 leszel vagy 0 élő vagy hulla!

Tedd fel a portsearch portot.
Első indításnál fel kell indexeltetni vele a ports tree-t, aztán már kereshetsz is.

Hogy a példánál maradjunk,
'portsearch -n openoffice' kidob 6 portot:
Port: openoffice.org-2.4.2_1
Path: /usr/ports/editors/openoffice.org-2
Info: Integrated wordprocessor/dbase/spreadsheet/drawing/chart/browser

Port: openoffice.org-2.4.20081023_1
Path: /usr/ports/editors/openoffice.org-2-RC
Info: Integrated wordprocessor/dbase/spreadsheet/drawing/chart/browser(release branch)

Port: openoffice.org-2.4.20080302_6,1
Path: /usr/ports/editors/openoffice.org-2-devel
Info: Integrated wordprocessor/dbase/spreadsheet/drawing/chart/browser(developer version)

Port: openoffice.org-3.0.1
Path: /usr/ports/editors/openoffice.org-3
Info: Integrated wordprocessor/dbase/spreadsheet/drawing/chart/browser(release branch)

Port: openoffice.org-3.1.20090214
Path: /usr/ports/editors/openoffice.org-3-RC
Info: Integrated wordprocessor/dbase/spreadsheet/drawing/chart/browser(release branch)

Port: openoffice.org-3.2.20090131
Path: /usr/ports/editors/openoffice.org-3-devel
Info: Integrated wordprocessor/dbase/spreadsheet/drawing/chart/browser(developer version)

De ha csak simán írsz egy ilyet:
[root@sun:~]$ portinstall -i openoffice.org
---> Session started at: Wed, 20 May 2009 01:18:08 +0200
---> Found 6 ports matching 'openoffice.org':
editors/openoffice.org-2-devel
editors/openoffice.org-2-RC
editors/openoffice.org-2
editors/openoffice.org-3
editors/openoffice.org-3-RC
editors/openoffice.org-3-devel
[Updating the pkgdb
in /var/db/pkg ... - 279 packages found (-0 +4) .... done]
Install 'editors/openoffice.org-2-devel'? [yes]

Akkor is mint látható, kilistázza neked, hogy miféle office-ok vannak, és ami nem kell ott 'n' -t nyomsz, ami kell, ott meg enter -t, és telepíti is. portinstall -P kapcsolóval csomagot próbál meg feltenni, nem forrásból fordítani.

Nem tudom, mitől rosszabb ez, mint az apt-get.

szerk:
látom, valaki már postolta a portsearch -et.
De szvsz a kézikönyv is ír erről, legalábbis nekem úgy rémlik, ott olvastam róla először.

Első kérdésre:
A portupgrade -af by definition mindent újrabuildel (a = all), akár van új, akár nincs (f = force). Ez pl. akkor jó, ha nagy verzióugrást követtél el és API változások miatt inkompatibilitás léphet fel. Pl. anno 4.X -> 5.X upgrade volt egy ilyen eset. Normál esetben én portupgrade -ai opciókat használok, azaz mindent frissít, amihez van új (a = all), de elétte kérdez (i = interactive).

Második kérdésre:
Igen, portsban van újabb. És ez sok esetben így van, ezért én személy szerint sysinstall-ból soha semmilyen csomagot nem teszek fel.

A portupgrade használatát nem javaslom! Külön Ruby alapon készit adatbázis a portokról, függőségekről. Nagy-nagy összekavarodás lehet egy.egy frissités alatt/után (sajnos, tapasztalatból mondom). A FreeBSD-s levlistán (angol) feszegettem ezt a kérdést pár éve, mikor totál fejreállt pár szerverem emiatt. Akkor ott ajánlották a portmaster-t, mivel az csak a portfával dolgozik, nem csinál semmi köztes adatbázist magának. Azóta az összes szerveremen ez fut, napi-heti frissitésekkel - és még egyszer sem szállt el semmi!! Ez kb. 2-3 évet jelent... Én azóta mindenhova egy sima portaudit-ot rakok, és cronból megy egy cvsup meg egy

'/usr/local/sbin/portmaster -L | grep -B 1 "New" | mail -s "szerverX port-status" adminka'

Ez - szerintem - bőven elég.

Ja, a keresés meg nem értem,mitől nehéz:
'find /usr/ports -name *php* | more'
Amit ezzel nem lehet megtalálni, azt nem érdemes keresni :)

eFeS
http://infoblog.tatrai.hu

Negyedik kérdés

Milyen parancsokat használtok csomagok törlésére?

Többen írták, hogy a portupgrade-t nem ajánlják, viszont akkor a "pkg_deinstall -dir" parancsot sem használhatom?

Szerk: portmaster -i -e portupgrade-2.4.6_2,2

tudom, rtfm :)

--
\\-- blog --//

Én pkg_delete-t szoktam, ez csak akkor töröl alapból, ha nincs olyan port fenn, aminek függősége a törölni kívánt csomag. Ha jól emlékszem a pkg_deinstall kicsit agresszívebb ilyen szempontból, de ebben nem vagyok biztos. Néha meg takarítok a pkg_rmleaves-szel, amivel a "leaf" csomagokat (amitől nem függ semmi) interaktív módon le tudod szedni. Ezek pl. tipikusan build-time függőségek, amik utána nem kellenek, meg régebbről megmaradt dolgok.

Igen, miért mi baj ezzel? Én mindig is így csináltam, igazából nem is tudtam, hogy van ilyen, hogy portinstall... De ha gondolod tedd vissza a portupgrade-et és akkor lesz megint portinstall. :D
Ha meg package-et akarsz, akkor ott a pkg_add, aminek a -r opciójával leszedi neked FTP-ről.

Sima pkg_add -os bináris csomagtelepítésnél ellenőriz egyébként a FreeBSD hash-t meg digitális aláírást? Mert ahogy nézem a -v kimenetet, úgy látom sima FTP kapcsolaton letölti és telepíti.

Ezt még nekem nem sikerült kiderítenem :)

Új kérdés.

Létezik-e olyan eszköz FreeBSD-re mint ami a Gentoo alatt a revdep-rebuild.
Azaz olyan ami detektálja azokat a csomagokat amelyeket az "old shared library"-k miatt újra kell fordítani?

Most frissítettem 7.2-ről 8.0-RC1-re és pár csomag hiányolja a régi libeket.

Igen újrafordítás előtt mégegyszer eleresztettem a freebsd-update installt! Tudom, hogy szólt előtte, hogy nem ártana előbb újrafordítani az érintett csomagokat, de a drága nem közölte melyek is lennének azok. :D

up.
--
\\-- blog --//

én még nem hallottam ilyen szoftverről, de speciel 7->8 áttérésnél tudtommal *mindent* újra kell fordítani, és nem nagyon éri meg spórolni vele (én már futottam bele FBSD alatt rossz-library -függőség problémába, az volt az igazán szép, hogy egy eléggé "triviális-hogy-nem-okoz-problémát" -nak tűnő dolog maradt ki az újrafordításból, és mindig újra- és újragenerálta a problémát. És ahogy újabb és újabb programok kerültek a rendszerre, egyre többeknek lettek érdekes bajai.)