Az apt és yum csomagkezelők összehasonlítása

A Unix/Linux szerverek üzemeltetése wikiből
(Változatok közti eltérés)
(A csomagok állapotai)
(Telepítés)
248. sor: 248. sor:
   
 
rpmbuild -bi <csomag>
 
rpmbuild -bi <csomag>
a csomag installed állapotba kerül..
+
a csomag installed állapotba kerül.
   
  +
rpmbuild -bb <csomag>
  +
a bináris elkészítése.
   
 
'''Kiegészítő kapcsolók'''
 
'''Kiegészítő kapcsolók'''

A lap 2012. december 8., 23:38-kori változata

apt-get install: a parancs, mely használatának élményét előbb-utóbb szinte minden Linux felhasználó megtapasztal és általában elég is a mindennapokban, hisz az átlagember ritkán akar a programokkal mást csinálni, mint telepíteni (meg persze futtatni, de az nem ide tartozik). Viszont a csomagkezelés ennél jóval több, sőt, az apt-get már egy jóval későbbi, az életet könnyebbé tevő „fícsör”.


Tartalomjegyzék

1 dpkg és rpm

A Debian alapú operációs rendszerek csomagkezelésének alapja a dpkg nevű program, míg a Red Hat által kifejlesztett rpm-et egyéb disztribúciók használják, pl. a Fedora, vagy CentOS, illetve meglepő módon, a Red Hat is. Ezek a programok alacsonyszintű csomagkezelést valósítanak meg, melyek szolgáltatásokat nyújtanak a magasabb szintű csomagkezelők számára (dpkg: apt, rpm: yum), melyeket egyszerűbb szintaxisuk miatt nagyobb előszeretettel használunk mi is. Nézzük is, mire használhatjuk ezeket a programokat:

egyszerűbb parancsok összefoglaló táblázata
dpkg rpm
Telepítés dpkg -i rpm -i
Eltávolítás dpkg -r rpm -e
Telepített programok listázása dpkg-query --l rpm -qa
Csomag részletes adatai dpkg-query --p rpm -qi
Csomaghoz tartozó összes file kilistázása dpkg-query --listfiles rpm -ql

2 DPKG

2.1 Telepítés

Telepítést az -i kapcsoló segítségével hajthatunk végre:

dpkg -i <csomag1> <csomag2>

Telepíthetjük a csomagokat lépésről-lépésre is, ugyanis a fenti parancs telepíti ÉS beállítja a csomagot. A lépések a következők:

dpkg --unpack <csomag1> <csomag2> 

telepíti a csomagot, de nem állítja be, unpacked állapotba kerül.

dpkg --configure  <csomag1> <csomag2> 

beállítja a megfelelő csomagot, ha az legalább unpacked állapotú.

dpkg --configure --pending 

minden beállítatlan csomagot konfigurál.

Kiegészítő kapcsolók

--force-all

Ha a telepítés folyamán valamilyen hiba lép fel, kikényszeríthetjük, hogy a telepítés folytatódjon, ugyanakkor használat ellen-javalt, mivel a dpkg nem hiába áll le a telepítéssel. Csak akkor használjuk, ha teljesen biztosak vagyunk a dolgunkban!

--debug=[debug szintje]

Telepítés során különböző mennyiségű információt kérhetünk le. Az 1-es szint a default, ennél csak több információt kaphatunk.

--refuse-downgrade

Ugyan a dpkg figyelmeztet a downgrade-re, de nem kérdezi meg, ennek ellenére szeretnénk-e folytatni a telepítést, csupán a figyelmeztető üzenetet kapjuk meg. Ha az ennek következtében kialakuló fejfájást meg szeretnénk előzni, akkor használjuk ezt a kapcsolót, mely leállítja a telepítést downgrade esetén.

2.2 Eltávolítás

Az eltávolítást az -r kapcsolóval kezdeményezhetjük:

dpkg -r <csomag1> <csomag2>

Kiegészítő kapcsolók

--purge

Eltávolításkor a csomaghoz tartozó konfigurációs állományokat is törli.

2.3 Csomagokkal kapcsolatos lekérdezések

Viszonylag egyszerűen lekérdezhetjük a gépre telepített csomagok listáját:

dpkg -l

Ha ennél bonyolultabb lekérdezéseket akarunk végrehajtani, akkor szükségünk lesz a dpkg-query csomagra. A fentihez hasonló módon ezzel is lehetséges a telepített csomagok lekérdezése:

dpkg-query -l

Használhatjuk úgy is, hogy csomagneveket adunk meg utána, ekkor részletes adatokat kapunk a megadott csomagokról:

dpkg-query -l <csomag1> <csomag2>

Ha még részletesebb adatokra vágyunk, használjuk a -p kapcsolót:

dpkg-query -p <csomag>

Ha csak az adott csomag verziószámára vagyunk kíváncsiak, kiadhatjuk a kvetkező parancsot:

dpkg-query --show <csomag1> <csomag2>

A csomaghoz tartozó összes fájl és elérési útjuk listázása:

dpkg-query --listfiles

A --search kapcsolóval csomagok fájljai között keresgélhetünk:

dpkg-query --search <kulcsszó>


2.4 Egyéb hasznos funkciók

dpkg-statoverride

Megmondja a dpkg számára, hogy más legyen a tulajdonosa egy adott fájlnak (vagy mappának, eszköznek, illetve bárminek, amit a dpkg kezelni képes). Jól használható olyan esetekben, amikor egy olyan programot szeretnénk telepíteni, melynek setuid flag-re van szüksége, vagy egy bizonyos csoport jogaihoz kötött a telepítése. Ezen felülbírálatok listáját menedzselhetjük a statoverride segítségével. Használata:

Override-ok listázása:

dpkg-override --list

Új override hozzáadása

dpkg-override --add <tulajdonos> <csoport> <mód> <fájl>

Override törlése:

dpkg-override --remove <fájl>

2.5 dpkg-divert

Sokszor előfordulhat, hogy egy programot mindig egy adott kapcsolótengerrel szeretnénk indítani, amit begépelni nagyon fárasztó lehet. Erre a problémára ad megoldást a dpkg-divert. Adjuk ki az alábbi parancsot:

dpkg-divert --add --rename --divert /usr/bin/gcc.real /usr/bin/gcc

Mit is csináltunk most? Létrehoztunk egy új eltérést (diversion) a rendszerben, mely tulajdonképpen átnevezte a gcc programunkat gcc.real-re. De mire lesz ez jó? Hát arra, hogy a /usr/bin-ben létrehozunk egy szkript fájlt gcc néven, és itt „meghívjuk”a gcc.real-t az általunk fontosnak vélt kapcsolókkal. Ekkor ha begépeljük a gcc-t, már az általunk írt szkriptfájl fog lefutni. Probléma már csak akkor adódhatna, ha frissítenénk a rendszert, és a gcc is frissítés „áldozatává” válna, azonban ezzel egyben a rendszer tudtára adtuk, hogy ekkor a gcc.real-t frissítse. Ha el szeretnénk távolítani egy ilyen diversion-t, akkor, a gcc-s példát folytatva, az alábbi procedúrával tehetjük meg:

a) töröljük a szkriptünket:

rm /usr/bin/gcc

b) eltávolítjuk magát a diversion-t

dpkg-divert --rename --remove /usr/bin/gcc

Ekkor visszaáll minden az eredeti formájába. A rendszerben levő diversion-öket így listázhatjuk:

dpkg-divert --rename --remove /usr/bin/gcc 
dpkg-repack

Egy már feltelepített programból képes visszafejteni a binárist .deb fájllá. A jelenlegi disztribúciókban általában külön kell telepíteni. Használata igen egyszerűnek mondható:

dpkg-repack programnév

Ekkor a program létrehozza binárist, és már készen is vagyunk. Nem sok kapcsolója van, egyet említenék meg, mely sok esetben hasznos lehet:

--arch=<architektúra>

a dpkg repack nem tudja visszafejteni, eredetileg milyen architektúrára készült a csomag, a kapcsoló segítségével viszont megadhatjuk neki (ha emlékszünk). Ha más volt az eredeti architektúra, akkor nem feltétlenül, de lehet hogy hibás lesz a csomag.

2.6 debconf

Rendszerszintű konfigurációs feladatokat képes elvégezni. Tulajdonképpen egy backend adatbázisból (van ldap backend is), valamint egy ennek beállítására szolgáló frontend-ből áll. Ha egy csomag települ, a debconf kérdéseket tesz fel a felhasználónak, melyek meghatározzák a rendszerszintű konfigurációs fájlok tartalmát. Ha szükséges, ezek után a felhasználó visszamehet, és megváltoztathatja a csomag konfigurációját a dpkg-reconfigure segítségével.

Telepítés után futtathatunk programokat debconf felügyelettel:

debconf −−frontend=readline sh −x my−shell−prog

Különböző frontendjei vannak, a readline a konzolos verzió. Van még egy egyszerű grafikus interfész (dialog), valamint gnome, és kde is.

2.7 A csomagok állapotai

Egy dpkg csomagnak megannyi állapota lehet, melyek főként a telepítés állapotától függnek:

- fel van telepítve és be van konfigurálva: installed

- a telepítés elkezdődött, de megszakadt, vagy sikertelen volt: half-installed

- nincs telepítve: not-installed

- telepített, de nincs beállítva: unpacked

- telepített, de nem sikerült teljesen beállítani: half-configured

- csak a konfigurációs fájljai vannak meg: config-files

Egy kiválasztott csomagnak három állapota lehet:

- kiválasztva telepítésre: install

- kiválasztva törlésre: deinstall

- teljes törlés: purge

Ezen felül még két állapota lehet egy csomagnak:

- a csomagkezelő nem változtat az állapotán: hold

- újra kell telepíteni a csomagot, mert az megsérült: reinst-required

2.8 Csomagközi viszonyok

Az egyes csomagok kontroll-fájlokat deklarálhatnak maguknak, melyek tartalmazzák egyéb csomagokhoz fűződő gyengéd kapcsolatukat - főként azt, hogy milyen egyéb csomagoktól függenek, esetleg hogy nem telepíthetőek más csomaggal együtt. Ezek befolyásolására hét mező van definiálva: Depends, Pre-Depends, Recommends, Suggests, Enhances, Breaks és Conflicts.

Depends

Ebbe a mezőbe azon programok kerülnek, melyek számos egyéb funkcionalitással ruházzák fel a programot. Fontos megjegyezni, hogy csak a csomag konfigurálása nem mehet ezen csomagok nélkül, tehát a csomag már unpacked üzemmódban már a rendszerben lehet a függőségek telepítése nélkül.

Recommends

Hasonlít a depends-hez, de nem olyan erős, a konfiguráció létrejöhet az itt felsorolt csomagok nélkül, természetesen ezen csomagok telepítése is extra funkcionalitást (esetleg kevesebb bugot) adhat a rendszerhez.

Suggests

Ahogy neve is sugallja, az itt felsorolt csomagok kibővíthetik a telepítendő csomag eszköztárát, de ezek nélkül is teljes értékű programot kapunk.

Enhances

Tulajdonképpen nagyon hasonlít a suggest-hez, de fordított irányban: azon csomagok vannak ide felsorolva, melyek funkcionalitását bővíti a telepítendő csomag.

Pre-depends

Az itt felsorolt csomagoknak nem elég konfiguráció előtt a gépen lenniük. Arra kényszeríti a dpkg-t, hogy az adott csomag telepítése előtt már ezek a csomagok fel legyenek telepítve. Használata csak indokolt esetben javasolt, például ha a rendszerre veszélyt jelentene sima depends-ként felsorolni a csomagokat. Ha valaki csomagot készít, és szerinte indokolt pre-depends-t használni, annak meg kell ezt beszélnie a debian-devel levelező listán.

Breaks

Az itt felsorolt csomagokkal baj lesz, ha fel szeretnénk telepíteni a csomagunkat: a dpkg ugyanis nem fogja engedélyezni a telepítést egészen addig, míg ezeket a csomagokat legalább Half-configured állapotba nem hozzuk telepítettből.

Replaces

Két dologra is használható: egyrészt egy csomag egy fájlját lehet vele lecserélni, illetve teljes csomagot is lecserélhet. Ha változtatás történik egy másik csomag fájljában, akkor annak tulajdonosi jogai átkerülnek a csomaghoz, mely megváltoztatta. Ha teljes csomagokat szeretne felülírni, akkor tulajdonképpen azokat először eltávolítja, és utána kezdődik a telepítés. Eltávolítás helyett viszont virtuális csomagnak is kijelölhetjük.

Provides

Tegyük fel, hogy van egy továbbfejlesztett csomagunk, más néven, mint az eredeti, legyen ennek a neve super-bar, és legyen egy foo csomag, ami függ az eredeti bar-tól pl.:

Package: foo
Depends: bar

Package: super-bar
Provides: bar

Ez azt jelenti, hogy a super-bar csomag nyújtja a bar szolgáltatásit is, mely így kielégíti a foo csomag függőségét.

3 RPM

3.1 Telepítés

A telepítés az -i kapcsoló segítségével történik:

rpm -i <csomag1> <csomag2>

Telepíthetjük a csomagokat lépésről-lépésre is, ugyanis a fenti parancs telepíti ÉS beállítja a csomagot. A lépések a következők:

rpmbuild -bp <csomag>

telepíti a csomagot, unpacked állapotba kerül.

rpmbuild -bc <csomag>

a csomag builded állapotba kerül.

rpmbuild -bi <csomag>

a csomag installed állapotba kerül.

rpmbuild -bb <csomag>

a bináris elkészítése.

Kiegészítő kapcsolók

--force: ha a telepítés folyamán valamilyen hiba lép fel, kikényszeríthetjük, hogy a telepítés folytatódjon, ugyanakkor használat ellen-javalt, mivel az rpm nem hiába áll le a telepítéssel. Csak akkor használjuk, ha teljesen biztosak vagyunk a dolgunkban!

-v: több csomag telepítése esetén kiírja, hogy éppen mi települ (nem az -i mellett, hanem helyette használatos).

-h: progress bar-t is kapunk.

--test: ellenőrzi, telepíthető-e a csomag.

--nodeps: nem ellenőri a függőségeket, csak akkor használjuk, ha tudjuk mit csinálunk.

3.2 Eltávolítás

Az -e kapcsoló segítségével adhatjuk tudtára a csomagkezelőnek, hogy egy csomag elérte számunkra a nemkívánatos státuszt:

rpm -e <csomag1> <csomag2>

3.3 Frissítés

Frissíteni így tudunk:

rpm -F

Upgrade:

rpm -U

Frissítés esetén csak akkor kerül fel a csomag, ha annak egy verziója már szerepel a rendszeren.

3.4 Csomagokkal kapcsolatos lekérdezések

A gépre telepített csomagok lekérdezése a -qa kapcsolóval történhet:

rpm -qa

A csomaghoz tartozó összes fájl listázása:

rpm -ql <csomag>

Amennyiben egy csomag verziószámára vagyunk kíváncsiak:

rpm -q <csomag>

Ha ennél jóval több információra van szükségünk a csomagról:

rpm -qi <csomag>

3.5 A csomagok állapotai

Egy rpm csomagnak több állapota lehet, attól függően, hogy a telepítés mely állapotában van éppen:

- nincs telepítve: not-installed

- forrás csomag kicsomagolva: unpacked

- a csomag le van fordítva: builded

- ki van csomagolva, fordítva és fel van telepítve: installed

4 apt és yum

Habár a dpkg és rpm csomagkezelőkkel mindent meg lehet oldani, azonban ezek használata sokszor igen kényelmetlen: saját magunknak kell az egyes csomagokat felkeresni, valamint a függőségek kezelése sem az igazi.

5 APT (Advaced Packaging Tool)

Egy adatbázisban tárolja, hogy hol lehet fellelni az egyes csomagokat. Ha a csomagok telepítéséhez további csomagokra van szüksége, akkor azokat is felkeresi, és feltelepíti. Az apt számára azt is meg kell mondanunk, hogy hol találhat ilyen csomagokat, a beállítandó fájl: /etc/apt/sources.list .

5.1 Telepítés

Egyszerűen megadjuk a kívánt programok neveit az apt-get install parancs után:

apt-get install <csomag1> <csomag2>….


5.2 Eltávolítás

Hasonló a telepítéshez, azonball install helyett remove-t adunk meg:

apt-get remove <csomag1> <csomag2>…

Ha a csomaghoz tartozó minden konfigurációs fájlt és beállítást is törölni szeretnénk, akkor a „purge” segítségével kell törölnünk.

apt-get purge <csomag1> <csomag2>…

És még egy hasznos parancs:

apt-get autoremove

Ezzel azon csomagokat törölhetjük, melyek csupán a függőségek kielégítése miatt lettek telepítve, de már nincs rájuk szükség.

5.3 Frissítés

Először is frissíteni kell a helyi index fájlokat:

apt-get update

Ezután jöhet a csomagok frissítése

apt-get upgrade

Ha nem csak az általunk telepített programokat szeretnénk frissíteni, hanem a telepített függőségeket is, akkor inkább ezt használjuk:

apt-get dist-upgrade

Egyéb hasznos funkciók

apt-get check

Végignézi a telepített csomagokat, csomagütközéseket, hiányzó függőségeket keres.

apt-get install -f

Az előbbi parancs által felfedezett hibákat javítja ki.

apt-get (auto)clean

A clean a telepítéshez használt csomagokat törli le, az autoclean ennek egy olyan részhalmazát törli, mely csomagokat már nem lehet letölteni, így azokra valószínűleg szükség sem lesz.

5.4 update-alternatives

A csomagtelepítő szolgáltatások menedzselik a symlinkek beállítását, melyek különböző verziókra mutatnak. Az update-alternatives segítségével saját symlinkeket hozhatunk létre, így akár több verzió is békében megélhet egymás mellett. Vegyük például, hogy feltelepítettük a legújabb firefoxot, azonban szokás szerint teli van hibákkal, ezért átmenetileg szeretnénk használni a régebbi verziót:

update-alternatives --install /usr/bin/firefox firefox /usr/bin/firefox-15.0 70
update-alternatives --install /usr/bin/firefox firefox /usr/bin/firefox-3.5 90

Így ha a konzolba begépelem a "firefox" parancsot, akkor a 3.5-ös verzió fog elindulni, mivel magasabb prioritást adtam meg a számára (az utolsó megadott számjegy a prioritás). Ha szeretnénk ellenőrizni, hogy jelenleg melyik aktív:

update-alternatives --display firefox

5.5 update-mime

Frissíti a /etc/mailcap fájlt, hogy jelezze a változtatások, melyet a csomagkezelő rendszer végzett telepítés, illetve eltávolítás során. A bejegyzések sorrendjét a /etc/mailcap fájlban a /etc/mailcap.order szerkesztésével lehetséges.

6 apt-cache

Csomaginformációk lekérdezésére használatos. Ez annyival nyújt többet a dpkg-nál, hogy nem csak a telepített csomagok között kereshetünk, hanem minden olyan csomag között, melyek szerepelnek a csomagadatbázisban. Írjuk is le az első apt-cache parancsunkat:

apt-cache search <string>

Ekkor az apt-cache elkezd keresgélni a csomagok nevei és leírásai között. Ha talál valamit, kiírja a csomag nevét egy egysoros magyarázattal, hogy mi az. Lekérdezhetünk teljes csomagleírásokat is, ehhez a showpkg kulcsszót használjuk:

apt-cache showpkg <csomag1> <csomag2>…

Így információt kaphatunk függőségekről, verziószámról, MD5 összegről, stb. Ha csak a függőségekre vagyunk kíváncsiak, azt kicsit szebb formátumban is kérhetjük:

apt-cache depends <csomag1> <csomag2>…

A fordított függőségeket pedig az alábbi paranccsal kérdezhetjük le:

apt-cache rdepends <csomag1> <csomag2>…

Az apt-cache policy a preferences fájllal kapcsolatos debug problémákban hivatott segíteni. Argumentumok megadása nélkül az egyes források prioritását írja ki. Egyébként a megnevezett csomag prioritásáról és ehhez kapcsolódó információkról ad részletes adatokat. Például apt-pinning esetén igen hasznos lehet.

apt-cache policy <csomag>

7 apt-file

Nem az apt csomag része, külön telepítést igényel. Segítségével a csomagban található fájlok között is kereshetünk. Hasonlít a „dpkg-query”-hez, azonban a nem telepített csomagok listájában is képes keresni. Használatánál figyeljünk arra, hogy mivel nem az apt csomag része, ezért adatbázisát külön kell frissíteni az

apt-file update

paranccsal. Keresni a search kulcsszó segítségével tudunk:

apt-file search <string>

A „dpkg-query --listfiles”-hoz hasonlóan kilistázhatjuk a csomagban található összes fájlt - természetesen, az apt-tól megszokott kényelmi szolgáltatással, hogy nem telepített csomagot is listázhatunk:

apt-file list <csomagnév>

8 apt-pinning

Elsősorban a Stable, Testing, Unstable forrásokat lehet segítségével vegyíteni a megfelelő arányban. Az olyan eszközök, programok, melyek nem kritikusak a rendszer szempontjából, nem annyira fontos, hogy stable verzió fusson belőle, és esetleg megengedhető, hogy a felmerülő hibák rovására egy olyan verziót futtassunk, mely az összes általunk kívánt fícsört szolgáltatja.

Az /etc/apt/sources.list tartalmazza a depók listáját, ezt módosítsuk úgy, hogy az általunk szükségesnek ítélt depók megjelenjenek benne.

Módosítsuk az /etc/apt/preferences fájlt! A pinning itt történik, általában a legmagasabb verziójú csomag az érvényes, azonban itt felülbírálhatjuk a dolgokat. Így nézhet ki egy egyszerű preferences:

Package: *
Pin: release a=stable
Pin-Priority: 700

Package: *
Pin: release a=testing
Pin-Priority: 650

Package: *
Pin: release a=unstable
Pin-Priority: 600

A nagyobb prioritású van érvényben, tehát a stable.

Ezután adjuk ki az apt-get update parancsot! Jó eséllyel az alábbi hibát fogjuk tapasztalni:

E: Dynamic MMap ran out of room
E: Error occured while processing sqlrelay-sqlite (NewPackage)
E: Problem with MergeList /var/lib/apt/lists/ftp.us.debian.org_debian_dists_woody_contrib_binary-i386_Packages
E: The package lists or status file could not be parsed or opened.

Laikus windows felhasználó erre megnézné, hogy működik-e a DVD meghajtó, mi ne tegyük, hanem inkább nyissuk meg az /etc/apt/apt.conf fájlt, és adjuk hozzá az alábbi sort:

APT::Cache-Limit "8388608";

A probléma az volt, hogy nem fért be az apt cache-ébe a sok csomag, így viszont szépen megnöveltük a cache-t, így a hiba jó eséllyel eltűnik.

Ezek után már csak telepítenünk kell:

apt-get -t unstable install <csomag>

Készen vagyunk.

9 YUM (Yellowdog Updater Modifier)

Az rpm csomagok felkutatása fáradságos, és emiatt fejlesztette ki a Red Hat a yum-ot: ez egy magasabb szintű csomagkezelő program, tulajdonképpen tökéletes párhuzam húzható közte, és az apt között. Egyszerűen a „yum” parancs után megadjuk a csomag nevét, és a megfelelő csomagot a yum letölti a megfelelő adatbázisból. Az rpm csomagok helyei a /etc/yum.conf, illetve a /etc/yum.repos.d könyvtárban találhatóak.

9.1 Telepítés

Az install kulcsszó használatával:

yum install <csomag1> <csomag2>

9.2 Eltávolítás

A remove kulcsszó használatával jelölhetjük ki a törölni kívánt csomagokat.

yum remove <csomag1> <csomag2>

9.3 Frissítés

A check-update paranccsal történik:

yum check-update

Ha nincs frissíthető csomag, akkor 0-val tér vissza, egyébként 100-zal. A csomagokat az update paranccsal frissíthetjük:

yum update

Viszont megadhatunk utána csomagneveket is, ekkor csak a kijelölt csomagokat fogja frissíteni.

yum update <csomag1> <csomag2>

9.4 Csomaginformációk

Részletes információkat az „info” kulcsszó segítségével kérhetünk:

yum info <csomag1> <csomag2>

A rendszeren fent levő, vagy arra telepíthető csomagok listáját a „list all” paranccsal kérdezhetjük le:

yum list all

Keresni a search funkcióval tudunk:

yum search <kulcsszó>

A keresett string-et a csomagok nevében keresi. Csomagban levő fájlok listázására a repoquery programot használhatjuk (yum-utils csomag):

repoquery --list <csomagnév>

10 apt-yum legfontosabb funkcióinak összefoglaló táblázata

apt-yum
apt yum
Telepítés apt-get install yum install
Eltávolítás apt-get remove yum remove
Frissítés apt-get upgrade yum update
Részletes csomaginformáció apt-cache showpkg yum info
Csomagban levő fájlok listázása apt-file list repoquery --list
Személyes eszközök