Mniam: Jak wyświetlić zmienne takie jak $ releasever, $ basearch i $ YUM0?


49

Konfiguruję repozytorium yum i muszę debugować niektóre adresy URL w pliku yum.conf. Muszę wiedzieć, dlaczego Scientific Linux próbuje pobrać ten adres URL, gdy spodziewałem się, że pobierze inny adres 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

Strona podręcznika yum.conf (5) podaje pewne informacje o tych zmiennych:

Zmienne

Istnieje wiele zmiennych, których można użyć w celu ułatwienia konserwacji plików konfiguracyjnych yum. Są one dostępne w wartościach kilku opcji, w tym nazwy, bazy danych i poleceń.

$ releasever Zostanie to zastąpione wartością wersji pakietu wymienioną w distroverpkg. Domyślnie jest to wersja pakietu „redhat-release”.

$ arch Zostanie to zastąpione twoją architekturą wymienioną przez os.uname () [4] w Pythonie.

$ basearch Zostanie to zastąpione twoją podstawową architekturą w yum. Na przykład, jeśli twój $ arch to i686, twoim $ basearch będzie i386.

$ YUM0- $ YUM9 Zostaną one zastąpione wartością zmiennej środowiskowej powłoki o tej samej nazwie. Jeśli zmienna środowiskowa powłoki nie istnieje, zmienna pliku konfiguracyjnego nie zostanie zastąpiona.

Czy istnieje sposób przeglądania tych zmiennych za pomocą yumnarzędzia wiersza polecenia? Wolałbym nie wyśledzić wersji pakietu „redhat-release”, lub ręcznie uzyskać wartość os.uname () [4] w Pythonie.


„polowanie na wersję redhat-release” jest banalne. cat /etc/redhat-release Właściwie, użyj cat /etc/system-releasezamiast tego, ponieważ będzie to dowiązanie symboliczne do / etc / redhat-release, / etc / centos-release, / etc / oel-release, / etc / <cokolwiek naukowy Linux używa>, odpowiednio.
Xalorous,

3
/etc/redhat-releaseto nie to samo co $releaseverzmienna. Pytanie brzmi: dowiedzieć się, co zastępuje Yum zamiast tych zmiennych? Co się dzieje programowo?
Stefan Lasiewski,

1
„polowanie na wersję redhat-release” również NIE jest tym samym, co „cat / etc / redhat-release”. Pierwsza z nich prosi o wersję, podczas gdy druga wyświetla całkowicie zawodny i nieskończenie zmienny plik, któremu NIGDY nie należy ufać. rpm -qf /etc/issuejest metodą kanoniczną i byłaby to metoda w LSB, z tym że SuSE nie poruszył się podczas spotkań FSStnd. YARLY.
user2066657,

Odpowiedzi:


71

Jeśli zainstalujesz yum-utils, da ci to, yum-debug-dumpco zapisze te zmienne i więcej informacji o debugowaniu do pliku. Nie ma opcji zapisu na standardowe wyjście, zawsze zapisuje do jakiegoś pliku, co tak naprawdę nie jest tak pomocne.

To oczywiście nie jest świetne rozwiązanie, więc tutaj jest jedno-liniowy python, który można skopiować i wkleić, aby wydrukować te zmienne na standardowe wyjście.

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

Działa to na CentOS 5 i 6, ale nie 4. yum jest napisane w pythonie, więc moduł yum python jest już na twoim serwerze, nie musisz instalować niczego exra.

Oto jak to wygląda na 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-dumpwydaje się robić to, czego potrzebuję. Wygląda na to, że informacje znajdują się w %%%%YUM INFOsekcji. Nie mogę sprawić, żeby coś się $YUM0-$YUM9pojawiło, ale i tak nigdy nie używam tych zmiennych.
Stefan Lasiewski

2
Aby uzyskać czysty wyświetlacz $ releasever w powłoce bash, użyj tego:/usr/bin/python -c 'import yum;yb=yum.YumBase();yb.doConfigSetup(init_plugins=False);print yb.conf.yumvar["releasever"]'
Rockallite

Działa to tylko w przypadku systemowej wersji Pythona - w jaki sposób działa to w przypadku dodatkowej wersji Pythona w wersji „alt-install”?
RCross

co robisz, jeśli releasever jest w rzeczywistości $ releasever string ....
The Lazy Coder

10

Aby je wszystkie zdobyć, musisz użyć kodu takiego jak mmckinst , ale jeśli chcesz tylko sprawdzić $releasever, możesz uruchomić yum version nogroupsna RHEL-6.

Inną rzeczą do zrobienia w RHEL-6 jest po prostu stworzenie własnego /etc/yum/vars.


czy możesz rozwinąć? Co robi tworzenie /etc/yum/vars? Czy wiesz, czy zmieniło się to z RHEL5 na RHEL6?
Stefan Lasiewski

1
Powinieneś być w stanie napisać kod, który działa na RHEL-5 i RHEL-6, bez problemu. Komendy wersji nie ma w bankomacie RHEL-5. Chodziło mi o / etc / yum / vars (tylko RHEL-6), że możesz po prostu utworzyć plik / etc / yum / vars / foorelease ..., który zawiera własne dane o wydaniu, lub nawet po prostu zastąpić system releaseverver pisząc do / etc / yum / vars / releasever.
James Antill

Więcej informacji na temat /etc/yum/varsmożna znaleźć na access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/…
Stefan Lasiewski

10

Na wypadek, gdyby ktoś skończył tutaj, tak jak ja, szukając równoważnej odpowiedzi dla dnf na Fedorze, zrozumiałem następujący linijka python:

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

W Fedorze 24 wygląda to tak:

{'arch': 'x86_64',
 'basearch': 'x86_64',
 'releasever': '24'}

1
Znaleziono to podczas wyszukiwania yum variables repo names. To na razie odpowiada na pytanie, zastępując yum dnf. Świetna robota!
bgStack15

4

I drążenie w dół, jak przypisany jest $ releasever:

Funkcja _getsysver kwerendy bazy danych rpm jak:

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

W tym miejscu zdefiniowano wartość „system-release (releasever)” , która może zostać zastąpiona przez distroverpkg w yum.conf

Jeśli zapytanie nie zwróci żadnej wartości, releasever jest ustawione na „$ releasever” (na przykład, jeśli ustawisz distroverpkg = centos-release, ale zainstalowałeś serwer redhat-release-rpm)


0

Innym sposobem, aby zobaczyć wyniki podstawienia zmiennych, jest zrobienie czegoś takiego:

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

Majstrowałem przy zmiennych yum, aby kontrolować, który klient spacewalk jest wybrany do budowy lokalnego repozytorium, i uznałem to za przydatne, aby zobaczyć, jak zmienne są interpretowane.


Fajnie, jednak ta metoda nie wydaje się zapewniać takich zmiennych releasever.
Stefan Lasiewski
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.