Njam

Interakcija z YUM na CentOS z uporabo Pythona

Interakcija z YUM na CentOS z uporabo Pythona

Kaj je YUM?

YUM je orodje za upravljanje, ki je na voljo na distribucijah RedHat in CentOS Linux.  YUM (Yellowdog Updater Modified) je odvisen od paketov RPM (Red Hat Package Manager) in je bil ustvarjen tako, da omogoča upravljanje paketov kot delov večjega sistema skladišč programske opreme namesto posameznih datotek paketov. YUM je interaktivni upravitelj paketov, ki lahko samodejno izvede analizo odvisnosti in sistemske posodobitve, skupaj z namestitvijo novih paketov, odstranjevanjem starih paketov, izvajanjem poizvedb na obstoječih paketih itd. Če želite izvedeti več o YUM, kliknite tukaj.

V tem članku bomo preučili načine dostopa do funkcionalnosti yum s pomočjo programov Python in ugotovili, kako je lahko koristna. Za to vadnico bomo uporabili CENTOS 7, ki izvaja python 2.7.x in bi domneval, da pozna osnovne funkcije pythona.

Programiranje z YUM

Začnimo se učiti o programiranju yuma z uporabo pythona, tako da si ogledamo preprost skript python, ki z yumom poizveduje in tiska imena paketov. Tukaj je:

uvoz os
uvoz sys
uvoz yum
yb = njam.YumBase ()
yb.setCacheDir ()
rezultati = yb.pkgVačka.returnNewestByNameArch (vzorci = ["python", "perl"])
za pkg v rezultatih:
natisni "% s% s (% s) \ n \ t% s"% (pkg.ime, pkg.različica, str.lok, pkg.povzetek)

Ta skripta išče v shrambah YUM za pakete, ki se ujemajo z imenom "python", in natisne informacije o ujemajočih se paketih. Ta skript bomo preučili po vrsticah.

Za začetek programiranja z YUM moramo uvoziti paket yum 'python - ta je privzeto nameščen v CENTOS 7. Skupaj z 'yum' običajno potrebujemo tudi pakete 'os' in 'sys' - tako bi se tipični program python, ki uporablja yum, začel z naslednjimi 3 vrsticami.

uvoz os
uvoz sys
uvoz yum

Nato vključite spodnjo vrstico, če želite ustvariti primerek yum za delo.

yb = njam.YumBase ()

To je skoraj prva vrstica funkcionalne kode v katerem koli programu python, ki uporablja yum. To je zato, ker je YumBase osnovni razred, ki hrani metode in predmete, potrebne za izvajanje vseh funkcij upravljanja paketov z uporabo yum-a. Za podrobno strukturo razreda YumBase glejte njegovo dokumentacijo.

Preučevanje konfiguracije YUM

Ko je primerek YumBase na voljo, ga lahko uporabimo za pregled konfiguracije yum-a. Spodaj je tabela s seznamom priljubljenih ukazov za navajanje podrobnosti o konfiguraciji.

Konfiguracija Uporaba
natisni yb.conf.pot_datoteke_konfiguracije Natisnite pot do datoteke za konfiguracijsko datoteko yum.
natisni yb.conf.logfile Za izpis poti dnevniške datoteke
za i v yb.conf.reposdir: natisni i Za izpis imenikov in datotek za skladišča
natisni yb.conf.skip_broken Vrednost je ponavadi napačna. Če je nastavljeno na true, bodo ukazi yum delovali, kot da je na voljo parameter -skip-broken.
natisni yb.conf.raven napake Če želite nastaviti raven napak, ki jih želite videti natisnjene na standardnem izhodu. To je vrednost med 0-10, kjer je 0 samo kritično, medtem ko je 10 vse, kar vključuje odpravljanje napak. Privzeto je nastavljen na 2, vendar ga lahko preglasite. Če boste izvajali skript, je dobro, da to nastavite na 0. Pri razhroščevanju samega skripta lahko to nastavite na večjo vrednost, na primer 3.

Poizvedovanje za pakete

Ko se vrnemo k našemu skriptu, vidimo, da naslednja vrstica kode nastavlja nov imenik predpomnilnika za yum, tako da opravlja vsa opravila kot običajen uporabnik (in tudi kot korenski uporabnik do neke mere - še vedno ne bo mogel spremeniti podatkov v na primer yumdb ali rpmdb).

yb.setCacheDir ()

Zdaj, ko smo ustvarili pravi yum objekt, lahko dostopamo do atributov pkgSack, rpmdb in repos. To nam omogoča izvajanje naslednjih funkcij:

yb.pkgSack - se lahko uporablja za izvajanje poizvedb v vseh omogočenih repozitorijih

yb.rpmdb - se lahko uporablja za izvajanje poizvedb v nameščenih paketih

yb.repos - pridobite objekt RepositoryStorage, ki ga lahko uporabite za nastavitev določenih konfiguracij za repoje in ga lahko uporabite za omogočanje ali onemogočanje repozitorijev - e.g., yb.repo posli.enableRepo (), yb.repo posli.disableRepo () & yb.repo posli.listEnabled (). Več o tem kasneje.

Za zdaj se bomo poglobili v lastnosti pkgSack in rpmdb. Iščemo lahko po skladiščih YUM in lokalno nameščenih paketih, tako da pokličemo eno od številnih funkcij, ki jih zagotavljata atributa pkgSack in rpmdb. Te funkcije vrnejo "predmete paketa", ki vsebujejo informacije o paketu. Nekatere uporabne funkcije za pridobitev predmetov paketa so: returnPackages (), searchPrimaryFields (), seachNevra (), seachName (), returnNewestByNameArch (). Naš skript uporablja metodo returnNewstByNameArch, da pridobi predmete paketa, ki se ujemajo z nizi vzorcev "python" ali "perl".

Upoštevajte, da so imena metod enaka za oba yb.rpmdb in yb.pkgVačka. Vendar poizvedbe izvajajo na različnih domenah - rpmdb išče lokalno nameščeno bazo podatkov o paketih RPM, medtem ko pkgSack išče v YUM repozitorijih.

Lahko bi tudi podobno navedli nameščene velike pakete (kjer velika pomeni, da je velikost> 10 MB). Koda yum je:

plist = yb.rpmdb.returnPackages ()
l_plist = [p za p na plistu, če p.velikost> 1024 * 1024 * 10]
print "Nameščeni paketi z velikostjo> 10 MB:"
za p v l_plist:
natisni "% s:% sMB"% (pkg, pkg.velikost / (1024 * 1024))

To je v bistvu bistvo uporabe pythona za dostop do yuma. V nadaljevanju članka se bomo poglobili v nianse API-ja yum modula in preizkusili še nekaj zapletenih dejanj, kot je namestitev / odstranitev paketov ali nastavitev lastnega skladišča.

Nevra, PRCO in Tuples

V naslovu ni tipkarske napake - to je nekaj izrazov, specifičnih za yum, ki olajšajo prepoznavanje paketov in odvisnosti ter njihovo komunikacijo z drugimi uporabniki yum-a, vključno s svojimi skripti python.

NEVRA pomeni Ime, Epoha, Različica, Izdanje, Arhitektura in se uporablja za enolično identifikacijo okusa ali primerka paketa - teh pet parametrov skupaj nedvoumno kaže na en unikatni primerek paketa. Na primer, paket, imenovan "python", ima lahko več različic, kot je 2.6, 2.7 itd., in vsaka različica bi lahko imela več izdaj za različne arhitekture e.g., x86_64, i386 (Upoštevajte, da se beseda arhitektura tukaj nanaša na arhitekturo CPU - npr.g., i386 je 32-bitni Intel). Skupaj teh pet predstavlja edinstveno kombinacijo in se imenuje nevra.

PRCO je kratica Provides / Requires / Conflicts / Ubsolete, ki povzema metapodatke o upravljanju paketov za objekt paketa.

Nekatere metode API v pkgSack / rpmdb, na primer yb.pkgVačka.simplePkgList (), yb.pkgVačka.paketiByTuple () itd., vrnite informacije NEVRA ali PRCO kot python tuples namesto kot pkgobjects

Naštejte in namestite pakete

Glede na uporabo ukaza "yum list", lahko uporabimo 'yb.doPackageLists () 'za seznam vseh nameščenih paketov / paketov, ki so na voljo za namestitev / ponovno namestitev.

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

Zdaj plist vsebuje 3 sezname paketov - po enega za nameščeni paket, namestljivi paket in tiste, ki so na voljo za ponovno namestitev. Pakete lahko natisnemo / namestimo / znova namestimo s spodnjo kodo:

če pl.nameščen:
natisni "Nameščeni paketi"
za pkg v razvrščenih (pl.nameščen):
natisni kg
če pl.na voljo:
natisni "Razpoložljivi paketi"
za pkg v razvrščenih (pl.na voljo):
natisni pkg, pkg.repo
če pl.reinstall_available:
natisni "Ponovno namesti razpoložljive pakete"
za pkg v razvrščenih (pl.reinstall_available):
natisni pkg, pkg.repo

Podobno kot seznam vseh nameščenih paketov, ki jih lahko uporabimo:

natisni “\ n”.pridruži ([x.ime za x v yb.rpmdb.returnPackages ()])

Nameščanje paketov

Nameščanje paketov vključuje nastavitev in izvajanje transakcije. Za izvajanje preprostih dejanj, kot je namestitev / odstranitev, uporabimo 'yb.namestite 'ali' yb.odstranite 'oziroma za nastavitev transakcije. Nato pokličemo 'yb.resolDeps () 'za sprožitev ločljivosti odvisnosti in' yb.processTransaction () ', da YUM naročite, naj nadaljuje in izvede transakcijo.

Vsi koraki, vendar zadnji, so pripravljalni in samo klic metode processTransaction () dejansko povzroči namestitev / odstranitev. Spodaj je delček kode za namestitev paketa.

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

Med izvajanjem takšnih transakcij je „yb.Objekt tsInfo 'vsebuje informacije o trenutnem stanju transakcije, dokler ni prevzeta. Več o tem lahko preberete v njegovi dokumentaciji.

Nastavite repozitorij na poljubno mesto

Spodnji skript vam pomaga nastaviti yum za dostop do skladišča na poljubnem mestu. Pričakuje, da se URL repozitorija posreduje kot argument ukazne vrstice.

url = sys.argv [1]
yb = njam.YumBase ()
če ne yb.setCacheDir (sila = True, ponovna uporaba = False):
natisni >> sys.stderr, "Tmp-ja ni mogoče ustvariti. cachedir. "
sys.izhod (1)
yb.repo posli.disableRepo ('*')
yb.add_enable_repo ('myrepo', [url])

Za zagon skripta

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

Povzetek

V tem članku smo se naučili, kako nadzirati upravitelja paketov YUM s pomočjo API-ja python. Pregledali smo možnosti konfiguracije ter API-je za poizvedbe / iskanje v razpoložljivih in nameščenih paketih in na koncu načine za izvajanje operacij upravljanja paketov, kot je namestitev / odstranitev / ponovna namestitev paketov.

Ta članek naj bi služil kot okno v tisto, kar je mogoče prek API-ja yum python. Čeprav API ni zelo dobro dokumentiran, sledi standardnim konvencijam in deluje predvidljivo. Oboroženo z znanjem o sposobnostih YUM-a in veščinami pythona je zabavno raziskovati in se naučiti vsega, kar zmore. Upam, da ste do zdaj uživali v branju in da nadaljujete s svojim raziskovanjem in uporabo yuma v svojih projektih.

S pomočjo gumba X-Mouse Button Control različno prilagodite gumbe miške za različno programsko opremo
Mogoče potrebujete orodje, ki bi lahko spremenilo nadzor miške z vsako aplikacijo, ki jo uporabljate. V tem primeru lahko preizkusite aplikacijo z ime...
Microsoft Sculpt Touch Wireless Mouse Review
Pred kratkim sem prebral o Microsoftov kiparski dotik brezžično miško in se odločil za nakup. Potem ko sem ga nekaj časa uporabljal, sem se odločil, d...
Zaslonska sledilna ploščica in kazalec miške AppyMouse za tablične računalnike Windows
Uporabniki tabličnih računalnikov pogosto zgrešijo miškin kazalec, še posebej kadar običajno uporabljajo prenosne računalnike. Pametni telefoni in tab...