安装cvsup,注意amd64架构的版本只能安装cvsup-without-gui,可以从ports安装,当然也可以直接安装二进制版本,后者通常要快一些:
# pkg_add -r cvsup-without-gui
接下来修改cvsup配置文件:
# cd /usr/share/examples/cvsup
# bash <----切换shell
# cp {stable-,}supfile
# vi supfile
接下来修改supfile
文件中有详细的注释,还是比较好修改的,我只是将其中的host做了修改,其余不变:
找到 *default host=CHANGE_THIS.FreeBSD.org将其改为 *default host=ftp.cn.FreeBSD.org
保存退出。
先在就可以更新源代码了
# cvsup supfile
更新时间取决于具体网速
更新完成之后,就可以buildworld了
# cd /usr/src
# make buildworld
这步操作会联编新的编译器,以及少量相关工具,并在随后的使用新的编译器来联编world。联编的结果会存放在/usr/obj
这一步所需时间因机器配置不同而异,我的athlon3000+ 2G内存,跑了两个半小时
接下来编译内核
# make buildkernel
如果你曾经自己定制内核,注意这里不能使用自己的配置文件,我以身试法的结果是系统启动时报了个内存的fatal error,最后进不去系统了,幸亏有备份。
编译内核的过程花了30分钟,接下来安装内核。
# make installkernel
做好内核备份,因为升级之前我的内核是8.0-Release-p3的,因此将/boot/kernel.old修改为相应的名字
# mv /boot/kernel{.old/,.8.0Release-p3}
接下来重启系统,按4进入单用户模式,因为单用户模式使更新正在运行的软件可能导致的问题减到最少。此外,它也使配合新内核运行旧world可能出现的问题减到最少。
成功进入到单用户模式后:
# fsck -p 检查文件系统
# mount -u / 装载根分区
# mount -a -t ufs 装载所有的ufs分区
# swapon -a 打开交换空间
# mergemaster -p
这里面可能会在系统的密码数据库中添加新的用户和用户组,因次涉及到/etc/passwd和/etc/groups文件的修改,我选的都是默认选项(保留供以后手动修改)
# cd /usr/src
# make installworld
从/usr/obj复制world,这步操作之后,你盘上的系统,包括内核和world就都是新的了
# mergemaster
更新余下的配置文件。
这里面所有的配置文件修改我都选的默认选项,目前的问题时自己重新配置内核后不能正常启动,其他正常。
从源代码更新系统至8.1Stable后,我重新定制了一遍内核,编译和安装过程都正常,但是重启后无法进入系统,报错如下:
link_elf_obj: symbol elf32_insert_brand_entry undfined
linker_load_file: Unsupported file type
Google之,在找打解决方法如下,
修改内核配置文件,在其中加入:
options COMPAT_FREEBSD32 # Compatible with i386 binaries
其实内核配置文件中本来有一个COMPAT_IA32选项,也是用于兼容i386二进制文件,但是似乎没其作用,看了一下UPDATE文件,里面有提到这个,但没研究透彻
阅读(688) | 评论(0) | 转发(0) |