ฉันจะค้นหา RHEL รุ่นใดได้บ้าง


14

ฉันทำงานในสภาพแวดล้อมที่เราค่อยๆเปลี่ยนเครื่องจาก Red Hat Enterprise Linux 5 เป็น RHEL 6

ฉันต้องการสคริปต์บางส่วนของฉันเพื่อทำสิ่งที่แตกต่างอย่างละเอียดบนเครื่อง RHEL6 กับสิ่งที่กำลังทำอยู่บนเครื่อง RHEL5

วิธีแก้ปัญหาในทางปฏิบัติคือการตรวจสอบที่รันไทม์และเรียกใช้คำสั่งบางอย่างบน RHEL5, อื่น ๆ บน RHEL6 และบางคำสั่งทั้งสอง

ตัวอย่างการใช้งานจริงของสิ่งนี้คือเรากำลังใช้โมดูลสภาพแวดล้อมและฉัน.bashrcมีmodule load gitบรรทัด แต่ในเครื่อง RHEL6 ข้อผิดพลาดของคำสั่งนี้:

RHEL6 system, git should be installed - not loading module

มองหา modulefile ฉันพบรหัสต่อไปนี้:

set redhatrelease [eval exec "cat /etc/redhat-release"]
if { [regexp -nocase {release 6} $redhatrelease] } {
  puts stderr "\n\t RHEL6 system, git should be installed - not loading module\n"
} else {
  ...
}

ดูเหมือนว่าจะทำสิ่งที่ฉันต้องการ แต่ฉันหวังว่าจะมีบางสิ่งที่สั้นกว่านี้

ดังนั้นวิธีที่ง่ายที่สุดในการบอก RHEL5 จาก RHEL6 ใน bash script คืออะไร

เป็นการดีที่จะมีความแข็งแกร่งในเวอร์ชันหลักที่แตกต่างกัน แต่ต้องทนต่อการเปลี่ยนแปลงของจำนวนรุ่นย่อย


ไม่lsb_releaseทำงานหรือไม่ ( -rควรให้หมายเลขแค่ให้ลอง-aดูทุกอย่างที่มี) ถ้าเป็นเช่นนั้นนั่นก็คือผู้ค้าข้าม
Derobert

ทดสอบคุณสมบัติไม่ใช่แพลตฟอร์ม การทดสอบแพลตฟอร์มของคุณในวันนี้จะพังเมื่อ RHEL7 ออกมาและอาจแตกก่อนหน้านั้นเมื่อ RHEL 6. ถัดไปออกมาอาจเป็นเพราะพวกเขาส่งต่อคุณสมบัติ EL5 ไปที่ 6.x เพื่อปิดการร้องเรียนเกี่ยวกับการลบออก ดังนั้นหากสคริปต์ของคุณต้องการgitโมดูล Bash คุณจะตรวจสอบว่ามีอยู่หรือไม่ก่อนที่จะเรียกมัน เมื่อ / หากปรากฏขึ้นภายหลังผลการตรวจสอบของคุณจะเปลี่ยนดังนั้นทันใดนั้นคุณสมบัติก็เริ่มทำงานโดยไม่ต้องใช้ความพยายามใด ๆ เพิ่มเติม
Warren Young

@WarrenYoung - ขอบคุณ แต่ฉันไม่ใช่ผู้ดูแลระบบที่นี่เพียงผู้ใช้การปรับใช้ RHEL ที่จัดการจากส่วนกลาง เครื่อง RHEL5 ทั้งหมดของเราเป็นภาพเดียวกันโดยพื้นฐานแล้วเหมือนกันกับเครื่อง RHEL6 ทั้งหมดดังนั้นสำหรับฉันที่รู้ว่าการแก้ไขครั้งใหญ่นั้นเพียงพอแล้ว เนื่องจากเราอยู่ในขั้นตอนการวางแผนที่จะย้ายไปที่ RHEL6 เท่านั้นตอนนี้ฉันคิดว่าจะต้องใช้เวลาสักครู่ก่อนที่เราจะต้องกังวลเกี่ยวกับ RHEL7 * 8 ')
Mark Booth

derobert @ - ไม่มีใน RHEL5 และ 6 lsb_release -rรวมถึงข้อความอื่น ๆ Release: 5.8ด้วยเช่น ดังที่เดนนิสคาร์เซเมเกอร์อธิบายแม้ว่าหากคุณใช้lsb_release -rsแทนคุณจะได้รับเพียงตัวเลข
Mark Booth

ดูเพิ่มเติมที่serverfault.com/questions/89654/what-version-of-rhel-am-i-using - มีเคล็ดลับสำหรับการใช้ RPM เมื่อไม่ได้ติดตั้ง lsb
Dan Pritts

คำตอบ:


10

คุณยังสามารถใช้lsb_releaseคำสั่ง หากคุณแน่ใจแล้วว่าเป็น RHEL การรับหมายเลขเวอร์ชันหลักคือ:

majversion=$(lsb_release -rs | cut -f1 -d.)

ทำงานได้กับ Centos และ Redhat ที่เหมาะสมล้มเหลวใน Oracle Linux รุ่น Redhat ไม่พบ lsb_release
user959690

คำตอบนี้ดูเหมือนจะล้าสมัยแล้ว ฉันพบเฉพาะlsb_releaseในเครื่อง RHEL / CentOS 5 ของฉันเท่านั้น ไม่มีที่ไหนเลยที่จะพบได้ในวันที่ 6 หรือ 7
Dale Anderson

คุณอาจต้องติดตั้งแพ็คเกจ redhat-lsb-core
Dennis Kaarsemaker

15
if grep -q -i "release 6" /etc/redhat-release
then
  echo "running RHEL 6.x"
fi

นี่จะเป็นวิธีที่ง่ายที่สุดที่ฉันคิดได้


ใช้งานได้กับ CentOS และ RHEL ทุกรูปแบบที่ฉันมีในสินค้าคงคลังของฉันตั้งแต่ 5 ถึง 7 lsb_releaseซึ่งแตกต่างจากที่ดูเหมือนจะใช้งานได้เพียง 5
Dale Anderson

4

ใช้ rpm -q |grep redhat-release-server

/etc/redhat-releaseไฟล์จะได้รับการแก้ไขโดยผู้ดูแลระบบที่กำลังมองหาการติดตั้งซอฟต์แวร์ของบุคคลที่สามโดยไม่ต้องดำเนินการอัพเกรดระบบปฏิบัติการที่เกิดขึ้นจริง


1
คุณหมายถึงrpm -qaแทนrpm -q? การใช้งาน-qด้วยตัวเองต้องการอาร์กิวเมนต์ของแบบสอบถาม
Dale Anderson

@Dale Anderson ขอขอบคุณนี่เป็นเพียงคนเดียวที่ทำงานให้ฉันในวันที่ 7.4 และฉันก็ไม่รู้เหมือนกันว่า7.4จนกว่าฉันจะใช้มันด้วย-qa
Brian Thomas

2

คุณสามารถขยายสิ่งนี้สำหรับหลาย distros Linux โดยใช้/etc/issueไฟล์แทน/etc/redhat-releaseไฟล์


2
major_version=$(rpm -q --queryformat '%{RELEASE}' rpm | grep -o [[:digit:]]*\$)

rpm -q --queryformat '%{RELEASE}' rpm พิมพ์สิ่งที่ชอบ 25.el7พิมพ์สิ่งที่ต้องการถ้าอย่างนั้นมันเป็นเรื่องของการใช้หลักสุดท้าย ทดสอบกับ RHELs 5,6,7 และ Fedora 24

ตามที่คนอื่นชี้ให้เห็นlsb-versionอาจไม่สามารถติดตั้งได้ นอกจากนี้ยังมีระบบ RHEL5 อย่างน้อยหนึ่งระบบที่ไม่ได้redhat-release-serverติดตั้งแพ็คเกจ


ขอบคุณสิ่งนี้ควรได้รับการอัปเดตเนื่องจากมันใช้ได้เสมอและส่งคืนหมายเลขที่ต้องการอย่างแน่นอน
phiphi

1

นี่เป็นอีกวิธีที่แม่นยำกว่าในการรับผลลัพธ์นี้ แพ็กเกจเคอร์เนลใน RHEL มีสตริง 'elN' อยู่ด้วยโดยที่ N จะแสดงเวอร์ชันหลักของระบบปฏิบัติการ ดังนั้นหนึ่งสามารถรันคำสั่งต่อไปนี้เพื่อระบุรุ่นของ RHEL:

# uname -r | sed 's/^.*\(el[0-9]\+\).*$/\1/'

สิ่งนี้จะคืนค่าสตริง "el5", "el6" หรือ "el7" ขึ้นอยู่กับสตริงที่ตรงกันบนโฮสต์ที่กำหนด


ฉันใช้การผสมผสานของ CentOS และ RedHat รุ่น 5-7 และคำตอบใช้ได้จริงในทุกรุ่น: uname -r | sed 's /^.* (el [0-9] \ +). * $ / \ 1 /'
WallStProg

0

ฉันลงเอยด้วยการใช้ jordanmคำตอบแต่เพิ่มการบิดของตัวเอง

เพราะฉันไม่ต้องการที่จะมีคำสั่ง rhel6 ทั้งหมดของฉันด้วยกันและคำสั่ง rhel5 ทั้งหมดของฉันด้วยกัน แต่ interleaved ภายในส่วนของตัวเองและฉันไม่ต้องการที่จะทำซ้ำรหัสนี้ทุกครั้งที่ฉันอยากจะสลับแทนฉัน ทำสิ่งนี้:

if   grep -q -i "release 6" /etc/redhat-release ; then
  rhel6only=1
elif grep -q -i "release 5" /etc/redhat-release ; then
  rhel5only=1
else
  echo "Running neither RHEL6.x nor RHEL 5.x !"
fi

ด้วยวิธีนี้ฉันสามารถทำสิ่งต่าง ๆ เช่น:

# JDK
[ $rhel5only ] && module load java/6
[ $rhel6only ] && module load java/7

# Eclipse
module load eclipse

# Python
[ $rhel5only ] && module load python/2
[ $rhel6only ] && module load python/3

เป็นต้น


0

หากความตั้งใจของคุณเพิ่มเติมคือการจัดการ modulefiles ตามบริบทฉันขอแนะนำให้คุณตรวจสอบ EasyBuild และตรรกะบางอย่างที่เกี่ยวข้องอยู่ในรูปแบบ Python:


0

วิธีการทั้งหมดที่กล่าวถึงในที่นี้ขึ้นอยู่กับไฟล์ข้อความและอาจทำให้เข้าใจผิด ผู้ใช้ที่เข้าถึงถูกต้องอาจเปลี่ยนเนื้อหาของ / etc / redhat-release, / etc / issue ฯลฯ แม้เพียงแค่ทำให้ข้อมูลสับสน วิธีการที่เชื่อถือได้มากขึ้นนั้นเกี่ยวข้องกับการรู้เคอร์เนลรีลีสที่ Red Hat จัดหาให้ในแต่ละเวอร์ชั่นของ RHEL:

  • RHEL4 ใช้เคอร์เนล 2.6.9-X
  • RHEL5 ใช้เคอร์เนล 2.6.18-X
  • RHEL6 ใช้เคอร์เนล 2.6.32-X
  • RHEL7 ใช้เคอร์เนล 3.10.0-X

อย่างต่อเนื่องจนถึงตอนนี้คุณสามารถค้นหาเคอร์เนลที่กำลังรันอยู่โดยการรัน uname -rอย่างสม่ำเสมอจนถึงขณะนี้คุณจะพบว่าการเปิดตัวเคอร์เนลทำงานโดยการทำงานคุณอาจจะชอบเล่นมากขึ้นด้วยการวิ่งไปตามทาง

uname -r | awk -F- '{print $1}'

สิ่งนี้จะให้ข้อมูลเฉพาะเกี่ยวกับเคอร์เนลดังที่แสดงในตารางด้านบน คุณอาจสามารถขับคู่ขนานไปยังดิสทริบิวชันอื่น ๆ ได้หากพวกเขาใช้เคอร์เนลรีลีสอย่างสม่ำเสมอ


2
-1 ผู้ดูแลระบบสามารถตัดสินใจอัปเดตเคอร์เนลได้อย่างง่ายดาย
Oliver Gondža

0

RHEL 6 ได้เพิ่มไฟล์ / etc / system-release-cpe นี่มี:สตริงที่แยกกันซึ่งอาจมีลักษณะคล้าย

# cat /etc/system-release-cpe
cpe:/o:redhat:enterprise_linux:6computenode:ga:computenode

ตอนนี้มันก็เพียงพอแล้วที่จะดึงฟิลด์ $ 5 และ $ 7 เพื่อรับเวอร์ชัน RHEL และตัวแปร RHEL

# will be 7 or 6, does not work for 5 as file is missing there
RHEL_VERSION_MAJOR=$(cat /etc/system-release-cpe | awk -F: '{ print $5 }' | grep -o ^[0-9]*)
RHEL_VARIANT=$(cat /etc/system-release-cpe | awk -F: '{ print $7 }')

0

เริ่มต้นจาก RHEL 6 วิธีที่รัดกุมที่สุดคือ:

cat /etc/system-release-cpe | cut -d ':' -f5

ถ้านั่นคือ "รัดกุมที่สุด" คุณต้องทำcut -d: -f5 /etc/system-release-cpuและหลีกเลี่ยง UUOC อย่างไรก็ตามคำถามที่ถามเกี่ยวกับการเปลี่ยนจาก RHEL 5 เป็น 6 หากใช้งานได้เฉพาะจาก RHEL 6 เป็นต้นไปจะไม่สามารถตอบสนองความต้องการของคำถามได้หรือไม่
roaima
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.