Làm cách nào để sử dụng yum để nhận tất cả RPM cần thiết, để sử dụng ngoại tuyến?


30

Tôi có một máy chủ có kết nối mạng, nơi tôi có thể sử dụng "yum install $ PACKAGE".
Tôi muốn một số lệnh yum, như yum cache-rpms $PACKAGE $DIRECTORYvậy tất cả các tệp RPM cần thiết sẽ được tải xuống $ TRỰC TIẾP, cũng sẽ có một tệp ( Install.sh) nêu thứ tự cài đặt các RPM này, trên nhiều máy chủ khác mà không cần kết nối mạng.
Install.shthậm chí có thể là một tập lệnh shell, có hành vi tương tự yum install $PACKAGE, ngoại trừ việc nó sẽ không sử dụng mạng mà chỉ sử dụng $DIRECTORY.

Khả thi?

Tôi đang tìm kiếm một giải pháp chung có sẵn yum và RPM, nhưng cụ thể: Đó là trên một bộ máy chủ CENTOS 6.7.


Tôi có thể nghĩ ra một vài giải pháp - cách nào hiệu quả hơn với bạn? (1) Cách tiếp cận gói duy nhất. Điều này tải xuống ít hơn, nhưng đòi hỏi nhiều công việc thủ công. Hoặc ... (2) Toàn bộ cách tiếp cận repo. Điều này tải rất nhiều , nhưng có thể được thực hiện với nhiều tự động hơn.
Steve Bonds

@SteveBonds, tôi muốn (1) "gói duy nhất", bởi vì (2) "toàn bộ repo" sẽ mất thời gian để tải xuống và tiêu tốn quá nhiều dung lượng.
Prem

Bạn đã xem Spacewalk chưa?
fpmurphy

Câu trả lời:


40

Đây là một ví dụ cụ thể sử dụng "httpd" làm gói để tải xuống và cài đặt. Quá trình này đã được thử nghiệm trên cả CentOS6 và CentOS7.

Cài đặt những thứ bạn cần và tạo một nơi để đặt RPM đã tải xuống:

# yum install yum-plugin-downloadonly yum-utils createrepo
# mkdir /var/tmp/httpd
# mkdir /var/tmp/httpd-installroot

Tải xuống RPM. Điều này sử dụng thủ thuật installroot được đề xuất ở đây để buộc tải xuống đầy đủ tất cả các phụ thuộc vì không có gì được cài đặt trong root trống đó. Yum sẽ tạo ra một số siêu dữ liệu trong đó, nhưng chúng ta sẽ vứt bỏ tất cả. Lưu ý rằng đối với CentOS7 releaseversẽ là "7".

# yum install --downloadonly --installroot=/var/tmp/httpd-installroot --releasever=6 --downloaddir=/var/tmp/httpd httpd

Vâng, đó phiên bản nhỏ. Bạn nên xem kích thước của tải xuống repo đầy đủ!

Tạo siêu dữ liệu cần thiết để biến đống RPM mới của chúng tôi thành repo YUM và dọn sạch những thứ chúng tôi không còn cần:

# createrepo --database /var/tmp/httpd
# rm -rf /var/tmp/httpd-installroot

Cấu hình thư mục tải xuống dưới dạng repo. Lưu ý rằng đối với CentOS7, gpgkey sẽ được đặt tên là "7" thay vì "6":

# vi /etc/yum.repos.d/offline-httpd.repo
[offline-httpd]
name=CentOS-$releasever - httpd
baseurl=file:///var/tmp/httpd
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6

Để kiểm tra các phụ thuộc còn thiếu:

# repoclosure --repoid=offline-httpd

Tôi đã không hiểu tại sao trên CentOS7, điều này báo cáo những thứ như libssl.so.10(libssl.so.10)(64bit)mất tích từ httpd-toolskhi nào openssl-libs-1.0.1e-51.el7_2.2.x86_64.rpm(nhà cung cấp của thư viện đó) có mặt rõ ràng trong thư mục. Tuy nhiên, nếu bạn thấy một cái gì đó rõ ràng là thiếu, đây có thể là một cơ hội tốt để quay lại và thêm nó bằng cách sử dụng cùng một yum install --downloadonlyphương pháp ở trên.

Khi ngoại tuyến hoặc sau khi sao chép /var/tmp/httpdthư mục repo sang máy chủ khác, hãy thiết lập repo ở đó:

# vi /etc/yum.repos.d/offline-httpd.repo
[offline-httpd]
name=CentOS-$releasever - httpd
baseurl=file:///var/tmp/httpd
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6
# yum --disablerepo=\* --enablerepo=offline-httpd install httpd

Hy vọng không thiếu phụ thuộc!


3
Tôi đã thử làm theo hướng dẫn của bạn để xây dựng thư mục trên CentOS 7 và cài đặt nó trên Red Hat 7, tất cả đều hoạt động mà không có lỗi
Piyin

1
Mặc dù khả năng tương thích giữa hai hệ điều hành đủ tốt để những thứ tương tự hoạt động, để đảm bảo hỗ trợ RedHat, bạn nên tải xuống phần mềm RedHat từ các máy chủ của RedHat bằng một quy trình tương tự.
Steve Bonds

1
Vâng bạn đã đúng. Nhưng trong trường hợp này, đó là một môi trường gần gũi với các quy tắc mạng mà tôi không thể thay đổi. Giống như một số người nói: "khách hàng luôn luôn đúng"
Piyin

1
làm việc rất tốt trong Centos 7, cảm ơn!
Carlos Vega

4

Có vẻ như bạn đang yêu cầu yumdownloaderđược chứa trong gói yum-utils. Đã có một vài câu hỏi và câu trả lời về vấn đề này, xem ví dụ: Tải xuống tất cả các phụ thuộc với yumdoader, ngay cả khi đã được cài đặt? hoặc Làm cách nào để tìm URL gói với Yum?

yumdownloadersẽ tải xuống các gói, mặc dù nó sẽ không tạo tệp Install.shvì thứ tự có thể được xác định bởi chính yum, vì vậy bạn có thể cài đặt các gói trên hộp đích thông qua
yum install ./*rpmtrong thư mục với các gói đã tải xuống của bạn (cần bao gồm tất cả các phụ thuộc so với cài đặt cơ sở - xem liên kết đầu tiên ở trên liên quan repotrack)


+1, Âm thanh như những gì tôi muốn! Tôi sẽ thử nghiệm và cập nhật nếu nó phù hợp với những gì tôi muốn!
Prem

4

Tôi cần nó nhiều lần, vì vậy tôi tự động trả lời @Steve Bonds. Chỉ cần chắc chắn xác định PKGlà gói để cài đặt trên cả hai máy (Tuyên bố miễn trừ trách nhiệm: đối với CentOS 7. Đối với CentOS 6, hãy thay đổi --releaseverCentOS-7điểm.

máy trực tuyến

PKG=... # NAME OF THE PACKAGE TO INSTALL ON OFFLINE MACHINE
yum install --downloadonly --installroot=/tmp/$PKG-installroot --releasever=7 --downloaddir=/tmp/$PKG $PKG
createrepo --database /tmp/$PKG
rm -rf /tmp/$PKG-installroot
rsync -arv /tmp/$PKG/ [IP of the machine]:/tmp/$PKG

trên máy ngoại tuyến:

PKG=... # NAME OF THE PACKAGE
echo "[offline-$PKG]
name=CentOS-\$releasever - $PKG
baseurl=file:///tmp/$PKG/
enabled=0
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7" >  /etc/yum.repos.d/offline-$PKG.repo

# install package offline:
yum --disablerepo=\* --enablerepo=offline-$PKG install --nogpgcheck $PKG

1
Bạn có thể muốn thêm -yvào lệnh cuối cùng để xác nhận cài đặt các gói khi chạy trong nền.
ToniTornado

Thật tuyệt khi bạn đã đưa nó từ một mô tả đến một quy trình tự động. Công việc tốt đẹp!
Steve Bonds
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.