it-swarm-eu.dev

Yum: Jak mohu zobrazit proměnné jako $ releasever, $ basearch a $ YUM0?

Zřídím úložiště yum a musím ladit některé adresy URL v souboru yum.conf. Potřebuji vědět, proč se vědecký Linux pokouší chytit tuto URL, když jsem očekával, že si vezme další 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) manpage poskytuje některé informace o těchto proměnných:

Proměnné

Existuje řada proměnných, které můžete použít ke snadnější údržbě konfiguračních souborů společnosti yum. Jsou k dispozici v hodnotách několika možností, včetně názvu, baseurl a příkazů.

$ releasever Toto bude nahrazeno hodnotou verze balíčku uvedeného v distroverpkg. Toto je výchozí verze balíčku 'redhat-release'.

$ Arch Toto bude nahrazeno vaší architekturou, jak je uvedeno v os.uname () [4] v Pythonu.

$ basearch To bude nahrazeno vaší základní architekturou v yum. Například, pokud váš $ Arch je i686, váš $ basearch bude i386.

$ YUM0- $ YUM9 Budou nahrazeny hodnotou proměnné prostředí Shell se stejným názvem. Pokud proměnná prostředí Shell neexistuje, nebude proměnná konfiguračního souboru nahrazena.

Existuje způsob, jak zobrazit tyto proměnné pomocí nástroje příkazového řádku yum? Raději bych nenutil verzi balíčku 'redhat-release', nebo bych v Pythonu ručně získal hodnotu os.uname () [4].

62
Stefan Lasiewski

Pokud nainstalujete yum-utils, Získáte yum-debug-dump, Který zapíše tyto proměnné a další informace o ladění do souboru. Není možné zapisovat do stdout, vždy to zapíše do nějakého souboru, který opravdu není tak užitečný.

To zjevně není skvělé řešení, takže zde je jednorázová vložka python jeden řádek, kterou můžete kopírovat a vložit), která tyto proměnné vytiskne.

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

Funguje to na CentOS 5 a 6, ale ne na 4. yum je napsáno v pythonu, takže yum python modul je již na vašem serveru, není třeba nic instalovat exra).

Jak to vypadá na CentOS 5:

[[email protected]]# 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'}
[[email protected]]# 
80
Mark McKinstry

Pro případ, že by tady někdo skončil, jako jsem já, hledal ekvivalentní odpověď pro dnf na Fedoře, pochopil jsem následující python jednosložková loď:

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

Na Fedoře 24 to vypadá takto:

{'Arch': 'x86_64',
 'basearch': 'x86_64',
 'releasever': '24'}
14
sysadmiral

Chcete-li získat všechny z nich, musíte použít kód jako mmckinst posted , ale pokud chcete pouze zkontrolovat $releasever můžete spustit yum version nogroups na RHEL-6.

Další věc, kterou musíte udělat v RHEL-6, je vytvořit si vlastní v /etc/yum/vars.

11
James Antill

A podrobněji, jak je přiděleno uvolnění $:

function _getsysver dotazuje databázi rpm jako:

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

Hodnota „system-release (releasever)“ je definována zde a může být potlačena distroverpkg v yum.conf

Pokud dotaz nevrátil žádnou hodnotu, je releasever nastaven na '$ releasever' (například pokud nastavíte distroverpkg = centos-release , ale nainstalovali jste rpm redhat-release-server)

4
adrianlzt

Získání hodnoty pro $Arch By mělo být opravdu tak jednoduché jako Arch="$(Arch)" nebo Arch="$(uname --machine)", ale pokud opravdu chcete vědět, jaká je hodnota yum pro $Arch Je, zkuste:

bash-4.2# Arch="$(python -c 'from rpmUtils import Arch; print(Arch.getCanonArch());')";
bash-4.2# declare -p Arch
declare -- Arch="ia32e"

Získání hodnot pro ostatní se liší, aniž byste museli používat Python je o něco jednodušší).

Možnost 1:

bash-4.2# distroverpkg="$(awk --field-separator \= '/distroverpkg/{print$2}' /etc/yum.conf)";
bash-4.2# releasever="$(rpm --query --queryformat '%{VERSION}\n' "${distroverpkg:-redhat-release}")";
bash-4.2# basearch="${HOSTTYPE:-$(uname --machine)}";
bash-4.2# declare -p distroverpkg releasever basearch
declare -- distroverpkg="centos-release"
declare -- releasever="7"
declare -- basearch="x86_64"

Varianta 2:

bash-4.2# releasever="$(rpm --query --file --queryformat '%{VERSION}\n' /etc/system-release)";
bash-4.2# basearch="$(rpm --query --queryformat '%{Arch}\n' "kernel-$(uname --kernel-release)")";
bash-4.2# declare -p releasever basearch
declare -- releasever="7"
declare -- basearch="x86_64"

Poznámka: Příkazy jsou pro přehlednost zobrazeny pomocí long-opts (Je-li k dispozici).

0
bfs

Dalším způsobem, jak vidět výsledky proměnné substituce, je udělat něco takového:

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

Hrál jsem s proměnnými yum, abych určil, který klient Spacewalk je vybrán pro vytvoření lokálního repo, a zjistil jsem, že je užitečné vidět, jak jsou proměnné interpretovány.

0
Robert B.