Yum: Como posso visualizar variáveis ​​como $ releasever, $ basearch e $ YUM0?

50

Estou configurando um repositório yum e preciso depurar alguns dos URLs no arquivo yum.conf. Preciso saber por que o Scientific Linux está tentando pegar esse URL, quando esperava pegar outro URL:

# yum install package 
http://192.168.1.100/pub/scientific/6.1/x86_64/repodata/repomd.xml: [Errno 14] PYCURL ERROR 22 - "The requested URL returned error: 404"
Trying other mirror.
Error: Cannot retrieve repository metadata (repomd.xml) for repository: sl. Please verify its path and try again

A página de manual yum.conf (5) fornece algumas informações sobre essas variáveis:

Variáveis

Existem várias variáveis ​​que você pode usar para facilitar a manutenção dos arquivos de configuração do yum. Eles estão disponíveis nos valores de várias opções, incluindo nome, baseurl e comandos.

$ releasever Isso será substituído pelo valor da versão do pacote listado no distroverpkg. O padrão é a versão do pacote 'redhat-release'.

$ arch Isso será substituído pela sua arquitetura, conforme listado por os.uname () [4] no Python.

$ basearch Isso será substituído pela arquitetura básica no yum. Por exemplo, se seu $ arch for i686, sua $ basearch será i386.

$ YUM0- $ YUM9 Estes serão substituídos pelo valor da variável de ambiente shell com o mesmo nome. Se a variável de ambiente do shell não existir, a variável do arquivo de configuração não será substituída.

Existe uma maneira de visualizar essas variáveis ​​usando o yumutilitário de linha de comando? Eu preferiria não procurar a versão do pacote 'redhat-release' ou obter manualmente o valor de os.uname () [4] no Python.

Stefan Lasiewski
fonte
'caçar a versão do redhat-release' é trivial. cat /etc/redhat-release Na verdade, use-o cat /etc/system-release, pois esse será um link simbólico para / etc / redhat-release, / etc / centos-release, / etc / oel-release, / etc / <qualquer que seja o uso científico do Linux>, conforme apropriado.
Xalorous 19/10/19
3
/etc/redhat-releasenão é a mesma coisa que a $releasevervariável A questão aqui é descobrir o que Yum está substituindo no lugar dessas variáveis? O que está acontecendo programaticamente?
Stefan Lasiewski
11
'caçar a versão do redhat-release' também NÃO é o mesmo que 'cat / etc / redhat-release'. O primeiro solicita uma versão, enquanto o segundo exibe um arquivo completamente não confiável e infinitamente mutável, que NUNCA deve ser confiável. rpm -qf /etc/issueé o método canônico e teria sido o método no LSB, exceto se o SuSE não se moveu nas reuniões do FSStnd. YARLY.
user2066657

Respostas:

72

Se você instalar yum-utils, isso lhe dará o yum-debug-dumpque gravará essas variáveis ​​e mais informações de depuração em um arquivo. Não há opção para gravar no stdout, ele sempre será gravado em algum arquivo que realmente não é tão útil.

Obviamente, essa não é uma ótima solução, então aqui está um liner python que você pode copiar e colar e imprimir essas variáveis ​​no stdout.

python -c 'import yum, pprint; yb = yum.YumBase(); pprint.pprint(yb.conf.yumvar, width=1)'

Isso funciona no CentOS 5 e 6, mas não no 4. O yum é escrito em python, portanto o módulo yum python já está no seu servidor, sem a necessidade de instalar nada exra.

Aqui está o que parece no CentOS 5:

[root@somebox]# python -c 'import yum, pprint; yb = yum.YumBase(); pprint.pprint(yb.conf.yumvar, width=1)'
{'arch': 'ia32e',
 'basearch': 'x86_64',
 'releasever': '5',
 'yum0': '200',
 'yum5': 'foo'}
[root@somebox]# 
Mark McKinstry
fonte
2
yum-debug-dumpparece fazer o que eu preciso. Parece que a informação está toda lá na %%%%YUM INFOseção. Parece que não consigo fazer as coisas $YUM0-$YUM9parecerem, mas nunca uso essas variáveis.
Stefan Lasiewski
2
Para obter uma exibição limpa de $ releasever no shell bash, use o seguinte:/usr/bin/python -c 'import yum;yb=yum.YumBase();yb.doConfigSetup(init_plugins=False);print yb.conf.yumvar["releasever"]'
Rockallite
Isso funciona apenas para a versão do sistema do Python - como você consegue isso para uma versão adicional "alt-install" do Python?
RCross
o que você faz se releasever é realmente $ releasever a string ....
The Lazy Coder
11

Caso alguém acabe aqui, como eu, procurando a resposta equivalente para o dnf no Fedora, eu criei o seguinte linux python:

python3 -c 'import dnf, pprint; db = dnf.dnf.Base(); pprint.pprint(db.conf.substitutions,width=1)'

No Fedora 24, é assim:

{'arch': 'x86_64',
 'basearch': 'x86_64',
 'releasever': '24'}
sysadmiral
fonte
11
Encontrei isso na pesquisa yum variables repo names. Isso responde à pergunta por enquanto, com a substituição do yum pelo dnf. Ótimo trabalho!
precisa saber é o seguinte
10

Para obter todos eles, você precisará usar código como o mmckinst publicado , mas se você quiser apenas verificar, $releaseverpode executar yum version nogroupsno RHEL-6.

A outra coisa a fazer, no RHEL-6, é apenas criar o seu próprio /etc/yum/vars.

James Antill
fonte
Você pode elaborar? O que a criação /etc/yum/varsrealiza? Além disso, você sabe se isso mudou de RHEL5 para RHEL6?
Stefan Lasiewski
11
Você deve conseguir escrever código que funcione no RHEL-5 e RHEL-6, sem problemas. O comando version não está no RHEL-5 atm. O que eu quis dizer sobre / etc / yum / vars (apenas RHEL-6) é que você pode criar um / etc / yum / vars / foorelease ... que possui seus próprios dados de liberação ou apenas substituir o liberador do sistema escrevendo para / etc / yum / vars / release.
James Antill
Mais informações sobre /etc/yum/varspodem ser encontradas em access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/...
Stefan Lasiewski
4

E detalhando como $ releasever é atribuído:

A função _getsysver consulta o banco de dados rpm como:

rpm -q --provides $(rpm -q --whatprovides "system-release(releasever)") | grep "system-release(releasever)" | cut -d ' ' -f 3

O valor "system-release (releasever)" é definido aqui e pode ser substituído pelo distroverpkg no yum.conf

Se a consulta não retornar nenhum valor, releasever será definido como '$ releasever' (por exemplo, se você definir distroverpkg = centos-release, mas tiver instalado o rpm redhat-release-server)

adrianlzt
fonte
0

Outra maneira de ver os resultados da substituição de variáveis ​​é fazer algo assim:

yum-config-manager -c /etc/reposyncb.conf  | grep -i spacewalk

Eu estava mexendo com variáveis ​​yum para controlar qual cliente de caminhada no espaço é selecionado para criar um repositório local e achei isso útil para ver como as variáveis ​​estão sendo interpretadas.

Robert B.
fonte
Legal, no entanto, esse método não parece fornecer variáveis ​​como releasever.
27613 Stefan Lasiewski #