Ubuntu Server 22.04下手动升级APT追踪软件包后的相关问题咨询
Ubuntu Server 22.04下手动升级APT追踪软件包后的相关问题咨询
嘿,作为经常折腾Ubuntu的老玩家,太懂这种PPA掉链子的糟心情况了!我来给你拆解手动升级后会遇到的各种情况,以及怎么避免踩坑:
APT会不会追踪你手动安装的版本?
这要看你怎么处理那个tar.gz里的二进制:- 如果只是把解压出来的二进制文件直接放到
/usr/local/bin或者自己用户目录的~/bin里,APT完全“看不见”这个版本——它只认自己通过deb包安装的文件,手动放的二进制不在它的追踪列表里。 - 要是这个tar.gz里附带了官方打包的deb文件(有些项目会同时提供),你用
dpkg -i安装的话,APT会识别这个版本号。如果这个deb的版本比PPA里的旧版本高,APT会把这个包标记为“手动安装”,后续PPA修复构建出更高版本时,会正常升级;如果版本号和PPA里的一致,APT会认为已经是最新状态。
- 如果只是把解压出来的二进制文件直接放到
APT会不会拒绝更新?
分两种情况来看:- 要是你直接用的裸二进制(没装deb),APT还是觉得你系统里装的是PPA的旧版本,以后PPA修复后,
apt upgrade会正常升级系统里的那个旧版本。但这时候如果你的手动二进制在PATH里优先级更高(Ubuntu默认/usr/local/bin比/usr/bin靠前),你运行命令时会优先用手动的版本,但系统里其实同时存在两个版本。 - 要是你装了官方deb,APT会对比版本号:如果deb版本更高,APT不会主动更新,除非PPA出了更高版本;如果deb版本和PPA一致,那和正常通过APT安装没区别。
- 要是你直接用的裸二进制(没装deb),APT还是觉得你系统里装的是PPA的旧版本,以后PPA修复后,
会不会出现两个实例?
处理不好的话大概率会:- 最常见的是“文件共存”:APT装的二进制在
/usr/bin,手动的在/usr/local/bin,两个版本同时存在,运行时看PATH优先级决定用哪个。 - 要是你图省事把手动二进制直接覆盖了
/usr/bin里APT安装的文件,那下次apt upgrade的时候,APT会把这个文件替换回PPA的版本,相当于你的手动升级白做了。
- 最常见的是“文件共存”:APT装的二进制在
给你的实用建议
- 临时救急方案:把解压后的二进制放到自己用户目录的
~/bin(没有的话直接新建),Ubuntu默认已经把~/bin加入PATH了,这样只有你自己的用户会用到这个新版本,系统级的APT包不受影响,以后PPA修复了直接删掉~/bin里的文件就行。 - 长期使用方案:如果打算一直用手动版本,先运行
sudo apt hold <你的包名>,把APT里的包锁住,防止它自动升级覆盖你的手动文件。等以后PPA修复了,再用sudo apt unhold <你的包名>解锁,就能正常升级了。 - 优先选deb包:如果项目Github上提供了对应Ubuntu 22.04的deb包,别用裸二进制,直接用
sudo dpkg -i 你的包.deb安装,这样APT能正常追踪版本,后续升级也不会出问题。
备注:内容来源于stack exchange,提问作者Dimitris Sfounis
相关产品推荐
相关产品推荐

