FreeBSD Csomagok és Portok Kezelése
Bevezetés
A FreeBSD két fő módszert kínál szoftverek telepítésére és kezelésére: a bináris csomagokat és a ports rendszert. Mindkét megközelítésnek megvannak a maga előnyei és hátrányai. Ebben a cikkben részletesen bemutatjuk mindkét módszert, segítve a rendszergazdákat abban, hogy kiválasszák a számukra legmegfelelőbb megoldást.
Csomagkezelés (pkg)
A pkg
a FreeBSD modern bináris csomagkezelő rendszere, amely lehetővé teszi előre fordított szoftverek egyszerű telepítését és kezelését.
A pkg előnyei
- Gyors telepítés (nincs szükség fordításra)
- Minimális függőségek a telepítéshez
- Egyszerű használat
- Kisebb erőforrásigény
A pkg alapjai
Inicializálás
Az első használat előtt inicializálni kell a pkg rendszert:
pkg bootstrap
Csomagtárak konfigurálása
A csomagtárak beállításai a /etc/pkg/
könyvtárban találhatók. Az alapértelmezett konfigurációs fájl a /etc/pkg/FreeBSD.conf
. Saját konfigurációs fájlokat is létrehozhatunk a /usr/local/etc/pkg/repos/
könyvtárban.
Példa egy egyéni csomagtár konfigurációjára:
# /usr/local/etc/pkg/repos/custom.conf
custom: {
url: "http://pkg.example.com/${ABI}",
mirror_type: "http",
signature_type: "none",
enabled: yes
}
Alapvető parancsok
-
Csomaglista frissítése:
pkg update
-
Csomag keresése:
pkg search nginx
-
Csomag információk megjelenítése:
pkg info nginx
-
Csomag telepítése:
pkg install nginx
-
Összes csomag frissítése:
pkg upgrade
-
Csomag eltávolítása:
pkg delete nginx
-
Nem használt függőségek eltávolítása:
pkg autoremove
-
Telepített csomagok listázása:
pkg info
Csomagok automatikus frissítése
A csomagok automatikus frissítéséhez adjuk hozzá a következő sorokat a cron feladatokhoz:
echo '#!/bin/sh
pkg update -f
pkg upgrade -y
pkg autoremove -y
pkg clean -y' > /usr/local/sbin/pkg-update.sh
chmod +x /usr/local/sbin/pkg-update.sh
echo '@daily root /usr/local/sbin/pkg-update.sh' >> /etc/crontab
Csomagok lekérdezése
A pkg segítségével lekérdezhetjük a telepített csomagokat:
# Melyek a legrégebben frissített csomagok?
pkg query -a "%m %n-%v" | sort | head -20
# Melyek a legnagyobb csomagok?
pkg query "%sb %n-%v" | sort -n | tail -20
Ports rendszer
A ports rendszer lehetővé teszi a szoftverek forráskódból történő fordítását és telepítését egyéni beállításokkal.
A ports előnyei
- Testreszabható fordítási beállítások
- A legfrissebb szoftververziók
- Egyedi patch-ek alkalmazhatósága
- Optimalizálási lehetőségek
A ports rendszer telepítése
A ports gyűjtemény telepítéséhez két módszer áll rendelkezésre:
1. Git segítségével (ajánlott)
pkg install git
git clone https://git.freebsd.org/ports.git /usr/ports
A ports gyűjtemény frissítése:
cd /usr/ports
git pull
2. Portsnap segítségével
# Első telepítés esetén:
portsnap fetch extract
# Frissítés esetén:
portsnap fetch update
Port telepítése
cd /usr/ports/www/nginx
make install clean
A telepítés előtt testreszabhatjuk a fordítási opciókat:
make config
Függőségek kezelése
# Csak függőségek telepítése
make fetch-recursive
# Függőségek ellenőrzése
make check-plist
Port frissítése
# Egy port frissítése
portmaster www/nginx
# Összes port frissítése
portmaster -a
Port eltávolítása
cd /usr/ports/www/nginx
make deinstall
# vagy a pkg segítségével:
pkg delete nginx
Poudriere: Egyedi csomagtár építése
A Poudriere egy eszköz, amely lehetővé teszi saját bináris csomagok és csomagtárak építését FreeBSD portokból.
Előnyök
- Saját egyedi csomagok
- Testre szabott build beállítások
- Automatizált építés
- Konzisztens környezet
Telepítés
pkg install poudriere
Konfigurálás
A konfigurációs fájl másolása és szerkesztése:
cp /usr/local/etc/poudriere.conf.sample /usr/local/etc/poudriere.conf
Alapvető beállítások:
ZPOOL=zroot
ZROOTFS=/poudriere
FREEBSD_HOST=https://download.freebsd.org
RESOLV_CONF=/etc/resolv.conf
BASEFS=/usr/local/poudriere
POUDRIERE_DATA=${BASEFS}/data
USE_PORTLINT=no
USE_TMPFS=yes
DISTFILES_CACHE=/usr/ports/distfiles
Jail létrehozása
poudriere jail -c -j 132amd64 -v 13.2-RELEASE -a amd64
Ports fa beállítása
poudriere ports -c -p main
Egyedi portok listájának létrehozása
cat > /usr/local/etc/poudriere.d/pkglist <<EOF
editors/vim
shells/bash
security/sudo
net/rsync
security/openssh-portable
EOF
Egyedi beállítások hozzáadása
mkdir -p /usr/local/etc/poudriere.d/132amd64-main-options
Példa egy nginx konfigurációra:
# /usr/local/etc/poudriere.d/132amd64-main-options/www_nginx/options
OPTIONS_FILE_SET+=HTTP_SSL
OPTIONS_FILE_SET+=HTTP_V2
OPTIONS_FILE_UNSET+=NJS
Csomagok építése
poudriere bulk -j 132amd64 -p main -f /usr/local/etc/poudriere.d/pkglist
Webszerver konfigurálása a csomagtárhoz
pkg install nginx
# Nginx konfiguráció:
cat > /usr/local/etc/nginx/conf.d/packages.conf <<EOF
server {
listen 80;
server_name packages.example.com;
root /usr/local/poudriere/data/packages/132amd64-main;
autoindex on;
}
EOF
# Nginx újraindítása:
service nginx restart
Kliens oldali konfiguráció
mkdir -p /usr/local/etc/pkg/repos
cat > /usr/local/etc/pkg/repos/local.conf <<EOF
local: {
url: "http://packages.example.com/132amd64-main",
mirror_type: "http",
enabled: yes
}
FreeBSD: {
enabled: no
}
EOF
Csomagok vs. Ports összehasonlítása
Szempontok | Bináris csomagok (pkg) | Ports rendszer |
---|---|---|
Telepítési sebesség | Gyors | Lassú (fordítás szükséges) |
Testreszabhatóság | Korlátozott | Teljes körű |
Erőforrásigény | Alacsony | Magas (fordítás során) |
Frissítési gyakoriság | Néhány naponta | Naponta |
Optimalizálás | Általános | Egyedi lehetőségek |
Alkalmasság | Általános használat, deszktopok | Speciális szerverek, egyedi igények |
Gyakori problémák és megoldásaik
A pkg adatbázis sérült
# A pkg adatbázis javítása
pkg update -f
Portok build hibák
-
Ellenőrizzük a port Makefile-ját:
cd /usr/ports/problemas/port make -V MAINTAINER
-
Ellenőrizzük a hibanaplót:
make showconfig
-
Tisztítsuk meg a félkész telepítést:
make clean
Dependency konfliktusok
# Függőségi gráf vizualizálása
pkg install graphviz
pkg info -d nginx | dot -Tpng > dependencies.png
# Konfliktusok ellenőrzése
pkg check -d -a
A ports frissítés nem működik
# Git clone használata helyett:
rm -rf /usr/ports
git clone https://git.freebsd.org/ports.git /usr/ports
Bevált gyakorlatok
-
Dokumentáljuk a telepített csomagokat:
pkg info > /root/installed-packages.txt
-
Használjunk verziókontrollt a konfigurációs fájlokhoz:
git init /usr/local/etc cd /usr/local/etc git add . git commit -m "Initial configuration"
-
Rendszeres biztonsági frissítések:
pkg audit -F
-
Preferáljuk a pkg-t általános használatra és csak akkor használjuk a ports rendszert, ha egyedi beállításokra van szükségünk.
-
Saját csomagtár esetén automatizáljuk az építési folyamatot Jenkins vagy más CI rendszer segítségével.
Összefoglalás
A FreeBSD csomagkezelési rendszere rugalmas lehetőségeket kínál a szoftverek telepítésére és kezelésére. A pkg
rendszer egyszerű és gyors megoldást nyújt az előre fordított csomagok kezelésére, míg a ports rendszer lehetővé teszi a szoftverek testreszabott fordítását. A Poudriere segítségével pedig saját bináris csomagtárakat hozhatunk létre, kombinálva mindkét megközelítés előnyeit.
A csomagkezelési stratégia kiválasztásakor vegyük figyelembe a rendszer típusát, az erőforráskorlátokat és a testreszabási igényeket. Általános célú rendszerekhez elegendő lehet a pkg
használata, míg speciális igények esetén érdemes a ports rendszert vagy a Poudriere-t választani.