メインコンテンツへスキップ

非主流ディストリビューション生存ガイド:deb/rpmパッケージからファイルを抽出して手動でソフトウェアをインストール

Gentooのような非主流ディストリビューションでは、多くの主流ソフトウェアが公式のebuildを持っていなかったり、コンパイルが非常に面倒だったりします。例えば、WeChat、QQ、Traeなどのクローズドソースの商用ソフトウェアは、公式にはdebまたはrpmパッケージのみを提供しています。

今日は、私が長い間使っている「荒技」を紹介します:deb/rpmパッケージから実行ファイルと依存関係を直接抽出し、手動で組み立てて使用可能なソフトウェアにする

読む前の注意:

  1. 本記事はGentooを例としていますが、他のディストリビューションでも考え方は似ています。具体的な操作はあなたのディストリビューションの实际情况に従ってください。
  2. ワークフロー: deb/rpmパッケージをダウンロード → ユーザーディレクトリにソフトウェアフォルダーを作成(例:~/WeChat/)→ そのディレクトリに直接解包 → ファイルを整理 → 依存関係補完 → 起動スクリプト作成 → desktopファイル作成 → テスト実行とトラブルシューティング。
  3. ダウンロードディレクトリ(例:~/Downloads/)でまず解包し、必要なファイルを最終ディレクトリに移動する方法でも、最終ディレクトリ(例:~/アプリ名/)に直接解包する方法でも構いません。どちらの方法でも動作します。本記事は最終ディレクトリに直接解包する方法を採用しています。
  4. 核心的な考え方: 抽出 → 依存関係補完 → 起動スクリプト作成 → desktopファイル作成 → テスト実行とトラブルシューティング。

⚠️ 注意事項:

  • 本文中のファイル名(wechat-linux.debqq.rpmなど)は例としてのみ使用されています。実際にダウンロードしたファイル名を使用してください。
  • mvコマンドで実際のファイル名を例のファイル名に変更するか、例のファイル名を実際のファイル名に置き換えても構いません。方法は同じです。
  • 私はGentooを使用しています。他のディストリビューションの読者は本記事の考え方を参考にしていただけますが、具体的なコマンドとパッケージマネージャーはあなたのディストリビューション实际情况に従ってください。
  • 本文中のパス/home/yui/は私のユーザー名ディレクトリです。必ず你自己的ユーザー名に置き換えてください(例:/home/あなたのユーザー名/または~/)。

一、核心的な考え方

ほとんどのdeb/rpmパッケージは本質的に圧縮ファイルであり、以下のものが含まれています:

  • 実行ファイル(通常/opt/または/usr/bin/
  • 共有ライブラリ(.soファイル)
  • リソースファイル(アイコン、言語パックなど)
  • desktopファイル(/usr/share/applications/

これらのファイルを抽出して1つのディレクトリに配置し、起動スクリプトとdesktopファイルを作成すれば、多くの場合ディストリビューション上で実行できます。もちろん、実際に実行できるかどうかはソフトウェア自体の依存関係の状況によります。

二、deb/rpmパッケージの抽出

一般的な方法:debパッケージの抽出

# ターゲットディレクトリを作成(WeChatは例の名前です。実際のソフトウェアに従ってください)
mkdir -p ~/WeChat

# debパッケージの内容を抽出(wechat-linux.debは例のファイル名です。実際にダウンロードしたファイル名に従ってください)
dpkg-deb -x wechat-linux.deb ~/WeChat/

dpkg-debがない場合(Debian系以外など)、artarを使用できます:

# arを使用してdebパッケージを抽出(debは本質的にarアーカイブです)
mkdir -p ~/WeChat
cd ~/WeChat
ar x ../wechat-linux.deb
tar -xf data.tar.xz # または data.tar.gz / data.tar.zst

一般的な方法:rpmパッケージの抽出

# rpm2cpioを使用して抽出(QQは例の名前、qq.rpmは例のファイル名です。实际情况に従ってください)
mkdir -p ~/QQ
cd ~/QQ
rpm2cpio qq.rpm | cpio -idmv

rpm2cpioがない場合、app-arch/rpmが正常にインストールされているか確認するか、試しにalienで変換してみてください:

# alienをインストール
sudo emerge app-arch/alien

# rpmをtgzに変換してから抽出
sudo alien --to-tgz qq.rpm
tar -xzf qq.tgz

抽出後のディレクトリ構造

抽出後のディレクトリ構造は通常システムディレクトリと一致しますが、パッケージの内容によります

~/WeChat/
├── opt/wechat/ # 実行ファイルとライブラリ(一部のパッケージはここに配置)
└── usr/
├── share/
│ ├── applications/ # desktopファイル
│ └── icons/ # アイコン
└── doc/ # ドキュメント(changelogなど)

注意: ソフトウェアによってディレクトリ構造が異なる場合があります:

  • 一部のソフトウェアはopt/以下に配置(WeChat、QQなど)
  • 一部のソフトウェアはusr/以下に配置(Trae、Clash Vergeなど)
  • 一部のパッケージにはetc/ディレクトリがない場合があります
  • 実際の抽出内容に従ってください

三、Gentooでの抽出ツール

Gentooでは、まず抽出ツールをインストールする必要があります:

# debパッケージ抽出に必要なツール
sudo emerge app-arch/dpkg

# rpmパッケージ抽出に必要なツール
sudo emerge app-arch/rpm

インストールが完了すれば、dpkg-deb -xrpm2cpioを使用してパッケージを抽出できます。

四、起動スクリプトの作成

抽出された実行ファイルは通常直接実行できず、いくつかの環境変数と設定が必要です。

簡単な例:WeChat(例)

WeChatの依存関係は私の環境では比較的完全で、簡単な起動スクリプトだけで済みます:

#!/bin/bash
# 注意:パス /home/yui/WeChat/opt/wechat/wechat は例です。実際のパスに従ってください
exec /home/yui/WeChat/opt/wechat/wechat "$@"

中程度の例:QQ(例)

QQは私の環境ではDMA-BUFレンダラーを無効にする必要があります。そうしないとWaylandで黒画面になる可能性があります:

#!/bin/bash
# 注意:パス /home/yui/QQ/opt/QQ/qq は例です。実際のパスに従ってください
export WEBKIT_DISABLE_DMABUF_RENDERER=1
exec /home/yui/QQ/opt/QQ/qq "$@"

複雑な例:Trae(例、Electronアプリケーション)

TraeはElectronベースのエディターで、中国語環境、Wayland互換性、プロキシの処理が必要になる場合があります

#!/bin/bash
# Trae起動スクリプト(例)
# 注意:パス /home/yui/trae は例です。実際のパスに従ってください

cd /home/yui/trae

# 中国語環境
export LANG=zh_CN.UTF-8
export LC_ALL=zh_CN.UTF-8
export LANGUAGE=zh_CN:zh

# Wayland互換性(ElectronアプリはWaylandで必要になる場合があります)
export GDK_BACKEND=x11
export QT_QPA_PLATFORM=xcb

# プロキシ(必要な場合、プロキシアドレスは例です。实际情况に従ってください)
# 7897 は Clash Verge Rev のデフォルトポートです。Clash をインストールしている場合、この方法を使用できます
# または Clash の仮想ネットワークカードモード(TUN モード)を有効にすると、すべてのトラフィックが自動的にプロキシを経由するため、環境変数の設定は不要です
export https_proxy=http://127.0.0.1:7897 # ポート番号は実際のプロキシ設定に従ってください
export http_proxy=http://127.0.0.1:7897 # ポート番号は実際のプロキシに従ってください

# Traeを実行
exec /home/yui/trae/usr/share/trae-cn/trae-cn "$@"

一般的な環境変数の説明

変数 役割
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]
Name=WeChat
Comment=Tencent WeChat
Exec=/home/yui/WeChat/run-wechat.sh # 注意:パスは例です。実際のパスに従ってください
Icon=/home/yui/WeChat/usr/share/icons/hicolor/256x256/apps/wechat.png # アイコンパスは例です
Terminal=false
Type=Application
Categories=Network;InstantMessaging;
StartupWMClass=wechat

QQ desktopファイル(例)

[Desktop Entry]
Name=QQ
Comment=Tencent QQ
Exec=/home/yui/QQ/run-qq.sh # 注意:パスは例です。実際のパスに従ってください
Icon=/home/yui/QQ/usr/share/icons/hicolor/512x512/apps/qq.png # アイコンパスは例です
Terminal=false
Type=Application
Categories=Network;InstantMessaging;
StartupWMClass=qq

主要フィールドの説明

フィールド 説明
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データベースを更新
update-desktop-database ~/.local/share/applications/
# またはデスクトップ環境に再ログイン

六、Gentooでの依存関係処理

Gentooでは、抽出されたソフトウェアにいくつかの依存ライブラリが不足している場合があり、Portageで補完する必要があります。

不足しているライブラリの確認(例)

# 注意:パスは例です。実際の実行ファイルパスに従ってください
ldd /home/yui/WeChat/opt/wechat/wechat | grep "not found"

どのパッケージがこのライブラリを提供するか查找(例)

# まずgentoolkitをインストールする必要があります
sudo emerge app-portage/gentoolkit

# equeryで查找(libxxx.soは例です。実際に不足しているライブラリ名に従ってください)
equery belongs libxxx.so

不足している依存関係のインストール(例)

# libxxxは例のパッケージ名です。実際に查找したパッケージ名に従ってください
sudo emerge media-libs/libxxx

一般的な依存関係の例

例えば、WeChatにはこれらの依存関係が必要になる場合があります:

  • media-libs/libvlc - VLCメディアライブラリ
  • media-video/ffmpeg - オーディオ/ビデオ処理
  • dev-libs/nss - ネットワークセキュリティサービス
  • x11-libs/gtk+ - GTKグラフィックスライブラリ

実際に何が不足しているかは、lddで確認する必要があります。

七、テスト実行とトラブルシューティング

ステップ1:コマンドラインで直接実行(例)

まずターミナルで実行ファイルを直接実行し、何が不足しているか確認します:

# 注意:パスは例です。実際の実行ファイルパスに従ってください
/home/yui/WeChat/opt/wechat/wechat

一般的なエラーと解決方法

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_proxyhttps_proxyを設定
  • Electronアプリには追加の--proxy-serverパラメータが必要になる場合があります
  • またはproxychains试试看使用:proxychains4 /path/to/executable

5. 権限の問題

Permission denied

解決方法:

# 注意:パスは例です。実際のパスに従ってください
chmod +x /home/yui/WeChat/opt/wechat/wechat
chmod +x /home/yui/WeChat/run-wechat.sh

6. サンドボックスエラー(Electronアプリケーション)

The SUID sandbox helper binary was found, but is not configured correctly

解決方法:

  • 起動スクリプトに--no-sandboxパラメータを追加
  • またはCHROME_DEVEL_SANDBOX環境変数を設定

八、高度なテクニック

1. LD_LIBRARY_PATHでライブラリパスを指定(例)

ソフトウェアの依存ライブラリのバージョンがシステムと異なる場合、ライブラリをソフトウェアディレクトリに配置试试看

#!/bin/bash
# 注意:パスは例です。実際のパスに従ってください
export LD_LIBRARY_PATH=/home/yui/WeChat/opt/wechat/lib:$LD_LIBRARY_PATH
exec /home/yui/WeChat/opt/wechat/wechat "$@"

2. 自動更新スクリプト(例)

最新バージョンを自動的にダウンロードして抽出するスクリプトを作成します:

#!/bin/bash
# update-wechat.sh(例、ファイル名は实际情况に従ってください)

cd /tmp
# 注意:URLは例です。実際のダウンロードリンクに従ってください
wget https://example.com/wechat-linux.deb

rm -rf ~/WeChat
mkdir -p ~/WeChat
dpkg-deb -x wechat-linux.deb ~/WeChat/

echo "WeChatが更新されました"

3. patchelfでELFファイルを変更(例)

ライブラリパスが正しくない場合、patchelfを使用して変更试试看

# patchelfをインストール
sudo emerge dev-util/patchelf

# RPATHを変更(パスは例です。実際のパスに従ってください)
patchelf --set-rpath '$ORIGIN/lib' /home/yui/WeChat/opt/wechat/wechat

# 現在のRPATHを表示(パスは例です。実際のパスに従ってください)
patchelf --print-rpath /home/yui/WeChat/opt/wechat/wechat

4. straceでデバッグ(例)

ソフトウェアの起動に失敗した場合、straceでシステムコールを確認できます:

# 注意:パスは例です。実際の実行ファイルパスに従ってください
strace -f /home/yui/WeChat/opt/wechat/wechat 2>&1 | grep -E "open|ENOENT"

5. lddで依存関係の完全性を確認(例)

# 注意:パスは例です。実際の実行ファイルパスに従ってください
# すべての依存関係を表示
ldd /home/yui/WeChat/opt/wechat/wechat

# 不足しているライブラリのみ表示
ldd /home/yui/WeChat/opt/wechat/wechat | grep "not found"

九、私のソフトウェアディレクトリ構造

現在、この方法でこれらのソフトウェアをインストールしています:

/home/yui/
├── WeChat/ # WeChat(debパッケージ、opt/ディレクトリあり)
│ ├── opt/wechat/ # 実行ファイルとライブラリ
│ ├── usr/ # アイコン、desktopファイルなど
│ └── run-wechat.sh # 起動スクリプト
├── QQ/ # QQ(debパッケージ、opt/ディレクトリあり)
│ ├── opt/QQ/ # 実行ファイルとライブラリ
│ ├── usr/ # アイコン、desktopファイルなど
│ └── run-qq.sh # 起動スクリプト
├── trae/ # Trae(rpmパッケージ、usr/ディレクトリのみ)
│ ├── usr/share/trae-cn/ # 実行ファイルはここにあります
│ └── trae-launcher.sh # 起動スクリプト
└── clash/ # Clash Verge(rpmパッケージ、usr/ディレクトリのみ)
├── usr/bin/ # 実行ファイル
├── usr/lib/ # リソースファイル
├── usr/share/ # アイコン、desktopファイル
└── clash-verge.sh # 起動スクリプト

ご覧の通り、パッケージによってディレクトリ構造はかなり異なります:

  • 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 のライセンスの下で公開されています。

#Linux #Gentoo #効率