Debian

從 autotools 打包 .deb 時出現問題。(檢查安裝,debhelper,…)

  • March 17, 2018

我目前正在建構一個大型項目,其中包含用 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,它甚至可能無法這樣做。不過,plaindpkg-buildpackage應該可以做到。如果你的 autotools 建構系統做對了,那麼什麼都不需要;否則,您需要將必要的命令添加到override_dh_foo命令中(參見“man dh”)。

對於 Python 模組,您還需要從建構系統安裝 .py 文件,同時遵守 $DESTDIR。如果這樣做,dh模式下的 debhelper 應該只是 DTRT。

如果這些都不起作用,請生成出現問題的軟體包的最小版本;否則這在很大程度上是一個水晶球問題。

引用自:https://unix.stackexchange.com/questions/350184