Hogyan frissítsük Debian9 (Stretch) alapú tökéletes szerverünket Debian 10 (Buster) rendszerre

botond küldte be 2022. 01. 22., szo – 23:01 időpontban

Tartalom

  1. oldal: Frissítések előtt elvégzendő teendők - Felkészülés a frissítésre
  2. oldal: Debian 9 (Stretch) rendszer teljes frissítése Debian 10 (Buster)-re
  3. oldal: Frissítések után elvégzendő teendők - Rendszer ellenőrzése

 

Az 1. oldal tartalma

 

Bevezető

Debian szervereink hosszú időn át gond nélkül állják a sarat, kiszolgálnak sok millió, vagy akár sok százmillió oldallekérést is az évek alatt - akár egyetlen menetben, leállítás nélkül is -, azonban egyszer ezek felett is eljár az idő, és ilyenkor bizony frissíteni kell a rendszert. Noha nem mintha bármi baja lenne a szervernek, de a rajta futó Operációs rendszer elavulttá válik, így sérülékenyebb lesz a kívülről érkező támadásokkal szemben - amikből kapunk is jócskán az évek alatt -, valamint az idő előrehaladtával a rendszer újabb kiadásai már sokkal modernebb összetevőket tartalmaznak, amitől a működése gyorsabb és hatékonyabb is lesz. Ezért amikor kijön egy újabb főverzió a használt disztribúciónkból, ajánlott a frissítése.

Egy webszerver rengeteg szoftvert és különösen sok konfigurációt, beállítást tartalmaz, ami megannyi befektetett munkát és időt jelent, ezért a szerver teljes újratelepítése nem járható út: a hosszas telepítés és konfigurálás közben kiszolgálónk webes és egyéb szolgáltatásai sok ideig nem lesznek elérhetők felhasználóink számára, így látogatókat, ügyfeleket veszíthetünk, ami bevételkiesést eredményez, és nem utolsó sorban egy huzamosabb kimaradás miatt a keresőkben is romlik weboldalaink helyezése. Szerencsére a legtöbb Linux disztribúció - így a Debian is - rendelkezik azzal a képességgel, hogy menet közben frissíthető rajta a rendszer főverzió szinten, ezzel minimalizáljuk a kiesést a gép egyszeri újraindítására.

Korábban már készítettem egy leírást, amiben Debian 8 (Jessie) rendszert futtató otthoni asztali gép került frissítésre Debian 9-re, most pedig egy Debian 9 (Stretch) alapú webszervert frissítünk Debian 10 (Buster) rendszerre. Ebben a példában én konkrétan a Tökéletes szerver Debian 9 (Stretch) v1.1 változattal fogom ezt bemutatni.

Igaz, ennek a leírásnak a készítésekor már a Debian 11 (Bullseye) a disztribúció legfrissebb kiadása, azonban egyrészt még korábban ígértem egy tökéletes szerveres frissítést - hogy ne csak otthoni asztali géppel láthassunk ilyen műveletet -, valamint egyúttal ezt a kimaradt (Debian 9 - Debian 10) frissítési fázist is pótolhatom ugyanebben a lépésben. Továbbá biztos akadnak olyanok is akik "bentragadtak" szerverükkel még a Debian 9 (Stretch) verzióban, ezért fontolóra vették a frissítést, így nekik is nyújthat segítséget ez az útmutató.

Még fontos megjegyezni, hogy az itt leírtak a fentebb említett szerver konfigurációval készülnek el, ezért más rendszereken jó eséllyel előfordulhatnak ezektől eltérő dolgok, amelyek esetén rögtönöznünk kell a logikára és a józan észre támaszkodva. Tehát nincs tökéletes recept, se garancia minden szerverkonfiguráció hibátlan főverzió frissítésére, ezért a feladat elkezdése előtt inkább először fussuk át ezt a leírást, és mérlegeljünk, hogy belevágunk-e ebbe a műveletbe, vagy esetleg vannak-e olyan szoftverek a szerverünkön - az itt leírtakon kívül -, amikben nem vagyunk biztosak hogy fel tudjuk őket készíteni az új rendszeren történő működésre.
Ezt a frissítési műveletet tehát mindenki saját felelősségre készítse el, és ha van rá lehetősége első körben mindenképpen egy teszt környezetben hajtsa végre!

 

Frissítés (2023-01-31):
Elkészült a leírás újabb változata:

 

 

Újdonságok a Debian 10 (Buster) rendszerben

Mielőtt nekiállnánk a frissítésnek, előtte ajánlott átnézni a Debian 10 (Buster) újdonságait, hogy mérlegelni tudjunk a frissítés fontossága, és a szerverünkön lévő összetevők egyedisége és összetettsége között.

Itt egy fontos dolgot kiemelnék, mégpedig a hálózati eszközök neveinek változását. A Debian 9 (Stretch) kiadásban a hálózati eszközök neveit megváltoztatták, azonban ez a változás nem érintette azokat a rendszereket, amiket még az előző, Debian 8 (Jessie) kiadásról frissítettek, így a Debian 9-ben - ezekben az esetekben - még működtek a régi nevek. A Debian 10 Viszont már nem támogatja ezeket a régi név szabványokat, így egy újabb disztribúció frissítés után (Debian 10-re történő frissítés) már nem működik a hálózatkezelés azokon a gépeken, ahol még a Debian 8-ról lettek frissítve, de azóta még nem lettek átállítva az eszközök neveinek kezelése. Tehát akik Debian 8-ról frissítettek Debian 9-re, és most onnan szeretnék tovább frissíteni Debian 10-re, azoknak el kell végezni a fenti linken található leírást. Akik viszont most egy frissen telepített Debian 9-es változatról frissítenek tovább, vagy már elvégezték ezt a beállítást, azoknak ezzel nincs semmi teendőjük, mivel a Debian 9 már az új szabvánnyal kezelte a hálózati eszközök neveit a friss telepítéseken.

 

Frissítés előtt elvégzendő teendők

A frissítés elkezdése előtt még el kell végeznünk pár dolgot, amivel egyrészt ellenőrizzük rendszerünket hogy alkalmas-e a disztribúció frissítésére, másrészt fel is készítjük azt, hogy a frissítés hiba nélkül sikerüljön.

Rendszer áttekintése

Először célszerű átnézni a teljes rendszerünket, és összegyűjteni azokat a funkciókat, szolgáltatásokat, amik sarkalatosak lehetnek a frissítés szempontjából, továbbá összehasonlítás céljából sem árt, ha még vetünk egy utolsó pillantást a dolgainkra frissítés előtt is, hogy utána ellenőrizhessük, hogy valóban minden hibátlanul működik a szerverünkön. Ahogy fentebb is említettem, én itt most a Debian 9 tökéletes szervert fogom frissíteni, így most ezen gyorsan átfutom a főbb dolgokat.

Verzió és kiadási információk lekérdezése

Első körben olvassuk ki a kernel és a Debian verziójával és a disztribúció kiadással kapcsolatos információkat. Ezeket az alábbi parancsokkal tekinthetjük meg:

uname -a
lsb_release -a
hostnamectl
cat /etc/os-release
cat /etc/debian_version

Debian kiadási információk lekérdezése még a disztribúció frissítése előtt

Weboldalak

Mivel webszerverről lévén szó, így biztosan van rajta egy vagy több weboldal. Ezekre ránézünk, hogy minden rendben van-e. Nálam ezen a szerveren van egy csupasz Wordpress telepítés, ami nem tartalmaz semmi különöset, csak egy korábbi telepítős leíráshoz készítettem, így most ezt ellenőrzöm:

WordPress weboldal kezdőoldala

WordPress weboldal admin felülete

Itt most nincs más weboldal. De ha máshol van több weboldal, akkor érdemes végigkattingatni őket, hogy mindegyik működik-e megfelelően.

Webstatisztika

Ezen a szerveren fut egy Matomo webstatisztika is, tehát nem csak egy mérőkód van elhelyezve az oldalon, ami küldi az adatokat egy külső rendszerbe, hanem maga a statisztika rendszer is itt fut, ezért érdemes erre is ránézni:

Matomo webstatisztika

phpMyAdmin

Van egy phpMyAdmin is:

phpMyAdmin - Kezdőoldal

Itt a jobb oldali paneleken szépen látszanak a szerver szoftvereinek paraméterei is (Debian verzió, MariaDB verzió, stb), amiket majd érdemes újra átnézni a frissítés után.

 

 

ISPConfig

És egy ISPConfig:

ISPConfig - Kezdőoldal

Roundcube

Egy Roundcube webes levelezőprogram:

Roundcube - Postafiók - Beérkezett üzenetek

Munin

És végül egy Munin szerver erőforrás statisztika:

Munin - Apache grafikonok

ami éppen nem működik rendesen: az ezen a szerveren történt legutóbbi kernel frissítés óta nem rajzolja a grafikonokat. Valamivel összeakadhat, vagy esetleg már lehet hogy nem is kompatibilis a Debian 9 rendszerrel, vagy annak bizonyos csomagjaival. Minimális eséllyel még olyan is előfordulhat, hogy a frissítés után a Debian 10-es környezetben újra működni fog, mivel nálam is van egy hibátlanul működő Munin példány a Debian 10-es szerveremen. Mivel éppen egy disztribúció frissítés előtt állunk, így már nem érdemes bíbelődni vele, hanem a hibásan vagy sehogy nem működő dolgokat célszerűbb inkább a frissítés után megjavítani, ezért most nem foglalkozom ezzel.

Ezek lennének tehát a verzióval kapcsolatos információk és a webes alkalmazások, de rajtuk kívül még a motorháztető alatt sok minden működik még, persze szervere válogatja hogy mik vannak még rajta, amiket érdemes lenne még átnézni. Viszont itt már nem húzom ezekkel tovább az időt, hanem folytatjuk a frissítés előkészítését.

 

Biztonsági mentés

Adataink és a szerver beállításainak biztonsága a legfontosabb, ezért ezt a lépést semmiképpen ne hagyjuk ki. Ha netán rosszul végződne a disztribúció frissítés, akkor legrosszabb esetben egy újratelepítés után visszatöltjetjük adatainkat a friss rendszerbe.

Célszerű a saját személyes adataink és a weboldalak tárhelyei mellett még lementeni a /etc könyvtár tartalmát is, mert ebben kerülnek tárolásra a használt programok beállításai. Persze egy rendszer ha optimálisan van felépítve, akkor többnyire ezek a részek eleve külön merevlemezről vannak becsatolva, így ha bármi gubanc van, akkor egy esetleges újratelepítés során nincs szükség az adataink plusz mozgatására, hanem csak újra be kell csatolni a megfelelő könyvtárakba a többi merevlemez tartalmát.

Az adatok mentésére kiválóan alkalmasak például a tar vagy az rsync parancsok, amikkel hatékonyan lehet tömöríteni vagy szinkronizálni. Én a kettő kombinációjával szoktam biztonsági mentéseket készíteni: először az rsync-el átszinkronizálom például egy webtárhely tartalmát egy másik könyvtárba, ahonnan bármikor vissza is tudom frissíteni egyből, valamint ezután még egy tar+gzip csomagolással elteszem egy harmadik könyvtárba ahol X ideig őrzöm a változatokat. Mindezt természetesen scriptekkel automatizáltan. Így ha például bármelyik weboldal fejreállna, akkor csak egy script futtatással néhány 10 másodperc alatt visszaáll az oldal a kívánt változatból. Persze vannak, akik komplett backup megoldásokat szeretnek inkább, mint scriptekkel bíbelődni, nekik például itt érdemes szétnézni.

Csomagtárak és a csomagok ellenőrzése

A disztribúció frissítés előtti utolsó fő lépés a csomagtárak és a csomagok ellenőrzése és frissítése.

Csomagok frissítése

Először frissítsük csomagtár adatbázisunkat és csomagjainkat a megszokott módon root-ként:

apt-get update
apt-get upgrade

Csomagtár adatbázis és a csomagok frissítése

Csomagok frissítése és beállítása

Itt nálam volt néhány frissítendő csomag, többnyire PHP és az ezzel kapcsolatos csomagok.

 

 

Visszatartott csomagok keresése

A következő lépésben megkeressük a visszatartott csomagokat. Itt például az előző frissítéskor felsorolt pár visszatartott csomagot, most ezeket újra megnézzük:

apt-get upgrade

Valamint néhány csomagot megnézünk az apt-cache policy <csomagnév> paranccsal, hogy miért vannak visszatartva:

Visszatartott csomagok ellenőrzése

Amint látható, ebben a példában a Sury.org külső csomagtár telepítve van ezen a szerveren, amin jelenleg a kérdéses PHP csomagok frissebb változata érhető el, de a csomagkezelő visszatartotta őket.

Mivel itt konkrétan egy külső csomagtárról van szó, ezért akár hagyhatnánk is őket, de ha precízen mindent szeretnénk frissíteni, akkor futtasuk az alábbi parancsot a visszatartott csomagok frissítéséhez:

apt-get --with-new-pkgs upgrade

Visszatartott csomagok frissítése

Itt természetesen nyomjunk Igent, és frissülnek a csomagok, valamint a rendszer elvégzi a beállításukat is.

Visszatartott csomagok frissítése és beállítása

Ennek melléktermékeként, ahogy a fentebbi képen is látszik, feleslegessé vált egy csomag, ezt majd ennek a résznek a végén távolítjuk el.

Ezután még megnézzük az apt-mark showhold paranccsal visszatartott csomagokat is:

apt-mark showhold

Vagy akár a dpkg paranccsal is rájuk kereshetünk:

dpkg --get-selections | grep hold

Itt nálam nem talált semmit, tehát nincs ezzel további teendő. Viszont ha itt felsorol csomagokat, akkor azokat az alábbi paranccsal lehet feloldani:

apt-mark unhold <csomagnév>

Majd ezután újra futtassuk a csomagfrissítést, hogy ezek a csomagok is frissüljenek.

Törött csomagok keresése

Ebben a lépésben a törött avagy félig/részben konfigurált csomagokat keressük meg a dpkg paranccsal:

dpkg --audit

 A dpkg parancs --audit kapcsolója a manual oldalból:

man dpkg
[...]
       -C, --audit [package-name...]
              Performs database sanity and consistency checks for package-name or all packages if
              omitted  (per  package  checks  since  dpkg  1.17.10).   For  example, searches for
              packages that have been installed only  partially  on  your  system  or  that  have
              missing, wrong or obsolete control data or files. dpkg will suggest what to do with
              them to get them fixed.
[...]
Ennek a lényege, hogy a parancs ilyenkor adatbázis- és konzisztencia-ellenőrzést hajt végre a megadott csomagnévre, vagy ha nem adunk meg csomagnevet, akkor az összes csomagra vonatkozóan. Ilyenkor olyan csomagokat keres, amelyek csak részben lettek telepítve, vagy hiányos, rossz vagy elavult vezérlőadatokat vagy fájlokat tartalmaznak. Ezzel a paranccsal tehát kiszűrhetők a hibás csomagok.

Ha talál hibás csomagokat, akkor a dpkg javasolni fogja, hogy mit kell tenni velük a javítás érdekében.

Nálam nem talált egyetlen ilyen csomagot sem, így továbblépek.

Elavult csomagok keresése

Az elavult csomagok már vagy nem szerepelnek az adott csomagtárban, vagy elavulttá lettek minősítve, vagy nem a Debian szabványos tárolóiból lettek feltelepítve, például forrásból lettek lefordítva, stb. Ezeket is át kell néznünk, hogy vannak-e ilyen csomagjaink, és ha vannak, akkor azok jelenthetnek-e akadályt disztribúció sikeres frissítésre nézve.

Az elavult csomagok keresését az aptitude vagy az apt-show-versions parancsokkal végezhetjük. Mindegyiket telepíteni kell használat előtt, egyik sincs alapból telepítve a Debian rendszereken:

apt-get install aptitude
apt-get install apt-show-versions

Ha már telepítve vannak, akkor az alábbi parancsokkal találhatjuk meg az elavult csomagjainkat (az első két parancs ekvivalens egymással):

aptitude search '~o'
aptitude search ?obsolete
apt-show-versions | grep 'No available version'

Elavult csomagok keresése az aptitude vagy az apt-show-versions parancsokkal

Nálam talált is hármat. Ha ezek a parancsok itt kiadnak csomagokat, akkor vegyük fontolóra ezeknek a kézi eltávolítását, valamint az APT csomagkezelő forráslistájából (/etc/apt/sources.list fájlból) történő kapcsolódó csomagtár(ak) eltávolítását is. Ilyenkor a frissítés végeztével újra feltehetjük őket, amennyiben még léteznek a Debian 10-hez is. Ha viszont az itt felsorolt szoftvereket nem szeretnénk eltávolítani, mert ismerjük a funkcióját, például a rendszerünk szerves részét képezik, más programok függőségei, stb, akkor pedig magunk járjunk utána, hogy a Debian 10-ben léteznek-e még, frissültek-e, stb.

Jelen esetben az itt talált Jailkit programot még a szerver telepítésnél tettük fel, de nem csomagtárból telepítettük, hanem a letöltött forrásából állítottuk össze a Debian csomagot, mivel nem volt benne a Debian 9 csomagtárában. Ebben a rendszerben tehát a jailkit 2.20-as változata van meg. A jó hír, hogy ezt nem kell eltávolítanunk, mivel a Debian 10 (Buster) backports csomagtárában már benne van a 2.21-es változat, így majd lesz hozzá frissítés, mivel a backports tárolót már a szerver telepítése óta használjuk.

Ezen kívül még talált itt régebbi kernel csomagokat is, amiket már nem használ a rendszer. Ezek nem fogják zavarni a frissítést, ezért ezeket is hagyhatjuk; a Debian főverzió frissítése után amúgy is lesznek még itt további elavult, nem használt kernelcsomagok, így majd a végén egyben takarítjuk őket.

Ha tehát nincs olyan elavult csomagunk, ami esetleg akadályozhatná a frissítést, akkor léphetünk is tovább. Ha viszont olyan csomagokat látunk itt, aminek a  funkciójában, fontosságában nem vagyunk biztosak, nézzünk utána a packages.debian.org oldalon, és szükség esetén távolítsuk el az adott csomagokat.

 

 

Harmadik féltől származó csomagok keresése

Ezután keressünk rá a harmadik féltől származó csomagokra. Ezeknek a csomagoknak a frissítése az új Debian főverzióban bizonytalan, ezért gondot okozhatnak. Ellenőrizzük tehát az olyan csomagokat, amiket nem a Debian hivatalos tárolóiből telepítettünk fel. Itt lehetnek átfedések az elavult csomagokkal, például egy forrásból telepített csomag esetén, amihez nincs frissítés az egyrészt elavult jelzőt is kap, és mivel nem a hivatalos csomagtárból telepítettük, ezért harmadik féltől származónak is minősül. A már korábban is használt aptitude parancs segítségével listázhatjuk ezeket a csomagokat:

aptitude search '~i(!~ODebian)'

Nálam a kimenete ennek a parancsnak:

Harmadik féltől származó csomagok

Itt is mérlegelnünk kell, hogy mit kezdjünk ezekkel a csomagokkal. Ebben a példában először előkerül ismét a jailkit csomag, amit már fentebb megvizsgáltunk, hogy szükséges, és frissítés is lesz hozzá, valamint a többi php csomag pedig a Sury.org csomagtárból került fel korábban, ami megbízható forrás, és ahonnan fogunk kapni frissítéseket a Debian 10-ben is. Így tehát most ezekkel sincs semmi teendő. Viszont ha olyan csomagokat használunk, amik szintén más csomagtárakból származik, akkor keressük fel a csomagtár webhelyét, és győződjünk meg róla, hogy a Debian 10 rendszerrel is fog-e működni.

Ha bármikor módosítjuk a /etc/apt/sources.list fájlunkat, például kiveszünk belőle csomagtárakat, vagy hozzáadunk, utána mindig futtassuk a csomagtár adatbázis frissítést, hogy naprakész legyen a csomagkezelésünk:

apt-get update

Feleslegessé vált csomagok eltávolítása

Még távolítsuk el az automatikusan telepített csomagfüggőségeket is, amikre már nincs szüksége egyetlen másik csomagnak sem:

apt autoremove

Felesleges csomagok eltávolítása

Itt a rendszer összetevőitől függően akár sok csomag is lehet, így egyrészt tárhelyet is szabadítunk fel, másrészt gyorsabban fog végezni a frissítés ha kevesebb csomaggal kell dolgoznia, tehát tisztább lesz a rendszerünk.

Csomaggyorsítótár kiürítése

A Debian a csomagok telepítésekor letöltött .deb fájlokat egy külön tárolóban helyezi el amik a csomagok telepítése után is ott maradnak. Ez például jól jön ha később offline módban van a számítógépünk, és éppen újra kell konfigurálni egy meglévő csomagot, vagy bármilyen egyéb csomagműveletet kell végeznünk velük, mert ilyenkor nem szükséges internetre csatlakoznia, hanem a helyben tárolt csomagpéldányt fogja használni, ezáltal csökkentve a hálózati forgalmat, és a Debian tükrök terhelését. Azonban egy idő után ennek a tárolónak a mérete jócskán meghízhat, ezért időnként érdemes kiüríteni. Egy teljes disztribúció frissítésnél talán nincs is jobb alkalom ami után kiüríthetjük ezt a gyorsítótárat, mivel ilyenkor a rendszer sok új csomagot fog letölteni, így a jelenlegi csomagjaink itt fognak maradni ebben a tárolóban. Természetesen a teljes főverzió frissítés végeztével is célszerű újra lefuttatni, hogy a jelenleg használatban lévő csomagok se foglaljanak helyet, amikre akkor már nem lesz szüksége az új rendszernek.

A csomaggyorsítótár ürítése előtt érdekességképpen megnézhetjük annak méretét a du parancs segítségével, majd a takarítás után újból megnézve láthatjuk a felszabaduló helyet. Ezekhez futtassuk az alábbi parancsokat:

du -sh /var/cache/apt/archives
apt-get clean
du -sh /var/cache/apt/archives

Nálam körülbelül most 213 Mb hely szabadult fel:

Debian csomaggyorsítótár ürítése és a felszabadult hely ellenőrzése

Más rendszereken ennél jóval több helyet is foglalhatnak ezek a tárolt csomagok, ez csak egy alig használt kísérleti szerver.

 

 

A következő oldalon folytatjuk a disztribúció Debian 10 (Buster) rendszerre történő frissítésével.

 

 

Lapozó

Ez a leírás több oldalból áll: