Yum

Interagindo com YUM no CentOS usando Python

Interagindo com YUM no CentOS usando Python

O que é YUM?

YUM é uma ferramenta de gerenciamento que está disponível nas distros RedHat e CentOS Linux.  YUM (Yellowdog Updater Modified) é dependente de pacotes RPM (Red Hat Package Manager) e foi criado para permitir o gerenciamento de pacotes como partes de um sistema maior de repositórios de software em vez de arquivos de pacotes individuais. YUM é um gerenciador de pacotes interativo que pode realizar automaticamente análises de dependências e atualizações do sistema, junto com a instalação de novos pacotes, remoção de pacotes antigos, realização de consultas em pacotes existentes, etc. Para saber mais sobre o YUM, clique aqui.

Neste artigo, veremos os métodos de acesso à funcionalidade do yum usando programas Python e descobriremos como isso pode ser útil. Para este tutorial, usaremos o CENTOS 7 executando python 2.7.xe assumiria alguma familiaridade com os recursos básicos do Python.

Programando com YUM

Vamos começar a aprender sobre a programação do yum usando python observando um script python simples que usa o yum para consultar e imprimir nomes de pacotes. Aqui está:

importar os
import sys
importar yum
yb = yum.YumBase ()
yb.setCacheDir ()
resultados = yb.pkgSack.returnNewestByNameArch (padrões = ["python", “perl”])
para pacote nos resultados:
imprimir "% s% s (% s) \ n \ t% s"% (pacote.nome, pacote.versão, pacote.arco, pacote.resumo)

Este script procura nos repositórios YUM por pacotes que correspondam ao nome “python” e imprime informações sobre o (s) pacote (s) correspondente (s). Vamos examinar este script linha por linha.

Para iniciar a programação com YUM, precisamos importar o pacote python 'yum' - instalado por padrão no CENTOS 7. Junto com 'yum' geralmente precisamos dos pacotes 'os' e 'sys' - então um programa python típico usando yum começaria com as seguintes 3 linhas.

importar os
import sys
importar yum

Em seguida, para criar uma instância do yum para trabalhar, inclua a linha abaixo.

yb = yum.YumBase ()

Esta é quase a primeira linha de código funcional em qualquer programa Python usando yum. Isso porque YumBase é a classe base que abriga métodos e objetos necessários para executar todas as funções de gerenciamento de pacotes usando yum. Para a estrutura detalhada da classe YumBase, consulte sua documentação.

Examinando a configuração YUM

Assim que uma instância de YumBase estiver disponível, podemos usá-la para inspecionar a configuração do yum. Abaixo está uma tabela que lista os comandos populares para listar os detalhes de configuração.

Configuração Uso
imprimir yb.conf.config_file_path Imprime o caminho do arquivo para o arquivo de configuração do yum.
imprimir yb.conf.arquivo de log Para imprimir o caminho do arquivo de log
para eu em yb.conf.reposdir: print i Para imprimir os diretórios e arquivos para os repositórios
imprimir yb.conf.skip_broken O valor geralmente é falso. Quando definido como verdadeiro, os comandos yum agirão como se o parâmetro -skip-broken fosse fornecido.
imprimir yb.conf.nível de erro Para definir o nível de erros que você gostaria de ver impresso na saída padrão. É um valor entre 0-10 onde 0 é apenas crítico, enquanto 10 é tudo inclui depuração. Por padrão, é definido como 2, mas você pode substituí-lo. Se você estiver executando em um script, é uma boa ideia definir isso como 0. Você pode definir isso para um valor maior como 3 quando estiver depurando o próprio script.

Consultando pacotes

Voltando ao nosso script, vemos que a próxima linha de código está configurando um novo diretório de cache para o yum para que ele execute todas as tarefas como um usuário normal (e também como o usuário root até certo ponto - ainda não será capaz de alterar os dados no o yumdb ou rpmdb, por exemplo).

yb.setCacheDir ()

Tendo criado um objeto yum real agora, podemos acessar os atributos pkgSack, rpmdb e repos. Isso nos permite realizar as seguintes funções:

yb.pkgSack - pode ser usado para realizar consultas em todos os repositórios habilitados

yb.rpmdb - pode ser usado para realizar consultas nos pacotes instalados

yb.repos - obtém um objeto RepositoryStorage que pode ser usado para definir configurações específicas para os repositórios e pode ser usado para habilitar ou desabilitar repositórios - e.g., yb.repos.enableRepo (), yb.repos.disableRepo () & yb.repos.listEnabled (). Mais sobre isso depois.

Por enquanto, vamos nos aprofundar nas propriedades pkgSack e rpmdb. Podemos pesquisar os repositórios YUM e os pacotes instalados localmente, respectivamente, chamando uma das várias funções fornecidas pelos atributos pkgSack e rpmdb. Essas funções retornam "objetos de pacote" que contêm informações sobre o pacote. Algumas funções úteis para obter os objetos do pacote são: returnPackages (), searchPrimaryFields (), seachNevra (), seachName (), returnNewestByNameArch (). Nosso script usa o método returnNewstByNameArch para obter os objetos do pacote correspondentes às strings de padrão “python” ou “perl”.

Observe que os nomes dos métodos são iguais para yb.rpmdb e yb.pkgSack. No entanto, eles realizam as consultas em domínios diferentes - o rpmdb pesquisa o banco de dados de pacotes RPM instalados localmente, enquanto o pkgSack pesquisa os repositórios YUM.

Poderíamos, da mesma forma, listar os grandes pacotes instalados (onde grande significa, digamos, o tamanho é> 10 MB). O código yum é:

plist = yb.rpmdb.returnPackages ()
l_plist = [p para p em plist se p.tamanho> 1024 * 1024 * 10]
imprimir "Pacotes instalados com tamanho> 10 MB:"
para p em l_plist:
imprimir "% s:% sMB"% (pacote, pacote.tamanho / (1024 * 1024))

Essa é basicamente a essência de usar python para acessar o yum. No resto do artigo, vamos nos aprofundar nas nuances da API do módulo yum e experimentar mais algumas ações de complicação, como instalar / desinstalar pacotes ou configurar nosso próprio repositório.

Nevra, PRCO e Tuplas

Não há erro de digitação no título - esses são alguns termos específicos do yum que tornam a identificação de pacotes e dependências mais fácil, bem como a comunicação deles com outros usuários do yum, incluindo seus scripts python.

NEVRA significa Nome, Época, Versão, Lançamento, Arquitetura e é usado para identificar exclusivamente um sabor ou instância de um pacote - esses cinco parâmetros juntos apontam inequivocamente para uma instância única do pacote. Por exemplo, um pacote chamado “python” pode ter várias versões como 2.6, 2.7 etc., e cada versão pode ter vários lançamentos para diferentes arquiteturas e.g., x86_64, i386 (Observe que a palavra arquitetura aqui se refere à arquitetura da CPU - e.g., i386 é Intel de 32 bits). Juntos, esses cinco representam uma combinação única e são conhecidos como nevra.

PRCO significa Fornece / Requer / Conflitos / Obsoletos, que resume os metadados de gerenciamento de pacote para o objeto de pacote.

Certos métodos de API em pkgSack / rpmdb, como yb.pkgSack.simplePkgList (), yb.pkgSack.packagesByTuple () etc., retornar informações NEVRA ou PRCO como tuplas python em vez de pkgobjects

Listar e instalar pacotes

Semelhante ao comando “yum list”, podemos usar 'yb.doPackageLists () 'para listar todos os pacotes instalados / pacotes disponíveis para instalação / reinstalação.

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

Agora plist contém 3 listas de pacotes - uma para cada pacote instalado, pacote instalável e aqueles disponíveis para reinstalação. Podemos imprimir / instalar / reinstalar pacotes usando o código abaixo:

se pl.instalado:
imprimir "Pacotes Instalados"
para pacote em classificado (pl.instalado):
imprimir pacote
se pl.acessível:
imprimir "Pacotes Disponíveis"
para pacote em classificado (pl.acessível):
imprimir pacote, pacote.repo
se pl.reinstalar_disponível:
imprimir "Reinstalar Pacotes Disponíveis"
para pacote em classificado (pl.reinstalar_disponível):
imprimir pacote, pacote.repo

Da mesma forma, para listar todos os pacotes instalados, podemos usar:

imprimir “\ n”.junte-se ([x.nome para x em yb.rpmdb.returnPackages ()])

Instalando pacotes

Instalar pacotes envolve configurar e executar uma transação. Para realizar ações simples, como instalar / remover, usamos o 'yb.instalar 'ou' yb.remove 'respectivamente para configurar a transação. Em seguida, invocamos o 'yb.resolveDeps () 'para acionar a resolução de dependências e' yb.processTransaction () 'para instruir o YUM a prosseguir e executar a transação.

Todas as etapas, exceto a última, são preparatórias e apenas a chamada ao método processTransaction () realmente resulta na instalação / desinstalação. Abaixo está um snippet de código para instalação de pacote.

yb = yum.YumBase ()
yb.instalar (nome = 'nomedopacote')
yb.resolveDeps ()
yb.processTransaction ()

Durante a execução de tais transações, o 'yb.O objeto tsInfo 'contém as informações sobre o status atual da transação até que seja confirmado. Você pode ler mais sobre isso em sua documentação.

Configure um repositório em um local arbitrário

O script abaixo ajuda você a configurar o yum para acessar um repositório em um local arbitrário. Ele espera que a URL do repositório seja passada como o argumento da linha de comando.

url = sys.argv [1]
yb = yum.YumBase ()
se não yb.setCacheDir (force = True, reuse = False):
imprimir >> sys.stderr, "Não é possível criar um tmp. cachedir. "
sys.saída (1)
yb.repos.disableRepo ('*')
yb.add_enable_repo ('myrepo', [url])

Para executar o script

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

Resumo

Neste artigo, aprendemos como controlar o gerenciador de pacotes YUM usando sua API python. Vimos as opções de configuração, bem como as APIs de consulta / pesquisa nos pacotes disponíveis e instalados e, finalmente, as maneiras de realizar operações de gerenciamento de pacotes, como instalar / desinstalar / reinstalar pacotes.

Este artigo tem como objetivo servir como uma janela para o que é possível por meio da API do yum python. Embora a API não seja muito bem documentada, ela segue as convenções padrão e funciona de maneira previsível. Armado com o conhecimento das capacidades e habilidades do Python do YUM, é divertido explorar e aprender tudo o que pode fazer. Espero que você tenha gostado de ler até agora e que continue com sua exploração e aplicação do yum em seus projetos.

Como alterar os botões esquerdo e direito do mouse no PC com Windows 10
É normal que todos os dispositivos de mouse de computador sejam ergonomicamente projetados para usuários destros. Mas existem dispositivos de mouse di...
Emular cliques do mouse passando o mouse usando o mouse sem cliques no Windows 10
Usar um mouse ou teclado na postura errada de uso excessivo pode resultar em muitos problemas de saúde, incluindo tensão, síndrome do túnel do carpo e...
Adicione gestos do mouse ao Windows 10 usando essas ferramentas gratuitas
Nos últimos anos, os computadores e sistemas operacionais evoluíram muito. Houve um tempo em que os usuários tinham que usar comandos para navegar pel...