我通过获取源代码安装程序,然后运行`sudo make install`; 如何让’apt-get`了解它?

我通过从源代码构建程序,然后最后调用sudo make installsudo ldconfig安装程序(例如,调用它, progA )。

但是,似乎apt-get没有得到备忘录,因为在安装progB ,依赖于progAapt-get建议我也安装progA 。 为什么这样,我该怎么办?

TL; DR checkinstall是你的朋友;)

 sudo apt-get install checkinstall 

使用sudo make install您的包管理器对此安装一无所知。 但它知道Ubuntu存储库或PPA中具有相同名称的包的所有内容。

使用sudo checkinstall而不是sudo make install并使用更高版本作为存储库中的版本,以确保您的包管理器接受此版本作为ProgB正确依赖。


更多的信息:

checkinstall非常好用,因为它遵循make install命令的作用,以便弄清楚如何构建一个包。

这意味着如果你使用make install安装程序,但是想要为你的罪悔改,你所要做的就是sudo checkinstall -D make install ,该命令将:

  1. 按照make install来确定它的function

  2. copy-cat make install ,* .deb包forms除外

  3. 从包中安装(完全与make install一样,给定第1点))除了让apt-get知道它,因此只要你选择YES来包含它,就会覆盖所有make install文件的确切位置。 make install中的文件也放在包的主目录中 – 在checkinstall过程中有两个选项可以让你选择(显然,选择就在那里,你可以根据具体情况进行操作)

奖励: 你也可以使用make install一个软件包(再次调用它progA ),这个软件包没有make uninstall支持 ,按照目前为止概述的checkinstall流程,然后简单地执行:

 dpkg -r progA 

三种选择:

  1. progA创建一个假包: 如何假装安装的包版本? ( TeXlive有一个广泛的例子) 。

  2. progA 创建一个包 ,如果它有一个checkinstall选项更容易: 如何欺骗apt依赖?

  3. 从源头构建progB

我建议使用devscripts uupdate并像之前构建的那样构建包。

安装所需的包

 $ sudo apt-get install build-essential devscripts 

从官方存储库(将使用MediaWiki作为示例)和上游的新tar-ball下载旧包。

 $ mkdir ~/Downloads/mediawiki $ cd ~/Downloads/mediawiki $ apt-get source mediawiki $ wget https://releases.wikimedia.org/mediawiki/1.26/mediawiki-1.26.0.tar.gz 

运行uupdate从上游tar-ball和旧debian/control创建一个新的源文件夹

 $ cd mediawiki-1.19.14+dfsg # depends on your Ubuntu version $ uupdate ../mediawiki-1.26.0.tar.gz 1.26.0 $ cd ../mediawiki-1.26.0 

现在您应该检查是否需要更改debian/control等文件。 如果你已经完成了,你可以构建deb包并安装它

 $ dpkg-buildpackage -us -uc $ cd .. $ sudo dpkg -i *.deb