---
title: "4. Fejezet - Alkalmazások telepítése: csomagok és portok"
part: I. Rész - Bevezetés
prev: books/handbook/basics
next: books/handbook/x11
showBookMenu: true
weight: 6
params:
  path: "/books/handbook/ports/"
---

[[ports]]
= Alkalmazások telepítése: csomagok és portok
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:sectnumoffset: 4
:partnums:
:source-highlighter: rouge
:experimental:
:images-path: books/handbook/ports/

ifdef::env-beastie[]
ifdef::backend-html5[]
:imagesdir: ../../../../images/{images-path}
endif::[]
ifndef::book[]
include::shared/authors.adoc[]
include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
include::shared/attributes/attributes-{{% lang %}}.adoc[]
include::shared/{{% lang %}}/teams.adoc[]
include::shared/{{% lang %}}/mailing-lists.adoc[]
include::shared/{{% lang %}}/urls.adoc[]
toc::[]
endif::[]
ifdef::backend-pdf,backend-epub3[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
endif::[]

ifndef::env-beastie[]
toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]

[[ports-synopsis]]
== Áttekintés

A FreeBSD rendszereszközök gazdag gyûjteményével érkezik az alaprendszer részeként. Azonban a külsõ alkalmazások telepítéséhez rengeteg teendõt kell elvégeznünk. A feladat elvégzésére ezért a FreeBSD két, egymást kiegészítõ technológiát kínál fel: a FreeBSD Portgyûjteményt (telepítés forráskódból) és a csomagokat (telepítés elõre elkészített bináris csomagokból). Mind a két módszerrel fel tudjuk telepíteni a kedvenc alkalmazásunk legújabb verzióját lokálisan vagy egyenesen a hálózatról.

A fejezet elolvasása során megismerjük:

* hogyan telepítsünk külsõ fejlesztésû bináris szoftvercsomagokat;
* hogyan fordítsunk le a forrásukból külsõ fejlesztésû szoftvereket a Portgyûjtemény segítségével;
* hogyan távolítsunk el korábban már telepített csomagokat és portokat;
* hogyan bíráljuk felül a Portgyûjtemény által használt alapértelmezett értékeket;
* hogyan keressük meg a megfelelõ szoftvercsomagokat;
* hogyan frissítsük a telepített alkalmazásokat.

[[ports-overview]]
== Az alkalmazások telepítésének összefoglalása

Ha korábban már használtunk UNIX(R) rendszereket, valószínûleg ismerjük a külsõ alkalmazások telepítésének jellemezõ menetét:

[.procedure]
====
. Töltsük le a szoftvert, amelyet vagy forráskód vagy pedig bináris formátumban érhetünk el.
. Bontsuk ki az alkalmazás letöltött változatát (ez általában a man:compress[1], man:gzip[1] vagy a man:bzip2[1] által tömörített tar állomány).
. Keressük meg a dokumentációt (többnyire az [.filename]#INSTALL# vagy a [.filename]#README# állományban található, vagy a [.filename]#doc/# alkönyvtárban) és olvassuk el benne, hogyan tudjuk telepíteni a szoftvert.
. Ha a szoftver forrását töltöttük le, fordítsuk le. Elképzelhetõ, hogy ennek során szerkesztenünk kell a [.filename]#Makefile# állományt vagy lefuttatnunk a [.filename]#configure# szkriptet, illetve más lépéseket is el kell végeznünk.
. Próbáljuk a ki szoftvert, majd telepítsük.
====

Ez annak a forgatókönyve, amikor minden hiba nélkül lezajlik. Megeshet azonban, ha olyan szoftvert telepítünk, amelyet nem kifejezetten a FreeBSD-hez terveztek, akkor javítanunk kell a forráskódban a szoftver megfelelõ mûködéséhez.

Ha sikerül mûködésre bírni, folytathatjuk FreeBSD-n a szoftver telepítését a "megszokott" módon. Habár a FreeBSD erre a célra két lehetõséget is felkínál, amivel rengeteg erõfeszítéstõl megkímélhet minket: ezek a csomagok és a portok. Az írás pillanatában közel {numports} külsõ alkalmazás érhetõ el ilyen formában.

Egy adott alkalmazás esetén a hozzá tartozó FreeBSD-s csomag mindössze egyetlen letöltendõ állományt takar. A csomag tartalmazza az alkalmazás telepítéséhez szükséges összes parancs elõre lefordított változtatát, ugyanígy magát a dokumentációt is. A letöltött csomagokat a FreeBSD csomagkezelõ parancsaival vehetjük használatba: ezek a man:pkg_add[1], man:pkg_delete[1], man:pkg_info[1] és így tovább. Az új alkalmazások telepítése ennek köszönhetõen egyetlen paranccsal elvégezhetõ.

Egy alkalmazás FreeBSD-s portja mögött lényegében állományok gyûjteménye áll, amelyek abban segítenek, hogy automatikusan tudjunk telepíteni a forráskód felhasználásával.

Ne felejtsük el, hogy normális esetben számos lépcsõt végig kell járnunk egy program sajátkezû lefordításához (letöltés, kitömörítés, javítgatás, fordítás, telepítés). A portot alkotó állományok tartalmazzák az összes olyan szükséges információt, amelyek átengedik ezt a feladatot a rendszernek. Kiadunk néhány egyszerû parancsot és az alkalmazás magától letöltõdik, kitömörítõdik, módosítja a forráskódját, lefordul és települ.

Valójában a portrendszer használható olyan csomagok létrehozására is, amelyeket késõbb a `pkg_add` és többi hozzá hasonló, hamarosan részletesebben is bemutatandó csomagkezelõ paranccsal is kezelni tudunk.

A csomagok és a portok egyaránt képesek _függõségeket_ kezelni. Tegyük fel, hogy egy olyan alkalmazást akarunk telepíteni, amely egy adott függvénykönyvtár meglététõl függ a rendszeren. Az alkalmazás és a könyvtár is elérhetõ FreeBSD portként és csomagként. Akár a `pkg_add` parancsot, akár a portrendszert használjuk az alkalmazás hozzáadására, mind a kettõ észre fogja venni, hogy a szükséges könyvtárt még nem telepítettük, ezért elõször azt fogja automatikusan telepíteni.

Tudván, hogy a két említett megoldás szinte teljesen egyenértékû, felmerülhet a kérdés: a FreeBSD mégis miért rendelkezik mindkettõvel? A csomagoknak és a portoknak is megvannak a maguk elõnyei, és hogy a kettõ közül melyiket használjuk, csak az egyéni ízlésünkön múlik.

.A csomagok használatának elõnyei
* Egy csomag általában kisebb, mint az alkalmazás forráskódját tartalmazó tömörített tar állomány.
* A csomagokat nem kell fordítani. Nagyobb alkalmazások, mint például a Mozilla, KDE vagy GNOME esetén ez kulcsfontosságú lehet, fõleg abban az esetben, ha a rendszerünk ehhez nem eléggé gyors.
* A csomagok használata nem várja el tõlünk, hogy behatóbban ismerjük, miként is kell FreeBSD-n szoftvereket lefordítani.

.A portok használatának elõnyei
* A csomagokat általános esetben igen óvatos beállításokkal készítik el, hiszen a lehetõ legtöbb rendszeren mûködõképesnek kell lenniük. Ha viszont portból telepítünk, nyugodtan hangolhatjuk úgy a beállításokat, hogy (például) a Pentium(R) 4 vagy az Athlon processzoroknak kedvezõ kódot hozzanak létre.
* Bizonyos alkalmazások fordítás idején állítandó beállításokkal rendelkeznek arról, hogy mire lesznek képesek és mire nem. Például az Apache beépített konfigurációs opciók széles kelléktárával rendelkezik. Amikor viszont portból hozzuk létre, nem kell elfogadnunk ezek alapértelmezett értékeit, hanem a saját igényeinknek megfelelõen átállíthatjuk ezeket.
+ 
Egyes esetekben több különféle beállítást tükrözõ csomag is létezhet ugyanahhoz az alkalmazáshoz. Például a Ghostscript elérhetõ [.filename]#ghostscript# és [.filename]#ghostscript-nox11# csomagként is attól függõen, hogy telepítettük-e az X11 szervert. Ez természetesen egy meglehetõsen durva kijátszása a csomagrendszernek, és gyorsan lehetetlenné is válik a használata, ha az adott alkalmazás egy-két fordítási idejû beállításnál többel rendelkezik.
* Néhány szoftver licencelése tiltja a bináris terjesztést. Ezért ezek a szoftverek kizárólag csak forráskód formájában továbbíthatóak.
* Néhányan nem bíznak meg a bináris verziókban. Ha látjuk a forráskódot is, akkor (elméletben) át tudjuk nézni, és mi magunk is megkereshetjük a benne lappangó hibákat.
* Ha vannak saját javításaink, csak a forráskód birtokában tudjuk ezeket felhasználni.
* Sokan szeretik, ha egyszerûen csak "ott van" a szoftverek forráskódja. Ha éppen unatkoznak, beléjük tudnak nézni, ötleteket és kódot tudnak belõlük meríteni (persze csak akkor, ha ezt a licenc megengedi), vagy tovább tudják ezeket fejleszteni, orvosolni tudják a hibáikat stb.

A portok frissítésérõl a {freebsd-ports} és a {freebsd-ports-bugs} valamelyikérõl szerezhetünk naprakész információkat.

[WARNING]
====

Mielõtt bármelyik alkalmazást is telepítenénk, érdemes meglátogatnunk az http://vuxml.freebsd.org[http://vuxml.freebsd.org] oldalt, ahol a hozzá tartozó ismert biztonsági problémákról olvashatunk.

Telepíthetjük a package:ports-mgmt/portaudit[] programot is, amely automatikusan ellenõrzi a telepített alkalmazások ismert sebezhetõségeit. Ez az ellenõrzés egyébként megejthetõ minden port lefordítása elõtt is. Ezalatt a `portaudit -F -a` parancs kiadásával ellenõrizhetjük utólag a telepített csomagokat.
====

A fejezet fennmaradó részében megmutatjuk, hogyan használjuk FreeBSD-ben a csomagokat és portokat külsõ alkalmazások telepítésére és karbantartására.

[[ports-finding-applications]]
== A számunkra szükséges alkalmazások felkutatása

Mielõtt telepítenénk bármilyen alkalmazást, tudnunk kell, hogyan is nevezik.

A FreeBSD-hez elérhetõ alkalmazások listája folyamatosan növekszik. Szerencsére számos módja van annak, hogy utánajárjunk a keresett szoftvernek:

* A FreeBSD honlapján találhatunk egy rendszeresen frissülõ listát az összes elérhetõ alkalmazásról, a link:https://www.FreeBSD.org/ports/[http://www.FreeBSD.org/ports/] címen. Itt a portok különbözõ kategóriákba sorolva találhatóak meg, ahol név szerint megkereshetjük az alkalmazást (amennyiben ismerjük), vagy végigböngészhetjük az adott kategóriában elérhetõ alkalmazásokat is.
* Dan Langlille a http://www.FreshPorts.org/[http://www.FreshPorts.org/] címen karbantartja a FreshPorts nevû oldalt. Ezen az oldalon folyamatosan nyomon lehet követni a Portgyûjteményben megtalálható alkalmazások változásait, lehetõvé téve, hogy egy vagy több portot is "figyeljünk", vagy e-mailt küldjünk a frissítésükrõl.
* Amennyiben nem ismerjük a keresett alkalmazás nevét, próbáljuk meg felkutatni a FreshMeaten (http://www.freshmeat.net/[http://www.freshmeat.net/]) vagy hozzá hasonló oldalakon, majd nézzük meg a FreeBSD honlapján, hogy az adott alkalmazást portolták-e már a rendszerre.
* Ha pontosan ismerjük a port nevét, és csak a kategóriáját kellene megkeresnünk, használjuk a man:whereis[1] parancsot. Egyszerûen csak adjuk ki a `whereis név` parancsot, ahol a _név_ a telepítendõ program neve. Ha sikerült megtalálni, részletes információt kapunk arról, hogy hol található, valahogy így:
+
[source,shell]
....
# whereis lsof
lsof: /usr/ports/sysutils/lsof
....
+ 
A fenti példában megtudhatjuk, hogy az `lsof` parancs a [.filename]#/usr/ports/sysutils/lsof# könyvtárban található.
* Vagy egy egyszerû man:echo[1] paranccsal is megkereshetjük a portfában a portokat. Mint például:
+
[source,shell]
....
# echo /usr/ports/*/*lsof*
/usr/ports/sysutils/lsof
....
+ 
Ez a módszer a [.filename]#/usr/ports/distfiles# könyvtárba letöltött összes illeszkedõ állományt is kilistázza.
* Egy másik lehetõség egy adott port megtalálására, ha a Portgyûjtemény beépített keresési mechanizmusát használjuk. Ennek használatához a [.filename]#/usr/ports# könyvtárban kell lennünk. Miután beléptünk ide, futtassuk le a `make search name=programnév` parancsot, ahol a _programnév_ a keresendõ program neve. Például, ha az `lsof` programot keressük:
+
[source,shell]
....
# cd /usr/ports
# make search name=lsof
Port:   lsof-4.56.4
Path:   /usr/ports/sysutils/lsof
Info:   Lists information about open files (similar to fstat(1))
Maint:  obrien@FreeBSD.org
Index:  sysutils
B-deps:
R-deps: 
....
+ 
A keresés eredményében leginkább a "Path:" kezdetû sorra kell odafigyelnünk, mivel ez árulja el, hol is találhatjuk meg a portot. Az itt szereplõ többi információ nem szükséges a port telepítéséhez, ezért azokkal itt most nem foglalkozunk.
+ 
Mélyebb keresésekhez használhatjuk a `make search key=szöveg` parancsot is, ahol a _szöveg_ a keresendõ szöveg(részlet) lesz. Ezt a rendszer keresni fogja a portok neveiben, megjegyzésekben, leírásokban és függõségekben. Amikor nem ismerjük a keresett program nevét, ez olyan portok keresésére alkalmas, amelyek egy adott témához kapcsolódnak.
+ 
A fenti esetek mindegyikében a keresés nem különbözteti meg a kis- és nagybetûket. Tehát az "LSOF" keresése ugyanazt az eredményt adja, mint az "lsof" esetén.

[[packages-using]]
== A csomagrendszer használata

FreeBSD alatt több különbözõ módon tudunk csomagokat használni:

* A sysinstall használatán keresztül a futó rendszeren tudjuk megnézni a telepített csomagokat, tudunk vele csomagokat telepíteni vagy törölni. Ezzel részletesebben a crossref:install[packages,Csomagok telepítése] foglalkozik.
* A szakasz további részében ismertetett egyéb parancssoros csomagkezelõ segédprogramok.

=== Csomagok telepítése

A man:pkg_add[1] segédprogram segítségével telepíthetünk FreeBSD-hez készült szoftvercsomagokat lokálisan vagy a hálózaton levõ egyik szerveren megtalálható állományokból:

.Csomagok letöltése manuálisan és telepítése lokálisan
[example]
====

[source,shell]
....
# ftp -a ftp2.FreeBSD.org
Connected to ftp2.FreeBSD.org.
220 ftp2.FreeBSD.org FTP server (Version 6.00LS) ready.
331 Guest login ok, send your email address as password.
230-
230-     This machine is in Vienna, VA, USA, hosted by Verio.
230-         Questions? E-mail freebsd@vienna.verio.net.
230-
230-
230 Guest login ok, access restrictions apply.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> cd /pub/FreeBSD/ports/packages/sysutils/
250 CWD command successful.
ftp> get lsof-4.56.4.tgz
local: lsof-4.56.4.tgz remote: lsof-4.56.4.tgz
200 PORT command successful.
150 Opening BINARY mode data connection for 'lsof-4.56.4.tgz' (92375 bytes).
100% |**************************************************| 92375       00:00 ETA
226 Transfer complete.
92375 bytes received in 5.60 seconds (16.11 KB/s)
ftp> exit
# pkg_add lsof-4.56.4.tgz
....

====

Ha nincsenek egyáltalán helyben csomagjaink (például egy FreeBSD CD-készletben), akkor a legjobban úgy járunk, ha használjuk a man:pkg_add[1] `-r` kapcsolóját. Ennek hatására a segédprogram önmagától meghatározza a szükséges állományformátumot és verziót, majd FTP-n keresztül letölti és telepíti a csomagot.

[source,shell]
....
# pkg_add -r lsof
....

Az iménti példában a program mindenféle további beavatkozás nélkül letölti a megfelelõ csomagot és felteszi. Ha a központi helyett egy másik szervert szeretnénk használni, felül kell bírálnunk az alapértelmezett beállításokat és igényeinknek megfelelõen be kell állítanunk a `PACKAGESITE` környezeti változó értékét. A man:pkg_add[1] a man:fetch[3] programot használja az állományok letöltésére, amely pedig számos egyéb környezeti változót is figyel, mint például az `FTP_PASSIVE_MODE`, az `FTP_PROXY` és az `FTP_PASSWORD`. Ha tûzfal mögött vagyunk, ezek közül néhányat biztosan be kell majd állítanunk, vagy FTP/HTTP proxyt kell használnunk. A man:fetch[3] man oldalán megtaláljuk ezen változók teljes felsorolását. Figyeljük meg, hogy az `lsof-4.56.4` helyett csak `lsof`-ot adtunk meg. Amikor ugyanis kérjük a csomag letöltését is, nem szabad verziószámot megadnunk. A man:pkg_add[1] mindig az alkalmazás legfrissebb verzióját fogja letöltetni.

[NOTE]
====
Ha a FreeBSD-CURRENT vagy FreeBSD-STABLE verziókat használjuk, a man:pkg_add[1] mindig az alkalmazás elérhetõ legfrissebb verzióját fogja letölteni. Ha azonban valamelyik -RELEASE verziót használjuk, a csomagnak az adott kiadáshoz készült verzióját fogja leszedni. Ezt a mûködési módot a `PACKAGESITE` változó felülírásával viszont meg tudjuk változtatni. Például ha a FreeBSD 5.4-RELEASE változatával dolgozunk, a man:pkg_add[1] alapértelmezés szerint a `ftp://ftp.freebsd.org/pub/FreeBSD/ports/i386/packages-5.4-release/Latest/` címrõl fogja letölteni a csomagokat. Ha mi viszont a FreeBSD 5-STABLE csomagok letöltését akarjuk elérni, állítsuk az `PACKAGESITE` értékét a `ftp://ftp.freebsd.org/pub/FreeBSD/i386/packages-5-stable/Latest/` címre.
====

A csomagok [.filename]#.tgz# és [.filename]#.tbz# formátumokban kerülnek terjesztésre. Ezek az link:ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/packages/[ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/packages/] címen, vagy pedig a FreeBSD CD-ken találhatóak meg. A 4 CD-bõl álló készlet (illetve a PowerPak stb.) minden CD-jén találhatunk csomagokat a [.filename]#packages/# könyvtárban. A csomagokat tároló könyvtár struktúrája hasonló a [.filename]#/usr/ports# könyvtárban kialakított könyvtárfához. Minden kategóriának saját könyvtára van, és minden csomag megtalálható az [.filename]#All# (összes) kategóriában.

A csomagrendszer könyvtárszerkezete tehát megegyezik a portok szétosztásával, ezáltal így képesek egymással összedolgozni a teljes csomag/port rendszer megformálásában.

=== A csomagok kezelése

A man:pkg_info[1] egy olyan segédprogram, amellyel készíteni lehet egy listát a telepített csomagokról, és emellett még más egyéb információkat tudhatunk meg róluk.

[source,shell]
....
# pkg_info
cvsup-16.1          A general network file distribution system optimized for CV
docbook-1.2         Meta-port for the different versions of the DocBook DTD
...
....

A man:pkg_version[1] összefoglalja az összes telepített csomag verzióját. Ezenkívül össze is hasonlítja a csomagok verzióját a portfában található aktuális verziókéval.

[source,shell]
....
# pkg_version
cvsup                       =
docbook                     =
...
....

A második oszlopban látható jelek utalnak a telepített verzió a helyi portfában található verzióéhoz viszonyított korára.

[.informaltable]
[cols="1,1", frame="none", options="header"]
|===
| Jel
| Jelentés

|=
|A telepített csomag verziója megegyzik a helyi portfában található verziójával.

|<
|A telepített verzió a portfában levõnél régebbi.

|>
|A telepített verzió újabb, mint a portfában található. (A helyi portfa valószínûleg nem lett frissítve.)

|?
|A telepített csomag nem található a portok között. (Ez akkor történhet meg, amikor például egy portot eltávolítottak a Portgyûjteménybõl vagy átnevezték.)

|*
|A csomagnak több verziója is jelen van.

|!
|A telepített csomag szerepel az indexben, de a `pkg_version` valamiért nem volt képes összehasonlítani a verziószámát az indexben levõ bejegyzéssel.
|===

=== Csomagok törlése

Egy korábban már telepített csomag eltávolításához használjuk a man:pkg_delete[1] segédprogramot.

[source,shell]
....
# pkg_delete xchat-1.7.1
....

A man:pkg_delete[1] használatánál szükség van a csomag teljes nevének és verziószámának megadására. A fenti parancs tehát nem mûködik, ha csak az _xchat_-et adjuk meg az _xchat-1.7.1_ helyett. A telepített csomag verzióját azonban könnyedén kitalálhatjuk a man:pkg_version[1] alkalmazásával. Esetleg egyszerûen dzsókerkaraktereket is használhatunk:

[source,shell]
....
# pkg_delete xchat\*
....

Ebben az esetben az összes `xchat`-tel kezdõdõ csomagot letörli.

=== Egyebek

A csomagokra vonatkozó összes információ a [.filename]#/var/db/pkg# könyvtárban található. Az egyes csomagok leírása és hozzájuk telepített állományok listája az ezen a könyvtáron belül elhelyezkedõ állományokban tárolódik.

[[ports-using]]
== A Portgyûjtemény használata

A most következõ szakaszokban megismerhetjük azokat az alapvetõ utasításokat, amelyekkel a Portgyûjteményen keresztül tudunk programokat telepíteni és eltávolítani. Az ehhez használható `make` targetek és környezeti változók részletesebb leírását a man:ports[7] man oldalán lelhetjük meg.

[[ports-tree]]
=== A Portgyûjtemény beszerzése

Mielõtt bármelyik portot is tudnánk telepíteni, elsõként magát a Portgyûjteményt kell megszereznünk - ez lényegében a [.filename]#/usr/ports# könyvtárban megtalálható [.filename]#Makefile# állományok, javítások és leírások gyûjteménye.

A FreeBSD telepítése közben a sysinstall rákérdez a Portgyûjtemény telepítésére is. Ha erre nemet válaszoltunk volna, a portok gyûjteményét az alábbi módokon szerezhetjük be:

[.procedure]
====
*Procedure: A CVSup használatával*

A CVSup protokoll használatával viszonylag gyorsan el tudjuk érni és naprakészen tudjuk tartani a Portgyûjtemény egy példányát. A CVSup használatát alaposabban a crossref:mirrors[cvsup,A CVSup használata] címû függelékben ismerhetjük meg.

[NOTE]
======
A FreeBSD 6.2 változatától kezdve az alaprendszerben a CVSup protokollt a csup valósítja meg. A FreeBSD korábbi változatának használói ezt a programot a package:net/csup[] porton vagy csomagon keresztül tudják telepíteni.
======

Gondoskodjunk róla, hogy a [.filename]#/usr/ports# üres legyen a csup elsõ futtatása elõtt! Ha más forrásból raktuk ide a Portgyûjteményt, a csup nem fogja lenyesegetni az azóta eltávolított javításokat.

. Futtassuk a `csup` programot:
+
[source,shell]
....
# csup -L 2 -h cvsup.FreeBSD.org /usr/shared/examples/cvsup/ports-supfile
....
+ 
Itt írjuk át a _cvsup.FreeBSD.org_ címét a hozzánk legközelebb levõ CVSup szerver címére. Az összes elérhetõ tükörszerver címét a crossref:mirrors[cvsup-mirrors,CVSup tükrözések] (crossref:mirrors[cvsup-mirrors,CVSup oldalak]) címû részben olvashatjuk.
+
[NOTE]
======
Ha például el akarjuk kerülni a CVSup szerver megadását a parancssorban, akkor mindenképpen a [.filename]#ports-supfile# állományból érdemes készíteni egy saját verziót.

[.procedure]
.. Ebben az esetben `root` felhasználóként másoljuk a [.filename]#/usr/shared/examples/cvsup/ports-supfile# állományt egy új helyre, például a [.filename]#/root# könyvtárba vagy a saját felhasználói könyvtárunkba.
.. Szerkesszük át a [.filename]#ports-supfile# állományt.
.. Írjuk át a _CHANGE_THIS.FreeBSD.org_ értéket a hozzánk legközelebb található CVSup szerverére. A crossref:mirrors[cvsup-mirrors,CVSup tükrözések] (crossref:mirrors[cvsup-mirrors,CVSup oldalak]) címû részben megtaláljuk az összes ilyen tükörszervert.
.. És most indítsuk el a `csup` parancsot az alábbi módon:
+
[source,shell]
....
# csup -L 2 /root/ports-supfile
....

======

. A man:csup[1] parancs késõbbi futása során már letölti és érvényesíti az észlelt változtatásokat a saját Portgyûjteményünkben, de a telepített portokat nem fogja újrafordítani.
====

[.procedure]
====
*Procedure: A Portsnap használatával*

A Portsnap egy másik módszert képvisel a Portgyûjtemény terjesztésére, a lehetõségeinek részletesebb megismeréséhez tekintsük át crossref:cutting-edge[updating-upgrading-portsnap,A Portsnap használata] címû szakaszt.

. Töltsük le a Portgyûjtemény tömörített pillanatképét a [.filename]#/var/db/portsnap# könyvtárba. Ha akarjuk, ezután a lépés után már lekapcsolódhatunk az internetrõl.
+
[source,shell]
....
# portsnap fetch
....
+
. Ha még csak elõször futtatjuk a Portsnapet, bontsuk ki az imént letöltött állapotot a [.filename]#/usr/ports# könyvtárba:
+
[source,shell]
....
# portsnap extract
....
+ 
Ha viszont már korábban is létezett a [.filename]#/usr/ports# könyvtárunk és most csak frissítjük, akkor helyette ezt a parancsot adjuk ki:
+
[source,shell]
....
# portsnap update
....
====

[.procedure]
====
*Procedure: A sysinstall használatával*

Ebben az esetben a sysinstall nevû programmal telepítjük a Portgyûjteményt valamilyen telepítõeszközrõl. Ilyenkor azonban a kiadás dátumának megfelelõ, valószínûleg régebbi változat kerül fel. Ha rendelkezünk internet-hozzáféréssel, akkor inkább az elõbb tárgyalt módszerek valamelyikét alkalmazzuk.

. `root` felhasználóként adjuk ki a `sysinstall` parancsot, ahogy itt is láthatjuk:
+
[source,shell]
....
# sysinstall
....
+
. Menjünk le és álljunk meg a [.guimenuitem]#Configure# (Beállítások) menüpontnál, és nyomjunk kbd:[Enter] billentyût.
. Menjünk le és keressük meg a [.guimenuitem]#Distributions# (Terjesztések) menüponot, majd nyomjuk meg az kbd:[Enter] billentyût.
. Menjünk le, válasszuk ki a [.guimenuitem]#ports# elemet a kbd:[Szóköz] megnyomásával.
. Menjünk fel az [.guimenuitem]#Exit# (Kilépés) ponthoz, nyomjuk meg az kbd:[Enter] billentyût.
. Válasszuk ki a telepítéshez használni kívánt eszközt, mint például CD, FTP stb.
. Menjünk fel az [.guimenuitem]#Exit# (Kilépés) menüpontig, majd nyomjuk meg az kbd:[Enter] billentyût.
. Végezetül lépjünk ki a sysinstall programból, aminhez nyomjuk meg az kbd:[X] billentyût.
====

[[ports-skeleton]]
=== Portok telepítése

A "váz" fogalma az elsõ, amit a Portgyûjteménnyel kapcsolatban tisztázni kell. Dióhéjban összefoglalva, egy port váza azon állományok legszûkebb halmaza, amelyek elárulják a FreeBSD számára, hogyan fordítsuk le hibamentesen és hogyan telepítsük az adott programot. Ehhez minden port vázában megtalálható:

* Egy [.filename]#Makefile# nevû állomány. Ez tartalmazza azokat a különbözõ utasításokat, amelyek megmondják, hogyan kell lefordítani és hova kell telepíteni a rendszerünkben az adott alkalmazást.
* Egy [.filename]#distinfo# nevû állomány. Ebben található információ a port lefordításához szükséges állományok letöltésérõl, valamint a letöltött állományok ellenõrzéséhez szükséges (az man:md5[1] és man:sha256[1] programokkal számolt) ellenõrzõösszegek.
* Egy [.filename]#files# alkönyvtár. Itt találhatjuk meg azokat a javításokat, amelyek alkalmazásával le tudjuk fordítani a programot FreeBSD-n is. Ezek a javítások többnyire bizonyos állományok módosításaira vonatkozó apró állományok formájában jelennek meg. Természetüknél fogva szöveges formátumúak, és általában olyanok szerepelnek bennük, hogy "Töröld a 10. sort" vagy "Változtasd meg a 26. sort erre: ...". Ezeket a javításokat eredetileg patcheknek (foltoknak) nevezik, vagy másképp diffeknek (eltéréseknek) is, mivel a man:diff[1] program segítségével hozzák ezeket létre.
+ 
Ez a könyvtár tartalmazhat további állományokat is portok elkészítéséhez.
* Egy [.filename]#pkg-descr# nevû állomány. Ez a program részletesebb, gyakran többsoros bemutatása.
* Egy [.filename]#pkg-plist# nevû állomány. Itt találjuk meg a port által telepítendõ összes állományt. Ez egyben közli a portrendszerrel is, hogy az eltávolítás során mely állományokat kell majd törölnie.

Egyes portokban szerepelhetnek még egyéb állományok is, mint például a [.filename]#pkg-message#. Ezeket az állományokat a portrendszer különleges helyzetek kezelésére tartogatja. Ha még többet kívánunk megtudni ezekrõl az állományokról, vagy magukról a portokról általánosságban, lapozzuk fel a extref:{porters-handbook}[FreeBSD porterek kézikönyv]ét.

A port ugyan tartalmazza a forráskód lefordításához szükséges utasításokat, de konkrétan a forráskódot nem. Ezt egy CD-rõl vagy az internetrõl tudjuk megszerezni. A forráskód általában a szerzõje által kedvelt formában jelenik meg: ez gyakran egy gzip-pel tömörített tar állomány, de lehet tömörítve mással is, vagy éppen lehet tömörítetlen. A program forráskódját, legyen akármilyen formában is, nevezik "distfile"-nak (terjesztési állománynak). A FreeBSD portok telepítésének két módszerét tárjuk fel a következõkben.

[NOTE]
====
A portok telepítéséhez `root` felhasználóként kell bejelentkeznünk.
====

[WARNING]
====

Mielõtt telepítenénk bármelyik portot is, ajánlott frissíteni a Portgyûjteményünket és ellenõriznünk az adott portot a http://vuxml.freebsd.org[http://vuxml.freebsd.org] címen található biztonsági adatbázisban.

Az újonnan telepítendõ alkalmazások biztonsági sebezhetõségeinek ellenõrzését automatikussá is tehetjük a portaudit használatával. Ez a segédeszköz is a Portgyûjteményben található (package:ports-mgmt/portaudit[]). Érdemes minden port telepítése elõtt letöltenünk a legfrissebb sebezhetõségi adatbázist a `portaudit -F` parancs kiadásával. Mellesleg az adatbázis rendszeres frissítése és ez a biztonsági felülvizsgálat a naponként elvégzendõ biztonsági ellenõrzések közt is megjelenik. Ezekrõl részletesebben a man:portaudit[1] és man:periodic[8] man oldalakon olvashatunk.
====

A Portgyûjtemény feltételezi, hogy mûködõ internet-hozzáféréssel rendelkezünk. Amennyiben ez nem így lenne, a terjesztési állományokat, forráskódokat saját magunknak kell bemásolnunk a [.filename]#/usr/ports/distfiles# könyvtárba.

A kezdéshez lépjünk be a telepítendõ port könyvtárába:

[source,shell]
....
# cd /usr/ports/sysutils/lsof
....

Miután beléptünk az [.filename]#lsof# könyvtárába, láthatjuk a port vázát. A következõ lépés a fordítás, avagy a port "buildelése" (elkészítése). Ezt egy szimpla `make` parancs kiadásával kezdeményezhetjük. Miután megtettük, valami ilyesmit kell tapasztalnunk:

[source,shell]
....
# make
>> lsof_4.57D.freebsd.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
>> Attempting to fetch from ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/.
===>  Extracting for lsof-4.57
...
[ide jön a kitömörítés kimenete]
...
>> Checksum OK for lsof_4.57D.freebsd.tar.gz.
===>  Patching for lsof-4.57
===>  Applying FreeBSD patches for lsof-4.57
===>  Configuring for lsof-4.57
...
[ide jön a configure szkript kimenete]
...
===>  Building for lsof-4.57
...
[ide jön a fordítás kimenete]
...
#
....

A fordítás befejeztével visszakapjunk a parancssort. A soron következõ lépés a port telepítése lesz. Ehhez mindössze egyetlen szóval kell kiegészítenünk a `make` parancs meghívását: ez a szó pedig az `install` (telepít) lesz.

[source,shell]
....
# make install
===>  Installing for lsof-4.57
...
[a telepítés kimenete kimarad]
...
===>   Generating temporary packing list
===>   Compressing manual pages for lsof-4.57
===>   Registering installation for lsof-4.57
===>  SECURITY NOTE:
      This port has installed the following binaries which execute with
      increased privileges.
#
....

Miután ismét visszakaptuk a parancssort, már futtatni is tudjuk a frissen telepített alkalmazásunkat. Mivel az `lsof` programnak tovább jogosultságokra is szüksége van, egy errõl szóló biztonsági figyelmeztetést is láthatunk. A portok létrehozása és telepítése során érdemes figyelnünk az ehhez hasonló figyelmeztetésekre.

A telepítés befejeztével nem árt törölnünk a fordításhoz felhasznált alkönyvtárat (work) is. Ezzel nemcsak a drága lemezterületet spóroljuk meg, hanem megelõzzük a port késõbbi frissítése során felmerülõ esetleges problémákat is.

[source,shell]
....
# make clean
===>  Cleaning for lsof-4.57
#
....

[NOTE]
====
Az eljárásból két lépést meg is tudunk takarítani, ha egyszerûen csak a `make install clean` parancsot adjuk ki az elõbb három lépésben tagolt `make`, `make install` és `make clean` parancsok helyett.
====

[NOTE]
====
Bizonyos parancsértelmezõk a `PATH` környezeti változóban felsorolt könyvtárakban található parancsokat gyorsítótárban tárolják, ezzel felgyorsítva a hozzájuk tartozó végrehajtható állományok keresését. Ha történetesen ilyen parancsértelmezõt használnánk, az új portok telepítése után szükségünk lehet a `rehash` parancs kiadására, mivel enélkül nem tudjuk elérni a frissen telepített parancsokat. Ezt a parancsot például a `tcsh` és a hozzá hasonló parancsértelmezõkben találhatjuk meg, az `sh` és rokonainál pedig a `hash -r` ennek a megfelelõje. A pontos információkat errõl a témáról a parancsértelmezõnk dokumentációjában lelhetjük meg.
====

Némely külsõ DVD termék, mint például a http://www.freebsdmall.com[FreeBSD Mall]tól megrendelhetõ FreeBSD Toolkit, tartalmazhatnak terjesztési állományokat. Ezek remekül használhatóak a Portgyûjteménnyel. Ehhez csatlakoztatnunk kell a DVD-t a [.filename]#/cdrom# könyvtárba. Ettõl eltérõ csatlakozási pontok használata esetén ne felejtsük el átállítani a `CD_MOUNTPTS` változót sem a `make` számára. Ekkor a fordításhoz szükséges állományokat úgy fogja kezelni a rendszer, mintha a merevlemezünkön lennének.

[NOTE]
====
Vigyázzunk arra, hogy néhány portot nem lehet CD-n terjeszteni. Ez részben azért lehet, mert a szükséges állományok letöltéséhez, illetve újbóli terjesztéséhez ki kell tölteni valamilyen regisztrációs nyomtatványt, vagy pedig egyéb okok miatt. Tehát ha olyan portot akarunk telepíteni, ami nincs rajta a CD-n, mindenképpen rendelkeznünk kell internetkapcsolattal.
====

A portrendszer a man:fetch[1] segédprogramot használja az állományok letöltésére, amely figyelembevesz különféle környezeti változókat, ilyenek többek közt az `FTP_PASSIVE_MODE`, `FTP_PROXY` és az `FTP_PASSWORD`. Ha tûzfal mögött vagyunk, szükségünk lehet ezek némelyikének helyes beállítására, vagy FTP/HTTP proxyt kell használnunk. A man:fetch[3] man oldala tartalmazza ezen változók teljes listáját.

A `make fetch` azon felhasználók számára nyújt segítséget, akik nem csatlakoznak minden esetben a hálózatra. Egyszerûen csak futtassuk le a könyvtárszerkezet legtetejérõl ([.filename]#/usr/ports#) ezt a parancsot és a szükséges állományok letöltõdnek nekünk. A parancs mûködik az alsóbb szinteken is, például a [.filename]#/usr/ports/net# könyvtárban. Azonban legyünk tekintettel arra, hogy ha egy port függ más portoktól vagy függvénykönyvtáraktól, ez a parancs _nem fogja_ letölteni a hozzájuk tartozó állományokat. Ilyenkor a `fetch` helyett használjuk a `fetch-recursive` targetet.

[NOTE]
====
Ha a `make` parancsot egy felsõbb szinten futtatjuk, akkor ezzel létre tudjuk hozni az összes vagy csak kategóriánként az összes portot, hasonlóan az elõbb említett `make fetch` módszerhez. Ez azonban veszélyes, mivel egyes portok kizárják mások használatát. Emellett elõfordulhat az is, hogy bizonyos portok ugyanazon a néven telepítenek több, tartalmukban különbözõ állományt.
====

Nagyon ritkán adódhat, hogy a felhasználónak nem a `MASTER_SITES` által mutatott helyekrõl kell beszereznie a szükséges állományokat (innen töltõdnek ugyanis le). A `MASTER_SITES` beállítást az alábbi paranccsal bírálhatjuk felül:

[source,shell]
....
# cd /usr/ports/könyvtár
# make MASTER_SITE_OVERRIDE= \
ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/ fetch
....

Ebben a példában a `MASTER_SITES` értékét a `ftp.FreeBSD.org/pub/FreeBSD/ports/distfiles/` címre változtattuk meg.

[NOTE]
====
A portok némelyike lehetõvé teszi (esetleg meg is követeli), hogy engedélyezzük vagy letiltsuk a készülõ program bizonyos elemeit hatékonysági, biztonsági vagy egyéb testreszabási irányelvek mentén. Ilyen többek közt a package:www/mozilla[], a package:security/gpgme[] és a package:mail/sylpheed-claws[]. Ha elérhetõek ilyen beállítási lehetõségek, arról a rendszer egy üzenetben tájékoztat minket.
====

==== Az alapértelmezett könyvtárak felülbírálása

Néha hasznos (vagy kötelezõ) lehet eltérõ munka- és célkönyvtárak alkalmazása. A `WRKDIRPREFIX` és a `PREFIX` változókkal ezek alapértelmezéseit tudjuk megváltoztatni. Például a

[source,shell]
....
# make WRKDIRPREFIX=/usr/home/example/ports install
....

parancs a portot a [.filename]#/usr/home/example/ports# könyvtárban fogja lefordítani és az eredményét a [.filename]#/usr/local# könyvtárba telepíti. A

[source,shell]
....
# make PREFIX=/usr/home/example/local install
....

parancs hatására a port a [.filename]#/usr/ports# könyvtárban készül el és a [.filename]#/usr/home/example/local# könyvtárba települ.

Természetesen a

[source,shell]
....
# make WRKDIRPREFIX=../ports PREFIX=../local install
....

parancs ötvözi az elõbbi kettõt (amelyet most túlságosan is hosszú lenne kiírni, de vélhetõen sejthetõ belõle az alapötlet).

Lehetõség van ezen változókat a saját környezetünkben is beállítani. Ha erre lenne szükségünk, nézzünk utána az ezzel kapcsolatos teendõnek a parancsértelmezõnk man oldalán.

==== Az `imake` használatáról

Bizonyos portok az (X Window System részeként megjelenõ) `imake` segédprogramra támaszkodnak, ahol viszont nem mûködik a `PREFIX` átállítása és mindenképpen a [.filename]#/usr/X11R6# könyvtárba akar telepíteni. Ehhez hasonlóan egyes Perl portok figyelmen kívül hagyják a `PREFIX` változót és közvetlenül a Perl fájába kerülnek. Az ilyen portok esetén nagyon nehéz vagy szinte lehetetlen betartatni a `PREFIX` használatát.

==== A portok újrakonfigurálása

Egyes portok lefordítása elõtt megjelenik egy ncurses alapú menü, ahol ki tudunk választani bizonyos fordítási beállításokat. Gyakran elõfordul, hogy a port lefordítása után a felhasználók szeretnék újra elõhozni ezt a menüt és megadni vagy kivenni bizonyos beállításokat. Erre több mód is kínálkozik. Egyik ilyen lehetõség az, ha belépünk a port könyvtárába és kiadjuk a `make config` parancsot, amivel lényegében ismét elõcsaljuk a beállításokat összefoglaló menüt. Másik ilyen lehetõség a `make showconfig` alkalmazása, amivel a porthoz tartozó összes beállítást tudjuk egyszerre megjeleníteni. Ezek mellett még használható a `make rmconfig` parancs is, amivel törölni tudjuk az összes eddigi beállítást és így újrakezdhetjük a port konfigurációját. Ezek és a többi ilyen opció a man:ports[7] man oldalon kerül bõvebb kifejtésre.

[[ports-removing]]
=== A portok eltávolítása

Most már tudjuk, miként lehet portokat telepíteni, azonban valószínûleg még az is érdekelhet minket, hogy miként kell ezeket eltávolítani abban az esetben, ha például késõbb meggondolnánk magunkat velük kapcsolatban. A korábban telepített példaportot fogjuk eltávolítani (a figyelmetlenek kedvéért megemlítjük, hogy ez az `lsof` volt). A portok eltávolítása teljesen egybevág a csomagokéval (errõl a <<packages-using,csomagokról szóló részben>> beszéltünk), mivel ekkor is használhatjuk a man:pkg_delete[1] parancsot:

[source,shell]
....
# pkg_delete lsof-4.57
....

[[ports-upgrading]]
=== A portok frissítése

Elõször is a man:pkg_version[1] parancs felhasználásával listázzuk ki azokat a portokat, amik felett már eljárt az idõ és a Portgyûjteményben található belõlük újabb verzió:

[source,shell]
....
# pkg_version -v
....

[[ports-file-updating]]
==== A [.filename]#/usr/ports/UPDATING# állomány

Miután frissítettük a Portgyûjteményünket, de még mielõtt megpróbálnánk akármelyik portot is frissíteni, érdemes egy pillantást vetnünk a [.filename]#/usr/ports/UPDATING# állományra. Itt megtalálhatóak azok a problémák és a hozzájuk tartozó lépések, amelyekkel a felhasználóknak a portok frissítése során szembe kell nézniük, beleértve az állományformátumok, a konfigurációs állományok helyének megváltozását vagy egyéb olyan módosításokat, amik a korábbi verziókkal összeférhetetlenséget szülhetnek.

Amennyiben az [.filename]#UPDATING# állomány tartalma ellentmondana az itt olvasottakkal, mindig az [.filename]#UPDATING# állományban leírtak az irányadóak.

[[portupgrade]]
==== Portok frissítése a portupgrade használatával

A portupgrade nevû segédprogramot a portok egyszerûbb frissítésére találták ki, és a package:ports-mgmt/portupgrade[] portban található meg. A `make install clean` paranccsal bármelyik más porthoz hasonlóan telepíthetjük:

[source,shell]
....
# cd /usr/ports/ports-mgmt/portupgrade
# make install clean
....

A `pkgdb -F` paranccsal fésültessük át a telepített portok listáját, és javítsuk az általa jelentett ellentmondásokat. Érdemes rendszeresen elvégezni ezt, lehetõleg minden frissítés elõtt.

Miután kiadtuk a `portupgrade -a` parancsot, a portupgrade nekilát frissíteni az összes elavult portot a rendszerünkben. Ha minden egyes frissítést külön meg szeretnénk erõsíteni, használjuk a `-i` kapcsolót is.

[source,shell]
....
# portupgrade -ai
....

Ha nem akarjuk az összes portot frissíteni, csupán egy bizonyos alkalmazásét, használjuk a `portupgrade pkgname` paraméterezést. A `-R` kapcsoló megadásával a portupgrade elõször frissíti az adott alkalmazás függõségeit.

[source,shell]
....
# portupgrade -R firefox
....

Ha a mûvelet során csomagokat kívánunk használni portok helyett, adjuk meg a `-P` kapcsolót. Ennek révén a portupgrade megkeresi a csomagokat a `PKG_PATH` környezeti változóban felsorolt könyvtárakban vagy ha itt nem találja, letölti ezeket egy távoli szerverrõl. Amennyiben a csomagokat sem helyben, sem pedig a távoli szerveren nem találja, a portupgrade helyettük portokat fog használni. Ilyenkor a portok használatát a `-PP` kapcsoló beállításával lehet elkerülni:

[source,shell]
....
# portupgrade -PP gnome2
....

Csak a terjesztési állományok (vagy a `-P` esetén csomagok) letöltéséhez használjuk a `-F` kapcsolót. Mindezekrõl részletesebben a man:portupgrade[1] man oldalon olvashatunk.

[[portmanager]]
==== Portok frissítése a Portmanager használatával

A Portmanager egy másik hasznos segédprogram a portok könnyû frissítéséhez. A package:ports-mgmt/portmanager[] porton keresztül érhetõ el:

[source,shell]
....
# cd /usr/ports/ports-mgmt/portmanager
# make install clean
....

Használatával az összes telepített port egyetlen paranccsal frissíthetõ:

[source,shell]
....
# portmanager -u
....

Ha a Portmanager minden egyes lépését külön meg kívánjuk erõsíteni, akkor a `-ui` kapcsolókat se felejtsük el megadni. A Portmanager emellett új portok telepítésére is használható. Eltérõen a `make install clean` parancsban megszokottaktól, a kiválasztott port összes függõségét még a fordítás és a telepítés elõtt fogja frissíteni.

[source,shell]
....
# portmanager x11/gnome2
....

Ha bármilyen gondot tapasztalnánk a kiválasztott port függõségeit illetõen, a Portmanagert felkérhetjük az összes függõség helyes sorrendben történõ újrafordítására. Amikor befejezte, a problémás portot is újra létrehozza.

[source,shell]
....
# portmanager graphics/gimp -f
....

Bõvebb információkért lásd man:portmanager[1].

==== Portok frissítése a Portmaster használatával

A Portmaster szintén a portok frissítésére alkalmas segédprogram. A Portmaster esetében a hangsúly az "alaprendszerben" is megtalálható eszközök használatán van (tehát nem függ semmilyen más porttól) és a [.filename]#/var/db/pkg/# könyvtárban található információk alapján dönti el, hogy milyen portokat kell frissítenie. A package:ports-mgmt/portmaster[] portból érhetõ el:

[source,shell]
....
# cd /usr/ports/ports-mgmt/portmaster
# make install clean
....

A Portmaster a portokat az alábbi négy kategória valamelyikébe sorolja be:

* Gyökér (root) portok (nem függenek semmitõl, semmi sem függ tõlük)
* Törzs (trunk) portok (nem függenek semmitõl, de mások függenek tõlük)
* Ág (branch) portok (vannak függõségeik és mások is függenek tõlük)
* Levél (leaf) portok (vannak függõségeik, de semmi sem függ tõlük)

A következõ paranccsal le tudjuk kérni az összes telepített portot és az `-L` kapcsolóval frissítéseket keresni hozzájuk:

[source,shell]
....
# portmaster -L
===>>> Root ports (No dependencies, not depended on)
===>>> ispell-3.2.06_18
===>>> screen-4.0.3
        ===>>> New version available: screen-4.0.3_1
===>>> tcpflow-0.21_1
===>>> 7 root ports
...
===>>> Branch ports (Have dependencies, are depended on)
===>>> apache-2.2.3
        ===>>> New version available: apache-2.2.8
...
===>>> Leaf ports (Have dependencies, not depended on)
===>>> automake-1.9.6_2
===>>> bash-3.1.17
        ===>>> New version available: bash-3.2.33
...
===>>> 32 leaf ports

===>>> 137 total installed ports
        ===>>> 83 have new versions available
....

Az összes telepített port egyetlen egyszerû paranccsal frissíthetõ:

[source,shell]
....
# portmaster -a
....

[NOTE]
====
A Portmaster alapértelmezés szerint minden egyes törlendõ korábbi portról biztonsági másolatot készít. Amikor az új változat telepítése sikeresen lezajlott, akkor a Portmaster ezt a másolatot megsemmisíti. A `-b` paraméterrel azonban megkérhetjük, hogy ne törölje le a biztonsági mentést. Az `-i` megadásával a Portmaster interaktív módban indul el, és minden port frissítése elõtt a felhasználó megerõsítését fogja kérni.
====

Amennyiben valamilyen hiba lép fel a frissítés folyamán, az `-f` opció megadásával kérhetjük az összes port frissítését és újrafordítását is:

[source,shell]
....
# portmaster -af
....

A Portmaster használatával új portokat is fel tudunk telepíteni a rendszerre úgy, hogy azok függõségeit is igyekszik frissíteni a lefordításuk elõtt:

[source,shell]
....
# portmaster shells/bash
....

A további részleteket a man:portmaster[8] man oldalon találjuk.

[[ports-disk-space]]
=== A portok tárigénye

A Portgyûjtemény idõvel egyre több helyet fog elfoglalni a merevlemezünkön. Miután sikeresen létrehoztunk és telepítettünk egy szoftvert a hozzá tartozó portból, érdemes mindig eltakarítanunk magunk után a [.filename]#work# könyvtárban menet közben keletkezett átmeneti állományokat a `make clean` parancs használatával. Az egész Portgyûjteményt egyetlen mozdulattal ezzel a paranccsal tudjuk végigsepregetni:

[source,shell]
....
# portsclean -C
....

Az idõ elõrehaladtával a [.filename]#distfiles# könyvtárban is rengeteg régi forrás tud felhalmazódni. Ezeket eltávolíthatjuk kézzel, vagy az alábbi parancs segítségével törölhetjük az összes olyan terjesztési állományt, amelyekre már egyetlen port sem hivatkozik:

[source,shell]
....
# portsclean -D
....

Vagy törölhetjük az összes olyan terjesztési állományt, amelyre egyetlen pillanatnyilag feltelepített port sem hivatkozik a rendszerünkben:

[source,shell]
....
# portsclean -DD
....

[NOTE]
====
A `portsclean` segédprogram a portupgrade programcsomag része.
====

Ne felejtsük el eltávolítani azokat a portokat, amikre már nincs szükségünk a továbbiakban. Ebben a feladatban egy jól használható segédeszköz lehet a segítségünkre, a package:ports-mgmt/pkg_cutleaves[] port.

[[ports-nextsteps]]
== Telepítés utáni teendõk

Az új alkalmazás feltelepítése után minden bizonnyal szeretnénk elolvasni a hozzá társított dokumentációt, az egyedi beállításainknak megfelelõen módosítani a konfigurációs állományokat, engedélyezni a rendszerindítás során történõ automatikus indítását (ha démonról lenne szó) és így tovább.

Az egyes alkalmazások beállításához elvégzendõ lépések nyilvánvalóan egyedenként eltérõek. Azonban tudunk szolgálni néhány általános tanáccsal válaszként az ilyenkor felmerülõ "Na és akkor most mi legyen?" kérdésre:

* Kérdezzük meg a man:pkg_info[1] programtól, milyen állományok és hova kerültek fel a telepítés során. Például, ha a SzuperCsomag 1.0.0-át raktunk fel, akkor a
+
[source,shell]
....
# pkg_info -L SzuperCsomag-1.0.0 | less
....
+ 
parancs kilistázza az összes állományt, amit a csomagból felraktunk. Ezek közül leginkább a [.filename]#man/# könyvtárban levõekre figyeljünk, mivel ezek lesznek az alkalmazás man oldalai. Ehhez hasonlóan az [.filename]#etc/# könyvtárban a konfigurációs állományok és a [.filename]#doc/# könyvtárban pedig a nagyobb lélegzetvételû dokumentációk foglalnak helyet.
+ 
Ha nem emlékszünk pontosan rá, hogy az alkalmazások melyik verzióját is telepítettük, a
+
[source,shell]
....
# pkg_info | grep -i SzuperCsomag
....
+ 
alakú parancs megkeresi az összes olyan csomagot, aminek a nevében szerepel a _SzuperCsomag_ szövegrészlet. A fenti példában természetesen igény szerint változtassuk meg a _SzuperCsomag_ szöveget a tényleges csomag nevére.
* Ahogy sikerült megtalálnunk az alkalmazáshoz tartozó man oldalakat, lapozzuk fel ezeket a man:man[1] segítségével. Ugyanígy nézzük át a mellékelt minta konfigurációs állományokat és az összes elérhetõ dokumentációt.
* Ha az alkalmazásnak van saját honlapja, kutassunk ott is információk után, olvassuk el a gyakran ismételt kérdéseket és így tovább. Ha nem tudnánk pontosan a honlap címét, a
+
[source,shell]
....
# pkg_info SzuperCsomag-1.0.0
....
+ 
kimenetébõl könnyen elõkeríthetõ. Itt egy `WWW:` kezdetû sort kell keresnünk (már amennyiben létezik), amit az alkalmazás honlapjának címe kell kövessen.
* A rendszerrel együtt indítandó portok (ilyenek többek közt az internetes szolgáltatások), általában a [.filename]#/usr/local/etc/rc.d# könyvtárba rakják a saját indítószkriptjüket. Érdemes leellenõrizni ezt a szkriptet és az igényeinknek megfelelõen módosítani, átnevezni. A crossref:config[configtuning-starting-services,Szolgáltatások indítása] címû szakaszban ezt részleteiben is megismerhetjük.

[[ports-broken]]
== Teendõ a sérült portokkal

Ha véletlenül ráakadnánk egy olyan portra, ami nem mûködik megfelelõen, nagyjából a következõket tudjuk tenni:

. Derítsük ki a link:https://www.FreeBSD.org/support/#gnats[Hibajelentések adatbázisá]ból, hogy készül-e már javítás az adott porthoz. Ha igen, akkor annak befejezése után már képesek leszünk használni.
. Kérjük meg a port karbantartóját, hogy segítsen. A karbantartó elérhetõségének felderítéséhez gépeljük be a `make maintainer` parancsot, vagy keressük meg a [.filename]#Makefile# állományban a karbantartó e-mail címét. Ne felejtsük el neki megemlíteni a levélben a port nevét és verzióját (vagyis mindenképpen küldjük el a `$FreeBSD:` sort a [.filename]#Makefile# állományból) és a parancs kiadásától a hiba felbukkanásáig tartó kimenetet.
+
[NOTE]
====
Némely portokat nem egyedülálló személyek tartanak karban, hanem egy extref:{mailing-list-faq}[levelezési lista]. A legtöbbjük neve, ha nem is mindé, nagyjából ilyen alakú: mailto:freebsd-listanév@FreeBSD.org[freebsd-listanév@FreeBSD.org]. Egy ilyen jellegû kérdés megfogalmazása során ezt is vegyük figyelembe!

Kifejezetten a mailto:ports@FreeBSD.org[ports@FreeBSD.org] karbantartóval rendelkezõ portoknak nincs rendes gazdája. A hozzájuk kapcsolódó javítások és mindenféle segítség, ötlet errõl a levelezési listáról érkeznek. Ilyen esetekben számítunk az önkéntes segítõkre!
====
+ 
Ha nem kapunk semmilyen választ, a hiba bejelentésére használhatjuk a man:send-pr[1] programot is (errõl bõvebben lásd a extref:{problem-reports}[FreeBSD-s hibajelentések írása] címû cikket).
. Javítsuk meg mi magunk! A extref:{porters-handbook}[porterek kézikönyve] részletesen taglalja a "portok" belsõ felépítését, így onnan elindulva akár magunktól is meg tudunk javítani egy esetlegesen sérült portot, vagy be is küldhetjük a sajátunkat!
. Töltsük le a porthoz tartozó csomagot a hozzánk legközelebb levõ FTP oldalról. A "központi" csomaggyûjtemény az `ftp.FreeBSD.org` címen, a link:ftp://ftp.FreeBSD.org/pub/FreeBSD/ports/packages/[packages nevû könyvtárban] található, de mielõtt ide fordulnánk, nézzük meg a hozzánk http://mirrorlist.FreeBSD.org/[legközelebb levõ tükörszervert] is! Ha egy csomagot így telepítünk, akkor több eséllyel fog mûködni és ráadásul még jóval gyorsabb is. A csomag telepítésére használjuk a man:pkg_add[1] programot.
