[ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 次のページ ]
Debian のカーネルパッケージは複雑なメンテナスクリプトを歴史的に引き継いでいます。このスクリプは、ファイルテストと、/etc/kernel-img.confファイルと debconf の質問による明示的な設定の複合に基いて、initramfs ビルダーおよび/またはブートローダを起動します。Debian 6.0 以降、これは大幅に簡略化されています。
以下のポリシーは GNU/Linux 6.0 'squeeze' と、それ以降のリリースに関し適用されます。これらのなかには、 Linux 以外のカーネルに対して適用可能なものもありますが、このポリシーにはそれらのための要件を設定していません。
Linux カーネルパッケージ内のメンテナスクリプトは、 /etc/kernel の対応したサブディレクトリに配置されたフックスクリプトを起動する際に run-parts を使用しなければなりません。例えば、postinst スクリプトは /etc/kernel/postinst.d 内のスクリプトを起動します。
全てのカーネルフックスクリプトには、カーネルの ABI バージョン (uname -r コマンドが応答する文字列) と、 必要であれば、カーネルイメージへの絶対パスを引数として渡します。2 つ目の引数が無い場合アーキテクチャの慣例に従い、パスは /boot/vmlinuz-version か /boot/vmlinux-version になります。カーネルのメンテナスクリプトに与えられる引数は、環境変数 DEB_MAINT_PARAMS に格納されます。これは、単一引用符で囲まれている場合があります。シェルスクリプト内では、この変数は次のようにパースできます:
eval set -- "$DEB_MAINT_PARAMS"
カーネルフックスクリプトは debconf の下で実行することもできます。その場合、stdin と stdout は使用せず、全て stderr (fd 2) に出力しなければなりません。シェルスクリプトで確実にそうするには、次のように書きます:
exec </dev/null >&2
ブートローダがロードするファイルが変更された場合、必ず更新しなければならないブートローダ用のパッケージ (ブロックリストを保存しているものなど) は /etc/kernel/postinst.d と /etc/kernel/postrm.d にフックスクリプトをインストールしなければなりません。
これらのブートローダはインストール/アップグレード/削除の最終段階で更新されるべきものです。したがって、ブートローダのフックスクリプトに zz- のプレフィックスを持たせて他のパッケージはこのプレフィックスを使わないようにするか、後でrun-parts で使用されるルールを使用して並び替えなければなりません。ブートローダの設定ファイルが、削除されたカーネルイメージを参照している場合、postrm フックスクリプトは警告すべきですが、終了コードは 0 を返さなければなりません。
これらのブートローダパッケージは、ブートセクタや特殊なストレージに書き込まないように、無効化された状態でファイルシステムにインストール可能でなければなりません。ブートローダが無効になっている間、カーネルフックは (任意で) ブートローダが無効になっているという警告を出力する以外は何もせず、成功裏に終了しなければなりません。
カーネルバージョンのメニューを提供することができるブートローダ用のパッケージは、メニューを更新するためにカーネルフックスクリプトをインストールするべきです。
ブートローダがロードするファイルが変更された場合、必ず更新しなければならないブートローダ用のパッケージは、/etc/initramfs/post-update.d にフックスクリプトをインストールしなければなりません。initramfs ビルダーは initramfs を作成、更新、または削除した後にこのスクリプトを run-parts から呼び出します。これら のフックスクリプトに与えられる引数は、カーネルの ABI バージョンと、initramfs イメージへの絶対パスです。
ブートローダが無効になっている間、initramfs フックは (任意で) ブートローダが無効になっているという警告を出力する以外は何もせず、成功裏に終了しなければなりません。
Initramfs ビルダーは、対応する initramfs イメージを作成/更新/削除するために、/etc/kernel/postinst.d と /etc/kernel/postrm.d にフックスクリプトをインストールしなければなりません。postinst フックスクリプトは return する前にその処理を終えている必要があります。
カーネルパッケージのインストール、更新、または削除中に、様々なブートローダ hook が (次の順で) 起動します:
postinst_hook または postrm_hook ユーザかインストーラによる /etc/kernel-img.conf 内のコマンドセット
/etc/initramfs/post-update.d内のフックスクリプト
/etc/kernel/postinst.d または /postrm.d 内のフックスクリプト
不要な更新を避けるには、ステップ 1 と ステップ 2 で呼び出されるフックは、$DPKG_MAINTSCRIPT_PACKAGE が linux-image- で始まるかどうかをチェックし、その場合は何もしないようにすると良いでしょう。
カーネルパッケージはフックを経由する以外の方法でブートローダを起動してはいけません。/etc/kernel-img.conf に do_bootloader = yesまたは同等のオプションが設定されている場合、以前これに作用したメンテナスクリプトはこのオプションを無視することを警告しなければなりません。linux-base もまた、アップデート時にデフォルトが変更されたことを警告しなければなりません。Debian 7.0 'wheezy' では、この禁止条件は initramfs ビルダーパッケージにも拡張されます。
インストーラは /etc/kernel-img.conf 内のdo_bootloader、postinst_hook または postrm_hook オプションを設定してはいけません。
[ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 次のページ ]
Debian Linux カーネルハンドブック
version 1.0.16, Fri 14 Aug 12:53:11 CEST 2015