ディストリビューション名とホスト名を取得するための共通コードをドライバーに書いています。ホスト名は から取得していますstruct utsname{nodename[]}
が、ディストリビューション名を取得するにはどうすればよいでしょうか?
答え1
私が見たほとんどのプログラムとスクリプトは、 の通常のファイルを解析します/etc
。私の知る限り、他に方法はありません。
On Redhat, look for /etc/redhat-release
On Debian, look for /etc/debian_version
Mandriva has /etc/version
and Slackware has /etc/slackware-version
uname
を取得するには を使用することもできますARCH
が、おそらく最も合理的な方法として を使用することもできますlsb_release
。
答え2
Facterがどのようにそれを実現しているか見てみましょうここ。
Jan が言ったように、lsb_release はおそらく最善の方法ですが、唯一の方法ではありません。たとえば、私の RHEL サーバーのいずれにも lsb_release はデフォルトで存在しません。
[damaya@damaya-sandbox script]$ lsb_release
-bash: lsb_release: command not found
[damaya@damaya-sandbox script]$ yum provides "*/lsb_release"
redhat-lsb-core-4.0-7.el6.centos.i686 : LSB base libraries support for CentOS
Repo : base
Matched from:
Filename : /usr/bin/lsb_release
したがって、lsb_release がシステムに存在しない場合、次のステップは /etc/*-release ファイルから情報を取得することです。ただし、このファイルもシステムに存在しない場合は、運が悪いことになります。残念ながら、この情報を取得する 100% 信頼できる方法は存在しません。
答え3
ディストリビューション名を取得するためのスコープはカーネル開発スコープ内にありません。したがって、現在特定のメソッドは存在しません。このために、ドライバーでモジュール パラメータを要求しています。コンパイル時に ENV 変数を要求することもできます。
ご協力いただきありがとうございます...