Mňam

Interakcia s YUM na CentOS pomocou Pythonu

Interakcia s YUM na CentOS pomocou Pythonu

Čo je YUM?

YUM je nástroj na správu, ktorý je k dispozícii na distribúciách RedHat a CentOS Linux.  YUM (Yellowdog Updater Modified) je závislý na balíkoch RPM (Red Hat Package Manager) a bol vytvorený, aby umožňoval správu balíkov ako častí väčšieho systému softvérových úložísk namiesto jednotlivých súborov balíkov. YUM je interaktívny správca balíkov, ktorý môže automaticky vykonávať analýzu závislostí a aktualizácie systému spolu s inštaláciou nových balíkov, odstraňovaním starých balíkov, vykonávaním dotazov na existujúce balíčky atď. Ak sa chcete dozvedieť viac informácií o YUM, kliknite na ikonu tu.

V tomto článku sa pozrieme na metódy prístupu k funkcii yum pomocou programov Python a zistíme, ako to môže byť užitočné. Pre tento tutoriál použijeme CENTOS 7 so systémom python 2.7.x a predpokladal by určitú znalosť základných funkcií pythonu.

Programovanie pomocou YUM

Poďme sa začať učiť o programovaní programu yum pomocou jazyka python tak, že sa pozrieme na jednoduchý skript v jazyku python, ktorý používa program yum na dopytovanie a tlač názvov balíkov. Tu to je:

import os
import sys
import yum
yb = mňam.YumBase ()
yb.setCacheDir ()
výsledky = yb.pkgSack.returnNewestByNameArch (vzory = ["python", "perl"])
pre pkg vo výsledkoch:
vypísať "% s% s (% s) \ n \ t% s"% (bal.meno, bal.verzia, bal.oblúk, bal.zhrnutie)

Tento skript vyhľadáva v úložiskách YUM balíčky zodpovedajúce názvu „python“ a tlačí informácie o zhodných balíkoch. Tento skript preskúmame riadok po riadku.

Aby sme mohli začať programovať s YUM, musíme importovať balík python „yum“ - ten je štandardne nainštalovaný v CENTOS 7. Spolu s programom „yum“ zvyčajne potrebujeme aj balíčky „os“ a „sys“ - takže typický program v jazyku Python využívajúci program yum by začínal nasledujúcimi 3 riadkami.

import os
import sys
import yum

Ďalej, ak chcete vytvoriť inštanciu yum, s ktorou chcete pracovať, zahrňte nasledujúci riadok.

yb = mňam.YumBase ()

Toto je takmer prvý riadok funkčného kódu v ľubovoľnom pythonovskom programe používajúci yum. Je to preto, že YumBase je základná trieda, ktorá obsahuje metódy a objekty potrebné na vykonávanie všetkých funkcií správy balíkov pomocou yum. Podrobnú štruktúru triedy YumBase nájdete v jej dokumentácii.

Skúma sa konfigurácia YUM

Keď je k dispozícii inštancia YumBase, môžeme ju použiť na kontrolu konfigurácie yum. Ďalej je uvedená tabuľka so zoznamom populárnych príkazov na výpis podrobností o konfigurácii.

Konfigurácia Využitie
tlač yb.konf.config_file_path Vytlačte cestu k súboru s konfiguračným súborom yum.
tlač yb.konf.logfile Vytlačiť cestu protokolu
lebo i v yb.konf.reposdir: tlačiť i Vytlačiť adresáre a súbory pre úložiská
tlač yb.konf.skip_broken Hodnota je zvyčajne nepravdivá. Ak je nastavená hodnota true, príkazy yum budú pôsobiť, akoby bol zadaný parameter -skip-broken.
tlač yb.konf.chybová úroveň Ak chcete nastaviť úroveň chýb, ktoré chcete vidieť vytlačené na štandardnom výstupe. Je to hodnota medzi 0-10, kde 0 je iba kritická, zatiaľ čo 10 je všetko vrátane ladenia. Predvolene je nastavená na 2, ale môžete ju prepísať. Ak používate skript, je dobré nastaviť túto hodnotu na 0. Môžete nastaviť túto hodnotu na vyššiu hodnotu ako 3, keď ladíte samotný skript.

Dopytovanie balíkov

Po návrate k nášmu skriptu vidíme, že ďalší riadok kódu nastavuje nový adresár cache pre yum, takže vykonáva všetky úlohy ako normálny používateľ (a do istej miery aj ako root - stále nebude môcť meniť údaje v napríklad yumdb alebo rpmdb).

yb.setCacheDir ()

Keď sme teraz vytvorili skutočný objekt yum, môžeme získať prístup k atribútom pkgSack, rpmdb a repos. To nám umožňuje vykonávať nasledujúce funkcie:

yb.pkgSack - dá sa použiť na vykonávanie dotazov na všetkých povolených úložiskách

yb.rpmdb - dá sa použiť na vykonávanie dotazov na nainštalovaných balíkoch

yb.repos - získajte objekt RepositoryStorage, ktorý sa dá použiť na nastavenie konkrétnych konfigurácií pre repo a môže sa použiť na povolenie alebo zakázanie úložísk - e.g., yb.repos.enableRepo (), yb.repos.disableRepo () & yb.repos.listEnabled (). Viac o tom neskôr.

Zatiaľ sa ponoríme do vlastností pkgSack a rpmdb. Môžeme prehľadať úložiská YUM a lokálne nainštalované balíky zavolaním jednej z niekoľkých funkcií poskytovaných atribútmi pkgSack a rpmdb. Tieto funkcie vracajú „objekty balíka“, ktoré obsahujú informácie o balíku. Niektoré užitočné funkcie na získanie objektov balíka sú: returnPackages (), searchPrimaryFields (), seachNevra (), seachName (), returnNewestByNameArch (). Náš skript používa metódu returnNewstByNameArch na získanie objektov balíka zodpovedajúcich reťazcom vzorov „python“ alebo „perl“.

Názvy metód sú rovnaké pre obidve yb.rpmdb a yb.pkgSack. Vykonávajú však dotazy na rôznych doménach - rpmdb prehľadáva lokálnu databázu nainštalovaných balíkov RPM, zatiaľ čo pkgSack prehľadáva úložiská YUM.

Podobne by sme mohli uviesť zoznam nainštalovaných veľkých balíkov (kde veľké znamená, povedzme veľkosť> 10 MB). Yum kód je:

plist = yb.rpmdb.returnPackages ()
l_plist = [p pre p v plist, ak p.veľkosť> 1024 * 1024 * 10]
vytlačiť "Inštalované balíčky s veľkosťou> 10 MB:"
pre p v l_plist:
vytlačiť "% s:% sMB"% (bal., bal.veľkosť / (1024 * 1024))

To je v podstate podstata použitia pythonu na prístup k yum. Vo zvyšku článku sa pozrieme hlbšie na nuansy rozhrania yum module API a vyskúšame ďalšie komplikácie, ako je inštalácia / odinštalovanie balíkov alebo nastavenie vlastného úložiska.

Nevra, PRCO a Tuples

V nadpise nie je žiadny preklep - jedná sa o niektoré výrazy špecifické pre yum, ktoré uľahčujú identifikáciu balíkov a závislostí, ako aj pri ich komunikácii s ostatnými používateľmi yum, vrátane vašich python skriptov.

NEVRA znamená Názov, Epocha, Verzia, Vydanie, Architektúra a používa sa na jednoznačnú identifikáciu príchuti alebo inštancie balíka - týchto päť parametrov spolu jednoznačne smeruje k jednej jedinečnej inštancii balíka. Napríklad balík s názvom „python“ môže mať viac verzií ako 2.6, 2.7 atď., a každá verzia môže mať viac vydaní pre rôzne architektúry, napr.g., x86_64, i386 (Upozorňujeme, že slovo architektúra sa tu vzťahuje na architektúru CPU - napr.g., i386 je 32-bitový procesor Intel). Spolu týchto päť predstavuje jedinečnú kombináciu a označuje sa ako nevra.

PRCO znamená Provides / Requires / Conflicts / Obsoletes, ktoré sumarizujú metaúdaje správy balíkov pre objekt balíka.

Niektoré metódy API v pkgSack / rpmdb, napríklad yb.pkgSack.simplePkgList (), yb.pkgSack.packagesByTuple () atď., vrátiť informácie NEVRA alebo PRCO skôr ako n-tice python ako pkgobjects

Zoznam a inštalácia balíkov

Podobne ako pri použití príkazu „yum list“ môžeme použiť aj „yb.doPackageLists () 'pre zoznam všetkých nainštalovaných balíkov / balíkov dostupných na inštaláciu / preinštalovanie.

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

Teraz plist obsahuje 3 zoznamy balíkov - jeden pre nainštalovaný balík, inštalovateľný balík a tie, ktoré sú k dispozícii na preinštalovanie. Balíky môžeme tlačiť / inštalovať / preinštalovať pomocou nižšie uvedeného kódu:

ak pl.nainštalované:
vytlačiť "Nainštalované balíčky"
za bal. v triedenom (pl.nainštalovaný):
tlačiť bal
ak pl.k dispozícii:
vytlačiť "Dostupné balíčky"
za bal. v triedenom stave (pl.k dispozícii):
tlačiť bal., bal.repo
ak pl.preinštalovať_k dispozícii:
vytlačiť „Preinštalovať dostupné balíčky“
za bal. v triedenom (pl.preinštalovať_prístupné):
tlačiť bal., bal.repo

Podobne môžeme uviesť zoznam všetkých nainštalovaných balíkov, ktoré môžeme použiť:

vytlačiť „\ n“.pripojiť sa ([x.meno pre x v yb.rpmdb.returnPackages ()])

Inštalácia balíkov

Inštalácia balíkov zahŕňa nastavenie a vykonanie transakcie. Na vykonávanie jednoduchých akcií, ako je inštalácia / odstránenie, používame znak „yb“.nainštalovať 'alebo' yb.odstrániť 'pre nastavenie transakcie. Potom vyvoláme 'yb.resolveDeps () 'na spustenie riešenia závislostí a' yb.processTransaction () ', ktorá dá spoločnosti YUM pokyn, aby pokračovala a vykonala transakciu.

Všetky kroky, okrem posledného, ​​sú prípravné a iba volanie metódy processTransaction () v skutočnosti vedie k uskutočneniu inštalácie alebo odinštalovania. Ďalej je uvedený útržok kódu na inštaláciu balíka.

yb = mňam.YumBase ()
yb.nainštalovať (name = 'packagename')
yb.resolveDeps ()
yb.processTransaction ()

Pri uskutočňovaní takýchto transakcií „yb.Objekt tsInfo 'uchováva informácie o aktuálnom stave transakcie, kým nie je potvrdená. Viac sa o ňom dočítate v jeho dokumentácii.

Nastavte si úložisko na ľubovoľnom mieste

Nižšie uvedený skript vám pomôže nastaviť yum na prístup k úložisku na ľubovoľnom mieste. Očakáva, že adresa URL úložiska bude poskytnutá ako argument príkazového riadku.

url = sys.argv [1]
yb = mňam.YumBase ()
ak nie yb.setCacheDir (force = True, reuse = False):
tlačiť >> sys.stderr: „Nemôžem vytvoriť tmp. cachedir. „
sys.výstup (1)
yb.repos.disableRepo ('*')
yb.add_enable_repo ('myrepo', [url])

Ak chcete spustiť skript

pythonovský skript.py url: // to / my / repo

Zhrnutie

V tomto článku sme sa naučili, ako ovládať správcu balíkov YUM pomocou jeho python API. Pozreli sme sa na možnosti konfigurácie, ako aj na rozhrania API dotazu / vyhľadávania na dostupných a nainštalovaných balíkoch a nakoniec na spôsoby vykonávania operácií správy balíkov, ako je inštalácia / odinštalovanie / preinštalovanie balíkov.

Tento článok má slúžiť ako okno do toho, čo je možné prostredníctvom API yum python. Aj keď API nie je veľmi dobre zdokumentované, dodržiava štandardné konvencie a funguje predvídateľne. Vyzbrojený znalosťami schopností YUM a zručnosťami v pythone je zábavné skúmať a učiť sa všetko, čo dokáže. Dúfam, že sa vám doterajšie čítanie páčilo a že budete pokračovať vo výskume a aplikácii yum vo svojich projektoch.

Tlačidlo ľavého kliknutia myši nefunguje v systéme Windows 10
Ak používate samostatnú myš s prenosným počítačom alebo stolovým počítačom, ale nefunguje ľavé tlačidlo myši vo Windows 10/8/7 z nejakého dôvodu uvádz...
Kurzor pri písaní v systéme Windows 10 skáče alebo sa pohybuje náhodne
Ak zistíte, že kurzor myši skáče alebo sa pohybuje sám, automaticky a náhodne pri písaní na notebooku alebo počítači so systémom Windows, niektoré z t...
Ako zmeniť smer posúvania myši a touchpadu v systéme Windows 10
Myš a TouchpadNielenže uľahčujú výpočty, ale sú aj efektívnejšie a menej časovo náročné. Nemôžeme si predstaviť život bez týchto zariadení, ale je pra...