Yum : $ releasever, $ basearch 및 $ YUM0과 같은 변수를 어떻게 볼 수 있습니까?


49

yum 저장소를 설정 중이며 yum.conf 파일의 일부 URL을 디버깅해야합니다. Scientific Linux가 다른 URL을 가져올 것으로 예상했을 때 Scientific Linux가이 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]에 나열된 아키텍처로 대체 될 것입니다.

$ basearch 이것은 yum의 기본 아키텍처로 대체됩니다. 예를 들어 $ arch가 i686 인 경우 $ basearch는 i386입니다.

$ YUM0- $ YUM9 이들은 동일한 이름의 쉘 환경 변수 값으로 대체됩니다. 쉘 환경 변수가 없으면 구성 파일 변수가 대체되지 않습니다.

yum명령 줄 유틸리티 를 사용하여 이러한 변수를 볼 수있는 방법이 있습니까? 'redhat-release'패키지 버전을 찾아 보거나 Python에서 os.uname () [4]의 값을 수동으로 얻는 것을 선호하지 않습니다.


'레드햇 릴리즈 버전을 찾아 내라'는 것은 사소한 일입니다. cat /etc/redhat-release 실제로 cat /etc/system-release는 / etc / redhat-release, / etc / centos-release, / etc / oel-release, / etc / <Scientific Linux가 사용하는 모든 것>에 대한 심볼릭 링크이므로 대신 사용하십시오.
Xalorous

3
/etc/redhat-release$releasever변수 와 같은 것이 아닙니다 . 여기서 질문은 이러한 변수 대신 Yum이 대체하는 것을 알아내는 것입니다. 프로그래밍 방식으로 어떤 일이 일어나고 있습니까?
Stefan Lasiewski

1
'redhat-release 버전 찾기'는 'cat / etc / redhat-release'와 동일하지 않습니다. 전자는 버전을 요구하는 반면, 후자는 절대 신뢰할 수없고 무한히 변경 가능한 파일을보고 절대 신뢰할 수 없습니다. rpm -qf /etc/issue표준 방법이며, SuSE가 FSStnd 회의에서 버지 않았다는 점을 제외하고 LSB 방법 이었을 것 입니다. 해마다
user2066657

답변:


71

설치 yum-utils하면 yum-debug-dump해당 변수와 더 많은 디버깅 정보를 파일에 쓸 수 있습니다. stdout에 쓸 수있는 옵션이 없으며 항상 도움이되지 않는 일부 파일에 기록합니다.

이것은 분명히 훌륭한 해결책은 아니므로 여기에 복사하여 붙여 넣을 수있는 파이썬 1 라이너가 있습니다.이 라이너는 변수를 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어쨌든 그런 변수를 사용하지는 않습니다.
Stefan Lasiewski

2
bash 쉘에서 $ releasever 를 깨끗하게 표시하려면 다음을 사용하십시오./usr/bin/python -c 'import yum;yb=yum.YumBase();yb.doConfigSetup(init_plugins=False);print yb.conf.yumvar["releasever"]'
Rockallite

이것은 시스템 버전의 Python에서만 작동합니다. 추가 "alt-install"버전의 Python에서 어떻게 작동합니까?
RCross

releasever가 실제로 $ releasever 인 경우 어떻게해야합니까? ...
게으른 코더

10

그것들을 모두 얻으려면 mmckinst posting 과 같은 코드를 사용해야 하지만 확인하려는 경우 RHEL-6에서 $releasever실행할 수 있습니다 yum version nogroups.

RHEL-6에서해야 할 다른 작업은에서 자신 만의 것을 만드는 것입니다 /etc/yum/vars.


정교하게 할 수 있습니까? 창조는 무엇을 /etc/yum/vars성취합니까? 또한 이것이 RHEL5에서 RHEL6으로 변경되었는지 알고 있습니까?
Stefan Lasiewski

1
문제없이 RHEL-5 및 RHEL-6에서 작동하는 코드를 작성할 수 있어야합니다. 버전 명령이 RHEL-5 atm에 없습니다. / etc / yum / vars (RHEL-6 만 해당)에 대한 의미는 자신의 릴리스 데이터가있는 / etc / yum / vars / foorelease ...를 만들거나 시스템 릴리스를 무시할 수 있다는 것입니다. / etc / yum / vars / releasever에 작성하여.
James Antill


10

Fedora에서 dnf에 대한 동등한 답변을 찾고있는 사람이 나와 같이 여기에있는 경우를 대비하여 다음 파이썬 one-liner를 fathomed했습니다.

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 데이터베이스를 쿼리와 같은 :

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

"system-release (releasever)"값이 여기 에 정의 되어 있으며 yum.conf의 distroverpkg 로 무시 될 수 있습니다.

쿼리가 값을 반환하지 않으면 releasever는 '$ releasever'로 설정됩니다 (예 : distroverpkg = centos-release 를 설정 했지만 rpm redhat-release-server를 설치 한 경우)


0

변수 대체의 결과를 보는 또 다른 방법은 다음과 같이하는 것입니다.

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

로컬 저장소를 만들기 위해 어떤 우주 유영 클라이언트가 선택되는지 제어하기 위해 yum 변수로 땜질하고 있었고 변수가 해석되는 방법을 보는 데 유용하다는 것을 알았습니다.


멋지지만이 방법은와 같은 변수를 제공하지 않는 것 같습니다 releasever.
Stefan Lasiewski
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.