web-dev-qa-db-ja.com

unameが壊れています:現在実行中のカーネルを確認するにはどうすればよいですか?

> uname -r
FATAL: kernel too old
> cat /proc/cmdline
FATAL: kernel too old

/ bootには3つの* .vmlinuz-linuxファイルがあります。現在実行中のカーネルを確認するにはどうすればよいですか?

最小限のシェルで制限された環境で実行していることに注意してください。私も試しました:

> sh -c 'read l < /proc/version; echo $l'
FATAL: kernel too old
> dd if=/proc/version
FATAL: kernel too old

何かご意見は?

13
William Pursell

これは、サポートするようにコンパイルされたライブラリよりも古いカーネルでglibcが実行されている場合にglibcがスローするエラーのようです。エラーメッセージは _sysdeps/unix/sysv/linux/dl-osinfo.h_DL_SYSDEP_OSCHECK(FATAL)マクロにあります

これには コンパイル時オプション があります。

_--enable-kernel=version_
現在、このオプションはGNU/Linuxシステムでのみ有用です。バージョンパラメータはX.Y.Zの形式である必要があり、生成されたライブラリがサポートすると予想されるLinuxカーネルの最小バージョンを記述します。バージョン番号が大きいほど、追加される互換性コードが少なくなり、コードの取得が速くなります。

したがって、何らかの理由で、古いカーネルを使用しているシステムを実行しているようですが、glibcがインストールされており、古いカーネルをサポートしていません。どのシステムであるかについての情報がないと、どのように取得したかはわかりませんが、ライブラリが更新されていてもカーネルが更新されていない場合に発生する可能性があると考える人もいます。

fileは、実行可能ファイルまたはライブラリに必要な最小バージョンを表示しているようです(ただし、実行するためには、動作するライブラリが必要です)。

_/lib/x86_64-linux-gnu/libc-2.23.so: ELF 64-bit LSB shared object, x86-64, ..., for GNU/Linux 2.6.32, stripped
_

私の半現在のDebianシステムでは、必要なカーネルバージョンは、確認したすべてのバイナリで上記のように_2.6.32_です。これにより、カーネルバージョンの問題が発生する可能性は非常に低くなります。

6
ilkkachu

これで試してください:

cat /proc/version
5
Sven

stringsコマンドを使用して、vmlinuzファイルから印刷可能な情報を抽出します。

strings vmlinuz | grep version

出力例:

4.9.0-6-AMD64 ([email protected]) (gcc version 6.3.0 20170516
(Debian 6.3.0-18+deb9u1) ) #1 SMP Debian 4.9.82-1+deb9u3 (2018-03-02)
0
GAD3R