手动安装APT依赖后如何告知APT?TeXlive替换后APT重复装旧版求解
我来帮你搞定这两个APT相关的棘手问题,都是手动替换系统软件后和包管理器闹矛盾的典型场景:
问题1:让APT识别/usr/local下手动安装的依赖项
APT本质上只认通过deb包安装的文件,你手动丢去/usr/local的依赖它完全“看不见”。要让它认可这些依赖,最靠谱的路子是搞个虚拟deb包——就是一个空包,里面啥实际文件都没有,但能告诉APT“这个依赖已经装好了”。用equivs工具做这个超方便:
- 先装equivs工具:
sudo apt install equivs - 生成一个模板控制文件:
equivs-control my-manual-dep.control - 打开这个文件编辑,重点改这几个关键字段:
Package: 填你要模拟的依赖包名(比如依赖是libfoo-dev就写这个)Version: 填不低于APT要求的版本号(比如APT要2.0,你填2.1或者和它要求的一致都行)Provides: 同样填这个依赖包名Description: 随便写两句,比如“Virtual package for manually installed libfoo-dev in /usr/local”
- 构建虚拟deb包:
equivs-build my-manual-dep.control - 最后装这个虚拟包:
sudo dpkg -i my-manual-dep_*.deb
搞定之后APT就会觉得对应的依赖已经满足,不会再瞎折腾了。
问题2:阻止APT重装旧版TeXlive
你这情况太常见了——PPA里的Kile绑定了旧版TeXlive,但你已经手动升级了新版,APT还死磕要装旧的。给你两个实用方法,首推第一个:
方法1:创建虚拟TeXlive包(最稳妥,一劳永逸)
还是用equivs搞虚拟包,把Kile依赖的旧版TeXlive组件都“模拟”成已安装:
- 没装equivs的话先装上:
sudo apt install equivs - 生成控制文件:
equivs-control texlive-virtual.control - 编辑这个文件,重点是
Provides字段,把Kile依赖的所有texlive*包都列进去。你可以先跑apt depends kile看看Kile具体依赖哪些TeXlive组件,比如可能是texlive、texlive-base、texlive-latex-base这些,全加到Provides里。示例控制文件大概长这样:Package: texlive-virtual Version: 2015-1ubuntu1 # 填PPA旧版的版本号,或者更高的也可以 Provides: texlive, texlive-base, texlive-latex-base, texlive-latex-extra # 把所有依赖列全 Architecture: all Description: Virtual package to replace manually installed new TeXLive - 构建并安装虚拟包:
equivs-build texlive-virtual.control sudo dpkg -i texlive-virtual_*.deb
这下APT就会认定旧版TeXlive组件已经装了,不会再强制重装,同时你用的还是自己装的新版TeXlive,完美兼容。
方法2:用apt-mark hold锁定包(简单但有局限)
如果你嫌虚拟包麻烦,可以直接把APT要装的旧版TeXlive包锁住,不让它们安装:
- 先通过
apt upgrade或者apt install kile看看它要装哪些texlive包,然后逐个锁定:sudo apt-mark hold texlive texlive-base texlive-latex-base ... - 以后要解锁的话就用:
sudo apt-mark unhold texlive texlive-base ...
但这个方法有个小问题:如果以后Kile更新,新增了其他TeXlive依赖,你又得手动加锁定,不如虚拟包灵活。
内容的提问来源于stack exchange,提问作者SeveQ
相关产品推荐
相关产品推荐

