Hogyan frissítsük otthoni gépünket Debian 8 (Jessie) rendszerről Debian 9 (Stretch)-re

botond küldte be 2019. 02. 04., h - 01:30 időpontban

Tartalom

 

Bevezető

Biztos ismerős a helyzet, amikor a sok idő alatt belakott, beállítgatott számítógépünk megérett egy főverzió frissítésére. Ilyenkor dilemmában van az ember, hogy nekiálljon-e egy esetleges újratelepítésnek, azután minden program újra beállítgatásának vagy a "jó lesz ez még így is egy darabig" gondolattal elodázzuk a telepítés gondolatát.

Nos, a jó hír az, hogy a Linux operációs rendszereknél nincs szükség újratelepítésre, ugyanis lehetőség van a menet közben történő főverzió frissítésére, ami után mindent ugyanúgy használhatunk, mint azelőtt.

Ebben a leírásban egy általános, itthoni használatú laptoppal fogom végrehajtani a frissítést Debian 8 (Jessie) rendszerről Debian 9 (Stretch)-re.

 

 

Újdonságok a Debian 9 (Stretch) rendszerben

Mielőtt bárminek is nekiállnánk, nem árt tisztában lennünk az újdonságokkal, amiket a Debian 9 (Jessie) tartogat számunkra. Egy friss Debian 9 (Stretch) rendszer telepítésénél nincs ezeknek akkora jelentősége, mert ott "csak" egy új, üres rendszer működőképességéről van szó, ahol nincs sok vesztenivaló. Azonban egy használatban lévő, "élő" Debian 8 (Jessie)-ről történő átfrissítés esetében más a helyzet, mert itt már bukhatjuk az eddigi működő rendszerünket, ha felkészületlenül állunk neki az egésznek.

A Debian 9-es változatában sokminden változik, amikre tehát fel kell készülnünk. Ezért mindenképpen érdemes átfutni ezeket a változtatásokat, hogy mindenki ki tudja emelni a számára sarkalatos részeket, amivel meg kell majd bírkóznia a frissítés során illetve utána.

 

Biztonsági mentés

Adataink és sok munkával elvégzett beállításaink biztonsága az elsődleges szempont, ezért mindenképpen az adatmentéssel kell kezdenünk a műveletet, ha bármi gubanc adódna, akkor meglegyen minden.

Célszerű a /etc könyvtárral kezdeni, ebben vannak a rendszer beállításai, konfig fájljai. Ezt a legegyszerűbben a tar parancs segítségével csomagolhatjuk be root-ként:

tar -pcvzf /home/<felhasználónevünk>/etc_backup.tar.gz /etc

Ahol megadjuk például a home könyvtárunkat, és abban a létrehozandó archív fájl nevét, majd a /etc könyvtárat.

A kapcsoló paraméterek pedig a következőket jelentik:

  • p: (preserve-permissions) Megtartja a fájlok jogosultságainak információit.
  • c: Új archívum létrehozása
  • v: Bőbeszédű mód. A kapcsoló hatására megjelenik minden bepakolt fájl. Így látjuk mi történik.
  • z: Az összeállított tar fájlt végül gzip tömörítéssel összetömöríti.
  • f: Kimeneti fájlnév. Ebbe csomagol. Ennek rögtön kell követnie a -f kapcsolót.

Ugyanezzel az eljárással becsomagolhatjuk még a többi fontosabb könyvtárunkat  is, amiről úgy ítéljük meg hogy szükséges.

Ha esetleg valamilyen szervert futtatunk a gépen, például mySQL-t, akkor a teljes adatbázis struktúrát is mentsük le, ami alapértelmezetten a /var/lib/mysql könyvtárban van. Ez tartalmazza az összes adatbázis bináris fájlját, így nem kell külön bíbelődnünk az adatbázisok kiexportálgatásával. Persze ha valaki nagyon precíz, akkor külön úgy is ki lehet őket dump-olni vagy akár egyben. Erről majd egy másik leírásban lesz részletes információ.

Ezután az összecsomagolt mentési fájlokat helyezzük egy biztonságos helyre, esetleg egy külső meghajtóra, stb.

 

Jelenlegi rendszer frissítése és előkészítése

FONTOS!
Ha grafikus felülettel/asztalkörnyezettel rendelkező gépet frissítünk, akkor erősen ajánlott a teljes frissítési folyamatot a szöveges módú konzolból végezni, amit pl. a CTRL+ALT+F1 billentyűkombinációval érhetünk el, vagy egy külső gépről SSH-n felcsatlakozva terminálból. Ugyanis a frissítési folyamat közben ha a grafikus felület összetevői is frissülnek (márpedig frissülnek), akkor előfordulhat, hogy a rendszer újraindítja az ablakkezelőt, ami azzal jár, hogy kilövi alólunk a grafikus terminált is, így elveszíthetjük a teljes kontrollt a frissítési folyamatról, rosszabb esetben pedig még a frissítés is félbeszakadhat. Ezért ajánlott inkább a grafikus felületen kívül végezni a továbbiakat.

Elsőként frissítsük az APT csomagtár adatbázisát, és a csomagjainkat:

Frissítés: 2019-03-30:
A Debian 2019. március 20-án áthelyezte a Debian 8 (Jessie) nem LTS csomagtárait az archive.debian.org tárolójába, így a jessie-updates és a jessie-backports tárolók már nem frissíthetők a rendes Debian tükrökről.
A csomagtárak megfelelő beállításairól itt tájékozódhatunk. (új ablakban)
Ha elvégeztük a szükséges módosításokat, akkor hiba nélkül folytathatjuk a frissítést a szokásos apt-get parancsokkal:
apt-get update
apt-get upgrade

Majd egy logikus szabályt kell észben tartanunk, miszerint minél kevesebb program van telepítve a gépen, annál jobbak az esélyeink a hibátlan upgrade-re. A következő lépésben tehát át kell vizsgálni a meglévő csomagjainkat, hogy vannak-e közöttük olyanok, ami például 3-adik féltől származó csomagtárból kerültek telepítésre, vagy elavultak, nem támogatott csomagok, stb.

Elavult csomagok keresése és eltávolítása

Az elavult vagy nem hivatalos csomagokat az alábbi paranccsal kutathatjuk fel legegyszerűbben:

aptitude search '~o'

Ha a parancs nem sorol fel egyetlen csomagot sem, akkor a legjobb. Ha viszont felsorol néhányat, akkor azok vagy nem szerepelnek már az adott csomagtárolóban, vagy elavultnak lettek minősítve, vagy nem a Debian szabványos tárolóiból lettek feltelepítve (például harmadik féltől származó repository-ból lettek telepítve, vagy forrásból lettek lefordítva). Tehát ha itt kiad egy vagy több tételt, 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. A frissítés végeztével majd újra feltehetjük őket, amennyiben még léteznek a Debian 9-hez is. Ha az itt felsorolt szoftvereket nem szeretnénk eltávolítani, mert például a rendszerünk szerves részét képezik, pl más programok függőségei, stb, akkor viszont magunk járjunk utána, hogy a Debian 9-ben léteznek-e még, frissültek-e, stb.

Ha el kellett távolítanunk csomagtárakat, vagy bármilyen formában módosítottuk a /etc/apt/sources.list fájlt, akkor újra futtassuk le a frissítő parancsokat root-ként:

apt-get update
apt-get upgrade

Jelenlegi disztribúció teljes frissítése

Ezután pedig futtassuk a teljes (még a jelenlegi Jessie) disztribúció frissítést, ami mélyrehatóbban frissíti a csomagokat és a függőségeket, ezáltal felzárkóztatjuk rendszerünket a Debian 9 (Stretch) csomagjainak későbbi frissíthetőségére:

apt-get dist-upgrade

Közben nálam kiadott pár ilyen hibát:

E: Sikertelen letöltés: http://ftp.hu.debian.org/debian/pool/main/p/python-urllib3/python-urllib3_1.9.1-3_all.deb  Nem lehet kapcsolódni ehhez: ftp.hu.debian.org: 80 (195.228.252.133). - connect (111: Kapcsolat elutasítva)

És leállt a frissítés.

Ha netán másnál is ilyen fordulna elő, nem kell megijedni, csak éppen a használt Debian tükör lehetett túlterhelt, stb, így elutasította a kapcsolatot. Ilyenkor kis várakozás után újra futtassuk le az utolsó parancsot:

apt-get dist-upgrade

És másodjára már szépen frissítette az egész Jessie disztribúciót a legfrissebb csomagokra és azoknak a függőségeire. Nálam ez még 275 Mb-nyi csomagot frissített a laptopomon a sima upgrade után...

Törött vagy visszatartott csomagok keresése

Ezután még végzünk még egy ellenőrzést, ahol törött vagy visszatartott csomagokat keresünk:

dpkg --audit
dpkg --get-selections | grep hold

A dpkg parancs kapcsolóiról itt tájékozódhatunk.

Ha vannak törött csomagjaink, akkor azokat előbb javítani kell, addig nem léphetünk tovább. Erre kezdésnek jó megoldás lehet a clean opcióval futtatott apt-get:

apt-get clean
apt-get update

Ha nincsenek törött, vagy visszatartott csomagjaink, akkor léphetünk is a következő pontra.

A csomagtárak listájának módosítása a Stretch-hez

Nyissuk meg a sources.list fájlt:

nano /etc/apt/sources.list

Nálam egy alap telepítésű Debian 8-nál (és egy 32 bites laptopon) így néz ki, ami csak a gyári csomagtár beállításokat tartalmazza:

# 

# deb cdrom:[Debian GNU/Linux 8 _Jessie_ - Official Snapshot i386 LIVE/INSTALL Binary 20170723-13:21]/ jessie main

deb http://ftp.hu.debian.org/debian/ jessie main
deb-src http://ftp.hu.debian.org/debian/ jessie main

deb http://security.debian.org/ jessie/updates main
deb-src http://security.debian.org/ jessie/updates main

# jessie-updates, previously known as 'volatile'
deb http://ftp.hu.debian.org/debian/ jessie-updates main
deb-src http://ftp.hu.debian.org/debian/ jessie-updates main

Írjunk át a fájlban minden "jessie" részt "stretch" -ra minden sorban, ahol szerepel.

Frissítés: 2019-03-30:
A fentebb már említett 2019. március 20-ai csomagtárak átszervezése következtében az itt említett eredeti forráslista fájl tartalma már elavult, így módosítása szükséges. Erről itt találhatunk részletes leírást.
A következő módosítást tehát ennek figyelembevételével végezzük!
Ez a változás a Debian 9 (Stretch) csomagtárolóit nem érinti, így a leírásban most következő Stretch-re történő módosítások ugyanígy érvényesek (Az eredeti részeket bent hagytam, hogy követhető maradjon a változás).

Ezután az én fájlom így néz ki:

# 

# deb cdrom:[Debian GNU/Linux 8 _Jessie_ - Official Snapshot i386 LIVE/INSTALL Binary 20170723-13:21]/ jessie main

deb http://ftp.hu.debian.org/debian/ stretch main
deb-src http://ftp.hu.debian.org/debian/ stretch main

deb http://security.debian.org/ stretch/updates main
deb-src http://security.debian.org/ stretch/updates main

# stretch-updates, previously known as 'volatile'
deb http://ftp.hu.debian.org/debian/ stretch-updates main
deb-src http://ftp.hu.debian.org/debian/ stretch-updates main

Tehát itt mindegy, hogy kinél milyen Debian tükrök, csomagtárak és szekciók vannak beállítva, annyi a lényeg, hogy korábban már eltávolítottunk minden nem hivatalos Debian csomagtárat, így itt már csak a hivatalosak maradtak, ezeknél pedig csak a disztribúció kódnevét kell átírni "jessie" -ről "stretch" -re.

Ezután frissítsük CSAK a csomagtár adatbázisát:

apt-get update

Csomagtárak frissítésének a szimulációja

Ezután pedig lefuttatunk egy szimulációt, ami ellenőrzi, hogy a csomagtárakból telepített összes csomag frissíthető-e:

apt list --upgradable

Itt kapunk a kimeneten egy nagyon hosszú listát, ahol a sorok elején normál esetben zöld színnel vannak kiemelve a csomagnevek, majd utánuk pedig az új disztribúcióban található verziók, és utána hogy frissíthető és hogy melyik aktuális verzióból:

Debian APT csomagkezelő szimulációs futtatása

Mivel iszonyat hosszú ez a lista, és a másik gépen lévő terminál ablak, amiről SSH-n vagyok belépve, nem enged visszagörgetni, és így nem látom az egészet, ezért én még egy hibakódot is lekérdezek az echo $? paranccsal, ami a legutóbbi parancs futásának eredményességét adja vissza. Itt 0-ás eredményt adott, tehát nincs hiba a csomaglistámban, azaz upgrade-elhető a rendszer.

 

 

Rendszer frissítése Debian 9 (Stretch)-re

Ha idáig eljutottunk hiba nélkül, akkor nem maradt más hátra, mint a disztribúció felfrissítése az új, Stretch kiadásra. Mivel most jön a dolog kényes része, ezért ha még nem hagytuk el a frissítendő gép grafikus felületét, akkor most tegyük meg, ahogy fentebb is írtam, hogy elkerülhessük a szolgáltatások újraindításából eredő kapcsolat megszakadását a frissítési folyamatunkkal.

Alapcsomagok frissítése

Adjuk ki először a szokásos "sima" upgrade parancsot, amivel első körben frissítjük az alap csomagokat:

apt-get upgrade

Nálam most csak 763 csomagot kell frissítenie, valamint írja, hogy 487-et nem kell frissítenie:

Debian APT upgrade parancs futása, már az új csomagtárakkal

Persze ez egy viszonylag friss és alig használt telepítés, így tehát egy régebb óta "koptatott" rendszernél ennél sokkal több csomag frissítéssel számolhatunk.

Erre a kérdésre nyomjunk I -igent, majd várjuk meg, amíg lefut, közben fél szemmel figyeljük, mi történik.

Közben beadhat egy-egy csomagnál különböző súgó fájlokat, ezeket görgessük végig, majd írja hogy mivel tudunk kilépni (pl a Q betűvel).

Bő fél órás tekerés után végzett nálam. Hát, nem egy szokványos upgrade művelet volt, az biztos. Egy-két helyen írt warning-ot, hogy a /etc/... alkönyvtárat nem tudta törölni, mert nem volt üres. Hát ott egye a fene... 

Disztribúció teljes frissítése

Ezután még jön itt is egy teljes disztribúció frissítés:

apt-get dist-upgrade

Itt is felsorolja még a hátralévő frissítendő csomagokat, majd rákérdez, hogy mehet-e. Itt is nyomjunk igent.

Itt is az elején a csomagok letöltése közben előfordulhat, hogy megakad, nem tud csatlakozni az itthoni tükörhöz. Ilyenkor ha teljesen leáll, akkor itt is futtassuk újra a parancsot, és a csomagok letöltését ott folytatja, ahol abbahagyta.

Valószínű, hogy sávszélesség vagy adatforgalom korlátok lehetnek a csomagtárak szerverein, amik időegység alatt csak X mennyiségű adatot engednek letölteni, hogy egy-egy kapcsolat/telepítés ne tudja leterhelni az erőforrásaikat. Mondjuk nekem eddig csak a http://ftp.hu.debian.org csomagtárnál dobált ki ezzel a hibaüzenettel:

Nem lehet csatlakozni ehhez: ftp.hu.debian.org:http:

E: Nem lehet letölteni néhány archívumot. Próbálja futtatni az „apt-get update” parancsot, vagy használja a --fix-missing kapcsolót.

De kis várakozás után újrafuttatva a dist-upgrade parancsot, (tehát nem azt, amit javasol a hibaüzenetben) és szépen folytatja a letöltést.

Tehát lehet, hogy ha egy nagyobb, külföldi tükröt választunk a telepítés legelején (vagy átírjuk őket a sources.list fájlban), akkor többé nem áll fenn ez a probléma.

A csomagok letöltése után már csak helyben dolgozik a gépen, így ekkor már nincs ilyen kapcsolódási gond.

Célszerű a gép előtt ülve figyelni az eseményeket, mert a csomagok telepítése és konfigurálása közben előjöhet pár dialógus, amit le kell okézni, vagy válaszolni kell egy beállítással kapcsolatos kérdésre. Például:

Debian frissítés - Csomag konfiguráció

Ezután még megkérdi, hogy engedélyezzük-e, hogy a frissítési művelet során automatikusan újraindítgathatja-e a szükséges szolgáltatásokat:

Debian frissítés - Csomag konfiguráció - Szolgáltatások automatikus újraindítása

Erre nyomjunk Yes-t, mert így is, úgy is újra kell indítgatni őket.

Itt is hosszasan telepíti az új disztribúció csomagjait, tehát türelmesen végig kell figyelni, hogy előbukkannak-e hibák, stb.

 

Gép újraindítása és a frissítés ellenőrzése

Ha lefutott minden, indítsuk újra a gépet:

reboot

Majd a rendszer indítása után már szembetűnő változás fogad bennünket.

A frissítés előtti asztal:

Debian 8 (Jessie) - Régi asztal

És most, az újraindítás utáni:

Debian 9 (Stretch) - Új asztal

Tehát már elsőre látszik, hogy volt értelme a sok munkának. Szegény Debiannak még erre is volt ideje, hogy kicserélje nekünk az asztal háttérképet is. :D

Most pedig ellenőrizzük a dolgokat a háttérben.

Kernel és a kiadási információk ellenőrzése

Ellenőrizzük a kernelt:

uname -r

Erre ezt a kezdődésű verziót kell kiadnia: 4.9.0.[...]

Ellenőrizzük a kiadási információkat:

cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

Verzió és a csomagok ellenőrzése

Debian verzió kiolvasása:

cat /etc/debian_version

Erre 9.7-et ír ki. Ez is jó.

Keressünk rá az elavult csomagokra, ahogyan a frissítés előtt is tettük:

aptitude search '~o'

Itt nálam kiad egy hosszú listát. Ebben nincs semmi kivetnivaló, hiszen rengeteg régi csomagot elavultattak a Debian 8-ból. Tehát ha másnál is vannak ilyenek, akkor most ezeket kell elrendeznünk.

Elavult csomagok kezelése

Az elavult csomagok továbbra is használhatók, amennyiben szükségesek, azonban a Debian már nem nyújt hozzájuk támogatást, tehát biztonsági szemszögből nézve, nem célszerű őket tovább használni Forrás.

Nézzük át ezt a listát, és ha nem találunk ezek között a csomagok között olyat, ami feltétlenül szükséges, akkor töröljük őket.

A fentebbi listázó parancsot bővítsük ki egy awk-os szűréssel, ami csak a csomagok neveit adja vissza nekünk a lista 3. oszlopából:

aptitude search '~o' | awk '$4 == "-" {print $3; next}; {print $2}'

Ezt irányítsuk át egy fájlba:

aptitude search '~o' | awk '$4 == "-" {print $3; next}; {print $2}' > elavult_csomagok.txt

Ha vannak csomagok, amiket mindenképpen meg szeretnénk tartani, akkor szerkesszük a fájlunkat pl. a nano-val:

nano elavult_csomagok.txt

És vegyük ki a fájlban található listából a megtartani kívánt csomagokat, majd mentsük le a fájlt.

Itt azért legyünk körültekintőek, mert ha például korábban egy saját kezűleg lefordított csomagot használtunk valamihez, és az is szerepel közöttük, akkor azt célszerű kivenni ebből a törlendő csomagok listájából, mivel ahhoz amúgy se kapnánk már frissítést, viszont még használatban van a csomag. Tehát itt saját szituációnknak megfelelően szelektáljunk.
Frissítés: 2019-03-30:
A fentebb már említett csomagtár változtatásokat követően a rendszer olyan csomagokat is elavultnak tekinthet, amik már átkerültek az archivált tükörre és így már nincs hozzájuk frissítés. Tehát most legyünk még körültekintőbbek, hogy véletlenül se szedjünk ki még használatban lévő csomagokat!

Ezután adjuk ki a csomag törlő parancsot, megadva ezt a listafájlt:

apt-get --purge remove $(cat elavult_csomagok.txt)

Ekkor felsorolja a csomagokat, majd kiírja a szokásos csomag statisztikákat, és a kérdés, hogy mehet-e a törlés. Nálam például:

[...]
0 frissített, 0 újonnan telepített, 117 eltávolítandó és 0 nem frissített.
A művelet után 814 MB lemezterület szabadul fel.
Folytatni akarja? [I/n]

Erre nyomjunk Igent, ekkor leszedegeti ezeket a csomagokat és elvégzi a kapcsolódó beállítani valókat és a konfigurációs fájlok törléseit. Például a Grub-ot is újrakonfigurálja, miután lekerültek a régi kernelfájlok is. Tehát egy teljes takarítást végez, így nem marad felhasználatlan dolog a rendszerben.

 

 

Konklúzió

Ismét nem esett csorba a Linux és azon belül is a Debian erejében, hiszen egy ilyen komoly főverzió frissítést szépen elvégzett, ami után lett egy friss Debian 9 (Stretch) operációs rendszerünk, ami a továbbiakban is sziklaszilárd stabilitással fogja végezni a dolgát, és megoldani a rábízott feladatokat.

Terveim között szerepel, hogy ezt a szervert is felfrissítem ugyanígy a Debian 9-re. Azonban ez még ennél is keményebb feladat lesz, hiszen a szerveren webes szolgáltatások üzemelnek, és több éles weboldal is szolgálja a betévedő látogatóit. Ezért főpróbaként ennek a leírásnak a folytatásaként a Debian 8 (Jessie) tökéletes szerver 1.1-es változatának klónjával fogom elvégezni a frissítést, hogy ott is minden tökéletesen menjen, mire élesben is megcsinálom. Erről majd szintén készítek egy újabb leírást, amiben a szerveren lévő dolgok frissítéseivel kapcsolatos tapasztalatokat, információkat osztom meg.