我通过获取源代码并运行 `sudo make install` 来安装了一个程序;如何让 `apt-get` 知道它的存在?

我通过从源代码构建并最终调用sudo make installsudo ldconfig来安装程序(例如称之为progA)。
然而,当安装依赖于progAprogB时,似乎apt-get没有收到通知,因为apt-get建议我也安装progA。这是为什么?我该怎么做?

我觉得你也需要手动安装progB... - Parto
11不能假定你创建的“自定义”版本与包是相同的,那是一个依赖项。一个捷径(不推荐)是安装真实的包,然后用你的“特殊”版本覆盖二进制文件。由于你没有提供具体信息,我无法提供进一步的建议。 - david6
6千万别这样做。一定要严格将由软件包管理器管理的软件与自己编译的软件分开。 - Reinier Post
3个回答

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 去弄清楚它做了什么

  2. 抄袭 make install,只是以 *.deb 包的形式

  3. 从包中安装(完全像 make install 一样,根据第1点),除此之外还要让 apt-get 知道它,并且覆盖所有文件,就像 make install 把它们放置的位置一样,只要你选择在包中也包含 make install 放在家目录中的文件 -- 在 checkinstall 过程中的几个选项将让你选择(显然,这个选择存在是为了让你能够根据具体情况进行选择)

额外奖励: 你还可以通过按照上述所述的 checkinstall 过程来删除使用 make install 安装的不支持 make uninstall 的软件包(称其为 progA,然后简单地执行以下操作:

dpkg -r progA

18哇,checkinstall -- 全世界都需要知道这个! - user390136
根据昨天试着实施并参考了这个元问题的建议,我在你的回答中添加了一些更详细的内容。请随意对其进行进一步编辑! - user390136
你指的是哪些细节? - A.B.
哦,我认为它们还没有出现,因为正在编辑审核中--如果您点击元问题的链接,您将看到它们是什么(最初,我把它们放在问题正文中,但建议我应该把它们放在被接受的答案正文中)。 - user390136
软件包文档目录./doc-pak不存在。 我应该创建一个默认的软件包文档集吗? - n8chz

三个选项:
1. 为 `progA` 创建一个假的软件包:[如何伪造已安装的软件包版本?](link1)(这里有一个关于 TeXlive 的详细示例)。
2. 为 `progA` 创建一个软件包,如果它有 `checkinstall` 选项会更容易:[如何欺骗 apt 依赖?](link4)
3. 从源代码构建 `progB`。

1
  1. 卸载你编译的 progA 版本,并安装 apt-get 版本。
  2. 在已编译的版本上安装 apt-get 包,并希望一切顺利。
- jwodder

我建议使用devscripts中的uupdate,并像以前一样构建原始软件包。
安装所需软件包。
$ sudo apt-get install build-essential devscripts

从官方仓库下载旧的包(以MediaWiki作为示例),并从上游下载新的tar压缩包。

$ 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包和旧的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