Yum: $releasever, $basearch 및 $YUM0과 같은 변수를 보는 방법은 무엇입니까?

Yum: $releasever, $basearch 및 $YUM0과 같은 변수를 보는 방법은 무엇입니까?

yum 저장소를 설정 중이고 yum.conf 파일에서 일부 URL을 디버그해야 합니다. Scientific Linux가 다른 URL을 크롤링할 것으로 예상되는데 왜 이 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 구성 파일의 유지 관리를 단순화하는 데 사용할 수 있는 많은 변수가 있습니다. name, baseurl 및 command를 포함한 여러 옵션 값으로 사용할 수 있습니다.

$releasever distroverpkg에 나열된 패키지 버전의 값으로 대체됩니다. 기본값은 "redhat-release" 패키지 버전입니다.

$arch 이는 Python의 os.uname()[4]에 나열된 아키텍처로 대체됩니다.

$basearch 이는 yum의 기본 스키마로 대체됩니다. 예를 들어 $arch가 i686이면 $basearch는 i386이 됩니다.

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

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

답변1

이 답변이 2011년에 작성되었을 때 당시 RHEL/CentOS의 모든 버전에는 Python용 json이 기본적으로 설치되어 있지 않았기 때문에 pprint를 사용하여 이를 멋지게 인쇄했습니다.

2020년이며 RHEL/CentOS의 모든 최신 버전은 기본적으로 Python용 json을 제공합니다. json을 사용하도록 답변이 업데이트되고 RHEL/CentOS 8을 포함하도록 수정되었습니다.@sysadmiral의 답변페도라의 경우.

RHEL/센트OS 8:

/usr/libexec/platform-python -c 'import dnf, json; db = dnf.dnf.Base(); print(json.dumps(db.conf.substitutions, indent=2))'

RHEL/CentOS 6 및 7

python -c 'import yum, json; yb = yum.YumBase(); print json.dumps(yb.conf.yumvar, indent=2)'

RHEL/CentOS 4 및 5

# if you install python-simplejson
python -c 'import yum, simplejson as json; yb = yum.YumBase(); print json.dumps(yb.conf.yumvar, indent=2)'

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

출력 예:

# CentOS 8:
# ---
[root@0928d3917e32 /]# /usr/libexec/platform-python -c 'import dnf, json; db = dnf.dnf.Base(); print(json.dumps(db.conf.substitutions, indent=2))'
Failed to set locale, defaulting to C
{
  "arch": "x86_64",
  "basearch": "x86_64",
  "releasever": "8"
}
[root@0928d3917e32 /]# 


# CentOS 7:
# ---
[root@c41adb7f40c2 /]# python -c 'import yum, json; yb = yum.YumBase(); print json.dumps(yb.conf.yumvar, indent=2)'
Loaded plugins: fastestmirror, ovl
{
  "uuid": "cb5f5f60-d45c-4270-8c36-a4e64d2dece4", 
  "contentdir": "centos", 
  "basearch": "x86_64", 
  "infra": "container", 
  "releasever": "7", 
  "arch": "ia32e"
}
[root@c41adb7f40c2 /]# 

# CentOS 6:
# ---
[root@bfd11c9a0880 /]# python -c 'import yum, json; yb = yum.YumBase(); print json.dumps(yb.conf.yumvar, indent=2)'
Loaded plugins: fastestmirror, ovl
{
  "releasever": "6", 
  "basearch": "x86_64", 
  "arch": "ia32e", 
  "uuid": "3e0273f1-f5b6-481b-987c-b5f21dde4310", 
  "infra": "container"
}
[root@bfd11c9a0880 /]# 

원래 답변은 다음과 같습니다.

이를 설치하면 이러한 변수와 추가 디버깅 정보를 파일에 쓸 수 있는 기능이 yum-utils제공됩니다 . yum-debug-dumpstdout에 쓸 수 있는 옵션은 없습니다. 항상 일부 파일에 쓰기 때문에 실제로는 도움이 되지 않습니다.

이것은 확실히 좋은 해결책은 아닙니다. 따라서 복사하여 붙여넣을 수 있는 Python 한 줄짜리 코드가 있습니다. 그러면 이러한 변수가 표준 출력으로 인쇄됩니다.

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

이는 CentOS 5 및 6에서는 작동하지만 4에서는 작동하지 않습니다. yum은 Python으로 작성되었으므로 yum Python 모듈이 이미 서버에 있으므로 추가로 설치할 필요가 없습니다.

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

여기 누군가가 Fedora에서 dnf에 대한 동등한 답변을 찾고 있는 경우를 대비하여 다음 Python 문장을 생각해 냈습니다.

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'}

답변3

이 모든 것을 얻으려면 다음과 같은 코드를 사용해야 합니다.게시자: MMckinst, 그러나 RHEL-6에서 작동하는지 $releasever확인 하려는 경우 .yum version nogroups

RHEL-6에서 해야 할 또 다른 작업은 /etc/yum/vars.

답변4

$releasever가 어떻게 할당되는지 자세히 살펴보세요.

이것function_getsysver다음과 같이 rpm 데이터베이스를 쿼리합니다.

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

"system-release(releasever)" 값을 정의하세요.여기이며 재정의될 수 있습니다.배포 패키지yum.conf에서

쿼리가 값을 반환하지 않으면 releasever는 "$releasever"로 설정됩니다(예를 들어,distroverpkg=centos-릴리스그러나 rpm redhat-release-server는 이미 설치되어 있습니다)

관련 정보