Так: Як я можу переглянути такі змінні, як $ releasever, $ basearch та $ YUM0?


49

Я налаштовую сховище yum і мені потрібно налагодити деякі URL-адреси у файлі yum.conf. Мені потрібно знати, чому науковий 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

Сторінка yum.conf (5) дає деяку інформацію про ці змінні:

Змінні

Існує ряд змінних, які можна використовувати для полегшення обслуговування файлів конфігурації yum. Вони доступні у значеннях кількох опцій, включаючи ім'я, baseurl та команди.

$ releasever Це буде замінено значенням версії пакета, переліченою в distroverpkg. Це за замовчуванням до версії пакету "redhat-release".

$ arch Це буде замінено на вашу архітектуру, як перелічено os.uname () [4] в Python.

$ basearch Це буде замінено базовою архітектурою в yum. Наприклад, якщо ваша $ арка i686, вашим $ basearch буде i386.

$ YUM0 - $ YUM9 Вони будуть замінені значенням однойменної змінної середовища оболонки. Якщо змінної середовища оболонки не існує, змінна файл конфігурації не буде замінена.

Чи є спосіб переглянути ці змінні за допомогою yumутиліти командного рядка? Я вважаю за краще не шукати версію пакету 'redhat-release' або вручну отримувати значення os.uname () [4] в Python.


'вишукувати версію redhat-release' є тривіальною. cat /etc/redhat-release Власне, використовуйте cat /etc/system-releaseнатомість, оскільки це буде символьним посиланням на / etc / redhat-release, / etc / centos-release, / etc / oel-release, / і т.д. / <все, що використовує науковий Linux>, відповідно.
Xalorous

3
/etc/redhat-release- це не те саме, що і $releaseverзмінна. Тут питання полягає в тому, щоб з'ясувати, що замість цих змінних заміщає Yum? Що відбувається програмно?
Стефан Ласевський

1
'вишукувати версію redhat-release' також НЕ тотож, що і 'cat / etc / redhat-release'. Перший просить версію, тоді як другий розглядає цілком ненадійний і нескінченно змінений файл, якому НІКОЛИ не можна довіряти. rpm -qf /etc/issueє канонічним методом, і він був би методом у LSB, за винятком того, що SuSE не піддавався на збори FSStnd. РІЧНИЙ.
користувач2066657

Відповіді:


71

Якщо ви встановите yum-utils, це дасть вам можливість yum-debug-dumpзаписувати ці змінні та більше інформації про налагодження у файл. Немає можливості писати в stdout, він завжди запише в якийсь файл, що насправді не так корисно.

Це, очевидно, не чудове рішення, тому ось однолінійний пітон можна скопіювати та вставити, який буде друкувати ці змінні в stdout.

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 the string ....
Ледачий кодер

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/…
Стефан Ласєскі

10

На всякий випадок, якщо хтось опиниться тут, як я, шукаючи рівнозначну відповідь для dnf у Fedora, я зрозумів наступного однопластового пітона:

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'}

1
Знайшли це за допомогою пошуку yum variables repo names. Це дає відповідь на питання на даний момент із заміною yum на dnf. Чудова робота!
bgStack15

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-сервер)


0

Ще один спосіб побачити результати змінної підстановки - це зробити щось подібне:

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

Я розмовляв зі змінними yum, щоб контролювати, який клієнт Spacewalk обраний для побудови локального репо, і вважав це корисним, щоб побачити, як інтерпретуються змінні.


Холодно, однак, схоже, цей метод не забезпечує таких змінних releasever.
Стефан Ласевський
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.