autotoolsで.debをパッケージ化する際に問題があります。 (インストール、debhelper確認、...)

autotoolsで.debをパッケージ化する際に問題があります。 (インストール、debhelper確認、...)

私は現在、C、C ++、Pythonなど、さまざまな言語で書かれたソースコードを含む大規模なプロジェクトを構築しています。私は最近、適切なインストールのために自動ツールを処理する(痛みを伴って)管理しました。次のステップは、私たちのプロジェクトがdebianstretchで実行されるように設計されているので、.debを生成することです。

私はこれを行うためにいくつかの方法を試しましたが、うまくいきません。

checkinstallによって生成されたTree.deb:

    unpack/
├── etc
│   └── nina
│       ├── auto_blacklist.txt
│       ├── blacklist.txt
│       ├── conf
│       ├── keywords.txt
│       ├── rubbish_links.txt
│       └── whitelist.txt
└── usr
    ├── local
    │   ├── bin
    │   │   ├── geckodriver
    │   │   └── nina
    │   ├── lib
    │   │   └── python2.7
    │   │       └── dist-packages
    │   │           ├── nina.py
    │   │           ├── nina_py_installed_files.txt
    │   │           ├── Uinput_wrapping_module-2.0.egg-info
    │   │           └── uinput_wrapping_module.so
    │   └── share
    │       └── man
    │           └── man1
    │               └── nina.1.gz
    └── share
        └── doc
            └── nina
                ├── COPYING
                ├── doc
                │   ├── Doxyfile
                │   └── nina.1
                ├── README
                └── README.md

debhelper(v9) によって生成された Tree.deb:

unpack/
├── etc
│   └── nina
│       ├── auto_blacklist.txt
│       ├── blacklist.txt
│       ├── conf
│       ├── keywords.txt
│       ├── rubbish_links.txt
│       └── whitelist.txt
└── usr
    ├── bin
    │   └── nina
    ├── lib
    │   └── python2.7
    │       └── dist-packages
    │           └── nina.py
    └── share
        ├── doc
        │   └── nina
        │       ├── changelog.Debian.gz
        │       └── copyright
        └── man
            └── man1
                └── nina.1.gz

ご覧のとおり、まったく同じではありません(sic)。私はそれが何であるかを理解していますcheckinstall。 make install コマンドを実行し、ファイル出力を取得してインストール場所に配置します。私のものマシン。debhelperここにもっと適したツールのようです。 (install/usr/libの代わりにInstallを/usr/local/lib使用するとパッケージに署名できます。)この方法を好むが、期待どおりに動作しません。

続ける巨大なdebhelper方式のもう一つの利点は、debian / controlなどで指定された依存関係を実際に処理することです。しかし、checkinstallはそうではありません。

debhelperがしないこと:

  • インターネットソースからいくつかのバイナリ(geckodriver)をインポートして/ usr / binに入れます。

  • 自分で作成したPythonモジュールのインストール

install-exec-local:uninstall-local:これはMakefile.amで(それぞれ&)メソッドをオーバーライドし、いくつかのbashコマンドを実行することによって行われます。

---

だから私の質問は:2つの包装オプションの最良の部分をどのようにして「完璧」にすることができますか?

答え1

インターネットからものをダウンロードするのは、Debian パッケージの構築でやってはいけません。 「組み込みclean chroot」ヘルパーを使用している場合は、そうしない可能性があります。ただし、Plainはdpkg-buildpackageこれを実行できるはずです。自動化されたツールビルドシステムが正しいタスクを実行しても、何も必要ありません。それ以外の場合は、必要なコマンドをoverride_dh_fooコマンドラインに追加する必要があります(「man dh」を参照)。

Pythonモジュールの場合は、ビルドシステムに.pyファイルをインストールして$DESTDIRに準拠する必要があります。これを行うには、dhモードの debhelper は DTRT でなければなりません。

これらのいずれも機能しない場合は、問題を示す最小バージョンのパッケージを作成してください。それ以外の場合は、修正ビーズの問題です。

答え2

Makefile.amあなたへの感謝をもう一度考えてみてください。そしてついに何かを手に入れた。

  • ゲッコードライバーを入手

./configure段階的にインポートするためにスクリプトを実行しており、それがパッケージングシステムにあるとし、次のように.debパッケージにファイル依存関係として配置します。

bindeptsdir = \
    $(prefix)/bin
bindepts_DATA = \
    /usr/local/bin/geckodriver
  • Pythonモジュールのインストール

$(DESTDIR) これは実際に解決策です。 Pythonモジュールは次のようにインストールされます。

$(PYTHON) setup.py install \
    --root $(DESTDIR)

うまくいきます。ただし、Debian/ルールに入れなければならないという点だけを除いてください。override_dh_usrlocal:それ以外の場合は、ファイルをインストールしていると叫びます。/usr/local

そうしたくありませんが、Pythonが独自にインストールを処理しているため、インストールパスを指定できません。別の解決策はインストール--prefix $(DESTDIR)$(prefix)の代わりに指定することですが、--root...インストールするファイルは/usr/lib/python2.7/site-packagespythonpathにありません。

---

Python問題のAppartの最終結果はdpkg-buildpackageでうまく機能します。

関連情報