Valljuk be őszintén: ki ne találkozott volna már azzal a frusztráló pillanattal, amikor a Linux szerverünkön éppen egy rutinfrissítést végeznénk, és a yum
egy olyan szoftverkomponenst is felajánl telepítésre vagy frissítésre, amit mi nem szeretnénk? Legyen szó egy specifikus verzió megtartásáról, egyedi fordítások védelméről, vagy egyszerűen csak egy kísérleti csomag elkerüléséről, a csomagkizárás kulcsfontosságú lehet a rendszer stabilitásának és megbízhatóságának fenntartásában. De hogyan tehetjük ezt meg hibamentesen, anélkül, hogy a hajunkat tépnénk? Ne aggódj, ma minden kérdésre választ kapsz!
Miért érdemes egyáltalán kizárni? A forgatókönyvek tárháza.
Mielőtt belevetnénk magunkat a technikai részletekbe, érdemes megértenünk, miért is olyan létfontosságú a csomagok kizárásának ismerete. Számos szituáció adódhat, ahol ez a tudás megmentheti a napunkat:
- Stabilitás és kompatibilitás: Előfordulhat, hogy egy kritikus üzleti alkalmazásunk csak egy adott PHP, Python vagy adatbázis verzióval működik megbízhatóan. Egy automatikus frissítés könnyen felülírhatja ezt a verziót, ami komoly leállást okozhat.
- Egyedi fordítások: Sok rendszergazda saját maga fordít bizonyos szoftvereket vagy kernelt az optimalizáció vagy speciális funkciók miatt. Ezeket a komponenseket nem szabadna a csomagkezelőnek frissítenie.
- Tesztelés és fejlesztés: Egy fejlesztői környezetben tesztelhetünk új verziókat, de elengedhetetlen, hogy ezek a „kísérleti” szoftverek ne kerüljenek fel az éles rendszerekre.
- Függőségi konfliktusok: Néha két, látszólag független szoftver ugyanazt a rendszerszintű könyvtárat használja, de inkompatibilis verziókban. Egyik csomag frissítése felülírhatja a másik működéséhez szükséges fájlt.
- Tiszta rendszer: Egyszerűen nem szeretnénk bizonyos szoftvereket a szerverünkön látni, mert nem illenek a rendszer filozófiájába, vagy feleslegesnek tartjuk őket.
Láthatjuk, hogy a csomagkizárás nem luxus, hanem gyakran elengedhetetlen eszköz a professzionális rendszeradminisztrációban. Most pedig nézzük, hogyan birkózhatunk meg vele különböző szinteken!
A „Gyors és Koszos” Megoldás: Ideiglenes Kizárás a Parancssorból 🚀
A leggyorsabb és legegyszerűbb módszer, ha csak egy alkalommal szeretnénk megakadályozni egy vagy több csomag telepítését vagy frissítését. Ez a parancssorból történő kizárás, amely csak az adott yum
tranzakcióra érvényes.
Egyetlen csomag kizárása:
sudo yum update --exclude=csomagnév
Például, ha nem szeretnéd, hogy a httpd
frissüljön:
sudo yum update --exclude=httpd
Több csomag kizárása:
Egyszerűen vesszővel elválasztva felsorolhatod őket:
sudo yum update --exclude=csomag1,csomag2,csomag3
Például, a php
és a mysql-server
kizárása:
sudo yum update --exclude=php,mysql-server
Helyettesítő karakterek (wildcard) használata:
Ez a módszer rendkívül hasznos, ha egy csoportba tartozó csomagot szeretnél kizárni. A csillag (*
) karakterrel helyettesíthetsz bármilyen karaktersorozatot. Különösen gyakori a kernel frissítéseknél, ha egy specifikus kernelt szeretnél megtartani:
sudo yum update --exclude=kernel*
Ez kizárja az összes olyan csomagot, aminek a neve „kernel” szóval kezdődik (pl. kernel-core
, kernel-modules
stb.).
Előnyök: Egyszerű, gyors, nem módosítja a rendszerkonfigurációs fájlokat, így nincs tartós mellékhatása.
Hátrányok: Elfelejthetjük, hogy legközelebb is megadjuk a kapcsolót, ami váratlan frissítésekhez vezethet.
A Rendszer Szíve: Állandó Kizárás a yum.conf
-ban ⚙️
Ha egy csomagot hosszú távon, vagy akár véglegesen szeretnél kizárni a frissítésekből a teljes rendszerre vonatkozóan, akkor a yum
fő konfigurációs fájlját kell szerkesztened.
Hol található?
A yum
globális beállításai az /etc/yum.conf
fájlban találhatók.
Hogyan szerkeszd?
Nyisd meg a fájlt egy szövegszerkesztővel (pl. vi
, nano
, vim
) root jogosultságokkal:
sudo vim /etc/yum.conf
Keresd meg a [main]
szekciót, és add hozzá vagy szerkeszd az exclude=
sort. Itt is vesszővel elválasztva sorolhatod fel a kizárni kívánt csomagokat, és használhatsz helyettesítő karaktereket is.
[main]
cachedir=/var/cache/yum/$basearch/$releasever
keepcache=0
debuglevel=2
logfile=/var/log/yum.log
exactarch=1
obsoletes=1
gpgcheck=1
plugins=1
installonly_limit=5
bugtracker_url=http://bugs.centos.org/set_project.php?project_id=23&reporter_id=1
distroverpkg=centos-release
# Ide jön a kizárás:
exclude=kernel* httpd-* php-* mariadb-server
A fenti példában az összes kernelhez kapcsolódó csomag, minden httpd
-vel és php
-val kezdődő csomag, valamint a mariadb-server
is ki van zárva a frissítésekből és telepítésekből a teljes rendszeren.
Véleményem: Ez a leghatékonyabb és legmegbízhatóbb módszer, ha egy csomagot semmilyen körülmények között nem szeretnél frissíteni a rendszeren. Tapasztalataim szerint, különösen kritikus éles környezetekben, ahol a stabilitás a legfontosabb, a rendszergazdák gyakran élnek ezzel az opcióval, hogy elkerüljék a váratlan leállásokat vagy kompatibilitási problémákat. Ez egy „beállítod és elfelejted” jellegű megoldás, ami nagyszerű, de pont emiatt veszélyes is lehet, ha elfelejted, hogy beállítottad, és később már nem emlékszel, miért nem frissül egy adott csomag. Ezért a dokumentáció kiemelten fontos! 🏆
Fontos: A yum.conf
-ban beállított kizárások globális hatásúak, azaz minden repository-ra érvényesek!
Repository-specifikus Kizárás: A Finomhangolás Mestere 🎯
Mi van akkor, ha egy csomagot csak egy adott repository-ból nem szeretnél frissíteni, de más forrásból esetleg igen? Erre a célra szolgálnak a repository-specifikus kizárások.
Hol találhatóak a repo fájlok?
A yum
az egyes repository-k beállításait az /etc/yum.repos.d/
könyvtárban található .repo
kiterjesztésű fájlokban tárolja. Például, a CentOS alap repository-ja általában a /etc/yum.repos.d/CentOS-Base.repo
fájlban van definiálva, az EPEL (Extra Packages for Enterprise Linux) pedig az /etc/yum.repos.d/epel.repo
fájlban.
Hogyan szerkeszd?
Keresd meg azt a .repo
fájlt, amelyből ki szeretnéd zárni a csomagot. Nyisd meg szerkesztésre:
sudo vim /etc/yum.repos.d/epel.repo
A fájlon belül keresd meg azt a [reponév]
blokkot, amelyre a kizárást alkalmazni szeretnéd. Ezen a blokkon belül add hozzá az exclude=
sort:
[epel]
name=Extra Packages for Enterprise Linux $releasever - $basearch
# ... egyéb beállítások ...
baseurl=https://download.fedoraproject.org/pub/epel/$releasever/Everything/$basearch/
gpgcheck=1
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-$releasever
# Kizárás csak ebből a repository-ból:
exclude=nagios*
Ebben a példában az EPEL repository-ból származó összes nagios
-szal kezdődő csomag ki van zárva. Ez azt jelenti, hogy ha egy másik repository (pl. egy saját céges repo) is tartalmaz nagios
csomagokat, azok továbbra is frissülhetnek.
Mikor hasznos? Ha egy adott csomagot csak egy bizonyos repository-ból nem akarsz, de másból igen, vagy ha egy repo gyakran kínál olyan verziót, ami konfliktust okozna a rendszereden, de máshonnan jobb forrásod van.
A Verziók Rögzítése: A yum versionlock
Varázsa 🔒 (yum-utils)
Ez a módszer nem szigorúan véve „kizárás”, hanem inkább egy verziózár, de a végeredmény nagyon hasonló: megakadályozza, hogy egy csomag frissüljön egy bizonyos, általad meghatározott verzió fölé. Ehhez a yum-utils
csomagban található versionlock
plugint kell használnod.
Első lépés: Telepítsd a yum-utils
csomagot:
sudo yum install yum-utils
Csomag rögzítése:
Ha rögzíteni szeretnél egy csomagot egy adott verzióra, használd a versionlock add
parancsot:
sudo yum versionlock add csomagnév
Például, a mariadb-server
rögzítése:
sudo yum versionlock add mariadb-server
Ez a parancs bejegyzi a jelenlegi telepített verziót a /etc/yum/pluginconf.d/versionlock.list
fájlba, és a yum
többé nem frissíti ezt a csomagot ennél magasabb verzióra.
Rögzített csomagok listázása:
yum versionlock list
Rögzítés feloldása:
Ha egy csomagot újra szeretnél frissíteni, előbb oldd fel a rögzítést:
sudo yum versionlock delete csomagnév
Ez egy rendkívül elegáns és erős megoldás, ha pontosan egy adott verziót szeretnél megtartani. Különösen hasznos, ha egy alkalmazás szigorú verziófüggőségekkel rendelkezik.
Gyakori Hibák és Elkerülésük: A Mesterfogások ⚠️
A csomagkizárás hatalmas eszköz, de mint minden erős eszköz, rosszul használva problémákat okozhat. Íme néhány gyakori hiba és tippek azok elkerülésére:
- Elírások a csomagnevekben: Egy apró elütés (pl.
htpd
helyetthttpd
) és a kizárás egyszerűen nem működik. Mindig ellenőrizd a csomag pontos nevét (pl.yum list installed | grep httpd
). - Túl széleskörű helyettesítő karakterek: A
php*
kizárása sok mindent kiszűrhet, amit nem szeretnél, például aphp-fpm
-et vagy aphp-cli
-t. Légy precíz! Ha csak egy adott PHP modult szeretnél kizárni, add meg annak pontos nevét. - Függőségi konfliktusok: Néha egy csomag kizárása megakadályozza más, szükséges csomagok telepítését/frissítését, mert azok függenek a kizártól. A
yum
általában szól, de figyelj a kimenetre!
A rendszeradminisztráció egyik alapszabálya: Mindig olvasd el a csomagkezelő üzeneteit! Sok fejtöréstől megkímélhet. Ne kattints vakon az ‘igen’ (Y) válaszra! Gondolkodj és értsd meg a felajánlott változásokat, mielőtt jóváhagyod.
- A kizárások elfelejtése: Egy idő után felgyűlhetnek a kizárások, amik akadályozhatják a rendszeres karbantartást. Érdemes rendszeres auditálást végezni a
yum.conf
és a.repo
fájlokban, hogy tudd, mi van kizárva. - Cache problémák: Ha a kizárások nem tűnnek működni, vagy a
yum
továbbra is felajánlja a kizárt csomagokat, próbáld meg törölni ayum
cache-t:sudo yum clean all
Majd próbáld újra a frissítést.
Legjobb Gyakorlatok: Így légy Profi! ✅
Hogy a yum exclude funkcióját valóban profi módon használd, érdemes betartani néhány alapelvet:
- Dokumentáció: Kommenteld a
yum.conf
és a.repo
fájlokat! Írd oda, miért zártál ki egy csomagot, mikor tetted, és ki. Ez különösen fontos, ha csapatban dolgoztok, vagy ha később másnak kell átvennie a rendszert. - Lépcsőzetes megközelítés: Kezdd ideiglenes kizárással, és csak indokolt esetben (hosszú távú stabilitás, kritikus alkalmazásfüggőség) térj át állandó kizárásra.
- Tesztelés: Mielőtt éles rendszeren alkalmazod a kizárásokat, teszteld le egy fejlesztői vagy staging környezetben. Győződj meg róla, hogy a kizárás valóban a kívánt hatást éri el, és nem okoz váratlan mellékhatásokat.
- `dnf` utód: Bár a cikk a
yum
-ról szól, érdemes megemlíteni, hogy adnf
ayum
modern utódja (főleg CentOS 8+, Fedora). A kizárási logikája és a parancsok nagyon hasonlóak, így a megszerzett tudás ott is hasznosítható. Azexclude
kapcsoló és a konfigurációs fájlokban találhatóexclude=
sorok ugyanúgy működnek adnf
esetében is, így a jövőre nézve is felkészült lehetsz.
Összegzés: A kontroll a te kezedben van! ✊
A yum
csomagkezelő kizárási funkcióinak mesteri ismerete alapvető fontosságú minden Linux rendszergazda számára. Lehetővé teszi, hogy precízen kontrolláld a rendszereden lévő szoftvereket, megakadályozza a stabilitási problémákat, fenntartja a kompatibilitást és megőrzi a rendszer integritását.
Most már tudod, hogyan kezeld a bosszantó kizárási problémákat: legyen szó gyors, egyedi tiltásról, globális, rendszerszintű szabályról, repository-specifikus finomhangolásról, vagy akár egy csomag verziójának rögzítéséről. A tudás hatalom, és most már te tartod a kezedben a kulcsot ahhoz, hogy a csomagjaidat pontosan úgy kezeld, ahogyan azt a rendszered megkívánja. Hajrá, légy profi a Linux szerverek menedzselésében!