Yum

Mijiedarbība ar YUM CentOS, izmantojot Python

Mijiedarbība ar YUM CentOS, izmantojot Python

Kas ir YUM?

YUM ir pārvaldības rīks, kas ir pieejams RedHat un CentOS Linux distros.  YUM (Yellowdog Updater Modified) ir atkarīgs no RPM (Red Hat Package Manager) pakotnēm, un tas tika izveidots, lai ļautu pārvaldīt paketes kā daļu no lielākas programmatūras krātuvju sistēmas, nevis atsevišķus pakotņu failus. YUM ir interaktīvs pakotņu pārvaldnieks, kas var automātiski veikt atkarības analīzi un sistēmas atjauninājumus, kā arī instalēt jaunas paketes, noņemt vecās paketes, veikt vaicājumus esošajām pakotnēm utt. Lai uzzinātu vairāk par YUM, noklikšķiniet uz šeit.

Šajā rakstā mēs apskatīsim metodes, kā piekļūt yum funkcionalitātei, izmantojot Python programmas, un uzzināsim, kā tā var būt noderīga. Šajā apmācībā mēs izmantosim CENTOS 7, kurā darbojas python 2.7.x un pieņemtu zināmu pitona pamatfunkciju pārzināšanu.

Programmēšana ar YUM

Sāksim mācīties par yum programmēšanu, izmantojot pitonu, apskatot vienkāršu pitona skriptu, kas izmanto yum, lai vaicātu un izdrukātu pakotņu nosaukumus. Te tas ir:

importēt os
importa sys
ievest yum
yb = yum.YumBase ()
yb.setCacheDir ()
rezultāti = yb.pkgSack.returnNewestByNameArch (modeļi = ["python", "perl"])
par pkg rezultātos:
drukāt "% s% s (% s) \ n \ t% s"% (pkg.nosaukums, pkg.versija, lpp.arka, pkg.kopsavilkums)

Šis skripts YUM krātuvēs meklē paketes, kas atbilst nosaukumam “python”, un izdrukā informāciju par atbilstošo (-ajām) paketi (-ēm). Mēs izskatīsim šo skriptu pa rindām.

Lai sāktu programmēšanu ar YUM, mums jāimportē pakotne 'yum' - tā pēc noklusējuma ir instalēta CENTOS 7. Kopā ar 'yum' mums parasti ir nepieciešamas arī 'os' un 'sys' paketes - tāpēc tipiska pitona programma, kurā tiek izmantots yum, sāktos ar šādām 3 rindām.

importēt os
importa sys
ievest yum

Pēc tam, lai izveidotu yum instanci darbam, iekļaujiet zemāk esošo rindu.

yb = yum.YumBase ()

Šī ir gandrīz pirmā funkcionālā koda rinda jebkurā pitona programmā, izmantojot yum. Tas ir tāpēc, ka YumBase ir bāzes klase, kurā atrodas metodes un objekti, kas nepieciešami visu pakotņu pārvaldības funkciju veikšanai, izmantojot yum. Detalizētu YumBase klases struktūru skatiet tās dokumentācijā.

Pārbauda YUM konfigurāciju

Kad būs pieejams YumBase eksemplārs, mēs to varēsim izmantot, lai pārbaudītu yum konfigurāciju. Zemāk ir tabula, kurā norādītas populāras komandas konfigurācijas detaļu uzskaitīšanai.

Konfigurācija Lietošana
drukāt yb.konf.config_file_path Izdrukājiet faila ceļu Yum konfigurācijas failam.
drukāt yb.konf.žurnāla fails Lai izdrukātu žurnāla faila ceļu
par i yb.konf.reposdir: drukāt i Lai izdrukātu krātuvju direktorijus un failus
drukāt yb.konf.izlaist_salauzts Vērtība parasti ir nepatiesa. Ja iestatīts uz true, komandas yum darbosies tā, it kā tiktu piegādāts parametrs -skip-broken.
drukāt yb.konf.kļūdu līmenis Lai iestatītu kļūdu līmeni, kuru vēlaties redzēt uz standarta izvades. Tā ir vērtība starp 0-10, kur 0 ir tikai kritiska, bet 10 ir viss, kas ietver atkļūdošanu. Pēc noklusējuma tā ir iestatīta uz 2, taču jūs varat to ignorēt. Ja izmantosiet skriptu, ieteicams to iestatīt uz 0. Atkļūdojot pašu skriptu, to var iestatīt uz lielāku vērtību, piemēram, 3.

Vaicājums par pakām

Atgriežoties pie mūsu skripta, mēs redzam, ka nākamā koda rinda ir jauna kešatmiņas direktorija iestatīšana yum, tāpēc tas veic visus uzdevumus kā parasts lietotājs (un zināmā mērā arī kā root lietotājs - tas joprojām nevarēs mainīt datus piemēram, yumdb vai rpmdb).

yb.setCacheDir ()

Tagad, kad esam izveidojuši īstu yum objektu, mēs varam piekļūt atribūtiem pkgSack, rpmdb un repos. Tas ļauj mums veikt šādas funkcijas:

yb.pkgSack - var izmantot, lai veiktu vaicājumus visās iespējotajās krātuvēs

yb.rpmdb - var izmantot, lai veiktu vaicājumus par instalētajām pakotnēm

yb.repos - iegūstiet RepositoryStorage objektu, ko var izmantot, lai iestatītu īpašas repo konfigurācijas, un to var izmantot, lai iespējotu vai atspējotu repozitorijus - e.g., yb.repo.enableRepo (), yb.repo.disableRepo () un yb.repo.listEnabled (). Vairāk par to vēlāk.

Pagaidām mēs iedziļināsimies pkgSack un rpmdb īpašībās. Mēs varam meklēt attiecīgi YUM krātuvēs un lokāli instalētās paketēs, izsaucot vienu no vairākām funkcijām, ko nodrošina atribūti pkgSack un rpmdb. Šīs funkcijas atgriež “paketes objektus”, kas satur informāciju par paketi. Dažas noderīgas funkcijas pakotnes objektu iegūšanai ir šādas: returnPackages (), searchPrimaryFields (), seachNevra (), seachName (), returnNewestByNameArch (). Mūsu skripts izmanto metodi returnNewstByNameArch, lai iegūtu paketes objektus, kas atbilst modeļa virknēm “python” vai “perl”.

Ņemiet vērā, ka metožu nosaukumi abiem yb ir vienādi.rpmdb un yb.pkgSack. Tomēr viņi veic vaicājumus dažādos domēnos - rpmdb meklē vietējo instalēto RPM pakotņu datu bāzi, bet pkgSack - YUM krātuvēs.

Mēs varētu līdzīgi uzskaitīt instalētās lielās paketes (kur lielie līdzekļi, teiksim, izmērs ir> 10 MB). Yum kods ir:

plist = yb.rpmdb.returnPackages ()
l_plist = [p p p plist, ja p.izmērs> 1024 * 1024 * 10]
print "Instalētās paketes ar izmēru> 10 MB:"
p p l_plist:
drukāt "% s:% sMB"% (pkg, pkg.izmērs / (1024 * 1024))

Būtībā tā ir pitona izmantošanas būtība, lai piekļūtu yum. Pārējā rakstā mēs iedziļināsimies yum moduļa API niansēs un izmēģināsim vēl dažas sarežģītības darbības, piemēram, pakešu instalēšana / atinstalēšana vai mūsu pašu krātuves iestatīšana.

Nevra, PRCO un Tuples

Virsrakstā nav kļūdas - šie ir daži yum specifiski termini, kas atvieglo paku un atkarību identificēšanu, kā arī sazinās ar tām ar citiem yum lietotājiem, ieskaitot jūsu python skriptus.

NEVRA apzīmē vārdu, laikmetu, versiju, laidienu, arhitektūru un tiek izmantots, lai unikāli identificētu paketes garšu vai instanci - šie pieci parametri kopā nepārprotami norāda uz vienu unikālu pakotnes eksemplāru. Piemēram, pakotnei ar nosaukumu “pitons” var būt vairākas versijas, piemēram, 2.6, 2.7 utt., un katrai versijai varētu būt vairāki izlaidumi dažādām arhitektūrām e.g., x86_64, i386 (ņemiet vērā, ka vārds arhitektūra šeit attiecas uz CPU arhitektūru - e.g., i386 ir 32 bitu Intel). Šie pieci kopā ir unikāla kombinācija, un tos sauc par nevra.

PRCO nozīmē Provides / Requires / Conflict / Obsoletes, kas apkopo pakotnes objekta pakotņu pārvaldības metadatus.

Noteiktas API metodes pkgSack / rpmdb, piemēram, yb.pkgSack.simplePkgList (), yb.pkgSack.paketesByTuple () utt., atgriezt NEVRA vai PRCO informāciju kā pitona kopas, nevis pkgobjects

Saraksti un instalējiet paketes

Līdzīgi kā izmantot komandu “yum list”, mēs varam izmantot “yb”.doPackageLists () ', lai uzskaitītu visas instalētās paketes / paketes, kas pieejamas instalēšanai / atkārtotai instalēšanai.

plist = yb.doPackageLists (modeļi = sys.argv [1:])

Tagad plist satur 3 pakotņu saraksti - pa vienam instalētai pakotnei, instalējamai pakotnei un tiem, kas pieejami atkārtotai instalēšanai. Mēs varam izdrukāt / instalēt / pārinstalēt paketes, izmantojot zemāk esošo kodu:

ja pl.uzstādīts:
drukāt "Instalētās paketes"
par pkg sašķiroti (pl.instalēta):
drukāt lpp
ja pl.pieejams:
drukāt "Pieejamie iepakojumi"
par pkg sašķiroti (pl.pieejams):
drukāt pkg, pkg.repo
ja pl.reinstall_available:
izdrukāt "Pārinstalēt pieejamos iepakojumus"
par pkg sašķiroti (pl.reinstall_available):
drukāt pkg, pkg.repo

Līdzīgi kā uzskaitīt visas instalētās paketes, kuras mēs varam izmantot:

drukāt “\ n”.pievienoties ([x.x nosaukums yb.rpmdb.returnPackages ()])

Pakotņu instalēšana

Pakotņu instalēšana ietver darījuma iestatīšanu un izpildi. Lai veiktu vienkāršas darbības, piemēram, instalēšanu / noņemšanu, mēs izmantojam 'yb.instalēt 'vai' yb.attiecīgi noņemt ', lai iestatītu darījumu. Tad mēs izsaucam 'yb.resolDeps () ', lai aktivizētu atkarību un' yb.processTransaction () ', lai uzdotu YUM turpināt un izpildīt darījumu.

Visi soļi, bet pēdējie, ir sagatavošanās darbi, un tikai izsaukuma uz processTransaction () metodi faktiski notiek instalēšana / atinstalēšana. Zemāk ir koda fragments pakotnes instalēšanai.

yb = yum.YumBase ()
yb.instalēt (nosaukums = 'packagename')
yb.resolDeps ()
yb.processTransaction ()

Veicot šādus darījumus, 'yb.objekts tsInfo 'glabā informāciju par darījuma pašreizējo statusu, līdz tas ir izdarīts. Vairāk par to varat izlasīt tā dokumentācijā.

Iestatiet krātuvi patvaļīgā vietā

Zemāk esošais skripts palīdz jums iestatīt piekļuvi krātuvei patvaļīgā vietā. Tas sagaida, ka repozitorija URL tiks ievadīts kā komandrindas arguments.

URL = sys.argv [1]
yb = yum.YumBase ()
ja ne yb.setCacheDir (force = True, atkārtota izmantošana = False):
drukāt >> sys.stderr, "Nevar izveidot tmp. cachedir. "
sys.izeja (1)
yb.repo.disableRepo ('*')
yb.add_enable_repo ('myrepo', [url])

Lai palaistu skriptu

pitona skripts.py url: // to / my / repo

Kopsavilkums

Šajā rakstā mēs uzzinājām, kā kontrolēt YUM pakotņu pārvaldnieku, izmantojot tā python API. Mēs apskatījām konfigurācijas opcijas, kā arī vaicājuma / meklēšanas API pieejamos un instalētos paketēs un visbeidzot veidus, kā veikt pakotņu pārvaldības darbības, piemēram, pakešu instalēšana / atinstalēšana / atkārtota instalēšana.

Šis raksts ir paredzēts kā logs tam, kas ir iespējams, izmantojot yum python API. Lai gan API nav ļoti labi dokumentēta, tā ievēro standarta konvencijas un darbojas paredzami. Bruņojoties ar zināšanām par YUM iespējām un pitona prasmēm, ir jautri izpētīt un uzzināt visu, ko tā var darīt. Ceru, ka jums patika lasīt līdz šim, un ka jūs turpināsiet izpētīt un izmantot yum projektos.

Populārākās Oculus App Lab spēles
Ja esat Oculus austiņu īpašnieks, jums ir jāsazinās par sānu ielādi. Sānu ielāde ir process, kurā austiņās tiek instalēts saturs, kas nav veikals. Sid...
10 labākās spēles, kuras spēlēt Ubuntu
Windows platforma ir bijusi viena no dominējošajām spēļu platformām, jo ​​mūsdienās tiek attīstīts milzīgs spēļu skaits, lai atbalstītu Windows. Vai k...
5 labākās arkādes spēles Linux
Mūsdienās datori ir nopietnas mašīnas, kuras izmanto spēlēšanai. Ja jūs nevarat iegūt jauno augsto rezultātu, jūs zināt, ko es domāju. Šajā ierakstā j...