Yum: Как я могу просмотреть переменные, такие как $ releasever, $ basearch & $ YUM0?

51

Я настраиваю репозиторий yum, и мне нужно отладить некоторые URL-адреса в файле yum.conf. Мне нужно знать, почему Scientific Linux пытается получить этот URL, когда я ожидал, что он получит другой 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

Страница man yum.conf (5) дает некоторую информацию об этих переменных:

переменные

Существует ряд переменных, которые можно использовать для упрощения обслуживания файлов конфигурации yum. Они доступны в значениях нескольких опций, включая name, baseurl и команды.

$ releasever Это будет заменено значением версии пакета, указанной в distroverpkg. По умолчанию используется версия пакета «redhat-release».

$ arch Это будет заменено вашей архитектурой, как указано os.uname () [4] в Python.

$ basearch Это будет заменено вашей базовой архитектурой в yum. Например, если ваш $ arch равен i686, ваш $ basearch будет i386.

$ YUM0- $ YUM9 Они будут заменены значением переменной окружения оболочки с тем же именем. Если переменная среды оболочки не существует, то переменная файла конфигурации не будет заменена.

Есть ли способ просмотреть эти переменные с помощью yumутилиты командной строки? Я бы предпочел не выискивать версию пакета 'redhat-release' или вручную получать значение os.uname () [4] в Python.

Стефан Ласевский
источник
«Выследить версию RedHat-релиза» тривиально. cat /etc/redhat-release На самом деле, используйте cat /etc/system-releaseвместо этого, поскольку это будет символическая ссылка на / etc / redhat-release, / etc / centos-release, / etc / oel-release, / etc / <все, что научный Linux использует>, в зависимости от ситуации.
Ксалори
3
/etc/redhat-releaseэто не то же самое, что $releaseverпеременная. Вопрос здесь состоит в том, чтобы выяснить, что Yum подставляет вместо этих переменных? Что происходит программно?
Стефан Ласевский,
1
'выискивать версию redhat-release' также НЕ то же самое, что 'cat / etc / redhat-release'. Первый запрашивает версию, тогда как последний просматривает совершенно ненадежный и бесконечно изменяемый файл, которому НИКОГДА не следует доверять. rpm -qf /etc/issueканонический метод, и был бы метод LSB кроме SuSE не двигался с места на встречах FSSTND. Ярли.
user2066657

Ответы:

73

Если вы установите yum-utils, это даст вам, yum-debug-dumpкоторый будет записывать эти переменные и больше отладочной информации в файл. Нет возможности записать в stdout, он всегда будет записывать в какой-то файл, который на самом деле не так уж полезен.

Это, очевидно, не очень хорошее решение, так что вот Python с одной строкой, который вы можете скопировать и вставить, который будет печатать эти переменные в стандартный вывод.

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

Это работает на CentOS 5 и 6, но не на 4. yum написан на python, поэтому модуль yum python уже находится на вашем сервере, не нужно устанавливать что-либо exra.

Вот как это выглядит на 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]# 
Марк Маккинстри
источник
2
yum-debug-dumpкажется, делает то, что мне нужно. Похоже, информация находится там под %%%%YUM INFOразделом. Я не могу создать такие вещи, как $YUM0-$YUM9кажется, но я никогда не использую эти переменные.
Стефан Ласевский
2
Чтобы получить чистое отображение $ releasever в оболочке bash, используйте это:/usr/bin/python -c 'import yum;yb=yum.YumBase();yb.doConfigSetup(init_plugins=False);print yb.conf.yumvar["releasever"]'
Rockallite
Это работает только для системной версии Python - как это работает для дополнительной версии Python "alt-install"?
RCross
что вы делаете, если на самом деле releasever - это $ releasever в строке ...
The Lazy Coder
11

На всякий случай, если кто-нибудь окажется здесь, как я, в поисках эквивалентного ответа для dnf на Fedora, я нашел следующую строку в Python:

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

На Fedora 24 это выглядит так:

{'arch': 'x86_64',
 'basearch': 'x86_64',
 'releasever': '24'}
sysadmiral
источник
1
Нашел это из поиска yum variables repo names. Это отвечает на вопрос на данный момент, с заменой yum на dnf. Отличная работа!
bgStack15
10

Чтобы получить их все, вам нужно использовать код, например, опубликованный mmckinst , но если вы просто хотите проверить, $releaseverвы можете запустить yum version nogroupsна RHEL-6.

Другая вещь, которую нужно сделать в RHEL-6, это просто создать свою собственную /etc/yum/vars.

Джеймс Антилл
источник
можешь уточнить? Что делает создание /etc/yum/vars? Кроме того, вы случайно не знаете, изменилось ли это с RHEL5 на RHEL6?
Стефан Ласевский
1
Вы должны быть в состоянии написать код, который работает на RHEL-5 и RHEL-6, без проблем. Команда версии отсутствует в атм RHEL-5. Что я имел ввиду в / etc / yum / vars (только для RHEL-6), так это то, что вы можете просто создать / etc / yum / vars / foorelease ..., в котором есть ваши собственные данные релиза, или даже просто переопределить системный релизер записав в / etc / yum / vars / releasever.
Джеймс Антилл
Дополнительную информацию /etc/yum/varsможно найти по адресу access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/…
Стефан Ласевский,
4

И подробно рассмотрим, как назначается $ releasever:

Функция _getsysver запросов к базе данных оборотов в минуту , как:

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

Здесь определяется значение "system-release (releasever)" , и оно может быть переопределено distroverpkg в yum.conf

Если запрос не вернул никакого значения, для releasever устанавливается значение «$ releasever» (например, если вы установили distroverpkg = centos-release, но установили rpm redhat-release-server)

adrianlzt
источник
0

Другой способ увидеть результаты подстановки переменных - сделать что-то вроде этого:

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

Я возился с переменными yum, чтобы контролировать, какой клиент spacewalk выбран для построения локального репо, и нашел это полезным, чтобы увидеть, как переменные интерпретируются.

Роберт Б.
источник
Круто, однако, этот метод, похоже, не предоставляет переменные типа releasever.
Стефан Ласевский