opensuse 跨版本升级后遇到的麻烦
(edit by King) 昨天无聊,把自己电脑的系统从opensuse11.1直接跨版本升级了11.2,这个操作在家里的笔记本电脑上已经干过,当时最大的困难是重启后鼠标和键盘无法使用,需要修改xorg.conf。
记录下这次升级的流程:首先用yast管理安装源,把所有的安装源都从11.1的改成11.2,确保能够直接获得最新的安装包。里面最重要的就是11.2的update, oss, non-oss这三个源,另外,我还把维护当前软件版本的源也都改成了11.2,如kde4, ati,virtualbox等,这样升级完成后就不用再去升级这些软件。
然后要做的,就是升级zypper。
zypper refresh #刷新当前软件源 zypper in zypper #从11.2的软件源中,安装zypper
更新zypper的时候,可能会更新很多包,不管它了,反正等会儿都是需要更新的。11.2使用的zypper有很多好处,首先就是默认的下载后端变成了aria2,这样就能够通过metalink下载,同时也支持多线程进行下载;其次,它支持设置成先下载完成所有包后再进行安装,这个功能已经等了很长时间了,以前就遇到过因为网络问题下载中断,导致KDE更新了一般,无法启动,这个设置能够大大降低这样的风险;还有当然就是支持跨版本升级了,以前看见debian的apt-get支持dist update,感觉这个功能非常好,没有必要每次推出新的版本就去下载整张DVD光盘进行升级。
好了,更新完zypper之后,就可以进行跨版本升级了。
zypper dup -d #先完成所有需要升级的包的下载 zypper dup #使用已经下载好的包进行跨版本升级
在进行跨版本升级的时候,就更加怕出现更新中断的情况,所以先下载所有需要更新的包是最好的选择了。我在更新的时候,下载这些包大概话费了1.5G的硬盘空间。这些包默认的路径可以在zypper的配置文件中进行设置。
直接使用命令进行跨版本升级的最大好处就是,在升级的过程中不会影响正常使用。等到所有包都更新完成后,就可以重新启动电脑了。杯具从此开始。
因为原来使用的是PAE的内核,这次升级的时候不光升级了PAE内核,也安装了default内核,看见介绍说desktop的内核对普通台式机有优化,又安装了desktop内核,这样就有三个内核了,导致的直接后果就是/boot分区空间不足了。/boot分区的空间我是直接根据opensuse11.1在安装时的推荐空间分配的,只有60多MB,不得已,把default内核删除。
然后遇到的问题,就是显卡驱动的问题,原来安装显卡驱动很顺利,在包管理器中安装完之后,在init 3中执行下sax2命令就可以了,这次再怎么尝试都没有用,进入桌面窗口移动的时候有明显的脱影,使用glxgears尽然直接报错:X Error of failed request: BadRequest (invalid request code or no such operation)。找了半天的原因,后来才发现,在ati的源里面的两个名称类似的包(ati-fglrxG01-kmp-desktop和ati-fglrxG02-kmp-desktop),提供的是相同路径相同名称的内核模块,这两个包是给不用芯片的显卡使用的,最初的时候为了方便就全部选上了。去掉ati-fglrxG01-kmp-desktop之后,进行init3,执行:
sax2 -r -m 0=fglrx
之后,在进行图形界面,显示终于正常了,不过KDE的窗口设置提示不支持混成扩展,这个还是有点不爽,不过特效本来就不太使用,暂时不管了。
另一个重要的问题就是virtualbox了,更新了原来的包之后,virtualbox无法启动。执行:
/etc/init.d/vboxdrv restart
之后,发现提示:vboxguest: exports duplicate symbol RTMemExecFree (owned by vboxdrv),导致vboxnetflt这个内核模块无法正常被插入内核。查了很多地方的都找不到原因,最后在一个bbs中找到了个暂时的解决方法,需要使用:
insmod /lib/modules/2.6.31.12-0.1-desktop/updates/vboxnetflt.ko
平时使用的modprobe太过于智能,会根据modules.dep文件中的依赖关系来插入内核,而这个文件里面的依赖关系貌似有点问题,updates/vboxnetflt.ko: updates/vboxguest.ko updates/vboxdrv.ko,根据里面的依赖,vboxnetflt模块依赖了vboxguest,应该是不需要的。当手工使用insmod的时候,不会去查询这个依赖关系,所以能够正常的加载这个模块。暂时先用这么恶心的方法吧,看看会不会有更新来修复这个问题。