Njam

Interakcija s YUM-om na CentOS-u pomoću Pythona

Interakcija s YUM-om na CentOS-u pomoću Pythona

Što je YUM?

YUM je alat za upravljanje koji je dostupan na distribucijama RedHat i CentOS Linux.  YUM (Yellowdog Updater Modified) ovisi o RPM (Red Hat Package Manager) paketima i stvoren je kako bi omogućio upravljanje paketima kao dijelovima većeg sustava spremišta softvera umjesto pojedinačnih datoteka paketa. YUM je interaktivni upravitelj paketa koji može automatski izvoditi analizu ovisnosti i ažuriranja sustava, zajedno s instaliranjem novih paketa, uklanjanjem starih paketa, izvršavanjem upita na postojećim paketima itd. Da biste saznali više o YUM-u, kliknite ovdje.

U ovom ćemo članku razmotriti metode pristupa yum funkcionalnosti pomoću Python programa i saznati kako to može biti korisno. Za ovu lekciju koristit ćemo CENTOS 7 s pokrenutim pythonom 2.7.x i pretpostavio bi da su upoznati s osnovnim značajkama pythona.

Programiranje s YUM-om

Počnimo s učenjem o programiranju yuma pomoću pythona gledajući jednostavnu python skriptu koja koristi yum za postavljanje upita i ispis imena paketa. Evo ga:

uvoz os
import sys
uvoz njam
yb = njam.YumBase ()
yb.setCacheDir ()
rezultati = yb.pkgVaća.returnNewestByNameArch (obrasci = ["python", "perl"])
za pkg u rezultatima:
ispis "% s% s (% s) \ n \ t% s"% (str.ime, kg.verzija, str.luk, pkg.Sažetak)

Ova skripta pretražuje YUM spremišta za pakete koji se podudaraju s imenom "python" i ispisuje informacije o podudarnim paketima. Ispitat ćemo ovu skriptu red po red.

Da bismo započeli s programiranjem s YUM-om, trebamo uvesti 'yum' python paket - ovo je po defaultu instalirano u CENTOS 7. Uz 'yum' obično nam trebaju i 'os' i 'sys' paketi - pa bi tipični python program koji koristi yum započeo sa sljedeća 3 retka.

uvoz os
import sys
uvoz njam

Dalje, da biste stvorili yum instancu za rad, uključite donji redak.

yb = njam.YumBase ()

Ovo je gotovo prvi redak funkcionalnog koda u bilo kojem python programu koji koristi yum. To je zato što je YumBase osnovna klasa koja sadrži metode i objekte potrebne za izvršavanje svih funkcija upravljanja paketima koristeći yum. Za detaljnu strukturu klase YumBase pogledajte njezinu dokumentaciju.

Ispitivanje YUM konfiguracije

Jednom kada je instanca YumBase dostupna, možemo je koristiti za inspekciju yum konfiguracije. Ispod je tablica s popisom popularnih naredbi za popis pojedinosti o konfiguraciji.

Konfiguracija Upotreba
ispis yb.konf.put_datoteke_konfiguracije Ispišite put datoteke za yum-ovu konfiguracijsku datoteku.
ispis yb.konf.logfile Za ispis puta datoteke dnevnika
jer ja u yb.konf.reposdir: ispis i Za ispis direktorija i datoteka za spremišta
ispis yb.konf.skip_broken Vrijednost je obično lažna. Kad se postavi na true, yum naredbe ponašat će se kao da je isporučen parametar -skip-broken.
ispis yb.konf.razina pogreške Da biste postavili razinu pogrešaka koje želite vidjeti ispisane na standardnom izlazu. To je vrijednost između 0-10, gdje je 0 samo kritično, dok je 10 sve što uključuje otklanjanje pogrešaka. Prema zadanim postavkama postavljeno je na 2, ali možete ga poništiti. Ako ćete pokretati skriptu, bilo bi dobro postaviti ovu vrijednost na 0. To možete postaviti na veću vrijednost poput 3 kada ispravljate pogreške u samoj skripti.

Upit za pakete

Vraćajući se na našu skriptu, vidimo da sljedeći redak koda postavlja novi Cache Directory za yum, tako da izvršava sve zadatke kao normalan korisnik (a donekle i kao root korisnik - i dalje neće moći mijenjati podatke u na primjer yumdb ili rpmdb).

yb.setCacheDir ()

Stvorivši pravi yum objekt sada, možemo pristupiti atributima pkgSack, rpmdb i repos. To nam omogućuje izvršavanje sljedećih funkcija:

yb.pkgSack - može se koristiti za izvršavanje upita na svim omogućenim spremištima

yb.rpmdb - može se koristiti za izvršavanje upita na instaliranim paketima

yb.repos - dobiti objekt RepositoryStorage koji se može koristiti za postavljanje određenih konfiguracija za repo-a i može se koristiti za omogućavanje ili onemogućavanje spremišta - e.g., yb.repos.enableRepo (), yb.repos.disableRepo () & yb.repos.listEnabled (). O tome više kasnije.

Za sada ćemo se pozabaviti svojstvima pkgSack i rpmdb. Možemo pretraživati ​​YUM spremišta i lokalno instalirane pakete pozivajući jednu od nekoliko funkcija koje pružaju atributi pkgSack i rpmdb. Te funkcije vraćaju "objekte paketa" koji sadrže informacije o paketu. Neke korisne funkcije za dobivanje objekata paketa su: returnPackages (), searchPrimaryFields (), seachNevra (), seachName (), returnNewestByNameArch (). Naša skripta koristi metodu returnNewstByNameArch da bi dobila objekte paketa koji odgovaraju nizovima uzoraka "python" ili "perl".

Napominjemo da su nazivi metoda jednaki za oba yb.rpmdb i yb.pkgVaća. Međutim, oni izvršavaju upite na različitim domenama - rpmdb pretražuje lokalno instaliranu bazu podataka RPM paketa, dok pkgSack pretražuje YUM spremišta.

Mogli bismo na sličan način navesti i instalirane velike pakete (gdje veliki znače, recimo da je veličina> 10 MB). Yum kôd je:

plist = yb.rpmdb.returnPackages ()
l_plist = [p za p u plistu ako je str.veličina> 1024 * 1024 * 10]
print "Instalirani paketi veličine> 10 MB:"
za p u l_plist:
ispis "% s:% sMB"% (pkg, pkg.veličina / (1024 * 1024))

To je u osnovi bit korištenja pythona za pristup yumu. U ostatku članka istražit ćemo dublje u nijansama API-ja yum modula i isprobati još neke poteškoće poput instaliranja / deinstaliranja paketa ili postavljanja vlastitog spremišta.

Nevra, PRCO i Tuples

U zaglavlju nema pogreške u pisanju - ovo su neki pojmovi specifični za yum koji olakšavaju identificiranje paketa i ovisnosti, kao i komunikaciju s drugim korisnicima yuma, uključujući vaše python skripte.

NEVRA je skraćenica od Naziv, Epoha, Verzija, Izdanje, Arhitektura i koristi se za jedinstveno prepoznavanje okusa ili instance paketa - ovih pet parametara nedvosmisleno upućuju na jedan jedinstveni primjerak paketa. Na primjer, paket nazvan "python" može imati više verzija poput 2.6, 2.7 itd., a svaka verzija mogla bi imati više izdanja za različite arhitekture e.g., x86_64, i386 (Imajte na umu da se riječ arhitektura ovdje odnosi na CPU arhitekturu - npr.g., i386 je 32-bitni Intel). Zajedno ovih pet predstavlja jedinstvenu kombinaciju i naziva se nevra.

PRCO je kratica za Provides / Requires / Conflicts / Absolete (Sažetak / Zahtjevi / Sukobi / Zastarjelo) koji sažimaju metapodatke o upravljanju paketom za objekt paketa.

Određene API metode u pkgSack / rpmdb, poput yb.pkgVaća.simplePkgList (), yb.pkgVaća.paketiByTuple () itd., vraćaju informacije o NEVRA-i ili PRCO-u kao python korijene, a ne kao pkgobjects

Navedite i instalirajte pakete

Ako upotrijebimo naredbu "yum list", možemo koristiti i "yb".doPackageLists () 'za popis svih instaliranih paketa / paketa dostupnih za instalaciju / ponovnu instalaciju.

plist = yb.doPackageLists (obrasci = sys.argv [1:])

Sada plist sadrži 3 popisa paketa - po jedan za instalirani paket, instalacijski paket i one dostupne za ponovnu instalaciju. Pakete možemo ispisati / instalirati / ponovo instalirati pomoću donjeg koda:

ako je pl.instalirano:
ispis "Instalirani paketi"
za pkg u razvrstanom (mn.instaliran):
tisak pkg
ako je pl.dostupno:
ispis "Dostupni paketi"
za pkg u razvrstanom (mn.dostupno):
tisak pkg, pkg.repo
ako je pl.ponovno instalirati_dostupno:
ispis "Ponovo instaliraj dostupne pakete"
za pkg u razvrstanom (mn.reinstall_available):
tisak pkg, pkg.repo

Slično popisu svih instaliranih paketa koje možemo koristiti:

ispisati "\ n".pridružiti se ([x.naziv za x u yb.rpmdb.returnPackages ()])

Instaliranje paketa

Instaliranje paketa uključuje postavljanje i izvršavanje transakcije. Za izvršavanje jednostavnih radnji poput instaliranja / uklanjanja koristimo 'yb.instalirati 'ili' yb.ukloni 'odnosno za postavljanje transakcije. Tada pozivamo 'yb.resolDeps () 'za pokretanje rješavanja ovisnosti i' yb.processTransaction () 'da YUM naredi da izvrši i izvrši transakciju.

Svi su koraci, osim zadnjeg, pripremni i samo poziv metode processTransaction () zapravo rezultira instalacijom / deinstalacijom. Ispod je isječak koda za instalaciju paketa.

yb = njam.YumBase ()
yb.instalirati (ime = 'naziv paketa')
yb.resolDeps ()
yb.processTransaction ()

Tijekom obavljanja takvih transakcija 'yb.Objekt tsInfo 'sadrži informacije o trenutnom statusu transakcije dok nije izvršena. Više o tome možete pročitati u njegovoj dokumentaciji.

Postavite spremište na proizvoljno mjesto

Ispod skripta pomaže vam u postavljanju yuma za pristup spremištu na proizvoljnom mjestu. Očekuje da se URL spremišta proslijedi kao argument naredbenog retka.

url = sys.argv [1]
yb = njam.YumBase ()
ako ne yb.setCacheDir (sila = True, ponovna upotreba = False):
ispis >> sys.stderr, "Nije moguće stvoriti tmp. cachedir. "
sys.izlaz (1)
yb.repos.disableRepo ('*')
yb.add_enable_repo ('myrepo', [url])

Za pokretanje skripte

python skripta.py url: // na / moj / repo

Sažetak

U ovom smo članku naučili kako upravljati YUM upraviteljem paketa pomoću njegovog python API-ja. Pregledali smo opcije konfiguracije, kao i API-jeve za upit / pretraživanje dostupnih i instaliranih paketa i na kraju načine za izvršavanje operacija upravljanja paketima, poput instaliranja / deinstaliranja / ponovne instalacije paketa.

Ovaj je članak namijenjen da služi kao prozor u ono što je moguće putem yum python API-ja. Iako API nije dobro dokumentiran, slijedi standardne konvencije i djeluje predvidljivo. Naoružani znanjem YUM-ovih mogućnosti i python vještinama, zabavno je istraživati ​​i naučiti sve što može. Nadam se da ste do sada uživali čitati i da ćete nastaviti sa istraživanjem i primjenom yuma u svojim projektima.

Kako razviti igru ​​na Linuxu
Prije deset godina malo je Linux korisnika predviđalo da će njihov omiljeni operativni sustav jednog dana biti popularna platforma za igranje komercij...
Luke komercijalnih igara s otvorenim kodom
Besplatne igre s otvorenim kodom i više platformi mogu se koristiti za igranje starih, kao i nekih prilično nedavnih naslova igara. U ovom će se člank...
Najbolje igre naredbenog retka za Linux
Naredbeni redak nije samo vaš najveći saveznik pri korištenju Linuxa - on također može biti izvor zabave jer ga možete koristiti za igranje mnogih zab...