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 yum
utilitá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.
fonte
cat /etc/redhat-release
Na verdade, use-ocat /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./etc/redhat-release
não é a mesma coisa que a$releasever
variável A questão aqui é descobrir o que Yum está substituindo no lugar dessas variáveis? O que está acontecendo programaticamente?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.Respostas:
Se você instalar
yum-utils
, isso lhe dará oyum-debug-dump
que 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:
fonte
yum-debug-dump
parece fazer o que eu preciso. Parece que a informação está toda lá na%%%%YUM INFO
seção. Parece que não consigo fazer as coisas$YUM0-$YUM9
parecerem, mas nunca uso essas variáveis./usr/bin/python -c 'import yum;yb=yum.YumBase();yb.doConfigSetup(init_plugins=False);print yb.conf.yumvar["releasever"]'
Caso alguém acabe aqui, como eu, procurando a resposta equivalente para o dnf no Fedora, eu criei o seguinte linux python:
No Fedora 24, é assim:
fonte
yum variables repo names
. Isso responde à pergunta por enquanto, com a substituição do yum pelo dnf. Ótimo trabalho!Para obter todos eles, você precisará usar código como o mmckinst publicado , mas se você quiser apenas verificar,
$releasever
pode executaryum version nogroups
no RHEL-6.A outra coisa a fazer, no RHEL-6, é apenas criar o seu próprio
/etc/yum/vars
.fonte
/etc/yum/vars
realiza? Além disso, você sabe se isso mudou de RHEL5 para RHEL6?/etc/yum/vars
podem ser encontradas em access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/...E detalhando como $ releasever é atribuído:
A função _getsysver consulta o banco de dados rpm como:
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)
fonte
Outra maneira de ver os resultados da substituição de variáveis é fazer algo assim:
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.
fonte
releasever
.