我通过从源代码构建程序来安装程序(例如,称之为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