web-dev-qa-db-ja.com

カーネルにパッチを適用する正しい方法は?

here にある指示に従ってサーバーをセットアップしています。マシンにダウンロードしたパッチを適用する必要があると書かれています。私の質問は、この記事では次のコマンドを使用するように指示されていることです。

/usr/src/linux # patch -p1 < file.diff //note I replace file.diff w/ routes-2.6.36.16.diff

これは返します:

-bash: /usr/src/linux: No such file or directory

/linux #は実際のLinuxカーネルのバージョン/ディレクトリに置き換える必要があると仮定します。次のコマンドを使用してこれを試しました。

/usr/src/linux-headers-2.6.35.22 patch -p1 < file.diff

これは同じものを返します。/usr/srcの内容を表示すると、linux-headers-2.6.35.22linux-headers-2.6.35.22-generic-paeの2つのディレクトリしかありません。カーネルにパッチを適用する正しい方法に関するガイダンスが必要です。

編集

/usr/src/linux-headers-2.6.35.22/ patch -p1 file.diffを実行すると、-bash: /usr/src/linux-headers-2.6.35.22: is a directoryが取得されます。ここでパッチを適用する必要がある特定のファイルを見つける方法を知る必要があります...

3
jon3laze

欲求不満を避けるために、一般的にそのようなことをUbuntuの方法で行う必要があります。公式パッケージを使用した完全な手順は、次の場所にあります。

https://help.ubuntu.com/community/Kernel/Compile

依存関係のリストと、カスタムカーネルを起動して実行するための段階的なコマンドを提供します。

その手順に従うことで、カスタムカーネルを含むアンインストール可能なパッケージが作成されます。つまり、必要に応じて将来、公式のカーネルに戻すことができます。

2
ImaginaryRobots

ソースをダウンロードする必要があります。これはapt-srcを介して行うことができますが、(個人的に) kernel.org から最新のものを取得し、それを抽出し、パッチを適用します(デスクトップのようなローカルパスを使用するだけで、/usr/srcに隠してください!)そして "old fashioned way" の指示に従ってコンパイルしてください。

一部のパッチはカーネルの特定のバージョン(ポイントリリースを含む)専用であるため、20〜30分コンパイルする前にソースバージョンでパッチが機能することを確認してください。

しかし、あなたの特定の問題は、パッチを適用したいディレクトリにいる必要があるということです。あなたの場合:

cd /usr/src/linux-headers-2.6.35.22/
patch -p1 < /path/to/file.diff

明らかにパッチへのパスを変更します(または同じディレクトリに貼り付けます)。ソースファイルがルートによって所有されている場合は、Sudoをパッチコマンドの前に付けるか、Sudo suを実行してルートにします。

4
Oli

以下の手順は、コマンドラインプロンプト/usr/src/linux #を示しています。これは、コマンドの一部として入力するものではありません。パッチを適用する入力コマンドは、patchで始まり、そこから継続します。

1
Kees Cook