FreeBSD csomagkezelés és a ports-tree

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.