Hogyan frissíthetjük a visszatartott csomagjainkat az APT csomagkezelő segítségével

botond küldte be 2020. 01. 31., p - 20:22 időpontban

Tartalom

 

Bevezető

Csomagjaink frissítésekor előfordulhat, hogy az APT csomagkezelő visszatart néhány darabot. Ennek többnyire az az oka, hogy egy adott program időnként olyan változásokon megy keresztül, ami miatt módosul az alapszoftver csomagfüggősége. Ilyenkor további újabb csomagokra lenne szüksége, esetenként olyanokra, amelyek más csomagok leváltását, eltávolítását teszik szükségessé. Ez a frissítés típusától is függ, például egy egyszerűbb frissítésről van-e szó, vagy egy biztonsági frissítés következtében el kell távolítani más olyan csomagokat, amelyek elavultak, vagy biztonsági kockázatot jelenthetnek az adott szoftverre, vagy akár a rendszer egészére. Némely esetben tehát a normál módú csomagfrissítés nem hajtja végre az ilyen szoftverek frissítését, hanem az APT a felhasználóra bízza ezt a kérdést. Ebben a rövid leírásban egy példán keresztül nézzük meg, hogyan frissíthetjük az ilyen módon visszatartott csomagjainkat.

Épp tegnap frissítettem a laptopomon a rendszert, amikor belebotlottam ebbe a nem mindennapos dologba, hogy az APT visszatartott jó néhány csomagot a frissítéstől. Persze ritkának sem mondható az ilyen eset, mert azért időnként előfordul, de ha az ember már régebben frissített ilyen visszatartott csomagokat, akkor könnyen lehet, hogy nincs rögtön fejben a megfelelő megoldás, így rá kell keresgélni egy kicsit. És ha már kéznél van a dolog, gondoltam írok róla pár sort, hátha másnak is jól jön ez az információ.

 

 

Szokásos frissítés

Ebben a példában éppen a Firefox csomagjait tartotta vissza nálam. Futtattam a szokásos apt-get frissítő parancsokat:

sudo apt-get update
sudo apt-get upgrade

Majd a kimenetben a következő mondat fogadott: "Az alábbi csomagok vissza lesznek tartva:"

apt-get upgrade - Visszatartott csomagok

Ezután megnéztem az apt-cache paranccsal a csomag információit, hogy milyen verziók érhetők el a rendszerben:

sudo apt-cache policy firefox-esr

Csomaginformációk lekérdezése az apt-cache policy paranncsal

Itt látszik is, hogy a jelenleg telepített Firefox csomag verziója 60.8.0, és hogy vannak ennél még jóval frissebbek is, jelen esetben a Debian biztonsági csomagtárában a 68.4.1-es változat.

 

Visszatartott csomagok frissítése

A --with-new-pkgs kapcsoló használata

A visszatartott csomagok frissítésére szolgál az apt-get parancs --with-new-pkgs kapcsolója. Ezzel lefuttatva újra a frissítést:

sudo apt-get --with-new-pkgs upgrade

apt-get - Visszatartott csomagok frissítése

Normális esetben itt kijelöli a korábban visszatartott csomagokat is a frissítendőnek, de itt érdekes dolog történik: Fent megjelent néhány újabb csomag, amit az előző körben nem frissített, valamint lejjebb látjuk, hogy ismét vissza lesznek tartva a Firefox csomagjai. Mi is történik itt?

Kicsit utánajárva, az apt-get manual oldalán kikeresve a --with-new-pkgs kapcsoló leírását, idézem:

--with-new-pkgs
    Allow installing new packages when used in conjunction with upgrade. This is useful if
    the update of a installed package requires new dependencies to be installed. Instead
    of holding the package back upgrade will upgrade the package and install the new
    dependencies. Note that upgrade with this option will never remove packages, only
    allow adding new ones. Configuration Item: APT::Get::Upgrade-Allow-New.

Itt leírja, hogy a parancs akkor hasznos, hogyha egy csomag frissítésekor új függőségek telepítésére is szükség van. A kapcsoló hatására nem kerülnek visszatartásra a csomagok, hanem feltelepíti a szükséges új függőségeit is. Valamint említi azt is, hogy az ezzel a kapcsolóval végrehajtott frissítés soha nem távolít el semmilyen csomagot, hanem csak újakat telepít.

Tehát a jelenlegi csavar ebben rejlik, hogy a kapcsoló nem távolít el semmilyen csomagot, így nem hajtja végre ezt a biztonsági frissítést sem, mivel (feltehetőleg) ennek a frissítésnek a része az is, hogy le kellene szedni néhány elavult csomagot. Emellett viszont felrakott 3 csomagot – amiknek jelen esetben semmi közük a frissíteni kívánt csomagjainkhoz –, és mellette még frissített 13 másikat, amit az első upgrade parancs nem.

Tehát a kapcsoló elvégezte a szükséges frissítéseket, és felépítette az újabb függőségeket is, de a cél programunk, a Firefox mégsem frissült. Akkor hogyan frissíthetjük ezt is? Erre az apt-get parancs egy másik opciója adja a megoldást.

 

 

Az apt-get install opciójának használata

Miután az előző parancs segítségével felépítettük a rendszerben az újabb szükséges függőségeket, futtassuk az apt-get install <csomagnév> parancsot:

sudo apt-get install firefox-esr

Itt fel kellene sorolni az összes visszatartott csomagot. Ebben az esetben viszont a firefox-esr csomag saját függőségeiként fogja telepítésre kijelölni az összes hozzá tartozó további kiegészítőt. Így tehát itt most elég csak ezt az egy darabot megadni:

Visszatartott csomagok frissítése

Visszatartott csomagok frissítése

Itt a második képen látható, hogy 4 eltávolított tétel is szerepel a listában. Tehát az előző --with-new-pkgs kapcsoló valószínű ezért nem hajtotta végre ezt a biztonsági frissítést, mivel ennek részeként törölnie kellett volna 4 csomagot, amit a kapcsoló – a manual oldala alapján – nem végez el, így tehát átugrotta a feladatot.

Frissített csomagok ellenőrzése

Végül ellenőrizzük a frissített csomagjainkat:

sudo apt-cache-policy firefox-esr
sudo dpkg -l | grep firefox | head -10

Itt is természetesen mindenki a saját szituációjának megfelelő csomagokra alkalmazza a parancsot...

Frissített csomagok ellenőrzése

És itt szépen látszik, hogy fent van a legújabb elérhető verziója a Firefox csomagjainak, ami a "debian-security", tehát a Debian biztonsági frissítéseit tartalmazó tárolójából származik. Valamint rákeresve a csomag lista első 10 elemére, látszik a többi Firefox kiegészítő verziója is.

 

 

Konklúzió

Utólag látható, hogy ez egy roppant egyszerű művelet, azonban ha először kerül szembe vele az ember, akkor kicsit utána kell járni a dolgoknak. Így remélem hasznos lesz mások számára is.

Tehát normál esetben a visszatartott csomagokat elég csak a -with-new-pkgs kapcsolóval frissíteni, de ha az adott frissítés más csomagok eltávolításával is jár, akkor pedig használjuk az apt-get install <visszatartott csomagok listája> parancsot. Egymás után alkalmazva a kettőt pedig még biztosabbak lehetünk benne, hogy végre fogja hajtani a frissítést. Persze vannak ennél még drasztikusabb módszerek is, mint például az apt-get dist-upgrade (disztribúció frissítés) funkció futtatása, amikor újraépíti a teljes rendszer függőségeit és úgy frissít minden csomagot, de ezt már tényleg csak a legvégső esetben kell alkalmaznunk, ha az előző módszerek is kudarcot vallanának.