Yum: Làm cách nào tôi có thể xem các biến như $ releasever, $ basearch & $ YUM0?


49

Tôi đang thiết lập một kho lưu trữ yum và cần gỡ lỗi một số URL trong tệp yum.conf. Tôi cần biết lý do tại sao Khoa học Linux cố gắng lấy URL này, khi tôi đang mong đợi nó sẽ lấy một URL khác:

# 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

Trang web yum.conf (5) cung cấp một số thông tin về các biến này:

Biến

Có một số biến bạn có thể sử dụng để dễ dàng bảo trì các tệp cấu hình của yum. Chúng có sẵn trong các giá trị của một số tùy chọn bao gồm tên, cơ sở và lệnh.

$ releasever Điều này sẽ được thay thế bằng giá trị của phiên bản của gói được liệt kê trong distroverpkg. Điều này mặc định là phiên bản của gói 'phát hành lại'.

$ arch Điều này sẽ được thay thế bằng kiến ​​trúc của bạn như được liệt kê bởi os.uname () [4] trong Python.

$ basearch Điều này sẽ được thay thế bằng kiến ​​trúc cơ sở của bạn trong yum. Ví dụ: nếu $ arch của bạn là i686 thì $ basearch của bạn sẽ là i386.

$ YUM0- $ YUM9 Chúng sẽ được thay thế bằng giá trị của biến môi trường shell cùng tên. Nếu biến môi trường shell không tồn tại thì biến tệp cấu hình sẽ không được thay thế.

Có cách nào để xem các biến này bằng cách sử dụng yumtiện ích dòng lệnh không? Tôi không muốn tìm kiếm phiên bản của gói 'phát hành lại' hoặc nhận thủ công giá trị của os.uname () [4] trong Python.


'săn lùng phiên bản phát hành lại' là chuyện nhỏ. cat /etc/redhat-release Trên thực tế, hãy sử dụng cat /etc/system-releasethay vào đó, vì đây sẽ là một liên kết tượng trưng đến / etc / redhat-release, / etc / centos-release, / etc / oel-release, / etc / <bất cứ điều gì khoa học Linux sử dụng>, nếu phù hợp.
Xalious

3
/etc/redhat-releasekhông giống với $releaseverbiến. Câu hỏi ở đây là tìm ra cái gì thay thế Yum thay cho các biến này? Điều gì đang xảy ra theo chương trình?
Stefan Lasiewski

1
'săn lùng phiên bản phát hành lại' cũng KHÔNG giống như 'mèo / etc / redhat-phát hành'. Cái trước yêu cầu một phiên bản, trong khi cái sau xem một tệp hoàn toàn không đáng tin cậy và có thể thay đổi vô cùng mà KHÔNG BAO GIỜ đáng tin cậy. rpm -qf /etc/issuelà phương pháp kinh điển, và có thể đã được các phương pháp trong LSB trừ SuSE không nhúc nhích trong các cuộc họp FSStnd. SỚM.
dùng2066657

Câu trả lời:


71

Nếu bạn cài đặt yum-utils, nó sẽ cung cấp cho bạn yum-debug-dumpcái sẽ ghi các biến đó và thêm thông tin gỡ lỗi vào một tệp. Không có tùy chọn để ghi vào thiết bị xuất chuẩn, nó sẽ luôn ghi vào một số tệp thực sự không hữu ích.

Đây rõ ràng không phải là một giải pháp tuyệt vời, vì vậy đây là một lớp lót python bạn có thể sao chép và dán nó sẽ in các biến đó thành thiết bị xuất chuẩn.

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

Điều này hoạt động trên CentOS 5 và 6, nhưng không phải 4. yum được viết bằng python, vì vậy mô-đun python yum đã có trên máy chủ của bạn, không cần phải cài đặt bất cứ thứ gì.

Đây là giao diện của 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-dumpdường như làm những gì tôi cần Có vẻ như thông tin là tất cả có dưới %%%%YUM INFOphần. Tôi dường như không thể làm cho mọi thứ như $YUM0-$YUM9xuất hiện, nhưng tôi không bao giờ sử dụng các biến đó.
Stefan Lasiewski

2
Để có được màn hình $ phát hành sạch trong vỏ bash, hãy sử dụng cách này:/usr/bin/python -c 'import yum;yb=yum.YumBase();yb.doConfigSetup(init_plugins=False);print yb.conf.yumvar["releasever"]'
Rockallite

Điều này chỉ hoạt động cho phiên bản hệ thống của Python - làm thế nào để bạn làm việc này với phiên bản "alt-install" bổ sung?
RCross

Bạn sẽ làm gì nếu trình phát hành thực sự là $ phát hành chuỗi ....
Bộ giải mã lười biếng

10

Để có được tất cả chúng, bạn sẽ cần sử dụng mã như mmckinst đã đăng , nhưng nếu bạn chỉ muốn kiểm tra, $releaseverbạn có thể chạy yum version nogroupstrên RHEL-6.

Một điều khác cần làm, trong RHEL-6, là chỉ tạo riêng của bạn trong /etc/yum/vars.


bạn có thể xây dựng? Điều gì tạo ra /etc/yum/varsthành tựu? Ngoài ra, bạn có tình cờ biết nếu điều này thay đổi từ RHEL5 thành RHEL6 không?
Stefan Lasiewski

1
Bạn sẽ có thể viết mã hoạt động trên RHEL-5 và RHEL-6 mà không gặp vấn đề gì. Lệnh phiên bản không có trong atm RHEL-5. Ý tôi là về / etc / yum / vars (chỉ dành cho RHEL-6) là bạn chỉ có thể tạo / etc / yum / vars / foorelease ... có dữ liệu phát hành riêng của bạn trong đó hoặc thậm chí chỉ ghi đè trình phát hành hệ thống bằng cách viết vào / etc / yum / vars / phát hành.
James Antill

Thông tin thêm về /etc/yum/varscó thể được tìm thấy tại access.redhat.com/ledgeledge/docs/en-US/Red_Hat_ Entryprise_Linux / giả
Stefan Lasiewski

10

Chỉ trong trường hợp bất kỳ ai kết thúc ở đây, như tôi, tìm kiếm câu trả lời tương đương cho dnf trên Fedora, tôi đã tìm ra một con trăn sau đây:

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

Trên Fedora 24, nó trông như thế này:

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

1
Tìm thấy điều này từ tìm kiếm yum variables repo names. Điều này trả lời câu hỏi bây giờ, với việc thay thế yum bằng dnf. Công việc tuyệt vời
bgStack15

4

Và đi sâu vào cách $ phát hành được chỉ định:

Các chức năng _getsysver truy vấn cơ sở dữ liệu rpm như:

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

Giá trị "phát hành hệ thống (phát hành)" được định nghĩa ở đây và nó có thể được ghi đè bằng distroverpkg trong yum.conf

Nếu truy vấn không trả về bất kỳ giá trị nào, trình phát hành được đặt thành '$ phát hành' (ví dụ: nếu bạn đặt distroverpkg = centos-phát hành nhưng đã cài đặt máy chủ redhat-release-server)


0

Một cách khác để xem kết quả của sự thay thế là làm một cái gì đó như thế này:

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

Tôi đã mày mò với các biến yum để kiểm soát máy khách spacewalk nào được chọn để xây dựng một repo cục bộ và thấy điều này hữu ích để xem các biến được diễn giải như thế nào.


Thật tuyệt, tuy nhiên phương pháp này dường như không cung cấp các biến như releasever.
Stefan Lasiewski
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.