防止apt覆盖手动安装的软件包

时间:2019-02-14 21:04:01

标签: ubuntu apt debian-based

Ubuntu Bionic提供了Protobuf 3.0.0,我想使用最新版本3.6.1。

我已经去构建Protobuf源,并使用前缀/usr安装它们,因此文件最终存放在官方Ubuntu软件包放置它们的位置。

但是,如果我随后发布apt-get install protobuf-compiler,它将用旧版本覆盖我的protoc二进制文件。 (实际上,protobuf-compiler被指定为我正在使用mk-build-deps构建的软件包的构建依赖项。)

我尝试使用apt-mark manual protobuf-compiler告诉apt我已经手动安装了它,但是它告诉我我不能这样做,因为未安装该软件包。 (如何确定?我不知道。)

类似地,apt-mark hold不能防止二进制文件被覆盖。

安装此软件的正确方法是什么,让apt理解该依赖关系得到满足,并且不让它用旧的覆盖我的新版本?

1 个答案:

答案 0 :(得分:1)

一个简单的解决方案可能只是更改protobuf-compiler 3.6.1的安装目录。

您可以安装到其他目​​录,而不是安装到/usr。在我的工作PC上(我没有sudo权限),我安装到一个名为/data/local_installs的目录中。然后更新路径环境变量

export PATH=/data/local_installs:$PATH

您就可以出发了。

使用这种方法,您不必担心apt在做什么,因为protobuf-compiler中保存的/data/local_installs总是会在{{1}之前的路径中找到} apt

中的受控版本