虽然说软件的更新,尤其是安全更新是很重要的,但是通常有些软件较大版本的升级总会伴随着软件功能的较大改变和很多兼容性问题,比如PHP等,也有一些在PPA源上较大的软件包下载会很慢,所以在日常的更新中阻止这些软件包的升级就很有必要了。
- 软件包状态
软件包有各种状态:“unknown”,“install”,“remove”,“purge”和“hold”。这些“希望”标记描述了用户打算如何操作这些软件包(既可以使用dselect的“Select”菜单,也可以直接调用dpkg)。
它们的意思是:
unknown – 用户并没描述他想对软件包进行什么操作。
install – 用户希望对软件包进行安装或升级。
remove – 用户希望删除软件包,但不想删除任何配置文件。
purge – 用户希望完全删除软件包,包括配置文件。
hold – 用户希望软件包保持现状,例如,用户希望保持当前的版本,当前的状态,当前的一切。
- 阻止软件包升级
有两种方法阻止软件包升级,使用dpkg,或者使用dselect。
========================================================
使用dpkg,首先导出软件包选择列表:
接着编辑文件selections.txt,修改想要恢复的软件所在的行,例如libc6,则将:
libc6 install
改为:
libc6 hold
保存文件,将它装入dpkg数据库:
或者,如果知道要恢复的软件包名称,就可以不搜索软件包名称了,执行:
========================================================
这个命令将在每个软件包安装过程中保持该软件包不变。
这个命令即可恢复软件包libc6的升级。
使用dselect也可以达到同样的效果。进入[S]elect屏幕,找到想阻止其升级的软件包,按“=”键(或者“H”)。更改在你退出[S]elect屏幕后立即生效。
以上这都是WIKI上的内容,基本上直接贴了。
如果你想在Ubuntu中升级软件但又想保持其中的一个当前状态不变,即不被升级的话,你可以使用命令 dpkg, aptitude 或者 dselect来延迟升级/via
1.使用dpkg
要选定需要延迟升级的软件包:
sudo echo “package hold” | dpkg --set-selections
例如要延迟升级apache2软件包:
sudo echo “apache2 hold” | dpkg --set-selections
取消选定:
sudo echo “package hold” | dpkg --set-selections
例如:
sudo echo “apache2 hold” | dpkg --set-selections
使用该命令的前提是你必须了解你所选定的该软件包的状况。
2.使用aptitude
要选定需要延迟升级的软件包:
sudo aptitude hold package_name
Example:
sudo aptitude hold apache2
取消选定:
sudo aptitude unhold package_name
Example:
sudo aptitude unhold apache2
3.使用dselect
如果你已经安装了dselect 软件包,你可以先进入【S】elect screen,找到你需要延迟升级的软件包,然后按下“=”键或者“H"键,然后退出方可立即生效。如果不明白dselect的用法,点击link
实际上apt-get与dselect使用的是不同的文件来保存package信息
apt : /var/lib/apt/lists/
dselect/dpkg/tasksel : /var/lib/dpkg/