Yum

YUM-iga suhtlemine CentOS-is Pythoni abil

YUM-iga suhtlemine CentOS-is Pythoni abil

Mis on YUM?

YUM on haldustööriist, mis on saadaval RedHati ja CentOS Linuxi distros.  YUM (Yellowdog Updater Modified) sõltub RPM (Red Hat Package Manager) pakettidest ja see loodi selleks, et võimaldada pakettide haldamist suurema tarkvarahoidlate süsteemi osana üksikute paketifailide asemel. YUM on interaktiivne paketihaldur, mis saab automaatselt teha sõltuvuse analüüsi ja süsteemivärskendusi koos uute pakettide installimise, vanade pakettide eemaldamise, olemasolevatele pakettidele päringute tegemise jne. YUM-i kohta lisateabe saamiseks klõpsake nuppu siin.

Selles artiklis uurime Pyum-programmide abil yum-i funktsioonidele juurdepääsu meetodeid ja saate teada, kuidas see võib olla kasulik. Selle õpetuse jaoks kasutame CENTOS 7, kus töötab python 2.7.x ja eeldaks mõningast põhitõdesid Pythoni funktsioonides.

Programmeerimine YUM-iga

Alustame yum programmeerimist pythoni abil, vaadates lihtsat pythoni skripti, mis kasutab yumit pakettide nimede päringuteks ja printimiseks. Siin see on:

impordi os
impordi süsteem
impordi yum
yb = yum.YumBase ()
yb.setCacheDir ()
tulemused = yb.pkgSack.returnNewestByNameArch (mustrid = ["python", "perl"])
pkg tulemustes:
print "% s% s (% s) \ n \ t% s"% (lk.nimi, lk.versioon, lk.kaar, lk.kokkuvõte)

See skript otsib YUM-i hoidlatest pakette, mis vastavad nimele "python", ja prindib teavet sobitatud pakettide kohta. Uurime seda skripti rea kaupa.

YUM-iga programmeerimise alustamiseks peame importima "yum" pythoni paketi - see on vaikimisi installitud rakendusse CENTOS 7. Koos 'yum'iga vajame tavaliselt ka' os 'ja' sys 'pakette - seega algaks tüüpiline yumit kasutav pythoni programm järgmise 3 reaga.

impordi os
impordi süsteem
impordi yum

Järgmisena lisage allolev rida töötamiseks mõeldud yum-eksemplari loomiseks.

yb = yum.YumBase ()

See on peaaegu esimene funktsionaalse koodi rida igas yum'i kasutavas pythoni programmis. Seda seetõttu, et YumBase on baasklass, mis sisaldab meetodeid ja objekte, mis on vajalikud kõigi paketi haldamise funktsioonide täitmiseks yumi abil. YumBase-klassi üksikasjaliku struktuuri leiate selle dokumentatsioonist.

YUM-i konfiguratsiooni uurimine

Kui YumBase'i eksemplar on saadaval, saame seda kasutada yumi konfiguratsiooni kontrollimiseks. Allpool on tabel, kus on loetletud populaarsed käsud konfiguratsiooni üksikasjade loetlemiseks.

Konfiguratsioon Kasutamine
printige yb.konf.config_fail_path Printige yumi konfiguratsioonifaili faili tee.
printige yb.konf.logifail Logifaili tee printimiseks
i jaoks yb-s.konf.reposdir: print i Hoidlate kataloogide ja failide väljatrükkimine
printige yb.konf.vahele jätta Väärtus on tavaliselt vale. Kui väärtuseks on seatud tõene, toimivad yum käsud nii, nagu oleks antud parameeter -skip-broken.
printige yb.konf.veatase Standardväljundile prinditavate vigade taseme määramiseks. See on väärtus vahemikus 0-10, kus 0 on ainult kriitiline, samas kui 10 sisaldab kõike silumist. Vaikimisi on see seatud väärtusele 2, kuid võite selle alistada. Kui käivitate skripti, on mõistlik see seada väärtusele 0. Skripti enda silumisel saate selle seada suuremaks väärtuseks, näiteks 3.

Pakkide pärimine

Naastes meie skripti juurde, näeme, et järgmine koodirida on uue vahemälukataloogi seadistamine yum jaoks, nii et see täidab kõiki ülesandeid tavakasutajana (ja teatud määral ka juurkasutajana - see ei saa ikkagi andmeid muuta näiteks yumdb või rpmdb).

yb.setCacheDir ()

Olles nüüd loonud tõelise yum-objekti, pääseme juurde atribuutidele pkgSack, rpmdb ja repos. See võimaldab meil täita järgmisi funktsioone:

yb.pkgSack - saab kasutada päringute tegemiseks kõigis lubatud hoidlates

yb.rpmdb - saab kasutada installitud pakettide päringute esitamiseks

yb.repos - hankige objekt RepositoryStorage, mida saab kasutada konkreetsete konfiguratsioonide seadistamiseks repodele ja mida saab kasutada hoidlate lubamiseks või keelamiseks - e.g., yb.repod.enableRepo (), yb.repod.disableRepo () ja yb.repod.listEnabled (). Lisateavet selle kohta hiljem.

Praegu süveneme omadustesse pkgSack ja rpmdb. Saame otsida vastavalt YUM-i hoidlatest ja kohapeal installitud pakettidest, kutsudes ühte atribuutide pkgSack ja rpmdb pakutavatest funktsioonidest. Need funktsioonid tagastavad „paketiobjektid”, mis sisaldavad teavet paketi kohta. Mõned kasulikud funktsioonid paketiobjektide saamiseks on: returnPackages (), searchPrimaryFields (), seachNevra (), seachName (), returnNewestByNameArch (). Meie skript kasutab meetodit returnNewstByNameArch, et saada paketiobjektid, mis vastavad mustristringidele “python” või “perl”.

Pange tähele, et meetodi nimed on mõlema yb jaoks samad.p / min ja yb.pkgSack. Kuid nad täidavad päringuid erinevates domeenides - rpmdb otsib kohalikku installitud RPM-i pakettide andmebaasi, pkgSack aga YUM-i hoidlatest.

Võiksime sarnaselt loetleda ka installitud suured paketid (kus suured tähendab, et suurus on> 10 MB). Yum kood on:

plist = yb.rpmdb.tagastuspaketid ()
l_plist = [p p jaoks plist, kui p.suurus> 1024 * 1024 * 10]
print "Installitud paketid suurusega> 10MB:"
p jaoks l_plist:
print "% s:% sMB"% (pkg, pkg.suurus / (1024 * 1024))

Põhimõtteliselt on see yum-i saamiseks pythoni kasutamise olemus. Ülejäänud artiklis uurime põhjalikumalt yum mooduli API nüansse ja proovime veel mõnda komplitseerivat toimingut, näiteks pakettide installimine / desinstallimine või oma hoidla seadistamine.

Nevra, PRCO ja Tuples

Pealkirjas pole kirjaviga - need on mõned yum-i spetsiifilised terminid, mis muudavad pakettide ja sõltuvuste tuvastamise lihtsamaks, samuti nende suhtlemisel teiste yumi kasutajatega, sealhulgas teie pythoni skriptidega.

NEVRA tähistab nime, ajastut, versiooni, versiooni, arhitektuuri ja seda kasutatakse pakendi maitse või eksemplari kordumatuks tuvastamiseks - need viis parameetrit viitavad ühemõtteliselt ühele unikaalsele paketi eksemplarile. Näiteks paketil nimega „python“ võib olla mitu versiooni nagu 2.6, 2.7 jne., ja igal versioonil võib olla mitu väljalaset erinevate arhitektuuride jaoks e.g., x86_64, i386 (Pange tähele, et sõna arhitektuur viitab siin protsessori arhitektuurile - nt.g., i386 on 32-bitine Intel). Need viis moodustavad koos ainulaadse kombinatsiooni ja neid nimetatakse nevraks.

PRCO tähistab lühendit Pakub / nõuab / Konfliktid / Vananenud, mis võtab kokku paketiobjekti paketihalduse metaandmed.

Teatud API-meetodid pkgSack / rpmdb-s, näiteks yb.pkgSack.simplePkgList (), yb.pkgSack.paketidByTuple () jne., tagastab NEVRA või PRCO teabe pigem püthoni koondarvudena kui pkgobjektidena

Pakettide loetelu ja installimine

Kasutades käsku "yum list", võime kasutada ka "yb".doPackageLists () 'loetleb kõik installitud / uuesti installimiseks pakutavad paketid / paketid.

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

Nüüd sisaldab plist 3 pakettide loendit - üks igaüks installitud paketi, installitava paketi jaoks ja pakett uuesti installimiseks. Saame pakette printida / installida / uuesti installida, kasutades järgmist koodi:

kui pl.paigaldatud:
print "Installed Packages"
pkg jaoks sorteeritud (pl.installitud):
trükk lk
kui pl.saadaval:
print "Saadaval paketid"
pkg jaoks sorteeritud (pl.saadaval):
trükk pkg, pkg.repo
kui pl.reinstall_available:
print "Saadaolevate pakettide uuesti installimine"
pkg jaoks sorteeritud (pl.reinstall_available):
trükk pkg, pkg.repo

Sarnaselt kõigi installitud pakettide loetlemisele, mida saame kasutada:

printige \ n.liitu ([x.x-i nimi yb-s.rpmdb.tagastuspaketid ()])

Pakettide installimine

Pakettide installimine hõlmab tehingu seadistamist ja täitmist. Lihtsate toimingute, näiteks installimine / eemaldamine, teostamiseks kasutame yb-d.install 'või' yb.tehingu seadistamiseks eemaldage vastavalt. Siis kutsume üles 'yb.resolDeps () 'sõltuvuste lahendamise käivitamiseks ja' yb.processTransaction () ', et anda YUM-ile ülesandeks tehing jätkata.

Kõik sammud, kuid viimane, on ettevalmistavad ja ainult meetodi processTransaction () kutsumine toob tegelikult kaasa installimise / desinstallimise. Allpool on paketi installimise koodilõik.

yb = yum.YumBase ()
yb.install (nimi = 'pakendinimi')
yb.resolDeps ()
yb.processTransaction ()

Selliste tehingute sooritamisel kuvatakse 'yb.objekt tsInfo 'hoiab teavet tehingu hetkeseisu kohta kuni selle toimepanemiseni. Selle kohta saate lähemalt lugeda selle dokumentatsioonist.

Hoidla seadistamine suvalisse kohta

Skripti all olev osa aitab teil seadistada juurdepääsu meelevaldsesse hoidlasse. See eeldab, et hoidla URL edastatakse käsurea argumendina.

URL = sys.argv [1]
yb = yum.YumBase ()
kui mitte yb.setCacheDir (jõud = True, taaskasutus = False):
print >> sys.stderr, "TMP-d ei saa luua. vahemälu. "
sys.väljapääs (1)
yb.repod.disableRepo ('*')
yb.add_enable_repo ('myrepo', [url])

Skripti käivitamiseks

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

Kokkuvõte

Selles artiklis õppisime, kuidas juhtida YUM-paketi haldurit oma pythoni API abil. Vaatasime saadaolevate ja installitud pakettide seadistusvõimalusi, samuti päringu / otsingu API-sid ja lõpuks võimalusi pakettide haldamise toimingute tegemiseks, näiteks pakettide installimine / desinstallimine / uuesti installimine.

See artikkel on mõeldud aknaks sellele, mis on yum pythoni API kaudu võimalik. Kuigi API pole eriti dokumenteeritud, järgib see tavapäraseid tavasid ja töötab etteaimatavalt. Relvastatud teadmistega YUM-i võimalustest ja Pythoni oskustest on tore uurida ja õppida kõike, mida ta teha saab. Loodetavasti meeldis teile siiani lugeda ja jätkate oma projektide uurimise ja rakendamisega.

X-Mouse Button Control abil saate hiire nupud erinevates tarkvarades erinevalt ümber teha
Võib-olla vajate tööriista, mis võiks muuta teie hiire juhtimissüsteemi iga kasutatava rakendusega. Sel juhul võite proovida rakendust nimega X hiiren...
Microsoft Sculpt Touch juhtmeta hiirte ülevaade
Lugesin hiljuti Microsoft Sculpt Touch juhtmevaba hiir ja otsustas selle osta. Pärast mõnda aega kasutamist otsustasin jagada sellega oma kogemusi. Se...
Rakenduse AppyMouse ekraanipaneel ja hiirekursor Windowsi tahvelarvutitele
Tahvelarvutite kasutajad tunnevad hiirekursorit sageli puudust, eriti kui neil on kombeks sülearvuteid kasutada. Puutetundliku ekraaniga nutitelefonid...