当我升级而不是删除并重新安装时,软件包会发生什么情况?两者之间真正的区别是什么?结果会有什么不同?
以下两个选项是否相等(按包预安斯特/后置/预雷姆/后期脚步) ?
apt-get update
apt-get remove <packagename>
apt-get install <packagename>
和
apt-get update
apt-get install --only-upgrade <packagename>
可以专门处理升级命令吗?是否可以制作一个用于升级的处理程序,而不是删除和安装?
答案1
升级软件包与删除然后安装它不同。升级会注意尽量减少软件包无法完全运行的时间,而删除然后安装会留下一个窗口,在此期间软件包的任何文件都不存在。除此之外,它们不运行相同的维护者脚本:升级运行维护者脚本(old prerm
,new preinst
,old postrm
,new postinst
)和upgrade
操作,而删除然后重新安装运行old prerm remove
,old postrm remove
,new preinst install
,new postinst configure
。请参阅Debian 政策手册欲了解详细信息,或维基百科用于图表。
如果您正在制作 deb 软件包并且想要在升级时执行一些特殊操作,请针对upgrade
相关维护者脚本的操作执行此操作(通常postinst
是升级配置文件并重新启动守护程序)。
答案2
要回答您的问题,dpkg
请调用相同的脚本(基于每个包),无论您是否使用--only-upgrade
with apt
。没什么区别。--only-upgrade
只影响apt
运行的包。正如手册页所说:
--only-upgrade Do not install new packages; when used in conjunction with install, only-upgrade will install upgrades for already installed packages only and ignore requests to install new packages. Configuration Item: APT::Get::Only-Upgrade.
当dpkg
删除一个包时,会调用该包相应的 prerm/postrm 脚本。dpkg
安装软件包时,会调用相应的 preinst/postint 脚本。再说一遍,这一切都是由dpkg
.apt
运行在更高的水平上。
答案3
“升级”意味着升级已配置的软件包存储库中可用版本比您当前安装的版本更新的所有软件包。
“安装”意味着添加特定的软件包(具有最新的可用版本),或者如果已经安装了该软件包的早期版本,则升级到该版本。
在运行安装进行升级之前删除已安装的软件包是不必要的,并且可能会产生令人不快的副作用。
定期运行“升级”是一种很好的做法,以获得已安装的所有软件包的安全更新。