使用しているRHELのバージョンを確認する方法


14

私はマシンをRed Hat Enterprise Linux 5からRHEL 6に徐々に移行する環境で働いています。

RHEL5マシンで現在行われていることとRHEL6マシンで微妙に異なることを行うには、スクリプトのいくつかが必要です。

実用的な解決策は、実行時にチェックし、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 {
  ...
}

これは私が望むことをするように思えますが、もっと短いものを望んでいました。

それでは、bashスクリプトでRHEL6とRHEL5を区別する最も簡単な方法は何ですか?

理想的には、さまざまなメジャーバージョン間で堅牢である必要がありますが、マイナーリリース番号のバリエーションに耐えることができます。


動作しlsb_releaseますか?(-r数字だけを提供する必要があります。-a利用可能なものもすべて確認してください)その場合、それはクロスベンダーでもあります。
デロバート

プラットフォームではなく機能をテストします。現在のプラットフォームテストは、RHEL7がリリースされると中断し、RHEL 6.nextがリリースされると中断する可能性があります。そのため、スクリプトにgitBashモジュールが必要な場合は、呼び出す前に存在するかどうかを確認します。後で表示される場合は、チェックの結果が変わるため、突然、追加の作業なしで機能が動作し始めます。
ウォーレンヤング

@WarrenYoung-ありがとう、しかし私はここではsysasminではなく、集中管理されたRHEL展開のユーザーです。私たちのRHEL5マシンはすべて、本質的に同じイメージであり、すべてのRHEL6マシンと同じです。そのため、メジャーリビジョンがあれば十分です。現在RHEL6に移行する計画段階にあることを考えると、RHEL7を心配する必要があるのはしばらく前だと思います。* 8 ')
マークブース

@derobert-いいえ、RHEL5&6ではlsb_release -r、他のテキストも含まれますRelease: 5.8。以下のようデニスKaarsemakerは説明するのにあなたが使用している場合、lsb_release -rs代わりに、あなただけの数を取得します。
マークブース

serverfault.com/questions/89654/what-version-of-rhel-am-i-usingも参照してください-lsbがインストールされていない場合にRPMでそれを行うためのヒントがあります。
ダンプリッツ14

回答:


10

lsb_releaseコマンドを使用することもできます。すでにRHELであると確信している場合、メジャーバージョン番号を取得するのは次のとおりです。

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

CentosおよびRedhatで適切に動作しますが、RedhatのOracle Linuxリリースでは失敗します。lsb_releaseが見つかりません。
user959690

この答えは今では時代遅れのようです。lsb_releaseRHEL / CentOS 5マシンでしか見つかりません。これは、6または7にどこにも見つからません
デール・アンダーソン

redhat-lsb-coreパッケージのインストールが必要になる場合があります。
デニスカースメーカー

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

これは私が考えることができる最も簡単な方法でしょう。


違って、私は5から7までの私の在庫で持っているのCentOSやRHELのあらゆる変化のための作品lsb_releaseのみ5の作業に思われる
デール・アンダーソン

4

使用する rpm -q |grep redhat-release-server

この/etc/redhat-releaseファイルは、実際のOSアップグレードを実行せずにサードパーティソフトウェアをインストールしようとしている管理者によって編集された可能性があります。


1
もしかしてrpm -qa代わりにrpm -q-q単独で使用するには、クエリ引数が必要です。
デールアンダーソン

@デールアンダーソン、ありがとう、これは7.4で私のために働いた唯一のものであり、私7.4がこれを実行するまで知らなかった-qa
ブライアン・トーマス

2

/etc/issueファイルの代わりに/etc/redhat-releaseファイルを使用することにより、複数のLinuxディストリビューションでこれを拡張できます。


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

rpm -q --queryformat '%{RELEASE}' rpm のようなものを印刷します 25.el7。次に、最後の桁を取得するだけです。RHEL 5、6、7およびFedora 24でテスト済み。

他の人が指摘したように、lsb-versionインストールされていない可能性があります。さらに、redhat-release-serverパッケージがインストールされていないRHEL5システムが少なくとも1つあります。


これは常に機能し、目的の数を正確に返すため、これは支持されるべきです。
-phiphi

1

この結果を得るための別のより正確な方法を次に示します。RHELのカーネルパッケージには文字列「elN」が含まれています。NはOSのメジャーバージョンを表します。したがって、次のコマンドを実行してRHELのバージョンを特定できます。

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

これは、指定されたホスト上の一致する文字列に応じて、文字列「el5」、「el6」または「el7」を返します。


CentOSとRedHatのバージョン5〜7を組み合わせて使用​​していますが、答えはすべてのバージョンで実際に機能します。sed 's /^.*(el [0-9] \ +)。* $ / \ 1 /'
WallStProg

0

ヨルダンを使用することになりましたの回答することになりましたが、独自のひねりを加えました。

私はすべてのrhel6コマンドとすべてのrhel5コマンドを一緒にしたくないが、独自のセクション内にインターリーブしたいので、切り替えを行うたびにこのコードを複製する必要がなかったため、これをやった:

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

ここで説明する方法はすべてテキストファイルに依存しているため、誤解を招く可能性があります。適切なアクセス権を持つSomeouneは、/ etc / redhat-release、/ etc / issueなどの内容を変更して、この情報をわかりにくくすることさえあります。より信頼性の高い方法は、RHELの各バージョンで通常Red Hatが提供するカーネルリリースを知ることです。

  • 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。管理者は、カーネルを同様に簡単に更新することを決定できます。
オリバーゴンジャ

0

RHEL 6は/ etc / system-release-cpeファイルを追加しました。これには、:次のように見える可能性のある- 区切り文字列が含まれます

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

RHELバージョンとRHELバリアントを取得するには、5ドルと7ドルのフィールドを取得するだけで十分です。

# 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以降でのみ機能する場合、質問の要件を満たしていないのですか?
ロアイマ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.