Mňam

Interakce s YUM na CentOS pomocí Pythonu

Interakce s YUM na CentOS pomocí Pythonu

Co je YUM?

YUM je nástroj pro správu, který je k dispozici v distribucích RedHat a CentOS Linux.  YUM (Yellowdog Updater Modified) je závislý na balíčcích RPM (Red Hat Package Manager) a byl vytvořen, aby umožňoval správu balíků jako součást většího systému softwarových úložišť místo jednotlivých souborů balíčků. YUM je interaktivní správce balíčků, který může automaticky provádět analýzu závislostí a aktualizace systému spolu s instalací nových balíků, odstraňováním starých balíků, prováděním dotazů na stávající balíčky atd. Chcete-li se o YUM dozvědět více, klikněte tady.

V tomto článku se podíváme na metody přístupu k funkcím yum pomocí programů Pythonu a zjistíme, jak to může být užitečné. V tomto kurzu použijeme CENTOS 7 se spuštěným pythonem 2.7.x a předpokládal by určitou znalost základních funkcí pythonu.

Programování pomocí YUM

Začněme se učit o programování yum pomocí pythonu tím, že se podíváme na jednoduchý pythonovský skript, který používá yum k dotazování a tisku názvů balíčků. Tady to je:

import os
import sys
import yum
yb = mňam.YumBase ()
yb.setCacheDir ()
výsledky = yb.pkgSack.returnNewestByNameArch (vzory = ["python", "perl"])
pro pkg ve výsledcích:
tisk "% s% s (% s) \ n \ t% s"% (bal.jméno, bal.verze, bal.oblouk, bal.souhrn)

Tento skript vyhledá v úložištích YUM balíčky odpovídající názvu „python“ a vytiskne informace o odpovídajících balíčcích. Tento skript prozkoumáme řádek po řádku.

Chcete-li začít programovat pomocí YUM, musíme importovat balíček python 'yum' - ten je ve výchozím nastavení nainstalován v CENTOS 7. Spolu s 'yum' obvykle potřebujeme také balíčky 'os' a 'sys' - takže typický pythonovský program využívající yum by začínal následujícími 3 řádky.

import os
import sys
import yum

Dále pro vytvoření instance yum, se kterou chcete pracovat, zahrňte následující řádek.

yb = mňam.YumBase ()

Toto je téměř první řádek funkčního kódu v jakémkoli pythonovém programu používajícím yum. Je to proto, že YumBase je základní třída, ve které jsou umístěny metody a objekty potřebné k provádění všech funkcí správy balíčků pomocí yum. Podrobnou strukturu třídy YumBase najdete v její dokumentaci.

Zkoumá konfiguraci YUM

Jakmile je k dispozici instance YumBase, můžeme ji použít ke kontrole konfigurace yum. Níže je tabulka se seznamem populárních příkazů pro výpis podrobností o konfiguraci.

Konfigurace Používání
tisk yb.konf.config_file_path Vytiskněte cestu k souboru pro konfigurační soubor yum.
tisk yb.konf.log soubor Vytisknout cestu protokolu
pro i v yb.konf.reposdir: tisk i Vytisknout adresáře a soubory pro úložiště
tisk yb.konf.skip_broken Hodnota je obvykle nepravdivá. Při nastavení na hodnotu true budou příkazy yum fungovat, jako kdyby byl zadán parametr -skip-broken.
tisk yb.konf.úroveň chyb Chcete-li nastavit úroveň chyb, kterou chcete vidět vytištěnou na standardním výstupu. Je to hodnota mezi 0-10, kde 0 je jen kritická, zatímco 10 je vše včetně ladění. Ve výchozím nastavení je nastavena na 2, ale můžete ji přepsat. Pokud běžíte ve skriptu, je dobré nastavit tuto hodnotu na 0. Při ladění samotného skriptu to můžete nastavit na vyšší hodnotu, například 3.

Dotaz na balíčky

Po návratu do našeho skriptu vidíme, že další řádek kódu nastavuje nový adresář mezipaměti pro yum, takže provádí všechny úkoly jako normální uživatel (a do jisté míry také jako uživatel root - stále nebude schopen měnit data v například yumdb nebo rpmdb).

yb.setCacheDir ()

Po vytvoření skutečného objektu yum nyní můžeme přistupovat k atributům pkgSack, rpmdb a repos. To nám umožňuje provádět následující funkce:

yb.pkgSack - lze použít k provádění dotazů na všech povolených úložištích

yb.rpmdb - lze použít k provádění dotazů na nainstalované balíčky

yb.repos - získejte objekt RepositoryStorage, který lze použít k nastavení konkrétních konfigurací pro repo a lze jej použít k povolení nebo zakázání repozitářů - e.G., yb.repos.enableRepo (), yb.repos.disableRepo () & yb.repos.listEnabled (). Více o tom později.

Prozatím se ponoříme do vlastností pkgSack a rpmdb. Můžeme prohledávat repozitáře YUM a lokálně nainstalované balíčky voláním jedné z několika funkcí poskytovaných atributy pkgSack a rpmdb. Tyto funkce vracejí „objekty balíčku“, které obsahují informace o balíčku. Některé užitečné funkce pro získání objektů balíčku jsou: returnPackages (), searchPrimaryFields (), seachNevra (), seachName (), returnNewestByNameArch (). Náš skript používá metodu returnNewstByNameArch k získání objektů balíčku odpovídajících řetězcům vzorů „python“ nebo „perl“.

Názvy metod jsou pro oba yb stejné.rpmdb a yb.pkgSack. Provádějí však dotazy na různých doménách - rpmdb prohledá databázi nainstalovaných balíků RPM, zatímco pkgSack prohledá repozitáře YUM.

Mohli bychom podobně vypsat nainstalované velké balíčky (kde velké znamená, řekněme velikost> 10 MB). Yum kód je:

plist = yb.rpmdb.returnPackages ()
l_plist = [p pro p v plist, pokud p.velikost> 1024 * 1024 * 10]
tisk "Instalované balíčky o velikosti> 10 MB:"
pro p v l_plist:
tisk "% s:% sMB"% (balení, balení.velikost / (1024 * 1024))

To je v podstatě podstata používání pythonu pro přístup k yum. Ve zbytku článku se ponoříme hlouběji do nuancí API modulu yum a vyzkoušíme některé další komplikační akce, jako je instalace / odinstalování balíčků nebo nastavení vlastního úložiště.

Nevra, PRCO a Tuples

V záhlaví není překlep - jedná se o některé specifické výrazy yum, které usnadňují identifikaci balíčků a závislostí a také o jejich komunikaci s ostatními uživateli yum, včetně vašich skriptů pythonu.

NEVRA znamená Název, Epocha, Verze, Vydání, Architektura a používá se k jedinečné identifikaci příchuti nebo instance balíčku - těchto pět parametrů společně jednoznačně ukazuje na jednu jedinečnou instanci balíčku. Například balíček s názvem „python“ může mít více verzí, jako je 2.6, 2.7 atd., a každá verze může mít více verzí pro různé architektury, např.G., x86_64, i386 (Všimněte si, že slovo architektura zde odkazuje na architekturu CPU - např.G., i386 je 32bitový procesor Intel). Společně těchto pět představuje jedinečnou kombinaci a je označováno jako nevra.

PRCO znamená Poskytuje / Vyžaduje / Konflikty / Zastaralé, které shrnují metadata správy balíků pro objekt balíčku.

Určité metody API v pkgSack / rpmdb, jako yb.pkgSack.simplePkgList (), yb.pkgSack.packagesByTuple () atd., vraťte informace NEVRA nebo PRCO jako n-tice pythonu místo pkgobjects

Seznamujte a instalujte balíčky

Podobně jako při použití příkazu „yum list“ můžeme použít „yb.doPackageLists () 'pro seznam všech nainstalovaných balíků / balíků dostupných pro instalaci / opětovnou instalaci.

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

Plist nyní obsahuje 3 seznamy balíčků - jeden pro nainstalovaný balíček, instalovatelný balíček a ty, které lze znovu nainstalovat. Můžeme tisknout / instalovat / přeinstalovat balíčky pomocí níže uvedeného kódu:

pokud pl.nainstalováno:
vytisknout "Instalované balíčky"
pro balení v tříděném (pl.nainstalován):
tisknout bal
pokud pl.k dispozici:
vytisknout "Dostupné balíčky"
pro balení v tříděném (pl.k dispozici):
tisknout bal., bal.repo
pokud pl.přeinstalovat_k dispozici:
vytisknout "Přeinstalovat dostupné balíčky"
pro balení v tříděném (pl.přeinstalovat_k dispozici):
tisknout bal., bal.repo

Podobně jako seznam všech nainstalovaných balíčků můžeme použít:

tisk „\ n“.připojit ([x.název pro x v yb.rpmdb.returnPackages ()])

Instalace balíčků

Instalace balíčků zahrnuje nastavení a provedení transakce. K provádění jednoduchých akcí, jako je instalace / odebrání, používáme 'yb.nainstalovat 'nebo' yb.odebrat 'pro nastavení transakce. Potom vyvoláme 'yb.resolveDeps () 'pro spuštění rozlišení závislostí a' yb.processTransaction () ', která dá YUM pokyn, aby pokračovala a provedla transakci.

Všechny kroky, ale poslední, jsou přípravné a pouze volání metody processTransaction () ve skutečnosti vede k tomu, že dojde k instalaci / odinstalaci. Níže je fragment kódu pro instalaci balíčku.

yb = mňam.YumBase ()
yb.install (name = 'packagename')
yb.vyřešitDeps ()
yb.processTransaction ()

Při provádění těchto transakcí „yb.Objekt tsInfo 'uchovává informace o aktuálním stavu transakce, dokud není potvrzena. Více o tom si můžete přečíst v jeho dokumentaci.

Nastavte úložiště na libovolném místě

Níže uvedený skript vám pomůže nastavit yum pro přístup k úložišti na libovolném místě. Očekává, že adresa URL úložiště bude předána jako argument příkazového řádku.

url = sys.argv [1]
yb = mňam.YumBase ()
pokud ne yb.setCacheDir (force = True, reuse = False):
tisk >> sys.stderr, „Nelze vytvořit tmp. cachedir. "
sys.výstup (1)
yb.repos.disableRepo ('*')
yb.add_enable_repo ('myrepo', [url])

Spuštění skriptu

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

souhrn

V tomto článku jsme se naučili, jak ovládat správce balíčků YUM pomocí jeho python API. Podívali jsme se na možnosti konfigurace i na API pro vyhledávání / vyhledávání na dostupných a nainstalovaných balíčcích a nakonec na způsoby provádění operací správy balíčků, jako je instalace / odinstalování / přeinstalování balíčků.

Tento článek má sloužit jako okno do toho, co je možné prostřednictvím rozhraní yum python API. Ačkoli API není příliš dobře zdokumentováno, dodržuje standardní konvence a funguje předvídatelně. Vyzbrojeni znalostmi schopností YUM a dovedností pythonu je zábavné prozkoumat a naučit se vše, co dokáže. Doufám, že se vám doposud líbilo čtení a že budete pokračovat ve svém průzkumu a aplikaci yum ve svých projektech.

Hry Jak nainstalovat League Of Legends na Ubuntu 14.04
Jak nainstalovat League Of Legends na Ubuntu 14.04
Pokud jste fanouškem League of Legends, pak je to pro vás příležitost otestovat běh League of Legends. Všimněte si, že LOL je podporován na PlayOnLinu...
Hry Nainstalujte si nejnovější strategickou hru OpenRA na Ubuntu Linux
Nainstalujte si nejnovější strategickou hru OpenRA na Ubuntu Linux
OpenRA je herní engine Libre / Free Real Time Strategy, který obnovuje rané hry Westwood, jako je klasický Command & Conquer: Red Alert. Distribuované...
Hry Nainstalujte si nejnovější Dolphin Emulator pro Gamecube a Wii na Linuxu
Nainstalujte si nejnovější Dolphin Emulator pro Gamecube a Wii na Linuxu
Emulátor Dolphin vám umožní hrát vybrané hry Gamecube a Wii na osobních počítačích se systémem Linux (PC). Jako volně dostupný herní emulátor s otevř...