📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
| 133行目: | 133行目: | ||
export PATH="/<QEMU-User-Staticのインストールディレクトリ>/bin:/<QEMU-User-Staticのインストールディレクトリ>/sbin:$PATH" | export PATH="/<QEMU-User-Staticのインストールディレクトリ>/bin:/<QEMU-User-Staticのインストールディレクトリ>/sbin:$PATH" | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<br><br> | |||
== QEMUバイナリフォーマット設定スクリプト (binfmt登録スクリプト) == | |||
このシェルスクリプトは、"binfmt script" や "QEMU binfmt setup" と略称されることもある。<br> | |||
<br> | |||
QEMUバイナリフォーマット設定スクリプトは、異なるアーキテクチャのバイナリをLinuxカーネルのbinfmt_misc機能を使用して自動的に実行できるように設定するものである。<br> | |||
各オプションの意味を以下に示す。<br> | |||
* --qemu-path <パス> | |||
*: QEMUインタープリタのインストールパスを指定する。 | |||
*: デフォルトでは環境変数<code>$QEMU_PATH</code>の値が使用される。 | |||
*: <br> | |||
* --qemu-suffix <サフィックス> | |||
*: QEMUインタープリタ名に接尾辞を追加する。 | |||
*: 例えば、複数バージョンのQEMUを区別する際に使用する。 | |||
*: <br> | |||
* --debian | |||
*: /procディレクトリに直接書き込まず、Debian / Ubuntu系のupdate-binfmtsコマンド用のテンプレートファイルを生成する。 | |||
*: <br> | |||
* --systemd <各アーキテクチャ名> | |||
*: /procディレクトリに直接書き込まず、systemd-binfmt.service用の設定ファイルを生成する。 | |||
*: <各アーキテクチャ名>には、具体的なアーキテクチャ (例: aarch64) を指定すると、そのアーキテクチャのみの設定を生成する。 | |||
*: また、<各アーキテクチャ名> に <code>ALL</code> を指定すると、全てのサポートCPUの設定を生成する。 | |||
*: <br> | |||
* --exportdir <パス> | |||
*: 設定ファイルの出力先ディレクトリを指定する。 | |||
*: デフォルトは以下の通り。 | |||
** systemdモード | |||
**: /etc/binfmt.d | |||
** debianモード | |||
**: /usr/share/binfmts | |||
*: <br> | |||
* セキュリティ・動作関連オプション | |||
*: <br> | |||
* --credential <yes または no> | |||
*: 重要なセキュリティオプション | |||
** yes | |||
**: 実行されるバイナリに基づいてクレデンシャル (UID / GID) やセキュリティトークンが計算される。 | |||
** no (デフォルト) | |||
**: インタープリタのクレデンシャルが使用される。 | |||
*: <br> | |||
*: binfmt_miscの <code>O</code> および <code>C</code> フラグに対応し、setuid / setgidバイナリの安全な実行に関連する。 | |||
*: <br> | |||
* --persistent <yes または no> | |||
*: パフォーマンスとメモリに関するオプション | |||
** yes | |||
**: binfmt設定時にインタープリタがメモリにロードされ、常駐する。以降の実行はこのオープンファイルからクローンされる。 | |||
**: yesを指定すると、インタープリタファイルが削除されても動作し続けるが、メモリを消費する。コンテナ環境で有用である。 | |||
** no (デフォルト) | |||
**: 実行の度にインタープリタファイルが読み込まれる。 | |||
*: <br> | |||
* --preserve-argv0 <yes または no> | |||
** yes | |||
**: 元のプログラム名を argv[0] として保持する。 | |||
** no (デフォルト) | |||
**: インタープリタ名が argv[0] になる。 | |||
**: プログラムが自分の名前を参照する動作に影響する。 | |||
*: <br> | |||
* --ignore-family <yes または no> | |||
** yes | |||
**: ホストCPUが同じファミリーのプログラムをネイティブに実行できないと仮定する。(例: RISC-V 64ホスト上でRISC-V 32プログラムも変換) | |||
** no (デフォルト) | |||
**: 同じファミリー内は互換性があると仮定する。 | |||
<br> | |||
# 使用例 | |||
# systemd環境で全アーキテクチャの設定を生成 | |||
./qemu-binfmt-conf.sh --systemd ALL --persistent yes | |||
# Debian環境でARM64のみ設定 | |||
./qemu-binfmt-conf.sh --debian --systemd aarch64 --credential yes | |||
# Docker等でpersistentモードを使用 | |||
./qemu-binfmt-conf.sh --persistent yes --credential yes | |||
<br> | |||
このスクリプトは、クロスプラットフォーム開発やDockerでのマルチアーキテクチャビルドにも使用されることもある。<br> | |||
<br><br> | <br><br> | ||