Yum

Interagire con YUM su CentOS usando Python

Interagire con YUM su CentOS usando Python

Cos'è YUM?

YUM è uno strumento di gestione disponibile sulle distribuzioni RedHat e CentOS Linux.  YUM (Yellowdog Updater Modified) dipende dai pacchetti RPM (Red Hat Package Manager) ed è stato creato per consentire la gestione dei pacchetti come parti di un sistema più ampio di repository software invece dei singoli file di pacchetto. YUM è un gestore di pacchetti interattivo in grado di eseguire automaticamente analisi delle dipendenze e aggiornamenti di sistema, oltre a installare nuovi pacchetti, rimuovere vecchi pacchetti, eseguire query su pacchetti esistenti, ecc. Per saperne di più su YUM, fai clic su Qui.

In questo articolo esamineremo i metodi per accedere alla funzionalità yum usando i programmi Python e scopriremo come può essere utile. Per questo tutorial, useremo CENTOS 7 con python 2.7.x e assumerebbe una certa familiarità con le funzionalità di base di Python.

Programmazione con YUM

Iniziamo a imparare a programmare yum usando python guardando un semplice script python che usa yum per interrogare e stampare i nomi dei pacchetti. Ecco qui:

importare il sistema operativo
sistema di importazione
importa yum
yb = yum.YumBase()
yb.setCacheDir()
risultati = yb.pkgSack.returnNewestByNameArch(patterns=["python", “perl”])
per pkg nei risultati:
print "%s %s (%s) \n\t%s" % (pkg.nome, pacchetto.versione, pacchetto.arco, confezione.sommario)

Questo script cerca nei repository YUM i pacchetti che corrispondono al nome "python" e stampa le informazioni sui pacchetti corrispondenti. Esamineremo questo script riga per riga.

Per iniziare a programmare con YUM, dobbiamo importare il pacchetto python 'yum' - questo è installato di default in CENTOS 7. Insieme a 'yum' di solito abbiamo bisogno anche dei pacchetti 'os' e 'sys', quindi un tipico programma Python che usa yum inizierebbe con le seguenti 3 righe.

importare il sistema operativo
sistema di importazione
importa yum

Successivamente, per creare un'istanza yum con cui lavorare, includi la riga sottostante.

yb = yum.YumBase()

Questa è quasi la prima riga di codice funzionale in qualsiasi programma Python che utilizza yum. Questo perché YumBase è la classe base che ospita metodi e oggetti necessari per eseguire tutte le funzioni di gestione dei pacchetti utilizzando yum. Per la struttura dettagliata della classe YumBase, fare riferimento alla sua documentazione.

Esame della configurazione YUM

Una volta che un'istanza di YumBase è disponibile, possiamo usarla per ispezionare la configurazione di yum. Di seguito è riportata una tabella che elenca i comandi più diffusi per elencare i dettagli di configurazione configuration.

Configurazione Utilizzo
stampa yb.conf.config_file_path Stampa il percorso del file per il file di configurazione di yum.
stampa yb.conf.file di registro Per stampare il percorso del file di registro
per io in yb.conf.reposdir: stampa i Per stampare le directory e i file per i repository
stampa yb.conf.skip_broken Il valore è solitamente falso. Quando è impostato su true, i comandi yum agiranno come se fosse stato fornito il parametro -skip-broken.
stampa yb.conf.livello di errore Per impostare il livello di errori che vorresti vedere stampato sullo standard output. È un valore compreso tra 0-10 dove 0 è solo critico, mentre 10 è tutto include debug. Per impostazione predefinita è impostato su 2, ma puoi sovrascriverlo. Se eseguirai uno script, è una buona idea impostarlo su 0. Puoi impostarlo su un valore maggiore come 3 quando esegui il debug dello script stesso.

Interrogazione per i pacchetti

Tornando al nostro script, vediamo che la prossima riga di codice sta configurando una nuova Cache Directory per yum in modo che esegua tutte le attività come utente normale (e anche come utente root in una certa misura - non sarà ancora in grado di alterare i dati in lo yumdb o rpmdb per esempio).

yb.setCacheDir()

Avendo creato un vero oggetto yum ora, possiamo accedere agli attributi pkgSack, rpmdb e repos. Questo ci permette di svolgere le seguenti funzioni:

yb.pkgSack - può essere utilizzato per eseguire query su tutti i repository abilitati

yb.rpmdb - può essere utilizzato per eseguire query sui pacchetti installati

yb.repos - ottiene un oggetto RepositoryStorage che può essere utilizzato per impostare configurazioni specifiche per i repository e può essere utilizzato per abilitare o disabilitare i repository - e.g., yb.repos.enableRepo(), yb.repos.disabilitaRepo() & yb.repos.listEnabled(). Più su questo più tardi.

Per ora approfondiremo le proprietà di pkgSack e rpmdb. Possiamo cercare nei repository YUM e nei pacchetti installati localmente rispettivamente chiamando una delle numerose funzioni fornite dagli attributi pkgSack e rpmdb. Queste funzioni restituiscono "oggetti pacchetto" che contengono informazioni sul pacchetto. Alcune funzioni utili per ottenere gli oggetti del pacchetto sono: returnPackages(), searchPrimaryFields(), seachNevra(), seachName() , returnNewestByNameArch(). Il nostro script utilizza il metodo returnNewstByNameArch per ottenere gli oggetti del pacchetto che corrispondono alle stringhe di pattern "python" o "perl".

Nota che i nomi dei metodi sono gli stessi per entrambi yb.rpmdb e yb.pkgSack. Tuttavia, eseguono le query su domini diversi: rpmdb cerca nel database dei pacchetti RPM installati in locale mentre pkgSack cerca nei repository YUM.

Potremmo, allo stesso modo, elencare i pacchetti di grandi dimensioni installati (dove grandi significa, diciamo che la dimensione è> 10 MB). Il codice yum è:

plist = yb.rpmdb.Pacchetti di ritorno()
l_plist = [p per p in plist se p.dimensione > 1024 * 1024 * 10]
print "Pacchetti installati con dimensione > 10 MB:"
per p in l_plist:
print "%s: %sMB" % (pkg, pkg.taglia / (1024 * 1024))

Questa è fondamentalmente l'essenza dell'uso di Python per accedere a yum. Nel resto dell'articolo approfondiremo le sfumature dell'API del modulo yum e proveremo alcune azioni più complicate come installare / disinstallare pacchetti o impostare il nostro repository.

Nevra, PRCO e Tuple

Non ci sono errori di battitura nell'intestazione: questi sono alcuni termini specifici di yum che semplificano l'identificazione di pacchetti e dipendenze e la comunicazione con altri utenti di yum, inclusi i tuoi script Python.

NEVRA sta per Nome, Epoca, Versione, Rilascio, Architettura e viene utilizzato per identificare in modo univoco un sapore o un'istanza di un pacchetto: questi cinque parametri insieme puntano in modo univoco a un'istanza univoca del pacchetto. Ad esempio, un pacchetto chiamato "python" può avere più versioni come 2.6, 2.7 ecc., e ogni versione potrebbe avere più rilasci per diverse architetture e.g., x86_64, i386 (Nota che la parola architettura qui si riferisce all'architettura della CPU - e.g., i386 è Intel a 32 bit). Insieme, questi cinque rappresentano una combinazione unica ed è indicato come nevra.

PRCO sta per Fornisce/Richiede/Conflitti/Obsoleti che riepilogano i metadati di gestione del pacchetto per l'oggetto pacchetto.

Alcuni metodi API in pkgSack/ rpmdb, come yb.pkgSack.simplePkgList(), yb.pkgSack.packagesByTuple() etc., restituisce le informazioni NEVRA o PRCO come tuple python anziché pkgobjects

Elenca e installa i pacchetti

Simile all'uso del comando "yum list", possiamo usare 'yb.doPackageLists()' per elencare tutti i pacchetti installati/pacchetti disponibili per l'installazione/reinstallazione.

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

Ora plist contiene 3 elenchi di pacchetti: uno ciascuno per il pacchetto installato, il pacchetto installabile e quelli disponibili per la reinstallazione. Possiamo stampare/installare/reinstallare i pacchetti utilizzando il codice seguente:

se per favore.installato:
print "Pacchetti installati"
per pkg in ordinato (pl.installato):
stampa pacchetto
se per favore.a disposizione:
stampa "Pacchetti disponibili"
per pkg in ordinato (pl.a disposizione):
stampa pkg, pkg.repo
se per favore.reinstall_disponibile:
print "Reinstalla i pacchetti disponibili"
per pkg in ordinato (pl.reinstall_disponibile):
stampa pkg, pkg.repo

Allo stesso modo per elencare tutti i pacchetti installati possiamo usare:

stampa “\n”.unisciti([x.nome per x in yb.rpmdb.Pacchetti di ritorno()])

Installazione dei pacchetti

L'installazione dei pacchetti implica l'impostazione e l'esecuzione di una transazione. Per eseguire azioni semplici come installa/rimuovi usiamo 'yb.install' o 'yb.rimuovere' rispettivamente per impostare la transazione. Quindi invochiamo il 'yb.resolveDeps()' per attivare la risoluzione delle dipendenze e 'yb.processTransaction()' per istruire YUM ad andare avanti ed eseguire la transazione.

Tutti i passaggi, tranne l'ultimo, sono preparatori e solo la chiamata al metodo processTransaction() determina effettivamente l'installazione/ disinstallazione. Di seguito è riportato uno snippet di codice per l'installazione del pacchetto.

yb = yum.YumBase()
yb.install(nome='nomepacchetto')
yb.risolvereDeps()
yb.processoTransazione()

Durante l'esecuzione di tali transazioni il 'yb.L'oggetto tsInfo' contiene le informazioni sullo stato corrente della transazione fino a quando non viene eseguito il commit. Puoi leggere di più a riguardo nella sua documentazione.

Imposta un repository in una posizione arbitraria

Lo script sottostante ti aiuta a configurare yum per accedere a un repository in una posizione arbitraria. Si aspetta che l'URL del repository venga passato come argomento della riga di comando.

url = sys.argomento[1]
yb = yum.YumBase()
se non yb.setCacheDir(force=True, reuse=False):
print >>sys.stderr, "Impossibile creare un tmp. cachedir. "
sistema.uscita(1)
yb.repos.disabilitaRepo('*')
yb.add_enable_repo('myrepo', [url])

Per eseguire lo script

script pitone.py url://to/my/repo

Sommario

In questo articolo abbiamo imparato come controllare il gestore di pacchetti YUM usando la sua API Python. Abbiamo esaminato le opzioni di configurazione e le API di query/ricerca sui pacchetti disponibili e installati e infine sui modi per eseguire operazioni di gestione dei pacchetti come l'installazione/disinstallazione/reinstallazione dei pacchetti.

Questo articolo ha lo scopo di servire come una finestra su ciò che è possibile tramite l'API yum python. Sebbene l'API non sia molto ben documentata, segue convenzioni standard e funziona in modo prevedibile. Armati della conoscenza delle capacità di YUM e delle abilità di Python, è divertente esplorare e imparare tutto ciò che può fare. Spero ti sia piaciuto leggere finora e che tu continui con la tua esplorazione e applicazione di yum nei tuoi progetti.

Emula i clic del mouse passando il mouse utilizzando il mouse senza clic in Windows 10
L'uso di un mouse o di una tastiera nella postura sbagliata di un uso eccessivo può causare molti problemi di salute, tra cui tensione, sindrome del t...
Aggiungi i gesti del mouse a Windows 10 utilizzando questi strumenti gratuiti
Negli ultimi anni computer e sistemi operativi si sono notevolmente evoluti greatly. C'è stato un tempo in cui gli utenti dovevano usare i comandi per...
Controlla e gestisci il movimento del mouse tra più monitor in Windows 10
Gestore mouse con doppio display ti consente di controllare e configurare il movimento del mouse tra più monitor, rallentando i suoi movimenti vicino ...