# 此文章欢迎转载、修改,但请注明出处
FreeBSD 8.0-Release终于发布,于是决定亲手做个系统升级实验。经过很长时间的折腾,终于是升级完成,目前也还没发现什么问题,Apache,MySQL等在旧系统中安装的程序也正常工作。
环境:VMware 7.0中的FreeBSD 7.2-Release
一、同步系统源代码
在升级系统之前必须先把本地系统的world和kernel的源代码同步至8.0-Release,安装好cvsup(没有使用图形界面,因此我是到cvsup-without-gui这个port底下进行的make install clean)之后,可以很方便的进行这一步骤。
- 修改“standard-supfile”文件。“standard-supfile”在/usr/share/examples/cvsup/目录有一份样本,我们可以将之复制一份到用户主目录。默认的“standard-supfile”文件只需修改host和tag就行了,host根据自己实际情况修改为速度最快的cvsup源,tag必需修改为8.0-Release的 RELENG_8_0
- 在“standard-supfile”所在目录下执行以下命令,即可将world和kernel的源代码都更新完毕。
# cvsup -g -L 2 standard-supfile |
二、编译和安装world与kernel
切换到源码主目录(编译和安装工作主要在此进行)
为了以防万一,在遵循Handbook里的步骤实施之前一定要阅读一下UPDATING和README文件,看看是否有特别要注意的地方。Handbook有提到加上-j 参数(并行编译)可以缩短编译时间,但UPDATING文件中指出
加上-j 参数之后可能会导致编译失败,因此以下步骤都没加-j 参数。确定没有其它特殊操作后,我开始按照Handbook的推荐步骤进行编译和安装。
按照Handbook里的解释:
- 旧的编译器可能无法编译新的内核。 (另一方面, 旧的编译器很可能有 bug。) 因此,
新的内核应该以新的编译器编译。 更具体地说,
新的编译器应在新内核开始联编之前已经完成了联编步骤。 请注意,
新的编译器并不一定需要在联编新内核之前 安装 到系统中。
- 新的 world 有可能依赖一些新的内核特性。 因此, 新内核必须在新的 world 之前安装。
编译步骤必须按如下进行:
编译world这步操作会联编新的编译器, 以及少量相关工具, 并在随后使用新的编译器来联编 world。
联编的结果会存放在
/usr/obj。
这个步骤很花时间,等着吧!
编译kernel
编译好world之后,我并没有按照Handbook的编译GENERIC内核,而是定制了一个内核。如果你打算快捷的按照默认配置
编译一个GENERIC内核,只需完成后,即可跳至“安装kernel”步
定制内核步骤:
# cd /usr/src/sys/amd64/conf/ |
进入内核配置文件的目录(/usr/src/sys/是内核源码主目录),我的FreeBSD 7.2-Release是64位版,因此进入的是amd64/目录底下的conf/,如果你是32位版本则应“cd /usr/src/sys/i386/conf/”。以此类推。
# mkdir ~/kernconf/ && cp GENERIC ~/kernconf/MYKERNEL # ln -s ~/kernconf/MYKERNEL
|
直接修改当前目录的GENERIC文件(GENERIC内核的配置文件)并不是一个好主意,为了给自己一条后路,必须保存好GENERIC文件。将配置文件放到用户主目录里面去,再在当前目录创建一个符号连接到~/kernconf/MYKERNEL即可。
接着应该编辑“MYKERNEL”文件,按照自己的需求进行,不再赘述。
编辑好之后即可回到/usr/src目录进行编译步骤
# cd /usr/src
# make buildkernel KERNCONF=MYKERNEL |
KERNCONF=MYKERNEL参数指定了配置文件为MYKERNEL。
等吧,等待编译完成。。。。。
安装kernel
若你是编译的GENERIC内核,即“make buildkernel”不带KERNCONF参数,执行
我定制了内核,所以要执行
# make installkernel KERNCONF=MYKERNEL
|
仍然要带上“
KERNCONF=MYKERNEL
”参数。
kernel安装完成后,可以重启系统了。
重启系统,进入单用户模式
在启动菜单那里选择“4”,或者输入“boot -s”即可进入由
新内核引导的单用户模式。
系统初始化完成后会提示你选择哪种shell,直接Enter即可(选择了/bin/sh)
执行
对于这一步,Handbook上的解释是:
- 如果您的 CMOS 时钟是设置为本地时间,而不是 GMT (如果 date(1) 命令输出不能显示正确的时间和地区也确有其事), 您可能也需要执行下边的命令:“adjkerntz -i”,这样可以确定您正确的本地时区设置──不这样做, 您以后可能会碰到一些问题。
将/etc/fstab所描述的所有文件系统挂载为UFS。
第一次安装、修改系统里面的配置文件
mergemaster 工具是个 Bourne 脚本,用于检测 /etc 和 /usr/src/etc 源码树里边的配置文件的不同点。这是保持系统配置文件同源码树里的一起更新的推荐方式。敲入上述命令后,会显示将要对某个配置文件将要进行的操作,+ 符号标识增加或修改的行,- 标识将完全删除的行或将被替换成新行(其实就是diff命令的结果)。此时会有四个选项:
- 按“i”会安装新的配置文件
- 按“d”会保留旧的配置文件
- 按“m”会让你手动进行配置
- 按“v”可以查看修改结果
一般来说,使用“m”与“i”的机会更多。
在执行“
mergemaster -p
”后,第一个配要更新的置文件即与系统的用户组相关:/etc/group(也许第一个要配置的并不是这个文件,但这个文件很重要,所以必修重视一下),此时应该选择“m”,手动进行更新。
选择“m”之后,分成了左右两栏,左边的是老的配置文件的一行,右边则是新的配置文件的一行。按下“L”(Left)并回车会选择左边的一行到新的文件,按下“R”(Right)则选择右边的一行。因此,当你想保留旧文件的一行就按“L”,想以新的配置文件覆盖掉旧的某一行则选择“R”。对于/etc/group这样的文件,你可能想升级文件版本(第一行信息),则选择“R”。
但由于旧系统已经产生了许多新系统默认没有的用户组(比如安装了MySQL产生的mysql组),这时千万不能选R(会删除mysql等组),选L保留吧!其它如/etc/passwd文件也必需万分小心。
很多配置文件只有一行版本信息的变化而已,这时就可以选择“i”,直接安装新版本。
安装新的world
# cd /usr/src
# make installworld
|
将会安装好新的world。
第二次更新配置文件
操作方法与第一次无异,只不过这次真的要更新很多配置文件(花了我一个小时),顺便看看系统各配置文件的位置吧!
配置完之后,系统已经完全更新了,可以重启了!
阅读(1669) | 评论(0) | 转发(0) |