新しいカーネルがインストールされるたびにスクリプトを実行する

新しいカーネルがインストールされるたびにスクリプトを実行する

現時点では、新しいカーネルバージョンを入手するたびにソースからワイヤレスドライバを再コンパイルする必要があります。このプロセスを自動化するのは非常に有害だと思ったので、Bashビルドスクリプトを/etc/kernel/postinst.d。編む。

たとえば、3.0.0-14-genericを実行してapt-get dist-upgradeカーネル3.0.0-15-genericを実行すると、カーネル3.0.0-14-genericに対してコンパイルされますが、これはまったく役に立ちません。

make新しくインストールされたカーネルをコンパイルできるように呼び出しに渡すことができるように、インストールされているカーネルのバージョンをカーネルのpostinstスクリプトで知ることができますか?

答え1

これはあなたの質問に対する実際の答えではなく、関連性があり、役に立つツールのガイドラインにすぎません。


あなたはdkmsインストールされましたか? (ここにいくつかの情報があります、これアリオスページ瞬間恥ずかしい表情。 )私が誤解しなかった場合は、そうする必要があります。それ必要linux-headersインストールする適切なパッケージとモジュール/ファームウェア/類似パッケージインストールされているすべてのlinux-imageパッケージ。(ユニバーサルモジュールについては何と言うことはできませんが、non-free nvidiaモジュールと一緒に使用したときはうまくいきました。)

その他のリンクは次のとおりです。、良いマンページそしてlinuxjournal.comこの記事プログラムの Debian エコシステム中心ではなく解釈を提供します。 )

答え2

それは答えかもしれませんがdkms、問題や他の複雑なソリューションに参加したくない場合は、より簡単なソリューションを提供する方法を提供しています。

再起動して新しいカーネルの実行を開始するまでは実際には必要ありません。

次のスタンドアロンを使用できます。これ次の起動時にのみ実行されるように、コマンドとスクリプトをキューに入れるために使用されます。それから/etc/kernel/postinst.d

答え3

DKMSをサポートするディストリビューション(最も広く使用されているディストリビューションと同様)を実行している場合は、実際にdkmsが答えです。 DKMSを使用していないディストリビューションを実行している場合、または独自のLinuxをインストールした場合は、必ずお読みください。

問題は、postinst.d再起動する前にフックが呼び出され、unameまだ古いカーネルバージョンを返すことです。

解決策は少しハックですが、質問全体がアップグレード後に事前に構築されたモジュールをハッキングすることに関連していることを考慮すると大丈夫であると確信しています:)

次のようにファイルを列挙し/boot/(カーネルが他の場所にインストールされている非常に難しい設定を実行しない限り)、mdateで内容を並べ替え、最近インストールされたカーネルからカーネルバージョンを抽出します。

KVERSION=$(ls -at /boot | sed -n 's/^vmlinuz-//;t p;b;:p;p;q')
# KVERSION will hold some value like 4.19.0-10-arm64

(これはカーネルが次のように圧縮されてインストールされていると仮定します/boot/vmlinuz-${KVERSION}。)

答え4

新しくインストール/再インストールされたカーネルバージョンは、すべてのpostinst.dスクリプトに渡されるか、少なくともFedoraおよびRedhatおよびその派生製品に渡されます。 Bashの通常のスクリプトに渡された最初の引数を読み取ると、次の値が読み取られます。

kernel_ver = ${1}
...

渡される値は、実行時に取得した値と同じです。uname -r

テストしたばかりの値は、6.6.9-200.fc39.x86_64ドライバのコンパイルに使用した値です。

関連情報