Gentooのような非主流ディストリビューションでは、多くの主流ソフトウェアが公式のebuildを持っていなかったり、コンパイルが非常に面倒だったりします。例えば、WeChat、QQ、Traeなどのクローズドソースの商用ソフトウェアは、公式にはdebまたはrpmパッケージのみを提供しています。
今日は、私が長い間使っている「荒技」を紹介します:deb/rpmパッケージから実行ファイルと依存関係を直接抽出し、手動で組み立てて使用可能なソフトウェアにする。
読む前の注意:
- 本記事はGentooを例としていますが、他のディストリビューションでも考え方は似ています。具体的な操作はあなたのディストリビューションの实际情况に従ってください。
- ワークフロー: deb/rpmパッケージをダウンロード → ユーザーディレクトリにソフトウェアフォルダーを作成(例:
~/WeChat/)→ そのディレクトリに直接解包 → ファイルを整理 → 依存関係補完 → 起動スクリプト作成 → desktopファイル作成 → テスト実行とトラブルシューティング。- ダウンロードディレクトリ(例:
~/Downloads/)でまず解包し、必要なファイルを最終ディレクトリに移動する方法でも、最終ディレクトリ(例:~/アプリ名/)に直接解包する方法でも構いません。どちらの方法でも動作します。本記事は最終ディレクトリに直接解包する方法を採用しています。- 核心的な考え方: 抽出 → 依存関係補完 → 起動スクリプト作成 → desktopファイル作成 → テスト実行とトラブルシューティング。
⚠️ 注意事項:
- 本文中のファイル名(
wechat-linux.deb、qq.rpmなど)は例としてのみ使用されています。実際にダウンロードしたファイル名を使用してください。mvコマンドで実際のファイル名を例のファイル名に変更するか、例のファイル名を実際のファイル名に置き換えても構いません。方法は同じです。- 私はGentooを使用しています。他のディストリビューションの読者は本記事の考え方を参考にしていただけますが、具体的なコマンドとパッケージマネージャーはあなたのディストリビューション实际情况に従ってください。
- 本文中のパス
/home/yui/は私のユーザー名ディレクトリです。必ず你自己的ユーザー名に置き換えてください(例:/home/あなたのユーザー名/または~/)。
一、核心的な考え方
ほとんどのdeb/rpmパッケージは本質的に圧縮ファイルであり、以下のものが含まれています:
- 実行ファイル(通常
/opt/または/usr/bin/) - 共有ライブラリ(
.soファイル) - リソースファイル(アイコン、言語パックなど)
- desktopファイル(
/usr/share/applications/)
これらのファイルを抽出して1つのディレクトリに配置し、起動スクリプトとdesktopファイルを作成すれば、多くの場合ディストリビューション上で実行できます。もちろん、実際に実行できるかどうかはソフトウェア自体の依存関係の状況によります。
二、deb/rpmパッケージの抽出
一般的な方法:debパッケージの抽出
# ターゲットディレクトリを作成(WeChatは例の名前です。実際のソフトウェアに従ってください) |
dpkg-debがない場合(Debian系以外など)、arとtarを使用できます:
# arを使用してdebパッケージを抽出(debは本質的にarアーカイブです) |
一般的な方法:rpmパッケージの抽出
# rpm2cpioを使用して抽出(QQは例の名前、qq.rpmは例のファイル名です。实际情况に従ってください) |
rpm2cpioがない場合、app-arch/rpmが正常にインストールされているか確認するか、試しにalienで変換してみてください:
# alienをインストール |
抽出後のディレクトリ構造
抽出後のディレクトリ構造は通常システムディレクトリと一致しますが、パッケージの内容によります:
~/WeChat/ |
注意: ソフトウェアによってディレクトリ構造が異なる場合があります:
- 一部のソフトウェアは
opt/以下に配置(WeChat、QQなど) - 一部のソフトウェアは
usr/以下に配置(Trae、Clash Vergeなど) - 一部のパッケージには
etc/ディレクトリがない場合があります - 実際の抽出内容に従ってください
三、Gentooでの抽出ツール
Gentooでは、まず抽出ツールをインストールする必要があります:
# debパッケージ抽出に必要なツール |
インストールが完了すれば、dpkg-deb -xとrpm2cpioを使用してパッケージを抽出できます。
四、起動スクリプトの作成
抽出された実行ファイルは通常直接実行できず、いくつかの環境変数と設定が必要です。
簡単な例:WeChat(例)
WeChatの依存関係は私の環境では比較的完全で、簡単な起動スクリプトだけで済みます:
|
中程度の例:QQ(例)
QQは私の環境ではDMA-BUFレンダラーを無効にする必要があります。そうしないとWaylandで黒画面になる可能性があります:
|
複雑な例:Trae(例、Electronアプリケーション)
TraeはElectronベースのエディターで、中国語環境、Wayland互換性、プロキシの処理が必要になる場合があります:
|
一般的な環境変数の説明
| 変数 | 役割 |
|---|---|
WEBKIT_DISABLE_DMABUF_RENDERER=1 |
DMA-BUFを無効化、Waylandの黒画面を解決する可能性があります |
GDK_BACKEND=x11 |
X11バックエンドを強制的に使用する试试看 |
QT_QPA_PLATFORM=xcb |
QtアプリにX11を使用させる试试看 |
LANG/LC_ALL |
言語環境の設定 |
http_proxy/https_proxy |
プロキシの設定 |
LD_LIBRARY_PATH |
追加のライブラリ検索パスの指定 |
FONTCONFIG_FILE |
フォント設定ファイルの指定 |
五、Desktopファイルの作成
Desktopファイルにより、ソフトウェアがアプリケーションメニューに表示されます。抽出されたパッケージからコピーして修正するか、自分で作成することもできます。
WeChat desktopファイル(例)
[Desktop Entry] |
QQ desktopファイル(例)
[Desktop Entry] |
主要フィールドの説明
| フィールド | 説明 |
|---|---|
Exec |
起動スクリプトの絶対パス、または完全な起動コマンドを直接書くこともできます(例:Exec=env WEBKIT_DISABLE_DMABUF_RENDERER=1 /home/yui/QQ/opt/QQ/qq %F) |
Icon |
アイコンファイルの絶対パス |
StartupWMClass |
ウィンドウクラス名、タスクバーアイコンのグルーピングに使用 |
Categories |
アプリケーション分類 |
MimeType |
サポートするファイルタイプ |
💡 ヒント: Desktop ファイルの
Execフィールドは、起動スクリプトを呼び出す(本記事の例のように)ことも、完全な起動コマンドを直接書くこともできます。どちらの方法でも動作します。個人的な好み次第です。私は起動スクリプトを書く方が環境変数が明確で、メンテナンスとデバッグがしやすいと思っています。
desktopファイルを~/.local/share/applications/ディレクトリに配置します。ほとんどのデスクトップ環境は新しいファイルを自動的に検出します。有効にならない場合は、以下を実行できます:
# desktopデータベースを更新 |
六、Gentooでの依存関係処理
Gentooでは、抽出されたソフトウェアにいくつかの依存ライブラリが不足している場合があり、Portageで補完する必要があります。
不足しているライブラリの確認(例)
# 注意:パスは例です。実際の実行ファイルパスに従ってください |
どのパッケージがこのライブラリを提供するか查找(例)
# まずgentoolkitをインストールする必要があります |
不足している依存関係のインストール(例)
# libxxxは例のパッケージ名です。実際に查找したパッケージ名に従ってください |
一般的な依存関係の例
例えば、WeChatにはこれらの依存関係が必要になる場合があります:
media-libs/libvlc- VLCメディアライブラリmedia-video/ffmpeg- オーディオ/ビデオ処理dev-libs/nss- ネットワークセキュリティサービスx11-libs/gtk+- GTKグラフィックスライブラリ
実際に何が不足しているかは、lddで確認する必要があります。
七、テスト実行とトラブルシューティング
ステップ1:コマンドラインで直接実行(例)
まずターミナルで実行ファイルを直接実行し、何が不足しているか確認します:
# 注意:パスは例です。実際の実行ファイルパスに従ってください |
一般的なエラーと解決方法
1. 共有ライブラリの不足
error while loading shared libraries: libxxx.so: cannot open shared object file |
解決方法:
ldd /path/to/executableで不足しているライブラリを確認- deb/rpmパッケージから対応する
.so文件を查找 - またはディストリビューションのパッケージマネージャーでシステムレベルの依存関係をインストール
2. 中国語が□□□で表示される
フォントが不足しており、中国語が□□□で表示される |
解決方法:
- 中国語フォントをインストール:
emerge media-fonts/noto-cjk - または起動スクリプトで
FONTCONFIG_FILEをカスタムフォント設定に向ける
3. Waylandで黒画面/クラッシュ
デスクトップ環境がWaylandを使用している場合、この問題に遭遇する可能性があります:
解決方法:
WEBKIT_DISABLE_DMABUF_RENDERER=1を试试看追加- またはX11を強制试试看:
GDK_BACKEND=x11 - Electronアプリの場合:
--ozone-platform=x11または--ozone-platform-hint=autoを试试看
4. プロキシが有効にならない
ソフトウェアがプロキシを経由する必要がある場合:
解決方法:
- 起動スクリプトで
http_proxyとhttps_proxyを設定 - Electronアプリには追加の
--proxy-serverパラメータが必要になる場合があります - または
proxychainsを试试看使用:proxychains4 /path/to/executable
5. 権限の問題
Permission denied |
解決方法:
# 注意:パスは例です。実際のパスに従ってください |
6. サンドボックスエラー(Electronアプリケーション)
The SUID sandbox helper binary was found, but is not configured correctly |
解決方法:
- 起動スクリプトに
--no-sandboxパラメータを追加 - または
CHROME_DEVEL_SANDBOX環境変数を設定
八、高度なテクニック
1. LD_LIBRARY_PATHでライブラリパスを指定(例)
ソフトウェアの依存ライブラリのバージョンがシステムと異なる場合、ライブラリをソフトウェアディレクトリに配置试试看:
|
2. 自動更新スクリプト(例)
最新バージョンを自動的にダウンロードして抽出するスクリプトを作成します:
|
3. patchelfでELFファイルを変更(例)
ライブラリパスが正しくない場合、patchelfを使用して変更试试看:
# patchelfをインストール |
4. straceでデバッグ(例)
ソフトウェアの起動に失敗した場合、straceでシステムコールを確認できます:
# 注意:パスは例です。実際の実行ファイルパスに従ってください |
5. lddで依存関係の完全性を確認(例)
# 注意:パスは例です。実際の実行ファイルパスに従ってください |
九、私のソフトウェアディレクトリ構造
現在、この方法でこれらのソフトウェアをインストールしています:
/home/yui/ |
ご覧の通り、パッケージによってディレクトリ構造はかなり異なります:
- debパッケージ(WeChat、QQ)は通常
opt/ディレクトリがあります - rpmパッケージ(Trae、Clash)は通常
usr/ディレクトリのみがあります - 実際の抽出内容に従ってください
十、まとめ
この方法の利点:
- root権限不要:すべてのファイルはユーザーディレクトリにあります
- システムに影響なし:Portageで管理されているパッケージと競合しません
- 柔軟で制御可能:環境変数と起動パラメータをカスタマイズできます
- 学習価値:Linuxソフトウェアの依存関係を深く理解できます
欠点:
- 手動更新が必要:ソフトウェアの更新時に再抽出が必要です
- 依存関係管理が面倒:不足しているライブラリを自分で処理する必要があります
- セキュリティ:クローズドソースソフトウェアのため、コードを監査できません
- 互換性:一部のソフトウェアは特定のディストリビューションの機能に依存している可能性があります
总的来说、Gentooのような非主流ディストリビューションのユーザーにとって、これは非常に実用的な「荒技」です。エレガントではありませんが、問題を解決できる良い方法です。
ヒント:
- KDE Plasmaを使用している場合、「システム設定 → 外観 → アプリケーションスタイル」で
StartupWMClassを設定し、タスクバーアイコンを正しくグルーピングできます。- Electronアプリケーションの場合、
electron-builderでパッケージ化されたバージョンを考慮してください。通常、依存関係がより完全です。- もし特定のソフトウェアがどうしても実行できない場合は、FlatpakまたはAppImageバージョンを試してみてください。
この記事について
この記事は 青空由依(AozoraYui)/青空由纪(AozoraYuki)/青空葵(AozoraAoi) によって書かれ、CC BY-NC 4.0 のライセンスの下で公開されています。