目次
以下のポリシーが Debian GNU/Linux に適用されます。これらのなかには、 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-
で始まるかどうかをチェックし、その場合は何もしないようにすると良いでしょう。
カーネルパッケージはブートローダまたはinitramfsをフックを経由する以外の方法で起動してはいけません。もし、/etc/kernel-img.conf
に do_bootloader = yes
または同等のオプションが設定されている場合、以前これに作用したメンテナスクリプトはこのオプションを無視することを警告しなければなりません。linux-base
もまた、アップデート時にデフォルトが変更されたことを警告しなければなりません。