我通过获取其源代码来安装一个程序,然后运行“sudo make install”;如何让“apt-get”知道它?

我通过获取其源代码来安装一个程序,然后运行“sudo make install”;如何让“apt-get”知道它?

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

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

答案1

总结 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它的作用

  2. copy-cat make install,除了 *.deb 包形式

  3. 从包中安装(正如make install第 1 点所述),但也要apt-get告知这一点,从而覆盖所有文件,make install只要您选择“是”即可,这些文件将放置make install在包中的主目录中 - 在此过程中会有几个选项checkinstall让您选择(但显然,选择就在那里,所以您可以根据具体情况进行选择)

奖金: progA您还可以删除使用该 odes 安装的包(再次调用它)make installmake uninstall支持按照checkinstall目前概述的流程,然后简单地执行以下操作:

dpkg -r progA

答案2

三个选项:

  1. 创建一个假包progA如何伪造已安装的软件包版本?(有一个TeXlive 的广泛示例)

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

  3. progB也从来源构建。

答案3

我建议使用uupdatefromdevscripts并构建包,就像之前构建的原始包一样。

安装所需的软件包

$ 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/controletc 文件。如果已完成,你可以构建 deb 包并安装它

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

相关内容