私は現在、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-packages
pythonpathにありません。
---
Python問題のAppartの最終結果はdpkg-buildpackageでうまく機能します。