Debian/Ubuntuにおけるbinfmt_miscに関するメモ(Ubuntu 11.04時点・前半)
Debian/Ubuntuでは、「シェルから直接Windowsアプリケーションを起動できる「binfmt_misc」」で扱ったbinfmt_miscの管理が独自なツールで行われており、幾つかの種類においては自動的に(特に手動での作業をすることなく)扱いやすい設定になっていることが分かった。
管理ツールについて
Debian/Ubuntuではupdate-binfmtsというツール(「binfmt-support」パッケージ内)によってbinfmt_miscの管理が行われ、OS起動時に自動的にカーネルへ設定を適用する。
現在の状態は--displayというオプションで確認できる。出力内容はディストリ内のパッケージのインストール状況によって異なる。
$ /usr/sbin/update-binfmts --display python2.6 (enabled): package = python2.6 type = magic offset = 0 magic = \xd1\xf2\x0d\x0a mask = interpreter = /usr/bin/python2.6 detector = python2.7 (enabled): package = python2.7 type = magic offset = 0 magic = \x03\xf3\x0d\x0a mask = interpreter = /usr/bin/python2.7 detector = cli (enabled): package = mono-runtime type = magic offset = 0 magic = MZ mask = interpreter = /usr/bin/cli detector = /usr/lib/cli/binfmt-detector-cli jar (enabled): package = openjdk-6 type = magic offset = 0 magic = PK\x03\x04 mask = interpreter = /usr/bin/jexec detector = jarwrapper (enabled): package = <local> type = magic offset = 0 magic = PK\x03\x04 mask = interpreter = /usr/bin/jarwrapper detector = /usr/bin/jardetector wine (enabled): package = wine type = magic offset = 0 magic = MZ mask = interpreter = /usr/bin/wine detector = python3.2 (enabled): package = python3.2 type = magic offset = 0 magic = \x6c\x0c\x0d\x0a mask = interpreter = /usr/bin/python3.2 detector =
この状態では、Python,Java,Mono関係のファイルとWindowsの実行形式をそのまま実行することができる。
新しくファイルの種類を追加するには--install,削除するには--remove,状態を無効化/有効化するには--disable/--enableをそれぞれ付けて管理者権限で実行するが、ここではそれらの作業は扱わない。
内部の動作について
/proc/sys/fs/binfmt_misc/以下を見ると、上の出力と対応する項目が存在する。
下の出力内容もディストリ内のパッケージのインストール状況によって異なる。
(注意:項目「register」と「status」はファイル形式に関連する項目ではない) $ ls /proc/sys/fs/binfmt_misc/ cli jar jarwrapper python2.6 python2.7 python3.2 register status wine
項目によっては
$ cat /proc/sys/fs/binfmt_misc/python3.2 enabled interpreter /usr/bin/python3.2 flags: offset 0 magic 6c0c0d0a
直接プログラムに渡すように設定されているが、同一のマジック(ファイルの種類を示す先頭の数バイト)で複数のファイル形式が考えられるものでは
$ cat /proc/sys/fs/binfmt_misc/cli enabled interpreter /usr/lib/binfmt-support/run-detectors flags: offset 0 magic 4d5a $ cat /proc/sys/fs/binfmt_misc/wine enabled interpreter /usr/lib/binfmt-support/run-detectors flags: offset 0 magic 4d5a $ cat /proc/sys/fs/binfmt_misc/jarwrapper enabled interpreter /usr/lib/binfmt-support/run-detectors flags: offset 0 magic 504b0304
いずれも/usr/lib/binfmt-support/run-detectorsというプログラムにとりあえず処理を渡しており、この中で形式の判別と適切なプログラムの実行とを行っているものと考えられる。
(「Debian/Ubuntuにおけるbinfmt_miscに関するメモ(Ubuntu 11.04時点・後半)」に続く)
関連記事: