作成者: BlinkGTK Project
最終更新: 2026-07-03
対象: BlinkGTK
バイナリ配布物を使い、単一ディレクトリで動作する自己完結型 (ポータブル)
アプリケーションを作成する開発者
BlinkGTK のポータブル版とは、アプリケーション実行ファイルと BlinkGTK
/ Chromium
ランタイム一式を単一ディレクトリにまとめ、システムへのインストール
(RPM/DEB) なしにコピーするだけで動作する構成です。RPATH に
$ORIGIN (実行ファイル自身の位置からの相対参照)
を用いるため、ディレクトリごとどこに移動しても動作します。
ただし「自己完結」には明確な範囲があります。同梱されるのは BlinkGTK と Chromium ランタイムのみであり、GTK4・glibc・GPU ドライバ等はホストシステムのものを使用します。この境界を理解しないと「コピーしたのに動かない」事態になります。第 2 章で制限を詳しく解説します。
ポータブル版は「どこでも動く」わけではありません。以下の制限を必ず確認してください。
GLIBC_x.xx not found エラーで起動しません。ldd --version # ホストの glibc バージョン
ldd ./libblinkgtk-0.1.so.0.0.0 | grep "not found" # 欠落依存の列挙
not found が 1
件でもあれば、そのホストでは動作しません。pkg-config --modversion gtk4
またはディストリビューションのパッケージ管理で gtk4 の有無を確認。--ozone-platform=wayland を強制)。X11
セッションでは動作しません。echo $XDG_SESSION_TYPE で確認できます (wayland
であること)。--no-sandbox)
は動作はしますがセキュリティ保護を失うため、信頼できないコンテンツの表示には使用しないでください。/tmp が noexec
でマウントされている環境では、実行属性が有効な場所に展開してください。| 項目 | 要件 | 確認コマンド |
|---|---|---|
| CPU | x86_64 | uname -m |
| glibc | ビルド環境世代以降 | ldd --version /
ldd ... | grep "not found" |
| GTK4 | 4.6+ (システム) | pkg-config --modversion gtk4 |
| セッション | Wayland | echo $XDG_SESSION_TYPE |
| GPU (EGL 時) | Mesa + dmabuf | software 経路で切り分け |
| user namespaces | 有効 | sandbox 起動失敗時に確認 |
| 展開先 FS | ext4 等 + exec 可 | mount | grep noexec |
| 日本語フォント | ホストに必要 | fc-list | grep -i mincho 等 |
推奨レイアウト (単一ディレクトリ自己完結):
myapp-portable/
├── myapp # あなたのアプリ実行ファイル (RPATH=$ORIGIN/lib)
├── run.sh # 起動スクリプト (任意、環境変数の設定用)
├── lib/
│ ├── libblinkgtk-0.1.so.0.0.0
│ ├── libblinkgtk-0.1.so.0 -> libblinkgtk-0.1.so.0.0.0
│ └── chromium/ # Chromium ランタイム一式 (バイナリ配布物から)
│ ├── *.so # 共有ライブラリ群
│ ├── icudtl.dat / snapshot_blob.bin / v8_context_snapshot.bin
│ ├── content_shell.pak
│ └── locales/ja.pak, en-US.pak
├── share/
│ └── myapp/ # アプリのリソース
└── THIRD_PARTY_NOTICES.html # 必須 (第 6 章)
ランタイム一式は、バイナリ配布 (runtime tarball) の
usr/lib64/blinkgtk-0.1/ 以下をそのまま lib/
にコピーすることで得られます。ファイルの取捨選択はしないでください
— Chromium ランタイムの
.so、.pak、.dat、.bin、locales/
は全て起動に必要です (欠落は起動時クラッシュの典型原因)。
アプリは pkg-config を使ってビルドします。PartitionAlloc allocator shim の直接リンクが必須です (pkg-config を使えば自動で含まれます)。shim を欠くとページの読み込みが失敗し黒画面になります。
gcc -o myapp myapp.c \
$(pkg-config --cflags --libs blinkgtk-0.1 gtk4)pkg-config を使わず手動リンクする場合は、-lblinkgtk-0.1
に加えて必ず
-lbase_allocator_partition_allocator_src_partition_alloc_allocator_shim
を明示してください。
実行ファイルに $ORIGIN 相対の RPATH を与えます:
gcc -o myapp myapp.c \
$(pkg-config --cflags blinkgtk-0.1 gtk4) \
-Wl,-rpath,'$ORIGIN/lib' -Wl,-rpath,'$ORIGIN/lib/chromium' \
$(pkg-config --libs blinkgtk-0.1 gtk4)$ORIGIN
は「実行ファイル自身のあるディレクトリ」を意味し、ディレクトリごと移動しても解決されます。$ORIGIN
を展開させないよう、シングルクォートで囲むことに注意してください。RPATH を使わない代替として、起動スクリプトで
LD_LIBRARY_PATH を設定する方法もあります:
#!/bin/sh
# run.sh — myapp-portable/ 直下に配置
HERE="$(cd "$(dirname "$0")" && pwd)"
export LD_LIBRARY_PATH="$HERE/lib:$HERE/lib/chromium${LD_LIBRARY_PATH:+:$LD_LIBRARY_PATH}"
exec "$HERE/myapp" "$@"作成後、配布前に必ず確認してください:
# 1. 依存の完全性 (not found が 0 件であること)
ldd ./myapp | grep "not found"
# 2. shim が直接 NEEDED に入っていること
readelf -d ./myapp | grep allocator_shim
# 3. V8 スナップショットの整合 (同一配布物由来なら通常一致)
# lib/chromium/ の libv8.so / snapshot_blob.bin / v8_context_snapshot.bin を
# 別バージョンの配布物から混在させないこと (起動時クラッシュの原因)
# 4. 実機 (Wayland セッション) での起動確認
./run.shtar czf myapp-portable-1.0-linux-x86_64.tar.gz myapp-portable/BlinkGTK / Chromium ランタイムを同梱して配布する場合、以下が必要です:
libffmpeg.so は LGPL v2.1+
です。独立した共有ライブラリとして同梱されているため、利用者が差し替え可能な状態を保ってください
(静的リンク化・削除・改名をしないでください)。| 症状 | 原因候補 | 対処 |
|---|---|---|
GLIBC_x.xx not found |
ホスト glibc が古い | ホスト更新 or 同世代環境で使用 (§2.2) |
| 起動直後にクラッシュ (SIGTRAP) | V8 スナップショット混在 / shim 未リンク | §4.3 の 2,3 を確認 |
| ウィンドウが出ない | X11 セッション / コンポジタなし | $XDG_SESSION_TYPE 確認 (§2.4) |
| ページが黒いまま | shim 未リンク | readelf -d で確認 (§4.1) |
Permission denied |
noexec マウント / 実行属性喪失 | §2.7 (tar.gz で展開し直す) |
| 起動するが文字化け/豆腐 | ホストに日本語フォントなし | §2.9 |
| renderer 起動失敗 | user namespaces 無効 | §2.6 |
consumer-integration-guide-ja.md) —
API・シグナル・ライフサイクルinstallation/INSTALLATION-ja.md) —
システムインストール (RPM/DEB) を使う場合