13. Csomagkezelés

A legtöbb operációs rendszernek különféle programokat kell futtatnia, sok olyat is, amelyek nem az operációs rendszerrel érkeztek. Ezeknek a programoknak a telepítése és eltávolítása a rendszerhez kötődő feladat, amelyet valamilyen formában minden operációs rendszer el tud végezni.

A Windowsok a kezdetektől fogva telepítő programokat használtak arra, hogy egy új szoftvert a rendszerbe fel lehessen telepíteni. Ezek a telepítés során több-kevesebb beállítást el is végeznek, és az adott szoftver a telepítés után elindítható. A Windows programok gyakran használnak dinamikus csatolású könyvtárakat, ún. .dll fájlokat (Dynamic Link Library), amelyek különféle, a programok által közösen használható funkciókat valósítanak meg. Számos program telepít ilyeneket pl. a Windows\system32 könyvtárba. A program eltávolításakor viszont problémát jelent az, hogy le szabad-e törölni egy ilyen .dll fájlt, mert lehet, hogy azóta azt már egy másik alkalmazás is használja, amit viszont a Windows nem tart nyilván. Így sajnos az alkalmazások teljes eltávolítása problémás feladat.

Az Apple operációs rendszerei, a MacOS (régebben OS X) és az IOS (ez fut a telefonjaikon) az alkalmazások számára az ún. sandbox modellt alkalmazza. Nincs túlbonyolítva, minden telepített program egy könyvtárba kerül, a dinamikus könyvtáraival együtt, és amikor egy alkalmazást törölni kell, akkor ezt a könyvtárat kell eltávolítani. Az operációs rendszer könyvtáraiba egy alkalmazásnak sincs joga írni, a programok be vannak szorítva a saját telepítési könyvtáraikba. Ezért alig létezik kártevő ezekre a rendszerekre, mivel ebből a „ketrecből” akkor sem tudnak kitörni, ha az alkalmazás egyébként sérülékeny.

A Linuxokra kezdetben azt mondták: programozók készítették programozóknak. Ez többek közt azt is jelentette, hogy az elkészült programokhoz nem írtak telepítőket sem, hanem a forráskódot adták közre, az üzemeltetők pedig lefordították azt a saját rendszerükön. Korántsem mindenki szerette ezt, mert a fordítás sokszor nem ment simán, és ha valamilyen hiba történt, nehéz volt azzal mit kezdeni. A lefordított programok a rendszer különböző helyein vártak el fájlokat, uninstallert szinte soha sem készítettek hozzájuk. Ha új verzió jelent meg, ami esetleg már nem használt egy fájlt, az feleslegesen örökre a rendszerben maradt, ha az üzemeltető nem szerzett erről tudomást.

Emellett problémát jelentett a függőségek kezelése is, ha az egyébként sikeresen lefordított program nem indult el, gyakran valamilyen programkönyvtár hiánya volt az oka, ennek kiderítése, és kezelése már az üzemeltető feladata volt, aki persze nem feltétlenül volt jó programozó (a többségük épp ezért lett üzemeltető).

És még egy nagy probléma: az egyes programok új verzióinak, hibajavításainak megjelenéséről is csak hírlevelekből, vagy ad-hoc ellenőrzésekből lehetett tudomást szerezni. Ezért az egyes szoftverek biztonsági hibái jóval hosszabb ideig voltak kihasználhatók – a rendszergazdák nem értesültek arról, hogy frissíteniük kellene már azokat.

Megjegyzés

Szinte minden Unix rendszer része a C fordító, de azt javaslom, hogy ha nincs rá szükséged, ne telepítsd. Nem kell, hogy egy esetleges támadónak önként add a kezébe add azt az eszközt, amivel azonnal le is tud fordítani magának programokat a rendszereden.

13.1. A csomagkezelő

A fenti problémák megoldására fejlesztették ki a csomagkezelő rendszereket. Ezek első állomása egy olyan telepítő csomag kidolgozása volt, amely mentesítette a rendszergazdát attól, hogy fordítási feladatokat kelljen elvégeznie, a telepítő csomagok már lefordított binárisokat tartalmaznak és azok a megfelelő parancsokkal telepíthetők. Sajnos a két nagy Linux irányzat saját csomag formátumot dolgozott ki, a Debian stílusú rendszerekbe .deb, a Redhat rendszereibe .rpm fájlok (csomagok) telepíthetők. A fejlesztők számára elkészítették azokat a szoftvereket, amelyekkel ilyen csomagokat tudtak előállítani, és arra ösztönözték őket, hogy a forráskód helyett az adott rendszerhez illeszkedő telepítő csomagokat készítsenek. Most a debian-alapú rendszereknél működő változattal foglalkozunk.

13.2. A dpkg

A Debian-alapú rendszerek esetében a csomagok kezelését a dpkg paranccsal lehet elvégezni. Lássuk ezt néhány példán keresztül, ahol a Total Commander unixos megfelelőjét fogom feltelepíteni, illetve eltávolítani. A példához a telepítő csomagokat a https://pkgs.org/download/mc oldalról töltöttem le, amihez a wget parancsot használtam. Ennek paraméterként meg kell a letöltendő fájl URL-jét, és az elvégzi a letöltést.

A dpkg használata nem bonyolult. Egy csomag telepítéséhez a dpkg -i <csomag>, a törléséhez pedig a dpkg -r <csomag> parancsot kell kiadni. Az i jelentése az Install, a r pedig a Remove.

A telepítés csak akkor megy végbe, ha a telepítendő csomag minden függősége már telepítve van. Az alábbi példában látni fogod, hogy a Midnight Commander működéséhez egy másik, mc-data nevű csomagra is szükség van (függ tőle), ezért addig nem tudjuk elvégezni a telepítést, amíg ennek eleget nem teszünk. Lássuk ezt a gyakorlatban!

Először letöltöm a Midnight Commander telepítő csomagját:

root@columbo:~/install# wget 'http://archive.ubuntu.com/ubuntu/pool/universe/m/mc/mc_4.8.15-2_amd64.deb'
--2017-09-23 20:34:42--  http://wget/
wget (wget) feloldása… sikertelen: A név vagy a szolgáltatás nem ismert.
wget: a gépcím („wget”) nem oldható fel
--2017-09-23 20:34:42--  http://archive.ubuntu.com/ubuntu/pool/universe/m/mc/mc_4.8.15-2_amd64.deb
archive.ubuntu.com (archive.ubuntu.com) feloldása… 91.189.91.26, 91.189.88.149, 91.189.88.152, ...
Csatlakozás a következőhöz: archive.ubuntu.com (archive.ubuntu.com)[91.189.91.26]:80… kapcsolódva.
HTTP kérés elküldve, várakozás válaszra… 200 OK
Hossz: 462158 (451K) [application/x-debian-package]
Mentés ide: „mc_4.8.15-2_amd64.deb”

100%[========================================================================================>] 462.158      878KB/s   idő 0,5s

2017-09-23 20:34:42 (878 KB/s) -- „mc_4.8.15-2_amd64.deb” mentve [462158/462158]

BEFEJEZVE --2017-09-23 20:34:42--
Valóságban eltelt teljes idő: 0,7s
Letöltve: 1 fájl, 451K 0,5s alatt (878 KB/s)

Nézzük meg, valóban itt a telepítő? Egy .deb kiterjesztésű fájlt találunk az aktuális könyvtárban:

root@columbo:~/install# ls -l
összesen 1628
-rw-r--r-- 1 root root  462158 dec   22  2015 mc_4.8.15-2_amd64.deb

Telepítem ezt a dpkg -i mc_4.8.15-2_amd64.deb paranccsal.

root@columbo:~/install# dpkg -i mc_4.8.15-2_amd64.deb
A korábban ki nem választott mc csomag kiválasztása.
(Adatbázis olvasása ... 89396 fájl és könyvtár van jelenleg telepítve.)
Kibontás előkészítése: mc_4.8.15-2_amd64.deb ...
Kibontás: mc (3:4.8.15-2) ...
dpkg: függőségi problémák miatt nem állítható be: mc:
 mc függőségek: mc-data (= 3:4.8.15-2); ám:
   `mc-data' csomag nincs telepítve.

dpkg: hiba a csomag feldolgozásakor: mc (--install):
 függőségi hibák - e csomag beállítatlan maradt
Aktiválók feldolgozása: mime-support (3.54ubuntu1.1) ...
Hibák történtek a feldolgozáskor:
 mc

Sajnos a telepítés nem sikerült, mert a program függ egy másiktól, az mc-data nevűtől. Ezért először azt kell telepíteni, persze ahhoz először le kell tölteni:

root@columbo:~/install# wget 'http://archive.ubuntu.com/ubuntu/pool/universe/m/mc/mc-data_4.8.15-2_all.deb'
--2017-09-23 20:41:31--  http://archive.ubuntu.com/ubuntu/pool/universe/m/mc/mc-data_4.8.15-2_all.deb
archive.ubuntu.com (archive.ubuntu.com) feloldása… 91.189.91.26, 91.189.88.149, 91.189.88.152, ...
Csatlakozás a következőhöz: archive.ubuntu.com (archive.ubuntu.com)[91.189.91.26]:80… kapcsolódva.
HTTP kérés elküldve, várakozás válaszra… 200 OK
Hossz: 1201920 (1,1M) [application/x-debian-package]
Mentés ide: „mc-data_4.8.15-2_all.deb”

100%[========================================================================================>] 1.201.920   1,40MB/s   idő 0,8s

2017-09-23 20:41:32 (1,40 MB/s) -- „mc-data_4.8.15-2_all.deb” mentve [1201920/1201920]

Megvan, most telepítem az mc-data programot:

root@columbo:~/install# dpkg -i mc-data_4.8.15-2_all.deb
A korábban ki nem választott mc-data csomag kiválasztása.
(Adatbázis olvasása ... 89486 fájl és könyvtár van jelenleg telepítve.)
Kibontás előkészítése: mc-data_4.8.15-2_all.deb ...
Kibontás: mc-data (3:4.8.15-2) ...
Beállítás: mc-data (3:4.8.15-2) ...
Aktiválók feldolgozása: man-db (2.6.7.1-1ubuntu1) ...

Ez sikerült, szerencsére ennek már nem voltak további függőségei. Most már telepíthetem magát a Midnight Commandert:

root@columbo:~/install# dpkg -i mc_4.8.15-2_amd64.deb
(Adatbázis olvasása ... 89747 fájl és könyvtár van jelenleg telepítve.)
Kibontás előkészítése: mc_4.8.15-2_amd64.deb ...
Kibontás: mc (3:4.8.15-2) e helyett: 3:4.8.15-2 ...
Beállítás: mc (3:4.8.15-2) ...
Aktiválók feldolgozása: mime-support (3.54ubuntu1.1) ...

Sikerült, el lehet indítani a programot. Nem volt túl egyszerű azért így sem, de nem baj, lesz egy erre alapuló kényelemes megoldás is. A Commander indításához add ki a mc parancsot, a kilépéshez az F10 gombot kell használnod.

Midnight Commander

Most lássuk, hogyan lehet eltávolítani a Commandert! Ehhez szintén a dpkg parancsot fogom használni, paraméterként viszont nem a telepítő fájl nevét, hanem csak a csomag nevét kell megadni:

root@columbo:~/install# dpkg -r mc
(Adatbázis olvasása ... 89747 fájl és könyvtár van jelenleg telepítve.)
Eltávolítás: mc (3:4.8.15-2) ...
Aktiválók feldolgozása: mime-support (3.54ubuntu1.1) ...

Ez nem távolította el az mc-data csomagot, azt egy külön lépésben kell megtenni:

root@columbo:~/install# dpkg -r mc-data
(Adatbázis olvasása ... 89659 fájl és könyvtár van jelenleg telepítve.)
Eltávolítás: mc-data (3:4.8.15-2) ...
Aktiválók feldolgozása: man-db (2.6.7.1-1ubuntu1) ...

13.3. Az APT

Az, hogy egy telepítendő program egy csomagban érhető el, és azt egy paranccsal feltelepítheted, és eltávolíthatod, már nagyon kényelemessé teszi az ezzel kapcsolatos munkafolyamatokat. Nem kell fordítással bíbelődnöd, és mivel a rendszer ismeri a csomagok tartalmát, így az eltávolítás is korrekt módon elvégezhető. Ugyanakkor az, hogy az egyes szoftvereket nekem kellett letöltögetnem, hogy nekem kellett kezelnem a függőségeiket (mc-data), azért még elég munkássá tette az előző példában a Commander telepítését. Mind a Debian, mind a Redhat fejlesztői továbbléptek ezen, és a csomagkezelő parancsok fölé egy újabb réteget hoztak létre, ez a Debian esetében az apt (Advanced Package Tool) rendszere. Az apt nem várja el, hogy tudd, hogy a telepítő csomagok hol találhatók. Használatával nem kell a fejlesztők weboldalain keresned az aktuális verziókat, mivel azok a programok nem is ott leszenek elérhetők, hanem az adott Linux disztribúció terjesztői által fenntartott ún. repozitóriumokban (tárházakban). Ha egy fejlesztő elkészíti egy szoftver következő verzióját, vagy valamilyen hibajavítás után közzé szeretné azt tenni, eljuttatja azt a repozitóriumba. Az operációs rendszerek telepítése, frissítése során megtörténik a repozitórium tartalmának átnézése, és lehetővé válik a frissítések, új verziók letöltése.

13.3.1. repozitóriumok

A fentiekből következik, hogy a rendszernek ismernie kell a repozitóriumok helyét, ezt az /etc/apt/sources.lists fájl írja le. (Most egy kicsit csalok, a columbo még nem a 16.04-es rendszert tartalmazza, most egy másik gépen végzem ezt el, hogy up-to-date állapotot láss.) A fájl tele van kommentekkel, ezért egy gyors kis szűrő gyakorlat, nem akarjuk látni csak azokat a sorokat, amelyen nem #-tel kezdődnek és nem is üresek.

root@www:~# cat /etc/apt/sources.list | grep -v ^# | grep -v ^$
deb http://hu.archive.ubuntu.com/ubuntu/ xenial main restricted
deb http://hu.archive.ubuntu.com/ubuntu/ xenial-updates main restricted
deb http://hu.archive.ubuntu.com/ubuntu/ xenial universe
deb http://hu.archive.ubuntu.com/ubuntu/ xenial-updates universe
deb http://hu.archive.ubuntu.com/ubuntu/ xenial multiverse
deb http://hu.archive.ubuntu.com/ubuntu/ xenial-updates multiverse
deb http://hu.archive.ubuntu.com/ubuntu/ xenial-backports main restricted universe multiverse
deb http://security.ubuntu.com/ubuntu xenial-security main restricted
deb http://security.ubuntu.com/ubuntu xenial-security universe
deb http://security.ubuntu.com/ubuntu xenial-security multiverse

Az egyes sorok írják le az egyes repozitóriumok tulajdonságait.

deb:

A repozitóriumok tartalmazhatnak telepíthető csomagokat és olyan csomagokat is, amelyekben az adott szoftver forráskódja van. Előbbi esetben a sor elején deb, utóbbiban deb-src olvasható.

url:

Az archívum helye. Ezeket választottad ki akkor, amikor a rendszert telepítetted.

xenial:

Az operációs rendszer verziója.

tároló:

Az egyes tárolók nevei. a main, restricted, universe, multiverse jelentését a telepítés során olvashattad.

Ha valamilyen program telepítéséhez egy újabb repository beállítása válik szükségessé, akkor ebben a fájlba kell felvenned a gyártó által megadott sort.

13.3.2. update

Lássuk, hogyan működik az apt a gyakorlatban! Az apt kezeléséhez szükséges parancs az apt-get. Az ennek adott paraméter határozza meg, hogy milyen műveletet kell elvégeznie a parancsnak.

Az operációs rendszer nyilvántartja azt, hogy milyen telepítő csomagok érhetők el a repozitóriumokban. Ezeknek egy aktuális állapotát a /var/lib/apt/lists könyvtár fájljai tartalmazzák. Ezek az idő múlásával elavulnak, hiszen a repozitóriumok tartalma folyamatosan változik, bővül. Ezért a frissítések, telepítések előtt először a helyi nyilvántartást frissíteni kell, hogy az a repozitóriumok valós állapotát tükrözze. (Ez gyakorlatilag a nyilvántartást végző fájlok aktuális verzióinak letöltését jelenti.) A parancs, amivel ezt meg tudod tenni, az apt-get update.

Frissítsük az apt-get update paranccsal!

root@columbo:/var/lib/apt/lists# apt-get update
Mellőz http://hu.archive.ubuntu.com trusty InRelease
Letöltés:1 http://hu.archive.ubuntu.com trusty-updates InRelease [65,9 kB]
Letöltés:2 http://hu.archive.ubuntu.com trusty-backports InRelease [65,9 kB]
Letöltés:3 http://hu.archive.ubuntu.com trusty Release.gpg [933 B]
Letöltés:4 http://hu.archive.ubuntu.com trusty-updates/main amd64 Packages [1.024 kB]
Találat http://ppa.launchpad.net trusty InRelease

Csak az ellenőrzés kedvéért nézzünk bele a nyilvántartás könyvtárába, a fájlok dátuma és ideje a mostani, tehát tényleg frissültek.

root@columbo:/var/lib/apt/lists# ls -l  /var/lib/apt/lists | head
összesen 149300
-rw-r--r-- 1 root root    65924 szept 24 08:02 hu.archive.ubuntu.com_ubuntu_dists_trusty-backports_InRelease
-rw-r--r-- 1 root root    59079 szept 24 08:02 hu.archive.ubuntu.com_ubuntu_dists_trusty-backports_main_binary-amd64_Packages
-rw-r--r-- 1 root root    58985 szept 24 08:02 hu.archive.ubuntu.com_ubuntu_dists_trusty-backports_main_binary-i386_Packages
-rw-r--r-- 1 root root    28150 szept 24 08:02 hu.archive.ubuntu.com_ubuntu_dists_trusty-backports_main_i18n_Translation-en
-rw-r--r-- 1 root root     3396 szept 24 08:02 hu.archive.ubuntu.com_ubuntu_dists_trusty-backports_multiverse_binary-amd64_Packages
-rw-r--r-- 1 root root     3341 szept 24 08:02 hu.archive.ubuntu.com_ubuntu_dists_trusty-backports_multiverse_binary-i386_Packages
-rw-r--r-- 1 root root     2242 szept 24 08:02 hu.archive.ubuntu.com_ubuntu_dists_trusty-backports_multiverse_i18n_Translation-en
-rw-r--r-- 1 root root        0 szept 24 08:02 hu.archive.ubuntu.com_ubuntu_dists_trusty-backports_restricted_binary-amd64_Packages
-rw-r--r-- 1 root root        0 szept 24 08:02 hu.archive.ubuntu.com_ubuntu_dists_trusty-backports_restricted_binary-i386_Packages

13.3.3. install

Most elvégezzük újra az előző feladatot, a Midnight Commander telepítését. Ehhez az apt-get install parancsot használjuk, aminek megadjuk a telepítendő program nevét. Nem lesz szükség arra, hogy a verziószámokkal bíbelődjünk, a legfrissebb változat települ majd, nem kell tudnod azt sem, hogy az pontosan melyik. A függőségek kezelése is automatikusan megtörténik majd. Most is szükség lesz az mc-data csomagra, de az apt megállapítja ezt (a Commander csomagja leírja a függőségeket), és elvégzi a szükséges telepítéseket. A parancs lefutása után a Commander az mc begépelésével el is indítható.

root@columbo:/var/lib/apt/lists# apt-get install mc
Csomaglisták olvasása... Kész
Függőségi fa építése
Állapotinformációk olvasása... Kész
Az alábbi extra csomagok kerülnek telepítésre:
  mc-data
Javasolt csomagok:
  catdvi texlive-binaries dbview djvulibre-bin gv imagemagick odt2txt
  poppler-utils python-boto python-tz xpdf pdf-viewer
Az alábbi ÚJ csomagok lesznek telepítve:
  mc mc-data
0 frissített, 2 újonnan telepített, 0 eltávolítandó és 3 nem frissített.
Letöltendő adatmennyiség: 1.587 kB.
A művelet után 6.904 kB lemezterület kerül felhasználásra.
Folytatni akarja? [I/n]
Letöltés:1 http://hu.archive.ubuntu.com/ubuntu/ trusty/universe mc-data all 3:4.8.11-1 [1.134 kB]
Letöltés:2 http://hu.archive.ubuntu.com/ubuntu/ trusty/universe mc amd64 3:4.8.11-1 [453 kB]
Letöltve 1.587 kB 0mp alatt (16,0 MB/s)
A korábban ki nem választott mc-data csomag kiválasztása.
(Adatbázis olvasása ... 89396 fájl és könyvtár van jelenleg telepítve.)
Kibontás előkészítése: .../mc-data_3%3a4.8.11-1_all.deb ...
Kibontás: mc-data (3:4.8.11-1) ...
A korábban ki nem választott mc csomag kiválasztása.
Kibontás előkészítése: .../mc_3%3a4.8.11-1_amd64.deb ...
Kibontás: mc (3:4.8.11-1) ...
Aktiválók feldolgozása: man-db (2.6.7.1-1ubuntu1) ...
Aktiválók feldolgozása: mime-support (3.54ubuntu1.1) ...
Beállítás: mc-data (3:4.8.11-1) ...
Beállítás: mc (3:4.8.11-1) ...
Új beállító fájl telepítése /etc/mc/mc.emacs.keymap ...
Új beállító fájl telepítése /etc/mc/mc.ext ...
Új beállító fájl telepítése /etc/mc/mcedit.menu ...
Új beállító fájl telepítése /etc/mc/mc.default.keymap ...
Új beállító fájl telepítése /etc/mc/mc.menu.sr ...
Új beállító fájl telepítése /etc/mc/mc.menu ...
Új beállító fájl telepítése /etc/mc/mc.keymap ...

Az egyszerű parancs valójában egy többlépéses folyamatot indított el, ezek fő részei:

Csomaglisták olvasása:

Az apt megkeresi a helyi nyilvántartás alapján a csomagot, és kiolvassa adatait.

Függőségi fa építése:

felépíti azt a függőségi fát, amely alapján majd a megfelelő csomagokat a megfelelő sorrendben fel fogja telepíteni. (Ez a fa bonyolult is lehet, hiszen a függőségeknek is lehetnek függőségei).

Az alábbi extra csomagok kerülnek telepítésre:

a függőség következtében telepítendő csomagok felsorolása.

Javasolt csomagok:

Ahhoz, hogy az adott szoftver teljes funkcionalitása használható legyen további csomagok telepítését javasolja az apt. A példában ilyen pl. a pdf-viewer, amely a Commanderből pdf fájlok tartalmát képes megjeleníteni. Ennek léte nem feltétlenül szükséges, a Commander működőképes nélküle, de az általa megvalósított funkciót nem lehet majd elérni. A javasolt csomagok nem kerülnek automatikusan telepítésre, azt neked kell megtenned.

Folytatni akarja?:

A fentiek ismeretében eldöntheted, hogy valóban telepíteni akarod-e a csomagot és függőségeit. (Ha nincs függőség, akkor a kérdést nem teszi fel.)

Telepítés:

A továbbiakban nyomon követhető a csomag és függőségeinek letöltése a repozitóriumból, a csomagok kibontása, és a telepítés elvégzése.

13.3.4. remove

A telepített csomagok el is távolíthatók, ennek részletei viszont pontosabban meghatározhatók.

apt-get autoremove:

Eltávolítja az összes olyan csomagot, amelyre a rendszerben már nincs szükség. Ilyenek a régi kernelek, melyeknek már az újabb verzióját telepítettük, vagy olyan, eredetileg függőség miatt telepített csomagok, amelyekre már egy szoftvernek sincs szüksége. Tulajdonképpen úgy érdemes rá gondolnod, mint egy „takarító programra”.

apt-get remove <program>:

Eltávolítja a megadott programot, de annak minden függőségét és konfigurációs fájlját meghagyja a rendszerben. Ezt abban a ritka esetben szoktuk használni, amikor a csomagot valamilyen hiba miatt átmenetileg akarjuk levenni, és tudjuk, hogy majd újra telepíteni akarjuk. Ebben az esetben szükségünk van a függőségekre, és nem is akarjuk újra konfigurálni a programot, ezért ezeket a fájlokat megtartjuk.

apt-get remove \-\-purge <program>:

Eltávolítja a programot, és annak konfigurációs fájljait, de a rendszerben hagyja a függőségeket.

apt-get autoremove \-\-purge <program>:

Eltávolítja a programot, a konfigurációs fájljait és a függőségeit is abban az esteben, ha nincs más program a rendszerben, aminek szüksége lenne rá.

Egy példa: távolítsuk el a Midnight Commandert annak minden konfigurációs fájljával, és függőségeivel együtt, írmagja sem maradjon!

root@columbo:/var/lib/apt# apt-get autoremove \\-\\-purge mc
Csomaglisták olvasása... Kész
Függőségi fa építése
Állapotinformációk olvasása... Kész
Az alábbi csomagok el lesznek TÁVOLÍTVA:
  libssh2-1* mc* mc-data*
0 frissített, 0 újonnan telepített, 3 eltávolítandó és 0 nem frissített.
A művelet után 7.166 kB lemezterület szabadul fel.
Folytatni akarja? [I/n] i
(Adatbázis olvasása ... 94593 fájl és könyvtár van jelenleg telepítve.)
Eltávolítás: mc (3:4.8.11-1) ...
Beállítófájlok törlése: mc (3:4.8.11-1) ...
Eltávolítás: libssh2-1:amd64 (1.4.3-2ubuntu0.1) ...
Beállítófájlok törlése: libssh2-1:amd64 (1.4.3-2ubuntu0.1) ...
Eltávolítás: mc-data (3:4.8.11-1) ...
Aktiválók feldolgozása: mime-support (3.54ubuntu1.1) ...
Aktiválók feldolgozása: libc-bin (2.19-0ubuntu6.13) ...
Aktiválók feldolgozása: man-db (2.6.7.1-1ubuntu1) ...

Tipp

Az „írmag” igazából nem sikerült, a felhasználók saját könyvtáraiban levő .mc könyvtárak, amelyek az ő egyéni beállításaikat tartalmazták, nem törlődtek.

13.3.5. upgrade

A rendszer csomagjainak frissítését az apt-get upgrade paranccsal lehet elvégezni. Ha régen futtattad az apt-get update parancsot, akkor érdemes aktualizálni a csomaglistádat a frissítés előtt. Az apt-get upgrade minden olyan csomagot frissíteni fog, amelyből újabb változat áll rendelkezésre. (Lehet kivétel, mert lehetőséged van arra, hogy bizonyos szoftvereket „befagyassz”, azaz megtilthatod a frissítésüket.)

13.3.6. dist-upgrade

Az upgrade a rendszer napi frissítését szolgálja. Nem távolít el csomagokat és a rendszer alapvető csomagjait nem fogja frissíteni. Amennyiben egy teljes frissítést szeretnél, akkor az apt-get dist-upgrade parancsot kell használnod. Az alábbi példában látható, hogy a kernel frissíthető lenne (linux-generic linux-headers-generic linux-image-generic csomagok), de azt az apt-get upgrade parancs nem végzi el, visszatartja:

root@columbo:~# apt-get upgrade
Csomaglisták olvasása... Kész
Függőségi fa építése
Állapotinformációk olvasása... Kész
Frissítés kiszámítása... Kész
Az alábbi csomagok vissza lesznek tartva:
  linux-generic linux-headers-generic linux-image-generic
0 frissített, 0 újonnan telepített, 0 eltávolítandó és 3 nem frissített.

Ha teljes frissítést szeretnél, a dist-upgrade-re van szükség (elég hosszas a kimenet, a lényeg a kernel frissítése, az initrd elkészítése):

root@columbo:~# apt-get dist-upgrade
Csomaglisták olvasása... Kész
Függőségi fa építése
Állapotinformációk olvasása... Kész
Frissítés kiszámítása... Kész
Az alábbi ÚJ csomagok lesznek telepítve:
  linux-headers-3.13.0-132 linux-headers-3.13.0-132-generic
  linux-image-3.13.0-132-generic linux-image-extra-3.13.0-132-generic
Az alábbi csomagok frissítve lesznek:
  linux-generic linux-headers-generic linux-image-generic
3 frissített, 4 újonnan telepített, 0 eltávolítandó és 0 nem frissített.
Letöltendő adatmennyiség: 61,7 MB.
A művelet után 272 MB lemezterület kerül felhasználásra.
Folytatni akarja? [I/n]

Letöltés:1 http://security.ubuntu.com/ubuntu/ trusty-security/main linux-image-3.13.0-132-generic amd64 3.13.0-132.181 [15,4 MB]
Letöltés:2 http://security.ubuntu.com/ubuntu/ trusty-security/main linux-image-extra-3.13.0-132-generic amd64 3.13.0-132.181 [36,6 MB]
Letöltés:3 http://security.ubuntu.com/ubuntu/ trusty-security/main linux-generic amd64 3.13.0.132.141 [1.786 B]
Letöltés:4 http://security.ubuntu.com/ubuntu/ trusty-security/main linux-image-generic amd64 3.13.0.132.141 [2.296 B]
Letöltés:5 http://security.ubuntu.com/ubuntu/ trusty-security/main linux-headers-3.13.0-132 all 3.13.0-132.181 [8.911 kB]
Letöltés:6 http://security.ubuntu.com/ubuntu/ trusty-security/main linux-headers-3.13.0-132-generic amd64 3.13.0-132.181 [693 kB]
Letöltés:7 http://security.ubuntu.com/ubuntu/ trusty-security/main linux-headers-generic amd64 3.13.0.132.141 [2.288 B]
Letöltve 61,7 MB 2p 4mp alatt (497 kB/s)
A korábban ki nem választott linux-image-3.13.0-132-generic csomag kiválasztása.
(Adatbázis olvasása ... 89738 fájl és könyvtár van jelenleg telepítve.)
Kibontás előkészítése: .../linux-image-3.13.0-132-generic_3.13.0-132.181_amd64.deb ...
Done.
Kibontás: linux-image-3.13.0-132-generic (3.13.0-132.181) ...
A korábban ki nem választott linux-image-extra-3.13.0-132-generic csomag kiválasztása.
Kibontás előkészítése: .../linux-image-extra-3.13.0-132-generic_3.13.0-132.181_amd64.deb ...
Kibontás: linux-image-extra-3.13.0-132-generic (3.13.0-132.181) ...
Kibontás előkészítése: .../linux-generic_3.13.0.132.141_amd64.deb ...
Kibontás: linux-generic (3.13.0.132.141) e helyett: 3.13.0.77.83 ...
Kibontás előkészítése: .../linux-image-generic_3.13.0.132.141_amd64.deb ...
Kibontás: linux-image-generic (3.13.0.132.141) e helyett: 3.13.0.77.83 ...
A korábban ki nem választott linux-headers-3.13.0-132 csomag kiválasztása.
Kibontás előkészítése: .../linux-headers-3.13.0-132_3.13.0-132.181_all.deb ...
Kibontás: linux-headers-3.13.0-132 (3.13.0-132.181) ...
A korábban ki nem választott linux-headers-3.13.0-132-generic csomag kiválasztása.
Kibontás előkészítése: .../linux-headers-3.13.0-132-generic_3.13.0-132.181_amd64.deb ...
Kibontás: linux-headers-3.13.0-132-generic (3.13.0-132.181) ...
Kibontás előkészítése: .../linux-headers-generic_3.13.0.132.141_amd64.deb ...
Kibontás: linux-headers-generic (3.13.0.132.141) e helyett: 3.13.0.77.83 ...
Beállítás: linux-image-3.13.0-132-generic (3.13.0-132.181) ...
Running depmod.
update-initramfs: deferring update (hook will be called later)
Examining /etc/kernel/postinst.d.
run-parts: executing /etc/kernel/postinst.d/apt-auto-removal 3.13.0-132-generic /boot/vmlinuz-3.13.0-132-generic
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.13.0-132-generic /boot/vmlinuz-3.13.0-132-generic
update-initramfs: Generating /boot/initrd.img-3.13.0-132-generic
run-parts: executing /etc/kernel/postinst.d/update-notifier 3.13.0-132-generic /boot/vmlinuz-3.13.0-132-generic
run-parts: executing /etc/kernel/postinst.d/zz-update-grub 3.13.0-132-generic /boot/vmlinuz-3.13.0-132-generic
GRUB beállítófájl előállítása…
Megtalált linux lemezkép: /boot/vmlinuz-3.13.0-132-generic
Megtalált initrd lemezkép: /boot/initrd.img-3.13.0-132-generic
Megtalált linux lemezkép: /boot/vmlinuz-3.13.0-77-generic
Megtalált initrd lemezkép: /boot/initrd.img-3.13.0-77-generic
Found memtest86+ image: /boot/memtest86+.elf
Found memtest86+ image: /boot/memtest86+.bin
kész
Beállítás: linux-image-extra-3.13.0-132-generic (3.13.0-132.181) ...
run-parts: executing /etc/kernel/postinst.d/apt-auto-removal 3.13.0-132-generic /boot/vmlinuz-3.13.0-132-generic
run-parts: executing /etc/kernel/postinst.d/initramfs-tools 3.13.0-132-generic /boot/vmlinuz-3.13.0-132-generic
update-initramfs: Generating /boot/initrd.img-3.13.0-132-generic
run-parts: executing /etc/kernel/postinst.d/update-notifier 3.13.0-132-generic /boot/vmlinuz-3.13.0-132-generic
run-parts: executing /etc/kernel/postinst.d/zz-update-grub 3.13.0-132-generic /boot/vmlinuz-3.13.0-132-generic
GRUB beállítófájl előállítása…
Megtalált linux lemezkép: /boot/vmlinuz-3.13.0-132-generic
Megtalált initrd lemezkép: /boot/initrd.img-3.13.0-132-generic
Megtalált linux lemezkép: /boot/vmlinuz-3.13.0-77-generic
Megtalált initrd lemezkép: /boot/initrd.img-3.13.0-77-generic
Found memtest86+ image: /boot/memtest86+.elf
Found memtest86+ image: /boot/memtest86+.bin
kész
Beállítás: linux-image-generic (3.13.0.132.141) ...
Beállítás: linux-headers-3.13.0-132 (3.13.0-132.181) ...
Beállítás: linux-headers-3.13.0-132-generic (3.13.0-132.181) ...
Beállítás: linux-headers-generic (3.13.0.132.141) ...
Beállítás: linux-generic (3.13.0.132.141) ...

Tipp

A kernel frissítése után újra kell indítanod a rendszert, ez azon ritka események egyike, amikor ezt nem kerülheted el. A futó kerneled még a régi, a most telepített új kernel csak egy reboot után indul el.

A régi, már nem használt kernel eltávolításához most jól jön egy autoremove:

root@columbo:~# apt-get autoremove
Csomaglisták olvasása... Kész
Függőségi fa építése
Állapotinformációk olvasása... Kész
Az alábbi csomagok el lesznek TÁVOLÍTVA:
  linux-headers-3.13.0-39 linux-headers-3.13.0-39-generic
0 frissített, 0 újonnan telepített, 2 eltávolítandó és 0 nem frissített.
A művelet után 76,7 MB lemezterület szabadul fel.
Folytatni akarja? [I/n] I
(Adatbázis olvasása ... 119400 fájl és könyvtár van jelenleg telepítve.)
Eltávolítás: linux-headers-3.13.0-39-generic (3.13.0-39.66) ...
Eltávolítás: linux-headers-3.13.0-39 (3.13.0-39.66) ...

13.3.7. clean

Az apt rendszer a letöltött telepítési csomagokat (.deb fájlokat) a /var/cache/apt/archives könyvtárban tárolja. Ezekre csak ideig-óráig van szükség, én pl. a rendszer mentése előtt törölni szoktam őket. Nézzük bele ebbe a könyvtárba! Itt mosolyognak az előbbi kernel frissítés

root@columbo:/var/lib/apt# ls -l /var/cache/apt/archives
összesen 60240
-rw-r--r-- 1 root root     1786 szept 14 11:24 linux-generic_3.13.0.132.141_amd64.deb
-rw-r--r-- 1 root root  8910658 szept 14 11:24 linux-headers-3.13.0-132_3.13.0-132.181_all.deb
-rw-r--r-- 1 root root   692912 szept 14 11:24 linux-headers-3.13.0-132-generic_3.13.0-132.181_amd64.deb
-rw-r--r-- 1 root root     2288 szept 14 11:24 linux-headers-generic_3.13.0.132.141_amd64.deb
-rw-r--r-- 1 root root 15437284 szept 14 11:24 linux-image-3.13.0-132-generic_3.13.0-132.181_amd64.deb
-rw-r--r-- 1 root root 36611976 szept 14 11:24 linux-image-extra-3.13.0-132-generic_3.13.0-132.181_amd64.deb
-rw-r--r-- 1 root root     2296 szept 14 11:24 linux-image-generic_3.13.0.132.141_amd64.deb
-rw-r----- 1 root root        0 febr   2  2014 lock
drwxr-xr-x 2 root root     4096 szept 28 06:34 partial

Ha meg tudod jegyezni a könyvtár nevét, a takarításhoz elég lehet egy rm parancs is. De mivel ennek a könyvtárnak a helye egy konfigurációs fájlban van meghatározva, a /var/cache/apt/archives csak az alapértelmezés szerinti érték, ezért érdemes inkább az erre szolgáló törlő parancsot használni, ami az apt-get clean. Ez után a cache könyvtár kürül:

root@columbo:/var/lib/apt# apt-get clean
root@columbo:/var/lib/apt# ls -l /var/cache/apt/archives
összesen 4
-rw-r----- 1 root root    0 febr   2  2014 lock
drwxr-xr-x 2 root root 4096 szept 28 06:34 partial

13.4. Más rendszerek

A mai modern megoldások lényege más rendszerek esetében is valamilyen központi szoftver tárban levő telepítő csomagokon alapul.

Ilyen tárat használ az Apple is Apple Store néven. A telefonjai teljesen zártak, csak innen lehet alkalmazást letölteni rájuk, az internetről hiába szeretnél valamilyen programot letölteni és a telefonra telepíteni, nincs erre mód. Az ok a gyártó szempontjából érthető:

  • Csak az Apple által ellenőrzött fejlesztők alkalmazásai kerülhetnek az Apple Store-ba, ezért jól ki tudják szűrni az esetleges ártalmas programokat. Nem fordulhat elő, hogy a forgalomban levő telefonok valamilyen ártó szándékú applikáció letöltése után működésképtelenné válnának. (Azért volt már egy-két meleg helyzet.)

  • Az Apple számára nagy bevételt jelent, hogy a fejlesztőktől pénzt kap azért, hogy az Apple Store-ban értékesíthessék a programjaikat. A fejlesztőknek viszont nem kell a marketinggel foglalkozniuk, a szoftver árának 30%-áért az Apple ezt elvégzi helyettük.

Hasonló elvek mentén működnek az Android és Windows rendszerek frissítései is, bár ott a gyártók nem támasztanak az Apple-éhez hasonló szigorú megkötéseket.

13.5. Ellenőrző kérdések

  • Milyen módszereket használtak (és használhatók ma is) szoftverek telepítésére?

  • Mi a csomagkezelő és hogyan működik?

  • Milyen használati esetei vannak a dpkg-nek?

  • Mik a függőségek és hogyan kezelhetők?

  • Mi az APT és hogyan működik?

  • Mik a repozitóriumok és hogyan kezelhetők a rendszerben?

  • Milyen használati esetei vannak az apt-nek?