從 autotools 打包 .deb 時出現問題。(檢查安裝,debhelper,…)
我目前正在建構一個大型項目,其中包含用 C、C++ 和 Python 等幾種語言編寫的原始碼。我最近設法(痛苦地)處理自動工具以進行正確安裝。下一步是創建 .deb,因為我們的項目旨在在 debian 伸展上執行。
我嘗試了幾種方法來做到這一點,但我無法讓它工作。
由 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 命令並獲取文件輸出以將其放置在我的機器上安裝的位置。debhelper
似乎是這裡更合適的工具。(安裝/usr/lib
和不安裝/usr/local/lib
,允許我們簽署包等。)我更喜歡使用它,但它沒有按預期工作。debhelper 方式的巨大優勢在於它實際上是在處理 debian/control 和其他東西中指定的依賴項。但 checkinstall 沒有。
debhelper 沒有做什麼:
- 從 Internet 源獲取一些二進製文件(geckodriver)並將其放入 /usr/bin
- 安裝自製的python模組
這些操作是在我的 Makefile.am 中通過覆蓋
install-exec-local:
(& 分別uninstall-local:
)方法和執行一些 bash 命令來執行的。—
所以我的問題是:我怎樣才能保留這兩種包裝方式中最好的部分以使其“完美”?
從網際網路下載東西是 Debian 軟體包建構不應該做的事情。如果你使用一些’build in clean chroot’ helper,它甚至可能無法這樣做。不過,plain
dpkg-buildpackage
應該可以做到。如果你的 autotools 建構系統做對了,那麼什麼都不需要;否則,您需要將必要的命令添加到override_dh_foo
命令中(參見“man dh”)。對於 Python 模組,您還需要從建構系統安裝 .py 文件,同時遵守 $DESTDIR。如果這樣做,
dh
模式下的 debhelper 應該只是 DTRT。如果這些都不起作用,請生成出現問題的軟體包的最小版本;否則這在很大程度上是一個水晶球問題。