วิธีการใช้ yum เพื่อให้ได้ RPM ทั้งหมดที่จำเป็นสำหรับการใช้งานออฟไลน์?


30

ฉันมีเซิร์ฟเวอร์หนึ่งเครื่องที่มีการเชื่อมต่อเน็ตซึ่งฉันสามารถใช้ "yum install $ PACKAGE"
ฉันต้องการคำสั่ง yum เช่นyum cache-rpms $PACKAGE $DIRECTORYเช่นไฟล์ RPM ที่จำเป็นทั้งหมดจะถูกดาวน์โหลดไปยัง $ DIRECTORY ซึ่งจะมีไฟล์ ( Install.sh) ระบุลำดับการติดตั้ง RPM เหล่านี้บนเซิร์ฟเวอร์อื่น ๆ โดยไม่ต้องเชื่อมต่อเน็ต
Install.shแม้อาจจะเป็นสคริปต์เชลล์ซึ่งมีพฤติกรรมเช่นเดียวกับการyum install $PACKAGEยกเว้นว่ามันจะไม่ใช้เครือข่าย $DIRECTORYแต่จะใช้เท่านั้น

ไปได้หรือไม่

ฉันกำลังมองหาโซลูชันทั่วไปที่ yum และ RPM พร้อมใช้งาน แต่เฉพาะ: อยู่ในชุดของเซิร์ฟเวอร์ CENTOS 6.7


ฉันนึกถึงวิธีแก้ปัญหาสองข้อ - วิธีใดที่ใช้งานได้ดีกว่าสำหรับคุณ (1) วิธีการแพคเกจเดียว การดาวน์โหลดนี้น้อย แต่ต้องทำงานด้วยตนเองมากกว่า หรือ ... (2) วิธีซื้อคืนทั้งหมด การดาวน์โหลดนี้มีจำนวนมากแต่สามารถทำได้ด้วยระบบอัตโนมัติมากขึ้น
Steve Bonds

@SteveBonds ฉันต้องการ (1) "แพ็คเกจเดียว" เนื่องจาก (2) "repo ทั้งหมด" จะใช้เวลาในการดาวน์โหลดและใช้พื้นที่มากเกินไป
เปรม

คุณดู Spacewalk แล้วหรือยัง?
fpmurphy

คำตอบ:


40

นี่คือตัวอย่างที่ระบุโดยใช้ "httpd" เป็นแพ็คเกจสำหรับดาวน์โหลดและติดตั้ง กระบวนการนี้ได้รับการทดสอบทั้งบน CentOS6 และ CentOS7

ติดตั้งสิ่งที่คุณต้องการและสร้างที่สำหรับ RPM ที่ดาวน์โหลดมา:

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

ดาวน์โหลด RPMs วิธีนี้ใช้เคล็ดลับ installroot ที่นี่เพื่อบังคับให้ดาวน์โหลดแบบเต็มของการอ้างอิงทั้งหมดเนื่องจากไม่มีการติดตั้งในรูทว่างเปล่านั้น ยำจะสร้างข้อมูลเมตาบางส่วนในนั้น แต่เราจะทิ้งมันทั้งหมด โปรดทราบว่าสำหรับ CentOS7 releaseverจะเป็น "7"

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

ใช่นั่นเป็นรุ่นเล็ก คุณควรจะเห็นขนาดของการดาวน์โหลด repo เต็ม!

สร้างข้อมูลเมตาที่จำเป็นในการเปลี่ยนกอง RPMs ใหม่ของเราเป็น repo YUM และทำความสะอาดสิ่งที่เราไม่ต้องการอีกต่อไป:

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

กำหนดค่าไดเรกทอรีดาวน์โหลดเป็น repo โปรดทราบว่าสำหรับ CentOS7 gpgkey จะมีชื่อว่า "7" แทน "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

ในการตรวจสอบการพึ่งพาที่ขาดหายไป:

# repoclosure --repoid=offline-httpd

ฉันไม่ได้คิดว่าเหตุใดใน CentOS7 จึงรายงานสิ่งต่าง ๆ ที่libssl.so.10(libssl.so.10)(64bit)ขาดหายไปhttpd-toolsเมื่อopenssl-libs-1.0.1e-51.el7_2.2.x86_64.rpm(ผู้ให้บริการของไลบรารีนั้น) ปรากฏอย่างชัดเจนในไดเรกทอรี ถึงกระนั้นหากคุณเห็นสิ่งที่ขาดหายไปอย่างเห็นได้ชัดนี่อาจเป็นโอกาสที่ดีที่จะย้อนกลับไปและเพิ่มมันด้วยวิธีเดียวกันyum install --downloadonlyวิธีการข้างต้น

เมื่อออฟไลน์หรือหลังจากคัดลอก/var/tmp/httpdไดเรกทอรี repo ไปยังเซิร์ฟเวอร์อื่น ๆ ตั้งค่า 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

หวังว่าจะไม่มีการอ้างอิงที่ขาดหายไป!


3
ฉันพยายามตามคู่มือของคุณเพื่อสร้างโฟลเดอร์บน CentOS 7 และติดตั้งใน Red Hat 7 มันทั้งหมดทำงานไม่มีข้อผิดพลาด
Piyin

1
ในขณะที่ความเข้ากันได้ระหว่างสองระบบปฏิบัติการนั้นดีพอที่จะทำงานเช่นนั้น แต่เพื่อให้มั่นใจว่ารองรับ RedHat ได้คุณควรดาวน์โหลดซอฟต์แวร์ RedHat จากเซิร์ฟเวอร์ของ RedHat โดยใช้กระบวนการที่คล้ายกัน
Steve Bonds

1
ใช่คุณพูดถูก. แต่ในกรณีนี้มันเป็นสภาพแวดล้อมที่ใกล้ชิดกับกฎเครือข่ายฉันไม่สามารถเปลี่ยนแปลงได้ เช่นบางคนพูดว่า: "ลูกค้าถูกต้องเสมอ"
Piyin

1
ทำงานได้ดีมากใน Centos 7 ขอบคุณ!
Carlos Vega

4

ดูเหมือนว่าคุณกำลังถามหาที่มีอยู่ในแพคเกจyumdownloader yum-utilsมีคำถามและคำตอบเกี่ยวกับเรื่องนี้อยู่แล้วดูเช่นดาวน์โหลดการอ้างอิงทั้งหมดด้วย yumdownloader แม้ว่าจะติดตั้งไปแล้วหรือยัง หรือฉันจะหา URL ของแพ็คเกจด้วย Yum ได้อย่างไร

yumdownloaderจะดาวน์โหลดแพ็คเกจแม้ว่ามันจะไม่สร้างไฟล์Install.shตามลำดับที่ yum กำหนดเองดังนั้นคุณจึงสามารถติดตั้งแพ็คเกจบนกล่องเป้าหมายผ่าน
yum install ./*rpmในโฟลเดอร์ที่มีแพ็คเกจที่ดาวน์โหลดมา (ซึ่งต้องรวมการอ้างอิงทั้งหมดเมื่อเทียบกับ การติดตั้งฐาน - ดูลิงค์แรกด้านบนเกี่ยวกับrepotrack)


+1, ดูเหมือนสิ่งที่ฉันต้องการ! ฉันจะทดลองและอัปเดตหากมันตรงกับสิ่งที่ฉันต้องการ!
เปรม

4

ฉันต้องการมันหลายครั้งดังนั้นฉันจึงตอบ @steve Bonds โดยอัตโนมัติ อย่าลืมกำหนดPKGเป็นแพ็คเกจที่จะติดตั้งบนเครื่องทั้งสองเครื่อง (ข้อจำกัดความรับผิดชอบ: สำหรับ CentOS 7 สำหรับ CentOS 6 ให้เปลี่ยน--releaseverและCentOS-7ระบุตำแหน่ง

เครื่องออนไลน์

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

บนเครื่องออฟไลน์:

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
คุณอาจต้องการเพิ่ม-yคำสั่งสุดท้ายเพื่อยืนยันการติดตั้งแพคเกจเมื่อทำงานในพื้นหลัง
ToniTornado

เป็นเรื่องที่ยอดเยี่ยมมากที่คุณได้อธิบายตั้งแต่ขั้นตอนการอธิบายไปจนถึงกระบวนการอัตโนมัติ เยี่ยมมาก!
สตีฟบอนด์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.