关于升级完后内核位于/usr/obj/usr/src/sys的问题官方解决

发表于:2007-06-09来源:作者:点击数: 标签:
今天又把handbook看了一遍,结果发再了手册居然有提到这个问题,而且影响 性能 。发贴给大家,以后见了就不要怕了。 [code:1:a2a3a09564]19.4.6.删除/usr/obj 随着重新构建系统的进行,编译结果会放到默认情况下/usr/obj下。这些目录 会映射到/usr/src。 通

今天又把hand book看了一遍,结果发再了手册居然有提到这个问题,而且影响性能。发贴给大家,以后见了就不要怕了。

[code:1:a2a3a09564]19.4.6. 删除 /usr/obj
随着重新构建系统的进行, 编译结果会放到 (默认情况下) /usr/obj 下。 这些目录
会映射到 /usr/src。
通过删除这个目录, 可以加速 make buildworld 的过程, 并避免相互依赖关系等复
杂的问题。
/usr/obj 中的某些文件可能设置了不可改标记 (详情参见 chflags(1)), 需要首先去掉
这些标志。
# cd /usr/obj
# chflags -R noschg *
# rm -rf *[/code:1:a2a3a09564]

所以,在你buildworld时要先删除/usr/obj哦。
这个贴子建议所有新手老手都看看。

 mafa 回复于:2005-08-12 09:01:48
hand book真不愧为经典中的经典。

 linuxbao3 回复于:2005-08-12 09:06:13
是啊,我有了不会的就先看hand book,要是新人能潜下心来看一眼,也就没有那么多小问题了。
现在觉得,hand book才是最大的精华,能通读hand book,自然也就能修成正果了

 剑心通明 回复于:2005-08-12 09:23:42
[quote:c3105019e5="linuxbao3"]
所以,在你buildworld时要先删除/usr/obj哦。
这个贴子建议所有新手老手都看看。[/quote:c3105019e5]
回头重新编译一次试试

 Zer4tul 回复于:2005-08-12 09:35:44
那是当然,不想想Handbook都谁写的……肯定是最权威的啦……

 剑心通明 回复于:2005-08-12 16:23:20
经过测试,发现:
可以加速 make buildworld 的过程, 并避免相互依赖关系等复杂的问题

但是依然是在/usr/obj/usr/src/sys下面:
virtual# uname -a
FreeBSD virtual.×××× 5.3-RELEASE-p15 FreeBSD 5.3-RELEASE-p15 #0: Fri Aug 12 15:25:55 CST 2005     root@virtual.××××:/usr/obj/usr/src/sys/KERNEL  i386

 剑心通明 回复于:2005-08-12 16:24:25
在虚拟机上重新make了半天,累死了,机器太差劲,开始make之后几乎都快不能用了,慢死了,好不容易make完了

 linuxbao3 回复于:2005-08-12 16:52:26
在你make buildkernel时应该指定下
[code:1:5391ff9af4]
# cd /usr/src
# make buildkernel KERNCONF=MYKERNEL
# make installkernel KERNCONF=MYKERNEL[/code:1:5391ff9af4]

 剑心通明 回复于:2005-08-12 16:58:19
就是那样做的啊

 linuxbao3 回复于:2005-08-12 17:07:03
我去看hand book,找答案去。

 linuxbao3 回复于:2005-08-12 17:27:19
通明,能不能把你的做法贴上来?就是用过的命令按顺序发上来?
中间的过程不要。说真的,这个问题我也是在build失败后才现的。但是根据hand book第19章,
[code:1:c744136a0c]
19.4.16.3. 我完成后可以删除 /usr/obj 吗?
简短地说,可以。
/usr/obj 包含了所有在编译阶段生成的目标文件。通常, 在 make buildworld 过程中
第一步之一就是删除这个目录重新开始。 这种情况下,在您完成后,保留 /usr/obj
没有多大意义,还可释放一大堆磁盘空间(通常在 340 MB 左右)。
只是,如果您清楚您在干什么,您可以让 make buildworld 跳过这一步。 这会让后
继的 build 执行得更快,因为大部分的源码都不必再进行编译了。 这个的另一面就
在于敏感的依赖问题可以潜在, 并以奇怪的方式引起 build 的失败。这在 FreeBSD
邮件列表里经常引起沸腾, 当有人抱怨他们 build 失败时,并没意识到这是因为自
已是想抄近路 (意思是说少了些必要的步骤)。
[/code:1:c744136a0c]
显然,/usr/obj只是个目标文件夹,是个中间过程,可以删除。
你先把你的发上来吧。

 剑心通明 回复于:2005-08-12 18:11:43
[quote:ce013510c3="linuxbao3"]显然,/usr/obj只是个目标文件夹,是个中间过程,可以删除。
你先把你的发上来吧。[/quote:ce013510c3]
按照这样写的好像是啊,但我重新make了以后确实还是那样的,很是奇怪:
cd /usr/src
make buildworld
make buildkernel KERNCONF=KERNEL
make installkernel KERNCONF=KERNEL
shutdown now 
adjkerntz -i
fsck -p
mount -u /
mount -a -t ufs
swapon -a
mergemaster -p
cd /usr/src
make installworld
mergemaster
reboot

uname -a

 原始人 回复于:2005-08-12 22:16:50
1. sysctl -a 输出头几行中有个 kern.version 变量, 大家看看

2. 查看 /usr/src/usr.bin/uname/uname.c 源代码文件得知,uname 命令就是读取的这个变量

3. GENERIC 内核安装后运行 uname -a 结果同样是位于/usr/obj/usr/src/sys/GENERIC下面

4. root 身份通过 sysctl 命令 修改 kern.version 时提示变量只读

5. 如果使用 config, make depend, make 的方式编译, 会显示内核"位于"/usr/src/sys/i386/compile/内核名 目录下

6. 这不是什么问题

 bluebell 回复于:2005-08-12 22:18:15
[quote:76b16703fd="linuxbao3"]
所以,在你buildworld时要先删除/usr/obj哦。
这个贴子建议所有新手老手都看看。[/quote:76b16703fd]

请问这不是针对第一次buildworld吧?

我看王波先生的《FREEBSD技术内幕》中写,主要是针对第一次之后。而且这也不仅仅是影响性能,会影响新系统正常运行。所以做为常规操作,应该在buildworld之前进行删除。

今天刚给前几天装的系统buildworld,时间挺长的(也有可能是机器的速度比较慢吧)。

 剑心通明 回复于:2005-08-13 08:09:54
[quote:a526543ae5="原始人"]1. sysctl -a 输出头几行中有个 kern.version 变量, 大家看看

2. 查看 /usr/src/usr.bin/uname/uname.c 源代码文件得知,uname 命令就是读取的这个变量

3. GENERIC 内核安装后运行 uname -a 结果同样是位于/u..........[/quote:a526543ae5]
desktop# sysctl -a |more
kern.ostype: FreeBSD
kern.osrelease: 5.4-RELEASE-p6
kern.osrevision: 199506
kern.version: FreeBSD 5.4-RELEASE-p6 #0: Sun Jul 31 15:43:33 CST 2005
    jjp@desktop.×××:/usr/obj/usr/src/sys/KERNEL

ftp# uname -a
FreeBSD ftp.×××4.8-RELEASE FreeBSD 4.8-RELEASE #1: Mon Mar 29 19:55:48 CST 2004     root@ftp.×××:/usr/src/sys/compile/ipf  i386

确实是这样啊,多谢大哥指点

 剑心通明 回复于:2005-08-13 08:10:53
desktop# sysctl kern.version=aaaa
sysctl: oid 'kern.version' is read only
没错,是这样的

 linuxbao3 回复于:2005-08-13 08:31:19
厉害,高手,原来秘密就是,要用传统的方法来重新make world

 linuxbao3 回复于:2005-08-13 08:46:57
看看才注意到,原始人大侠是个大水牛,03年注册到现在,才发贴63,水到家了。高手~~~

 gsging 回复于:2005-08-13 10:34:51
[quote:5360fa9373="bluebell"]

我看王波先生的《FREEBSD技术内幕》中写..........[/quote:5360fa9373]


技术内幕不是王波写的 :mrgreen:

 剑心通明 回复于:2005-08-13 10:47:22
[quote:7874bb1be8="gsging"]


技术内幕不是王波写的 :mrgreen:[/quote:7874bb1be8]
呵呵,还真没注意,我说哪,怎么看着那么别扭,王波写的是使用大全,技术内幕是翻译的国外的

 loveKDE 回复于:2005-08-13 12:09:14
刚刚我也看到这个了

 bluebell 回复于:2005-08-13 12:51:31
[quote:c30cf977aa="gsging"]


技术内幕不是王波写的 :mrgreen:[/quote:c30cf977aa]

 :oops:  :oops:  :oops: 

是个老外写的。
主要是两本都看,所以就容易…… :oops:  :oops:  :oops:

 skysnowolf 回复于:2005-08-15 08:34:21
楼主为什么不在偶那个帖子下面回帖,搞新一帖,让偶没有加精的机会,呜呜!

偶还有一个问题:单用户下mergemaster -p和mergemaster两个步骤各位是怎么做的?提示的问题好多要做好久啊。
比如提示选择root的临时目录/var/tmp/temproot还是新一个临时目录有什么用?还有如何合并passwd?反正偶有一两次编译world的时候都是进去就咔嚓了出来,重启也就正常了。手册说好像可以不用做这个步骤。

 linuxbao3 回复于:2005-08-15 08:35:43
呵呵,以后会的~~~~呵

其实加不精对我无所谓的,关键是让大家能知道原因

 skysnowolf 回复于:2005-08-15 08:41:20
[quote:780d120d76="linuxbao3"]呵呵,以后会的~~~~呵
[/quote:780d120d76]
偶也是开玩笑,别介意呵。 :mrgreen: 

偶还有一个问题:单用户下mergemaster -p和mergemaster两个步骤各位是怎么做的?提示的问题好多要做好久啊。 
比如提示选择root的临时目录/var/tmp/temproot还是新一个临时目录有什么用?还有如何合并passwd?反正偶有一两次编译world的时候都是进去就咔嚓了出来,重启也就正常了。手册说好像可以不用做这个步骤。

 剑心通明 回复于:2005-08-15 09:49:59
偶都是直接回车20.4.1 更新系统的规范途径
要更新系统, 您必须查看 /usr/src/UPDATING 文件, 以了解 buildworld 之前需要完成的步骤, 然后使用下面的过程:

# make buildworld
# make buildkernel
# make installkernel
# reboot
注意: 有些时候, 需要额外地执行一次 mergemaster -p 才能够完成 buildworld 步骤。 这些会在 UPDATING 中进行描述。 一般而言, 您可以简单地跳过这一步,只要进行的不是 FreeBSD 的大跨度版本升级。

在 installkernel 成功完成之后, 您需要引导到单用户模式 (例如, 在加载器提示后面输入 boot -s)。 接下来执行:

# mergemaster -p
# make installworld
# mergemaster
# reboot
阅读进一步的说明: 上边描述的序列只是有助于您开始工作的简要。要清楚的理解每一不步,尤其是您想使用定制内核配置, 您就应阅读下面的部分。
到这里就可以了,具体的要看/usr/src/UPDATING

 skysnowolf 回复于:2005-08-15 16:21:12
楼上斑竹还没理解, 我的意思是mergemaster进去后怎么做,好麻烦的说。

 剑心通明 回复于:2005-08-15 16:30:57
偶都是全部回车,呵呵

原文转自:http://www.ltesting.net