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 osimpordi 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 osimpordi 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 / repoKokkuvõ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.