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ą yum
narzędzia wiersza polecenia? Wolałbym nie wyśledzić wersji pakietu „redhat-release”, lub ręcznie uzyskać wartość os.uname () [4] w Pythonie.
źródło
cat /etc/redhat-release
Właściwie, użyjcat /etc/system-release
zamiast 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./etc/redhat-release
to nie to samo co$releasever
zmienna. Pytanie brzmi: dowiedzieć się, co zastępuje Yum zamiast tych zmiennych? Co się dzieje programowo?rpm -qf /etc/issue
jest metodą kanoniczną i byłaby to metoda w LSB, z tym że SuSE nie poruszył się podczas spotkań FSStnd. YARLY.Odpowiedzi:
Jeśli zainstalujesz
yum-utils
, da ci to,yum-debug-dump
co 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:
źródło
yum-debug-dump
wydaje się robić to, czego potrzebuję. Wygląda na to, że informacje znajdują się w%%%%YUM INFO
sekcji. Nie mogę sprawić, żeby coś się$YUM0-$YUM9
pojawiło, ale i tak nigdy nie używam tych zmiennych./usr/bin/python -c 'import yum;yb=yum.YumBase();yb.doConfigSetup(init_plugins=False);print yb.conf.yumvar["releasever"]'
Aby je wszystkie zdobyć, musisz użyć kodu takiego jak mmckinst , ale jeśli chcesz tylko sprawdzić
$releasever
, możesz uruchomićyum version nogroups
na RHEL-6.Inną rzeczą do zrobienia w RHEL-6 jest po prostu stworzenie własnego
/etc/yum/vars
.źródło
/etc/yum/vars
? Czy wiesz, czy zmieniło się to z RHEL5 na RHEL6?/etc/yum/vars
można znaleźć na access.redhat.com/knowledge/docs/en-US/Red_Hat_Enterprise_Linux/…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:
W Fedorze 24 wygląda to tak:
źródło
yum variables repo names
. To na razie odpowiada na pytanie, zastępując yum dnf. Świetna robota!I drążenie w dół, jak przypisany jest $ releasever:
Funkcja _getsysver kwerendy bazy danych rpm jak:
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)
źródło
Innym sposobem, aby zobaczyć wyniki podstawienia zmiennych, jest zrobienie czegoś takiego:
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.
źródło
releasever
.