📢 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>