Hangi RHEL sürümünü kullandığımı nasıl öğrenebilirim?


14

Red Hat Enterprise Linux 5'ten RHEL 6'ya makineleri yavaşça geçirdiğimiz bir ortamda çalışıyorum.

RHEL6 makinelerinde şu anda RHEL5 makinelerinde yapılanlardan farklı bir şeyler yapmak için bazı komut dosyalarına ihtiyacım var.

Pragmatik çözüm çalışma zamanında kontrol etmek ve RHEL5 üzerinde bazı komutlar, bazıları RHEL6 üzerinde ve bazılarında da komutlar çalıştırmaktır.

Bunun pratik bir örneği, ortam modülleri kullanmamızdır ve benim .bashrcbir module load gitsatır içerir , ancak RHEL6 makinelerinde bu komut hataları:

RHEL6 system, git should be installed - not loading module

Modulefile bakarak aşağıdaki kodu bulmak:

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 {
  ...
}

Bu istediğimi yapıyor gibi görünüyor, ama daha kısa bir şey umuyordum.

Peki, bir bash betiğinde RHEL6'dan RHEL5'e söylemenin en kolay yolu nedir?

İdeal olarak, farklı ana versiyonlarda sağlam olmalı, ancak küçük sürüm sayısındaki değişikliklere toleranslı olmalıdır.


does lsb_releaseişi? ( -rsize sadece numarayı vermelidir; -amevcut her şeyi de görmeye çalışın ) Öyleyse, bu da çapraz satıcıdır.
derobert

Platformları değil özellikleri test edin. Bugün platform testiniz RHEL7 ortaya çıktığında kırılacak ve RHEL 6.sonra çıkıldığında bundan önce kırılacak, belki de kaldırılmasıyla ilgili şikayetleri susturmak için bir EL5 özelliğini 6.x'e ilettikleri için. Yani, betiğinizin bir gitBash modülüne ihtiyacı varsa, onu çağırmadan önce var olup olmadığını kontrol edersiniz. Daha sonra göründüğünde / belirdiğinde, çekinizin sonuçları değişir, bu nedenle aniden ekstra çaba harcamadan özellik çalışmaya başlar.
Warren Young

@WarrenYoung - Teşekkürler, ama burada bir sistem yöneticisi değilim, sadece merkezi olarak yönetilen bir RHEL dağıtımının kullanıcısıyım. Tüm RHEL5 makinelerimiz aslında aynı görüntüdür, tüm RHEL6 makinelerine benzer, bu yüzden benim için büyük revizyonun yeterli olduğunu bilmek. Şu anda sadece RHEL6'ya geçmenin planlama aşamalarında olduğumuzu düşünürsek, RHEL7 hakkında endişelenmemiz için bir süre geçeceğini düşünüyorum. * 8 ')
Mark Booth

@derobert - Hayır, RHEL5 & 6'da lsb_release -rbaşka metinler de vardır, örn Release: 5.8. Dennis Kaarsemaker'ın açıkladığı gibi , lsb_release -rsbunun yerine kullanırsanız, sadece sayıyı alırsınız.
Mark Booth

Ayrıca bkz. Serverfault.com/questions/89654/what-version-of-rhel-am-i-using - lsb kurulu olmadığında RPM ile yapmak için bir ipucu vardır.
Dan Pritts

Yanıtlar:


10

lsb_releaseKomutu da kullanabilirsiniz . RHEL olduğundan zaten eminseniz, ana sürüm numarasını almak:

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

Centos ve Redhat üzerinde çalışır, Redhat'ın Oracle Linux sürümünde başarısız olur. lsb_release bulunamadı.
user959690

Bu cevap şimdi modası geçmiş gibi görünüyor. Yalnızca lsb_releaseRHEL / CentOS 5 makinelerimde buluyorum . 6 veya 7'de bulunacak bir yer yok
Dale Anderson

Redhat-lsb-core paketini kurmanız gerekebilir.
Dennis Kaarsemaker

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

Bu benim aklıma gelen en basit yol olurdu.


CentOS ve RHEL'in her varyasyonu için çalışır, envanterimde 5'ten 7'ye kadar, lsb_releasesadece 5 için çalışıyor gibi görünüyor
Dale Anderson

4

kullanım rpm -q |grep redhat-release-server

/etc/redhat-releaseDosya bir fiili işletim yükseltme yapmadan üçüncü parti yazılım yüklemek isteyen bir yönetici tarafından düzenlenmiş olabilirdi.


1
Şunu mu demek istediniz rpm -qayerine rpm -q? -qKendi başına kullanmak bir sorgu argümanı gerektirir.
Dale Anderson

@Dale Anderson, teşekkür ederim, bu benim için işe yarayan tek kişi, 7.4'te ve bunu ben koşana 7.4kadar bilmiyordum-qa
Brian Thomas

2

/etc/issueDosya yerine dosyayı kullanarak birden fazla Linux dağıtımı için bunu genişletebilirsiniz /etc/redhat-release.


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

rpm -q --queryformat '%{RELEASE}' rpmgibi bir şey yazdırır 25.el7. O zaman sadece son rakamları almak önemlidir. RHEL 5,6,7 ve Fedora 24 üzerinde test edilmiştir.

Diğerlerinin de belirttiği gibi, lsb-versionkurulamayabilir. Ayrıca, redhat-release-serverpaketin yüklü olmadığı en az bir RHEL5 sistemi vardır .


teşekkür ederim, bu her zaman çalışır ve istenen sayıyı tam olarak döndürdüğü için oylanmalı.
phiphi

1

İşte bu sonucu almanın başka, daha kesin bir yolu. RHEL içindeki çekirdek paketlerinde 'elN' dizesi bulunur; burada N, işletim sisteminin ana sürümünü temsil eder. Böylece, RHEL sürümünü tanımlamak için aşağıdaki komut çalıştırılabilir:

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

Bu, verilen ana bilgisayardaki eşleşen dizeye bağlı olarak "el5", "el6" veya "el7" dizesini döndürür.


CentOS ve RedHat, sürüm 5-7 bir karışımı kullanıyorum ve cevap aslında tüm sürümlerinde çalışır: uname -r | sed 's /^.* (el [0-9] \ +). * $ / \ 1 /'
WallStProg

0

Ben kullanarak sona erdi jordanm cevabını ancak kendime ait bir büküm ekledi.

Çünkü tüm rhel6 komutlarımın ve tüm rhel5 komutlarımın bir arada olmasını istemedim, ancak kendi bölümleri arasına serpiştirdim ve geçiş yapmak istediğimde bu kodu çoğaltmak istemedim, bunun yerine ben bunu yaptı:

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

Bu şekilde şunları yapabilirim:

# 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

vb.



0

Burada bahsedilen tüm yöntemler metin dosyalarına dayanır ve bu nedenle yanıltıcı olabilir. Doğru erişime sahip bir kişi, bu bilgileri gizlemek için bile / etc / redhat-release, / etc / issue vs. içeriğini değiştirebilir. Daha güvenilir bir yöntem, RHEL'in her sürümünde genellikle Red Hat tarafından sağlanan çekirdek sürümlerini bilmeyi içerir:

  • RHEL4 2.6.9-X çekirdeğini kullanıyor
  • RHEL5 2.6.18-X çekirdeğini kullanıyor
  • RHEL6, 2.6.32-X çekirdeğini kullanıyor
  • RHEL7, 3.10.0-X çekirdeğini kullanıyor

sürekli olarak şimdiye kadar koşarak çalışan çekirdek sürümünü öğrenebilirsiniz uname -r. Çizgileri boyunca bir şeyler çalıştırarak meraklı olabilirsiniz.

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

Bu, yukarıdaki tabloda olduğu gibi çekirdek hakkında özel bilgiler verecektir. Sürekli olarak çekirdek sürümlerini kullanıyorlarsa, diğer dağıtımlara paralellikler sağlayabilirsiniz.


2
-1. Yönetici, çekirdeği kolayca güncellemeye karar verebilir.
Oliver Gondža

0

RHEL 6 / etc / system-release-cpe dosyasını ekledi. Bu, :şuna benzeyebilecek ayrı bir dize içerir

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

Şimdi RHEL sürümünü ve RHEL varyantını elde etmek için 5 $ ve 7 $ alanlarını çekmek yeterlidir.

# 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'dan başlayarak en kısa yol şudur:

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

Eğer bu "en özlü" olsaydı cut -d: -f5 /etc/system-release-cpu, UUOC'dan kaçınırdınız. Ancak, soru RHEL 5'ten 6'ya geçiş hakkında soruyordu. Bu sadece RHEL 6'dan itibaren işe yararsa, soru gereksinimlerini karşılayamıyor mu?
roaima
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.