6.0出来后,一直没有升级,等到6.1发布后,决定升级,没想到却遇到了麻烦。下面把我的这次经历写出来(里面有些地方我还不是很清楚)。
1. 先cvsup,同步源代码,接下来:
/usr/src/usr.sbin/mergemaster/mergemaster.sh -p
这里出现了第一个错误。当出现处理./etc/master.passwd这个文件的时候,有d,i,m,v四个选项,我没看清楚,选择了d,结果/etc/master.passwd给清空了(后来我选的i,就是用/usr/src/etc/master.passwd替换/etc/master.passwd,但是会把普通用户删掉,我不清楚最好应怎么办)。然后,
cd /usr/obj
chflags -R noschg *
rm -rf *
adjkerntz -i
cd /usr/src
make buildworld
make buildkernel KERNCONF=MY_KERNCONF
make installkernel KERNCONF=MY_KERNCONF
reboot
一切还算顺利
2. 重新启动,问题来了:
后来,只好启动时,只按一次回车键,出现一个选择不同的启动方式时,按6,出现命令提示符“OK”。输入?看帮助,里面有unload,load,boot等命令。于是,执行下列命令:
unload
load /boot/kernel.old/kernel
boot
哈,顺利进入系统。
果然,是这里的问题,现在能用6.1内核进入系统了。于是,进入单用户,执行命令:
fsck -p
mount -u /
mount -a
make installworld
安装了一部分后却出现错误,提示需要audit组,可是我的/etc/group里面没有这个组。一查/usr/src/etc/group,发现里面有这个组,于是只好又/usr/src/usr.sbin/mergemaster.sh -p, 出现处理group文件时,选i。然后再make installworld,却又提示一些文件找不到。只好重新make buildworld.
4. 重新make buildworld时,却没有成功,最后的错误是:Too many errors, Gave up! 不知道具体原因,按下Scroll Lock键,向上翻页,但是由于上面的“Too many errors, Gave up!"重复了几十行,根本看不到具体错误原因。make buildworld > log 2>&1 , 想把标准输出和标准错误重定向到log文件,却不能执行。我想,是不是第一次make installworld时只安装了一部分6.1的系统文件,导致系统不相容。
5. 没办法,只好又cvsup,同步到5.4的源代码,退回到5.4。这回很顺利。就这样,先回到5.4,再升级到6.1。用ports升级了nvida的驱动,然后一切OK
=====
总结:
1. 一定要保存一个正确的内核。而且由于每次编译内核后,原来的内核就会覆盖/boot/kernel.old/,所以,最好把正确的内核备份到另一个地方,比如:cp -R /boot/kernel.old /boot/kernel.good
2. 出现问题,不要马上就重装,看看handbook,也许能找到解决办法。
3. /usr/local, /etc, /home 这三个分区最好与/ , /usr单独分开,一旦确实需要重装,也能保留这三个分区里的文件(特别是配置文件)。