web-dev-qa-db-ja.com

autotoolsから.debをパックする際の問題。 (checkinstall、debhelper、...)

私は現在、C、C++、Pythonなどのいくつかの言語で書かれたソースを含む大規模なプロジェクトを構築しています。私は最近、autotoolsを(苦痛に)処理して適切にインストールすることに成功しました。私たちのプロジェクトはdebianストレッチで実行することを目的としているため、次のステップは.debを作成することです。

私はこれを行うためにいくつかの方法を試しましたが、その方法かどうかにかかわらず、それを機能させることができません。

Checkinstallによって生成されたツリー.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)によって生成されたツリー.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

ご覧のとおり、まったく同じではありません(原文のまま)。私は多かれ少なかれcheckinstallが何をするのか理解しています:それはmake installコマンドを実行し、ファイル出力を取得してインストール先に配置します[〜#〜] my [〜#〜] =マシン。 debhelperは、ここではより適切なツールのようです。 (/usr/libではなく/usr/local/libにインストールすると、パッケージなどに署名できるようになります。)使用したいのですが、期待どおりに機能しません。

そしてhuge plus on debhelperの方法は、debian/controlなどで指定された依存関係を実際に処理しているということです。しかし、checkinstallはそうではありません。

Debhelperが行っていないこと:

  • インターネットソースからバイナリ(geckodriver)を取得し、/ usr/binに配置します

  • 自家製のインストールpythonモジュール

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

---

だから私の質問は:それを「完璧」にするためにこれらの2つのパッケージング方法の最良の部分をどのように保つことができますか?

2
Neah-Ko

インターネットから物をダウンロードすることは、Debianパッケージビルドが行うべきではないことです。 'build in clean chroot'ヘルパーを使用すると、それができない場合もあります。ただし、プレーンなdpkg-buildpackageはそうすることができるはずです。 autotoolsビルドシステムが正しいことをするなら、何も必要ないはずです。それ以外の場合は、必要なコマンドをoverride_dh_fooコマンドに追加する必要があります(「mandh」を参照)。

Pythonモジュールの場合、$ DESTDIRを尊重して、ビルドシステムから.pyファイルもインストールする必要があります。そうする場合は、dhモードのdebhelperをインストールする必要があります。 DTRTだけです。

それでもうまくいかない場合は、問題が発生する最小限のバージョンのパッケージを作成してください。そうでなければ、これは非常に水晶玉の問題です。

2
Wouter Verhelst

あなたのおかげでMakefile.amを再考しました。そして最終的には何かを手に入れることができました。

  • Geckodriverを入手する

スクリプトを実行して./configureステップで取得し、次のようなパッキングシステム上にあると想定して、.debパッケージにファイル依存関係として配置します。

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

$(DESTDIR)は確かにここでの解決策でした、今私のpythonモジュールはこのようにインストールされます:

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

そして、これをdebian/rulesに配置する必要があるという事実からうまく機能します:override_dh_usrlocal:それ以外の場合は、/usr/localにファイルをインストールしているので、私に怒鳴ります

私はしたくないのですが、pythonはそれ自体でインストールを処理していて、インストールパスを指定できません。他の解決策は--root...の代わりに--prefix $(DESTDIR)$(prefix)を指定することでしたが、インストールしていますpythonpathにない/usr/lib/python2.7/site-packagesのファイル。

---

Appart from pythonトラブル最終結果は、dpkg-buildpackageで問題なく動作します。

0
Neah-Ko