![我通过获取其源代码来安装一个程序,然后运行“sudo make install”;如何让“apt-get”知道它?](https://linux22.com/image/1010634/%E6%88%91%E9%80%9A%E8%BF%87%E8%8E%B7%E5%8F%96%E5%85%B6%E6%BA%90%E4%BB%A3%E7%A0%81%E6%9D%A5%E5%AE%89%E8%A3%85%E4%B8%80%E4%B8%AA%E7%A8%8B%E5%BA%8F%EF%BC%8C%E7%84%B6%E5%90%8E%E8%BF%90%E8%A1%8C%E2%80%9Csudo%20make%20install%E2%80%9D%EF%BC%9B%E5%A6%82%E4%BD%95%E8%AE%A9%E2%80%9Capt-get%E2%80%9D%E7%9F%A5%E9%81%93%E5%AE%83%EF%BC%9F.png)
我通过从源代码构建程序来安装程序(例如,称之为progA
),然后最终调用sudo make install
和sudo ldconfig
。
但是,似乎apt-get
没有收到备忘录,因为在安装progB
依赖于的时progA
,apt-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
,该命令将:
按照
make install
它的作用copy-cat
make install
,除了 *.deb 包形式从包中安装(正如
make install
第 1 点所述),但也要apt-get
告知这一点,从而覆盖所有文件,make install
只要您选择“是”即可,这些文件将放置make install
在包中的主目录中 - 在此过程中会有几个选项checkinstall
让您选择(但显然,选择就在那里,所以您可以根据具体情况进行选择)
奖金: progA
您还可以删除使用该 odes 安装的包(再次调用它)make install
不make uninstall
支持按照checkinstall
目前概述的流程,然后简单地执行以下操作:
dpkg -r progA
答案2
三个选项:
创建一个假包
progA
:如何伪造已安装的软件包版本?(有一个TeXlive 的广泛示例)。创建一个包对于
progA
,如果有一个checkinstall
选项,则更容易:如何欺骗 apt 依赖关系?progB
也从来源构建。
答案3
我建议使用uupdate
fromdevscripts
并构建包,就像之前构建的原始包一样。
安装所需的软件包
$ 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
etc 文件。如果已完成,你可以构建 deb 包并安装它
$ dpkg-buildpackage -us -uc
$ cd ..
$ sudo dpkg -i *.deb