Linux 用 Deb パッケージを作る

Debian / Ubuntu 向けの .deb を tauri build --bundles deb で作る。depends・files・postInstallScript の設定と、依存関係の解決に失敗するときの対処を示す。

ビルド・配布 対象: Tauri 2.x 更新日: 読了目安: 約5分 build-008
目次
  1. 前提条件
  2. 1. tauri.conf.json の設定
  3. rpm も同時に作る
  4. 2. ビルドする
  5. 動作確認
  6. よくあるエラーと対処法
  7. apt install で依存関係が解決できない
  8. インストールできるが起動時に GLIBC のエラーが出る
  9. アイコンや .desktop がメニューに出ない
  10. OS ごとの違いと注意点
  11. 関連レシピ

.deb は Debian、Ubuntu、Linux Mint など Debian 系ディストリビューションの標準パッケージ形式です。apt でインストール・アンインストール・依存解決ができ、アプリケーションメニューへの登録やアイコンの配置も自動で行われます。Tauri のバンドラーは dpkg-deb などの外部ツールを使わず自前で .deb を組み立てるため、Debian 系以外の Linux でもビルドできます。ここでは bundle.linux.deb の設定と、同じ要領で作れる .rpm にも触れます。

前提条件

  • Linux 上でビルドすること。WebKitGTK 4.1 系の開発パッケージなど Tauri の依存関係が揃っていること(Hello World (Ubuntu))
  • 動作確認用に Debian 系の環境(VM や Docker で十分)

プラグインや capability の権限は不要です。

1. tauri.conf.json の設定

.deb は Linux の既定ターゲットに含まれるので、targets: "all" なら設定なしで生成されます。依存関係やファイル配置を制御するときに bundle.linux.deb を書きます。

{
  "bundle": {
    "targets": ["deb"],
    "linux": {
      "deb": {
        "depends": ["libsqlite3-0"],
        "recommends": ["fonts-noto-cjk"],
        "section": "utils",
        "priority": "optional",
        "files": {
          "/usr/share/my-notes/README.md": "../README.md"
        },
        "postInstallScript": "./debian/postinst",
        "changelog": "./debian/changelog"
      }
    }
  }
}
  • depends: 追加の実行時依存。WebKitGTK (libwebkit2gtk-4.1-0) と GTK3 (libgtk-3-0) は Tauri が自動で付けます。システムトレイを使う場合は appindicator 系も自動追加されます
  • recommends: 必須ではないが入れてほしいパッケージ(CJK フォントなど)
  • files: 配置先の絶対パスをキー、ソースを値にした任意ファイルの追加。OS をまたぐアセットは bundle.resources を使い、.deb 固有の配置にだけ使います
  • postInstallScript / preRemoveScript など: メンテナスクリプト。desktopTemplate で .desktop ファイルの差し替えもできます

rpm も同時に作る

Fedora / RHEL 系向けの .rpm も同じバンドラーで生成できます。設定キーは bundle.linux.rpm で、depends の中身が RPM のパッケージ名になる点だけ違います。

{
  "bundle": {
    "targets": ["deb", "rpm"],
    "linux": {
      "rpm": {
        "depends": ["sqlite-libs"],
        "release": "1"
      }
    }
  }
}

2. ビルドする

npm run tauri build -- --bundles deb
# rpm も
npm run tauri build -- --bundles deb,rpm

生成物は src-tauri/target/release/bundle/deb/<name>_<version>_amd64.deb と bundle/rpm/<name>-<version>-<release>.x86_64.rpm です。パッケージ名は productName を小文字化・ハイフン化したものになります。

動作確認

# 中身を見る(インストール前)
dpkg -I my-notes_1.0.0_amd64.deb
dpkg -c my-notes_1.0.0_amd64.deb

# 依存関係ごとインストール(先頭の ./ が必須)
sudo apt install ./my-notes_1.0.0_amd64.deb

# 配置されたファイル
dpkg -L my-notes

dpkg -L の出力に /usr/bin/my-notes、/usr/share/applications/My Notes.desktop、/usr/share/icons/hicolor/128x128/apps/my-notes.png が並んでいれば成功です。bundle.resources で同梱したファイルは /usr/lib/my-notes/ に入ります。アンインストールは sudo apt remove my-notes、rpm は rpm -qip と sudo dnf install ./xxx.rpm で確認します。

よくあるエラーと対処法

apt install で依存関係が解決できない

「libwebkit2gtk-4.1-0 : Depends: ... but it is not installable」という趣旨で失敗する場合、配布先のディストリビューションが古く WebKitGTK 4.1 系を提供していません(Ubuntu 20.04 など)。Tauri v2 は 4.1 系を必須とするため、配布先の下限を Ubuntu 22.04 / Debian 12 以降にするか、AppImage で配布します。

インストールできるが起動時に GLIBC のエラーが出る

「version GLIBC_2.39' not found」という趣旨のエラーは、ビルド環境の glibc が配布先より新しいことが原因です。.deb` は glibc を同梱しないので、サポートしたい最も古いディストリビューションでビルドしてください。CI では該当バージョンの Docker イメージを使うのが確実です。

アイコンや .desktop がメニューに出ない

インストール直後はデスクトップ環境のキャッシュが古いことがあります。ログアウト・ログインするか、update-desktop-database と gtk-update-icon-cache を実行してください。productName に日本語やスペースを含めていると .desktop の Exec が正しく解釈されないことがあるので、英数字にしておくのが無難です。

OS ごとの違いと注意点

  • .deb は Debian 系専用です。Fedora / openSUSE には .rpm、配布先が絞れない場合は AppImage を使います
  • version の - は Debian の規約上 revision と解釈されるため、1.0.0-beta.1 のようなプレリリース表記は避けてください
  • .deb は署名されません。HTTPS で配るか sha256sum を併記してください
  • インストール先の /usr/lib/<name> は root でしか書けません。実行時に生成するデータは app_data_dir() 配下に置いてください

関連レシピ

参考リンク(公式ドキュメント)

Web Ninja

この記事を書いた人

Web Ninja ウェブエンジニア (Web Engineer)

会社員ネットワークエンジニアから独立してかれこれ 25 年以上 Web エンジニアとして活動中。普段は JavaScript と Node.js を自在に操り、時には C++ や Perl といった古流の技も嗜みます。近年は Tauri × Rust という新たな武器を手に、デスクトップアプリ開発の最前線を駆け抜けています。「作りたい」を「作れる」に変えるための、実践的な「技」をお届けします。

お問い合わせ: tauri.ninja@gmail.com

内容の誤り・動かないコードを報告する