大家都熟悉通过网络upgrade升级Linux系统,这里要介绍的是如何downgrade降级系统。背景情况是这样的:我将系统升级到feisty h3之后,发现libvte-0.15.3有个bug,会影响gnu screen的正常使用。虽然看见bugzilla@gnome已经有了report不过好像还没有啥正式resolv的希望,就只好希望能回滚到edgy的libvte9对应版本。
大概过程是这样,首先是修改/etc/apt/sources.list,添加对应的edgy source。这个步骤比较简单,用vim吧feisty源先复制一遍,然后将feisty替换成edgy就可以了。修改完了
apt-get update
更新一下数据。这么做的目的,就是希望package database里面同时包括新老两个版本的包版本信息。这里说一下,目前就我的实际经验看,好像也没有什么负面影响,因为apt会尽力把包升级到最新的版本,也就是说,一般情况下,老版本的包数据并不会影响新版本的升级。完成第一步之后,就是请出aptitude这个工具。原来只是简单的认为aptitude只是一个apt的简单壳子,今天深入研究一下,才发现aptitude扩展功能相当的强大,算是等同于dselect吧,用起来比dselect顺手不少。言归正传,首先用
apt-cache showpkg libvte9
察看一下可用的package版本。这时候可以看到libvte9的两个版本,一个对应feisty一个对应edgy。看清版本号之后,使用
aptitude upgrade libvte9=1:0.14.1-0ubuntu1
这样的写法,强制升级制定版本号的包,设置版本的写法还有其他,可以man一下详细信息。aptitude会自动计算依赖关系,如果一切顺利,libvte9以及相关的包,就会降级到老的edgy版本。做完之后,可以使用
aptitude hold libvte9
来保持这个包的状态,避免在以后upgrade过程中被升回feisty的版本。最后要记得的事情,如果想让libvte9重新可以升级,需要unhold这个包。命令行是aptitude keep libvte9,这样就可以继续正常升级libvte9到最新版本了。这里有个比较奇怪的事情,就是我用aptitude unhold libvte9好像没有什么用,到使用aptitude keep libvte9可以清除包的hold标志。另外一个推荐的方法,就是用aptitude upgrade libvte9=xxx强制将包升级到指定版本,这个就和前面说的一样,需要先showpkg看一下可用版本。
顺便说两句,可以用aptitude search libvte9来察看当前包的状态。aptitude本身就提供一个字符交互界面,如果命令行没有参数,就会进入这个界面,操作也是很直观的。折腾了这么一轮,对deb/apt/aptitude这个debian系的包管理系统了解又进了一层,对这样现代科技真实叹为观止。整个包系统也能像cvs/svn管理代码这样来回翻滚版本,还真是很方便。计划过年无事的时候,稍微深入了解一下deb相关的包系统。