A Portsnap a FreeBSD portfájának biztonságos terjesztésére megalkotott rendszer. Hozzávetőleg óránként egyszer a portfa egy újabb “pillanatképe” jön létre, amit ezután tömörítenek és digitálisan aláírnak. Az így keletkező állományokat végül HTTP-n keresztül terjesztik.
A CVSuphoz hasonlóan a Portsnap szintén lehúzással frissít. Ennek folyamán a becsomagolt és aláírt portfák egy webszerveren tároltan várják passzívan a kliensek kéréseit. A felhasználók így vagy a portsnap(8) elindításával azonnal, vagy pedig a cron(8) segítségével rendszeresen automatikusan kérhetnek frissítéseket.
Technikai megfontolásokból a Portsnap nem közvetlenül a /usr/ports/ könyvtárban található “éles” portfát változtatja meg. Helyette alapértelmezés szerint a /var/db/portsnap/ könyvtárba kerülő tömörített változatával dolgozik. A frissítés befejeztével ezzel a tömörített változattal módosítja az éles portfát.
Megjegyzés: Ha a Portsnapet a FreeBSD Portgyűjteményéből telepítjük, akkor alapértelmezés szerint a tömörített pillanatképet a /var/db/portsnap/ könyvtár helyett a /usr/local/portsnap/ könyvtárban hozza létre.
A FreeBSD 6.0 vagy későbbi változataiban már a Portsnap az alaprendszer része. A FreeBSD korábbi verzióra a ports-mgmt/portsnap porton keresztül telepíthetjük.
A Portsnap működését az /etc/portsnap.conf konfigurációs állomány vezérli. A felhasználók többségének a benne helyet kapott alapbeállítások megfelelőek. Aki kíváncsi a részletekre, nézze meg a portsnap.conf(5) man oldalt.
Megjegyzés: Amennyiben a Portsnapet a FreeBSD Portgyűjteményéből telepítettük, a /etc/portsnap.conf helyett a /usr/local/etc/portsnap.conf konfigurációs állományt fogja használni. Ez az állomány a port telepítésekor ugyan nem jön létre automatikusan, de találhatunk belőle egy mintát, amit a következő paranccsal tudunk a helyére másolni:
# cd /usr/local/etc && cp portsnap.conf.sample portsnap.conf
A portsnap(8) első futtatásakor le kell töltenünk a /var/db/portsnap/ (vagy /usr/local/portsnap/, ha a Portsnapet a Portgyűjteményből telepítettük) könyvtárba az egész portfa tömörített képét. Ez 2006 elejétől nagyjából 41 MB méretűre dagadt.
# portsnap fetch
Miután sikerült letöltenünk a tömörített képet, az “éles” portfa egy példányát tudjuk kibontani a /usr/ports/ könyvtárba. Ez a lépés még abban az esetben is kötelező, ha már valamilyen módon feltöltöttük volna ezt a könyvtárat (például a CVSup segítségével), hiszen ekkor hozza létre a portsnap a működéséhez szükséges adatokat is, amelyek révén el tudja majd dönteni, hogy a portfa pontosan mely részeit kell frissítenie.
# portsnap extract
Megjegyzés: A telepítés során alapból nem jön létre a /usr/ports/ könyvtár. Ha a FreeBSD 6.0-RELEASE kiadását használjuk, akkor a portsnap indítása előtt ezt a könyvtárat el kell készítenünk. A FreeBSD vagy a Portsnap újabb változataiban a portsnap első használata során ez már azonban önmagától megtörténik.
Miután letöltöttük a portfa kiinduló pillanatképét és kibontottuk a /usr/ports/ könyvtárba, a frissítése két lépésben végezhető el: először elkérjük (fetch) a tömörített kép frissítéseit, majd ezután az így nyert módosításokat érvényesítjük az éles portfán (update). Ez a két lépés egyetlen portsnap parancs kiadásával összefoglalható:
# portsnap fetch update
Megjegyzés: A portsnap némely régebbi változatai nem támogatják ezt a típusú felírást. Ha tehát nem működne az iménti parancs, akkor helyette próbáljuk meg ezt:
# portsnap fetch # portsnap update
A Portsnap szervereken keletkező “hirtelen tömeg” elkerülése érdekében a portsnap fetch nem fog cron(8) feladatként futni. Ehelyett erre létezik egy külön portsnap cron parancs, amivel a frissítések letöltése előtt véletlenszerűen vár legfeljebb 3600 másodpercet.
Emellett a portsnap update parancs
futtatását sem javasoljuk cron
feladatként, mivel komoly problémákat
képes okozni akkor, amikor egy port
fordítása vagy telepítése
során adjuk ki. Azonban az -I
kapcsoló megadásával a portok
INDEX állományát
biztonságosan tudjuk frissíteni. (Ebből
nyilvánvalóan következik, hogy a
portsnap -I update lefutása
után a portsnap update parancsot is ki
kell majd adni az -I
kapcsoló
nélkül a fa többi részének
frissítéséhez.)
Ha felvesszük a következő sort az /etc/crontab állományba, akkor a portsnap frissíteni fogja a tömörített felvételt és a /usr/ports/ könyvtárban levő INDEX állományokat, és küld egy levelet az elavult feltelepített portokról:
0 3 * * * root portsnap -I cron update && pkg_version -vIL=
Megjegyzés: Ha a rendszeróra nem helyi idő szerint jár, akkor a 3 értéket cseréljük ki egy 0 és 23 között tetszőleges számra, így hozzájárulunk a a Portsnap szerverek terhelésének egyenletes elosztásához.
Megjegyzés: A portsnap egyes korábbi változatai nem engednek meg egyszerre több parancsot (mint például a cron update). Ha az iménti felírásban hibát kapunk, akkor próbáljuk meg a portsnap -I cron update parancsot kicserélni a portsnap cron && portsnap -I update parancsra.
Ha kérdése van a FreeBSD-vel kapcsolatban, a következő
címre írhat (angolul): <freebsd-questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése,
kérjük erre a címre írjon: <gabor@FreeBSD.org>.