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 (apt-cache)
(apt-cache)
352. sor: 352. sor:
 
apt-cache rdepends <csomag1> <csomag2>…
 
apt-cache rdepends <csomag1> <csomag2>…
   
policy policy is ment to help debug issues relating to the pref-
+
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.
erences file. With no arguments it will print out the
 
priorities of each source. Otherwise it prints out
 
detailed information about the priority selection of the
 
named package.
 
   
apt-cache policy
+
apt-cache policy <csomag>
 
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.
 
   
 
== apt-file ==
 
== apt-file ==

A lap 2012. december 8., 18:32-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

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.

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.

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ó>


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:

dpkg-override --list: override-ok listázása. dpkg-override --add <tulajdonos> <csoport> <mód> <fájl> Új override hozzáadása

dpkg-override --remove <fájl> override törlése 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.

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. 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

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

Telepítés

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

rpm -i <csomag1> <csomag2>

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.

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>

frissítés: 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.

Csomagokkal kapcsolatos lekérdezések

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

rpm -qa

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

rpm -q <csomag>

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 .

Telepítés

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

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


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.

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.

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

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.

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.

Telepítés

Az install kulcsszó használatával:

yum install <csomag1> <csomag2>

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>

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>

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