LPIC-2 - 201試験 - 201:Linuxカーネル - 201.3 カーネルへのパッチ適用

Last Update : September 18 2014 21:34:19

     

a. パッチの適用

パッチとは、古いプログラムと新しいプログラムの差分データのことです。
patchコマンドによって、修正部分をプログラムのソースコードへ反映します。
パッチに利用するパッチファイルは、diffコマンドによって得られる差分情報の出力結果を利用します。 diffコマンドは、テキストファイルの差分情報を出力するコマンドです。

Linuxカーネルのバージョンアップには、カーネルソース全体を再構築するほか、パッチを適用して差分のみ更新する方法もあります。 パッチファイルを入手し、patchコマンドで適用を実施します。

● patch コマンド構文
  patch [オプション] < パッチファイル
  patch [オプション] [元ファイル[パッチファイル]]


● patch コマンドオプション
 -p パッチファイル内に書かれたパス名を修正する
-p0 パス名はそのまま
-p1 最初の / を削除(1つ分のディレクトリまで削除する)
-p2 次のディレクトリまで削除(2つ分のディレクトリまで削除する)
 -R パッチの適用を取り消して元に戻す
 -C どういうパッチ処理が行われるかテストをする
 -d 指定したディレクトリに移動してから処理を行う

「-p」に続く数字は、階層の深さを指定する。
旧データと新データのルートとなるディレクトリの名称は、大抵バージョン名が含まれているなどの理由で異なることが多い。 したがって、patchコマンド実行の際には、パッチ対象データのディレクトリ内に入り、「-p」を指定してパッチを当てることは少なくない。


コマンド例
# patch -p1 < patch-2.6.28

解凍と同時に適用するには
# gzip -dc patch-2.6.28 | patch -p1

パッチファイル名のパスとカレントディレクトリが異なる場合。
# gzip -dc ../patch-2.6.28 | patch -p1

パスを適宜指定しなければならないことに注意。

その他
カーネルへのパッチ適用をまとめて行うには、patch-kernelスクリプトを利用する

/usr/src/linux/scripts/patch-kernel

patch-kernelスクリプトは、カーネルのソースコードが置かれたディレクトリへ一緒に置かれています。 これを、以下の通り実行します。

# [新データ]/scripts/patch-kernel [旧データ]


b. パッチの削除

パッチ適用の失敗
 パッチをあてる場所が見つからないなど、あてることに失敗した場合は、その差分が記述されたリジェクトファイル(.rej)が生成されます。

パッチの取り外し
# patch -Rp0 < patch-2.6.28


z. 出題範囲概要

●主要な知識範囲
カーネルのMakefile
●重要なファイル、用語、ユーティリティ
patch gzip bzip2



     

www.it-shikaku.jp