Yum

Interakció a YUM-tal a CentOS-on Python használatával

Interakció a YUM-tal a CentOS-on Python használatával

Mi az a YUM?

A YUM egy olyan felügyeleti eszköz, amely elérhető a RedHat és a CentOS Linux disztribúcióiban.  A YUM (Yellowdog Updater Modified) az RPM (Red Hat Package Manager) csomagoktól függ, és azért hozták létre, hogy lehetővé tegye a csomagok kezelését egy nagyobb szoftverraktár-rendszer részeként az egyes csomagfájlok helyett. A YUM egy interaktív csomagkezelő, amely automatikusan elvégezheti a függőség elemzését és a rendszerfrissítéseket, új csomagok telepítésével, a régi csomagok eltávolításával, a meglévő csomagok lekérdezésével stb. Ha többet szeretne megtudni a YUM-ról, kattintson a gombra itt.

Ebben a cikkben megvizsgáljuk a yum funkcionalitás Python programokkal történő elérésének módszereit, és megtudjuk, hogyan lehet hasznos. Ehhez az oktatóanyaghoz a CENTOS 7 Python 2 futó programját fogjuk használni.7.x, és feltételezné, hogy ismeri az alapvető python funkciókat.

Programozás a YUM-mal

Kezdjük el megismerni a yum python használatát egy egyszerű python szkript megnézésével, amely a yum segítségével kérdezi le és nyomtatja ki a csomagneveket. Itt van:

import os
import sys
import yum
yb = yum.YumBase ()
yb.setCacheDir ()
eredmények = yb.pkgSack.returnNewestByNameArch (minták = ["python", "perl"])
pkg-hoz az eredményekben:
print "% s% s (% s) \ n \ t% s"% (pkg.név, pkg.változat, pkg.ív, pkg.összefoglaló)

Ez a szkript megkeresi a YUM adattárakban a „python” névnek megfelelő csomagokat, és információkat nyomtat az egyeztetett csomag (ok) ról. Ezt a szkriptet soronként fogjuk megvizsgálni.

A YUM programozásának megkezdéséhez importálnunk kell a 'yum' python csomagot - ez alapértelmezés szerint a CENTOS 7-be van telepítve. A 'yum' mellett általában szükség van az 'os' és a 'sys' csomagokra is - tehát egy tipikus yum használatú python program a következő 3 sorral kezdődne.

import os
import sys
import yum

Ezután, hogy létrehozzon egy yum példányt, működjön együtt, írja be az alábbi sort.

yb = yum.YumBase ()

Ez csaknem az első sor a funkcionális kódról bármely yum-t használó python programban. Ennek az az oka, hogy a YumBase az az alaposztály, amely olyan módszereket és objektumokat tartalmaz, amelyek szükségesek az összes csomagkezelési funkció végrehajtásához a yum használatával. A YumBase osztály részletes felépítését lásd annak dokumentációjában.

A YUM konfigurációjának vizsgálata

Amint elérhető a YumBase példány, használhatjuk ezt a yum konfigurációjának ellenőrzésére. Az alábbiakban egy olyan táblázat található, amely a konfigurációs részletek felsorolásához népszerű parancsokat sorolja fel.

Konfiguráció Használat
nyomtatás yb.konf.config_file_path Nyomtassa ki a yum konfigurációs fájljának elérési útját.
nyomtatás yb.konf.log fájl A naplófájl útvonalának kinyomtatása
mert én az yb-ben.konf.reposdir: nyomtatás i A tárak könyvtárainak és fájljainak kinyomtatása
nyomtatás yb.konf.skip_broken Az érték általában hamis. Ha igazra van állítva, a yum parancsok úgy működnek, mintha a -skip-broken paramétert adták volna meg.
nyomtatás yb.konf.hibaszint A normál kimenetre nyomtatandó hibák szintjének beállításához. Ez 0-10 közötti érték, ahol a 0 csak kritikus, míg a 10 minden magában foglalja a hibakeresést. Alapértelmezés szerint 2-re van állítva, de felülírhatja. Ha szkriptben fog futni, érdemes ezt 0-ra állítani. Ezt nagyobb értékre, például 3-ra állíthatja, amikor magának a szkriptnek a hibakeresését végzi.

Csomagok lekérdezése

Visszatérve a szkriptünkhöz, azt látjuk, hogy a következő kódsor egy új gyorsítótár-könyvtár felállítását teszi lehetővé yum számára, így normál felhasználóként (és bizonyos mértékben gyökérfelhasználóként is) elvégzi az összes feladatot - így sem fog tudni adatokat például a yumdb vagy rpmdb).

yb.setCacheDir ()

Miután létrehoztunk egy igazi yum objektumot, hozzáférhetünk a pkgSack, az rpmdb és a repos attribútumokhoz. Ez lehetővé teszi számunkra a következő funkciók végrehajtását:

yb.pkgSack - használható az összes engedélyezett adattár lekérdezésére

yb.rpmdb - használható a telepített csomagok lekérdezésére

yb.repos - kap egy RepositoryStorage objektumot, amely felhasználható a repók meghatározott konfigurációinak beállításához, és használható a tárak engedélyezésére vagy letiltására - e.g., yb.repók.enableRepo (), yb.repók.disableRepo () & yb.repók.listEnabled (). Erről később.

Egyelőre elmélyülünk a pkgSack és az rpmdb tulajdonságokban. Megkereshetjük a YUM adattárakat és a helyileg telepített csomagokat a pkgSack és az rpmdb attribútumok által biztosított számos funkció egyikének meghívásával. Ezek a függvények olyan „csomagobjektumokat” adnak vissza, amelyek információkat tartalmaznak a csomagról. Néhány hasznos funkció a csomagobjektumok megszerzéséhez: returnPackages (), searchPrimaryFields (), seachNevra (), seachName (), returnNewestByNameArch (). A szkriptünk a returnNewstByNameArch metódust használja a „python” vagy „perl” mintahúrokhoz illeszkedő csomagobjektumok megszerzésére.

Vegye figyelembe, hogy a metódusnevek mindkét yb esetében megegyeznek.rpmdb és yb.pkgSack. A lekérdezéseket azonban különböző tartományokban hajtják végre - az rpmdb a helyi telepített RPM csomagok adatbázisában keres, míg a pkgSack a YUM tárházakban.

Hasonlóképpen felsorolhatnánk a telepített nagy csomagokat (ahol a nagy azt jelenti, hogy a méret> 10 MB). A yum kód:

plist = yb.rpmdb.returnPackages ()
l_plist = [p a p-ben a plist-ben, ha p.méret> 1024 * 1024 * 10]
print "10 MB-nál nagyobb méretű telepített csomagok:"
p esetén l_plist:
"% s:% sMB"% nyomtatása (pkg, pkg.méret / (1024 * 1024))

Ez alapvetően a python használatának lényege a yum eléréséhez. A cikk további részében mélyebben elmélyülünk a yum module API árnyalataiban, és megpróbálunk további bonyolult műveleteket, például csomagok telepítését / eltávolítását vagy saját tárolónk felállítását.

Nevra, PRCO és Tuples

Nincs elírás a címsorban - ezek néhány yum specifikus kifejezés, amelyek megkönnyítik a csomagok és függőségek azonosítását, valamint ezek kommunikációját a yum más felhasználóival, beleértve a python szkriptjeit is.

A NEVRA a Név, Korszak, Verzió, Kiadás, Építészet rövidítése, és a csomag ízének vagy példányának egyedi azonosítására szolgál - ez az öt paraméter egyértelműen a csomag egyetlen egyedi példányára mutat. Például a „python” nevű csomagnak több változata is lehet, mint például a 2.6, 2.7 stb., és mindegyik változat több kiadást is tartalmazhat különböző architektúrákhoz pl.g., x86_64, i386 (Vegye figyelembe, hogy az architektúra szó itt a CPU architektúrára utal - pl.g., Az i386 32 bites Intel). Ez az öt együttesen egyedülálló kombinációt jelent, és nevrának nevezik.

A PRCO a Provides / Requires / Conflict / Obsoletes rövidítéseket jelenti, amelyek összefoglalják a csomagobjektum csomagkezelési metaadatait.

Bizonyos API-módszerek a pkgSack / rpmdb fájlban, például yb.pkgSack.simplePkgList (), yb.pkgSack.csomagokByTuple () stb., adja vissza a NEVRA vagy a PRCO információt python sorszámként, nem pedig pkgobjects néven

Sorolja fel és telepítse a csomagokat

A „yum list” parancs használatával használhatjuk az „yb” -t.doPackageLists () 'az összes telepített csomag / telepítéshez / újratelepítéshez rendelkezésre álló csomag felsorolásához.

plist = yb.doPackageLists (minták = sys.argv [1:])

A plist 3 csomaglistát tartalmaz - egyet-egyet a telepített csomaghoz, a telepíthető csomaghoz és az újratelepítéshez rendelkezésre állóakat. Csomagokat nyomtathatunk / telepíthetünk / újratelepíthetünk az alábbi kód használatával:

ha pl.telepítve:
"Telepített csomagok" nyomtatása
pkg-hoz rendezve (pl.telepítve):
nyomtatás pkg
ha pl.elérhető:
"Elérhető csomagok" nyomtatás
pkg-hoz rendezve (pl.elérhető):
nyomtatás pkg, pkg.repo
ha pl.reinstall_available:
print "A rendelkezésre álló csomagok újratelepítése"
pkg-hoz rendezve (pl.reinstall_available):
nyomtatás pkg, pkg.repo

Az összes telepített csomag felsorolásához hasonlóan használhatjuk:

"\ n" nyomtatás.csatlakozz ([x.x neve az yb-ben.rpmdb.returnPackages ()])

Csomagok telepítése

A csomagok telepítése magában foglalja a tranzakció beállítását és végrehajtását. Az olyan egyszerű műveletek végrehajtásához, mint a telepítés / eltávolítás, az 'yb.install 'vagy' yb.a 'tranzakció beállításához. Aztán meghívjuk az 'yb-t.resolDeps () 'a függőségek feloldásának kiváltására és' yb.processTransaction () 'utasítja a YUM-ot a tranzakció végrehajtására.

Az összes lépés, csak az utolsó, előkészítő, és csak a processTransaction () metódus meghívása eredményezi a telepítés / eltávolítás megtörténését. Az alábbiakban egy kódrészlet található a csomag telepítéséhez.

yb = yum.YumBase ()
yb.install (név = 'csomagnév')
yb.resolDeps ()
yb.processTransaction ()

Az ilyen tranzakciók végrehajtása során az 'yb.A tsInfo 'objektum a tranzakció aktuális állapotáról tárol információkat, amíg el nem követik. További információt a dokumentációjában olvashat.

Telepítsen egy adattárat tetszőleges helyre

Az alábbi szkript segít beállítani, hogy tetszőleges helyen hozzáférjen a lerakathoz. Arra számít, hogy a lerakat URL-jét parancssori argumentumként továbbítja.

url = sys.argv [1]
yb = yum.YumBase ()
ha nem yb.setCacheDir (kényszer = Igaz, újrafelhasználás = Hamis):
nyomtat >> sys.stderr, "Nem lehet létrehozni egy tmp-t. cachedir. "
sys.kilépés (1)
yb.repók.disableRepo ('*')
yb.add_enable_repo ('myrepo', [url])

A szkript futtatásához

python szkript.py url: // to / my / repo

Összegzés

Ebben a cikkben megtanultuk, hogyan lehet vezérelni a YUM csomagkezelőt a python API segítségével. Megnéztük a konfigurációs lehetőségeket, valamint a lekérdezés / keresés API-kat a rendelkezésre álló és telepített csomagokon, és végül a csomagkezelési műveletek végrehajtásának módjait, például a csomagok telepítését / eltávolítását / újratelepítését.

Ez a cikk ablakként szolgál arra, hogy mi lehetséges a yum python API-n keresztül. Bár az API nincs túl jól dokumentálva, a szokásos konvenciókat követi és kiszámíthatóan működik. A YUM képességeinek és a python készségek ismeretében felfegyverkezve szórakoztató mindent felfedezni és megtanulni, amit tehet. Remélem, hogy eddig élvezettel olvasott, és folytatja a yum feltárását és alkalmazását a projektjeiben.

Csata a Wesnothért 1.13.6 Megjelent a fejlesztés
Csata a Wesnothért 1.13.A múlt hónapban megjelent 6 a hatodik fejlesztési kiadás az 1-ben.13.x sorozat, és számos fejlesztést hajt végre, nevezetesen ...
A League of Legends telepítése az Ubuntu 14-re.04
Ha rajongsz a League of Legendsért, akkor ez egy lehetőség arra, hogy teszteld a League of Legends játékot. Ne feledje, hogy a LOL a PlayOnLinux rends...
Telepítse a legújabb OpenRA stratégiai játékot az Ubuntu Linux rendszerre
Az OpenRA egy ingyenes / ingyenes valós idejű stratégiai játékmotor, amely újjáépíti a korai Westwood játékokat, mint például a klasszikus Command & C...