A BSD operációs rendszerek csomagkezelése (természetesen azon kívül, hogy letöltjük a tömörített forrást, kicsomagoljuk, lefordítjuk) kétféleképpen történhet. Az egyik megoldást az jelenti, hogy a más UNIX rendszerekben (pl. Solaris) is ismert pkg_add paranccsal telepítjük a binárist. A másik megoldás a ports-tree használata. A következőkben mindkét megoldást megvizsgáljuk, eredetiségénél fogva főként a ports-tree-re fókuszálva.
FreeBSD csomagkezelés és a ports-tree
Nézzünk először egy példát a binárisból való telepítésre! A mindenkori legfrissebb csomaggyűjteményt itt fogjuk elérni:
http://ftp.freebsd.org/pub/FreeBSD/ports/packages/All/
Innen kiválasztva a kívánt csomagot a telepítés megkezdődik.
freebsd# pkg_add -r http://ftp.freebsd.org/pub/FreeBSD/ports/packages/All/lynx-2.8.8d12_1.tbz
A dependenciákat lekezelve, installálja a kívánt csomagot, jelen esetben a ’lynx’-t., melyet a /usr/local/bin/lynx útvonalon fogunk tudni elérni.
Ugyanez megtehető a sysinstall használatával is:
freebsd# sysinstall
Configure –> Packages -> FTP vagy FTP Passive -> Válasszuk ki az ftp site-ot
PORTS tree
A másik megoldás azonban egy a BSD-kre jellemző, sokkal izgalmasabb útja a csomagtelepítésnek: ez pedig a ports-tree.
Mi az a ports-tree (port-fa)? A port-fa gyakorlatilag egy forráskód gyűjtemény, melyben az alkalmazások leíró állománya található, ill. a fordításhoz szükséges MAKEFILE. Magát a forráskódot NEM tartalmazza. A forráskód telepítéskor töltődik le frissen, vagy adhatjuk meg, honnan éri el az install script.
A port gyűjtemény használatával nagyon egyszerűen tudunk csomagot telepíteni, melynek több előnye is van:
- az alkalmazás a mi saját gépünkön fordul le ill. oda optimalizált (vagy optimalizálható)
- mindig a gyűjteményben található legfrissebb forrás fog letöltődni telepítéskor
- ez a telepítési mód is automatikusan kezeli a függőségeket
- lehetőség van az alkalmazások security auditjára
- automatikusan frissíthető akár az összes telepített port
- egyszerű az eltávolíthatóság
Ehhez persze szükségünk van magára a port gyűjteményre. FreeBSD alatt ennek legegyszerűbb módja a „portsnap” használata. Készítsük elő ehhez a környezetet:
freebsd# cd /usr
freebsd# mkdir ports
freebsd# cd ports/
Majd adjuk ki a
freebsd# portsnap fetch parancsot!
Itt legyünk kis türelemmel, mert le fogja tölteni a port-gyűjteményt, ami ,mint látjuk a fenti képen, 67MB. Ha letöltődött, akkor ki is kell tömörítenünk, ezt a portsnap szintén megteszi, a következőképpen:
freebsd# portsnap extract (a két parancs egyébként egyben is kiadható: portsnap fetch extract )
Majd valami hasonló lesz a vége:
Most várjunk, igyunk egy kávét, ez még egy jobb gépen is eltart egy darabig, több ezer kicsi állomány kitömörítése történik meg. Kitömörítés után generálódik egy INDEX file, mely a későbbiekben a keresésnél igen hasznos lesz, majd elkészült az elérhető legfrissebb port gyűjtemény kitömörített replikája a saját gépünkön.
Update
Ha már van létező port-fánk, a következőképp frissíthető:
freebsd# portsnap fetch update
Keresés a portok közt
Keresni kétféleképpen tudunk:
– port nevére
– kulcsszóra
freebsd# cd /usr/ports
freebsd# make search name=bash
vagy
freebsd# make search key=bash (ez utóbbi igen hosszú kimenetű lesz, ugyanis mindenben keres, leírásban, függőségekben, stb.)
A mi példánknál maradva a ’bash’-sel, a következőhöz hasonló kimenetet fogunk látni:
Telepítés
Telepítsünk hát ’bash’ shell-t. Ehhez a következőket kell tennünk: láthatjuk, hogy a port-tree alatt, a bash leírói a pathban szereplő /usr/ports/shells/bash útvonalon helyezkednek el. Váltsunk könyvtárat, és lépjünk ide:
freebsd# cd /usr/port/shells/bash
Majd adjuk ki a következő parancsot:
freebsd# make install
Ekkor a leíró állományban szereplő siteról letölti a bash forráskódját, kitömöríti, majd elkezdi lefordítani. Közben ellenőrzi természetesen a függőségeket, és amennyiben hiánya van, akkor automatikusan leszedi és lefordítja közben a hiányzó csomagokat is. Ha az adott csomagnak valamilyen konfigurálható opciója van, akkor erre ugyancsak rákérdez, ilyeténképpen (itt az m4 csomagéra):
Majd mikor mindent lefordított, és installálta a megfelelő helyre, akkor körülbelül ilyesmivel ér véget a telepítés:
Próbáljuk is ki:
freebsd# bash
A ’bash’ shell installja sikeres volt. Megtehetjük, hogy a letöltött dependenciák lefordított objektumait forrását eltávolítjuk a ‘make clean’ ill. a tömörített forrást magát a ‘make distclean’ parancsokkal:
freebas# make clean
freebsd# make distclean
Törlés
Hogyan tudjuk eltávolítani a port-treeből installált csomagot? Próbáljuk ki ezt is:
freebsd# make deinstall
Csomag újratelepítése
Felmerülhet az igény telepített csomag újra-installálására, ha esetleg másik csomaggal való függőség inkonzisztencia pl. miatt a telepített csomagunk nem működik:
freebsd# make reinstall
Itt előfordulhat, hogy hibaüzenetet kapunk, miszerint a FORCE_PKG_REGISTER környezeti változót állítsuk 1-re. Ezt függően a shelltől, a megfelelő parancs kiadásával meg kell tennünk (pl. export FORCE_PKG_REGISTER=1).
Custom install
Ha egy portot szeretnénk saját opciókkal fordítani és installálni, akkor ezt is megtehetjük. Adjuk ki a ’make fetch’ parancsot a kívánt port könyvtárában. Ennek eredményeképpen letölti és kitömöríti az adott csomag forrását. Itt vagy kézzel editáljuk a Makefilet (ez több egyéni opciót tesz lehetővé, optimalizációt, stb), vagy ha kényelmesebbek vagyunk, akkor kiadjuk a ’make config’ parancsot, itt menüs felületen tehetjük meg ugyanezt.
freebsd# make config
Az OK megnyomása után a make install-al a már leírtak szerint megtörténik a telepítés.
Security audit
Említettem a portokról szóló bevezetőben a security auditot. Azt hiszem, nem kell hangsúlyoznom, hogy főleg egy produktív rendszerben milyen fontos, hogy rendszerünk esetleges sebezhetőségeiről tudjunk és lehetőség szerint megpróbáljuk ezeket orvosolni. Erre kínál megoldást a portaudit nevű csomag, melyet először fel kell telepítenünk.
freebsd# cd /usr/ports/ports-mgmt/portaudit
freebsd# make install clean
freebsd# /usr/local/sbin/portaudit –Fda
Letöltődik a legfrissebb auditfile, és egy gyors elemzés után megkapjuk a biztonsági ellenőrzés eredményét. Fontos megjegyezni, hogy a portaudit installjakor egy schedule kerül a /usr/local/etc/periodic/security/ könyvtárba, majd innen naponta lefut, és letölti a friss auditfilet.
Összegzés
A FreeBSD csomagkezelése nagyon egyszerűnek és UNIX-os szemszögből nézve felhasználóbarátnak mondható. A port-tree használatával mindig naprakész állapotú csomagot kaphatunk és telepíthetünk. A portaudit használatával rendszerünk biztonságát is meg tudjuk őrizni ill. naprakészen tudjuk tartani. A leírás alkalmazható OpenBSD-n és NetBSD-n is, az ok, hogy mégis ebben a topicba került az, hogy a sysinstall specifikus dolgok csak FreeBSD-re jellemzőek, ill. hogy a másik két OS-nél wgettel vagy egyéb más downloaderrel kell letöltenünk a portfát, mivel ott alapértelmezésben nincs portsnap, azt is port-tree-ből kell feltennünk.