LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 3718|回复: 7

FreeBSD makeworld的过程[zz]

[复制链接]
发表于 2003-7-18 15:55:10 | 显示全部楼层 |阅读模式
简单翻译了一下makeworld的过程
作者:不详

去小恶魔学园没找到, 只好自己翻译一下, 和原版有些出入, 加上一些自己的理解, 有误还请指出
英文原版file:///usr/share/doc/en/books/handbook/makeworld.html

注意事项

* 备份系统, 备份一下总不至于吃亏
* 订阅对应邮件列表, 希望你的英文不至于太差, 在对应邮件列表上贴上你问题的描述, 描述清楚出现的问题及受影响的系统

STABLE: freebsd-stable@FreeBSD.org
CURRENT: freebsd-current@FreeBSD.org

升级步骤(假设你已经同步到要升级的代码)

1. 读一下/usr/src/UPDATING, 上面由一些你可能需要注意的事项, 一定要读一下, 但并不代表这一定比从邮件列表上得到的信息有用, 所以推荐订阅邮件列表
2. 检查/etc/make.conf, 查看/etc/make.conf和/etc/default/make.conf的不同之处, /etc/default/make.conf中包含一些缺省定义, 不过大部分都被注释掉了, 可以考虑把它们加入到/etc/make.conf中, 不过要记得/etc/make.conf所有的make命令都起作用
3. 更新/etc下的文件, /etc下存放配置和启动脚本, 有些文件在不同的版本中是不同的, 所以需要进行更新, 从FreeBSD 开始可以在编译前使用命令 mergemaster 加上 -p 选项. 它将检查为了正常运行buildworld和installworld而需要更新的文件, 命令如下:

# cd /usr/src/usr.sbin/mergemaster
# ./mergemaster.sh -p

4. 进入单用户模式, 避免多用户系统带来的文件升级不成功问题, 还有一种方法就是在多用户模式下编译, 单用户下升级安装, 命令如下

# shutdown now

重启后使用boot -s 进入单用户模式

# fsck -p
# mount -u /
# mount -a -t ufs
# swapon -a

加入升级前系统使用本地时间而没有使用GMT, 必须打入命令

# adjkerntz -i

调整时区等设置, 保证系统的正常安装
5. 移除/usr/obj

# cd /usr/obj
# chflags -R noschg *
# rm -rf *

6. 编译
a 保存编译输出, 注意不要存在/tmp目录下, /tmp下的文件可能在重启后被清除

# script /var/tmp/mw.out
Script started, output file is /var/tmp/mw.out
# make TARGET
... compile, compile, compile ...
# exit
Script done, ...

b 编译

# cd /usr/src
# make -j4 -DNOPROFILE buildworld #或者在/etc/make.conf加上NOPROFILE=true

FreeBSD 2.2.5后make world分成make buildworld和make installworld, 注意这里只作make buildworld
c 耗时: PIII500/128M RAM大约需要2个钟头左右
7. 编译安装新内核

# cd /usr/src
# make buildkernel
# make installkernel

编译使用GENERIC配置的内核, 推荐编译一个, 以免以后编译内核后无法使用新内核启动没有make installworld前定制编译新内核使用下面的命令

# /usr/obj/usr/src/usr.sbin/config/config KERNELNAME

8. 以新内核重启到单用户模式
9. 升级系统, 注意要使用和make buildworld使用的-D选项, 并且绝对不能使用-j选项

# cd /usr/src
# make installworld

假如编译时:

# make -DNOPROFILE=true buildworld

安装时就应该:

# make -DNOPROFILE=true installworld

10. 升级那些没有被make world升级的文件, 如/etc下的文件, 可以使用mergemaster或者手工升级, 这一点请参见mergemaster的手册, 在升级前建议备份/etc目录.
11. 更新/dev 通常使用mergemaster, 就会重建/dev, 或使用命令 sh MAKEDEV 建立
12. 更新/stand

# cd /usr/src/release/sysinstall
# make all install

13. 再次重启

# fastboot

14. 结束升级, 加入有些程序无法运行的话可以重新编译安装, 例如

# cd /usr/src/usr.bin/file
# make all install
发表于 2003-7-18 16:05:14 | 显示全部楼层
斑竹现在的头像不如原来的好。

make buildkernel & make installkernel 还是可以直接一个命令make kernel 就可以
make buildworld & make installworld 也是一样一个命令 make world就可以

而且那个并行编译参数 -jn 如果是单处理器,n=2 就差不多了,个人觉得n=4有些过分了,并行的进程多了,反而有进程争夺处理器资源,而处理器需要更频繁的进程调度,可能会降低编译速度。
发表于 2003-7-18 18:24:26 | 显示全部楼层
用这么麻烦么?make world都更新了哪些东西呢?
那次我更新完代码,不小心直接敲了个make world,p4,用了不长时间就完了,也没发现什么特别的地方。。。
发表于 2003-7-18 22:26:04 | 显示全部楼层
该加精的说.
发表于 2003-7-19 01:29:57 | 显示全部楼层
最初由 Gavin_tju 发表
用这么麻烦么?make world都更新了哪些东西呢?
那次我更新完代码,不小心直接敲了个make world,p4,用了不长时间就完了,也没发现什么特别的地方。。。


make world 是根据当前的source tree 重新编译整个基本系统,编译的东西就是/stand/sysinstall 然后选择configuration -》 contribution里的那些组件。
发表于 2003-10-23 13:16:50 | 显示全部楼层
最初由 DimAngel 发表
斑竹现在的头像不如原来的好。

make buildkernel & make installkernel 还是可以直接一个命令make kernel 就可以
make buildworld & make installworld 也是一样一个命令 make world就可以

而且那个并行编译参数 -jn 如果是单处理器,n=2 就差不多了,个人觉得n=4有些过分了,并行的进程多了,反而有进程争夺处理器资源,而处理器需要更频繁的进程调度,可能会降低编译速度。

我看到 make buildkernel  AND make installkernel 是夹在 make buildworld   和  make installworld中间的。那  make world 要放到 make kernel的前面还是后面?


还有,一定要同时 make kernel吗? 在做所有make world工作之前,我已编译过内核了。



第四步这里。# shutdown now
不是用reboot吗? 这个命令是关机的吗? 我现在不在BSD,没用过shutdown now ,关机我都是用shutdown -p now .



这里为什么要 "exit"   登出,为什么要登出?
# script /var/tmp/mw.out
Script started, output file is /var/tmp/mw.out
# make TARGET
... compile, compile, compile ...
# exit
Script done, ...
发表于 2004-8-11 08:28:48 | 显示全部楼层
shutdown now是退到单用户模式。不是关机。
发表于 2004-8-13 21:57:01 | 显示全部楼层
研究一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表