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].
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]]#
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'}
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
.
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)
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).
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.