Chinaunix

标题: 《FreeBSD新手快速入门》第4篇__FreeBSD服务器之内核编译 [打印本页]

作者: freemongolia    时间: 2007-11-25 14:04
标题: 《FreeBSD新手快速入门》第4篇__FreeBSD服务器之内核编译
《FreeBSD新手快速入门》第4篇__FreeBSD服务器之内核编译

--------------------------------------------------------------------------------
FreeBSD6.2架设之内核编译


Mongolia



Index:


简介





为你自己定制专用的内核,加入一些特定功能如QUOTA,禁止控制台重启,声卡,防火墙等,总之可以自己做到很多适合自己机器的配置。


[ 本帖最后由 freemongolia 于 2007-11-25 14:29 编辑 ]
作者: freemongolia    时间: 2007-11-25 14:05
Step 1 查看当前机器的自检信息.





内核编译最好本地操作,不要远程编译。

要是你修改过/etc/make.conf文件,一定要还原此文件。

确保/etc/make.conf文件如下

Shell:
cat /etc/make.conf

# added by use.perl 2007-11-24 22:06:09

PERL_VER=5.8.8

PERL_VERSION=5.8.8

查看当前机器的自检信息,取得CPU 内存 显示卡 硬盘 网卡等信息

Shell:
dmesg | less

查看/usr/src/Makefile文件,此文件说明注意事项和具体操作步骤

Shell:
cd /usr/src/

less /usr/src/Makefile

# For individuals wanting to build from the sources currently on their
# system, the simple instructions are:
#
# 1.`cd /usr/src'
(or to the directory containing your source tree).

# 2.`make world'
#
# For individuals wanting to upgrade their sources (even if only a
# delta of a few days):
#
# 1.`cd /usr/src' (or to the directory containing your source tree).
# 2.`make buildworld'
# 3.`make buildkernel KERNCONF=YOUR_KERNEL_HERE' (default is GENERIC).
# 4.`make installkernel KERNCONF=YOUR_KERNEL_HERE' (default is GENERIC).
# 5.`reboot' (in single user mode: boot -s from the loader prompt).
# 6.`mergemaster -p'
# 7.`make installworld'
# 8.`make delete-old'
# 9.`mergemaster'
# 10.`reboot'
# 11.`make delete-old-libs' (in case no 3rd party program uses them anymore)


[ 本帖最后由 freemongolia 于 2007-11-25 14:52 编辑 ]
作者: freemongolia    时间: 2007-11-25 14:06

Step 2 备份当前内核描述文件.





查看当前机器内核描述文件

Shell:
uname -a

FreeBSD WOW.freemongolia.cn 6.2-RELEASE FreeBSD 6.2-RELEASE #0: Fri Jan 12 10:40:27 UTC 2007
[email=root@dessler.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERICi386]root@dessler.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERICi386[/email]


备份当前机器内核描述文件
复制/usr/src/sys/i386/conf/GENERIC文件到/etc/WOW (WOW表示你自定义的名称)

Shell:
cp /usr/src/sys/i386/conf/GENERIC /etc/WOW

创建一个链接到/usr/src/sys/i386/conf/GENERIC/目录

Shell:
cd /usr/src/sys/i386/conf/

ln -s /etc/WOW /usr/src/sys/i386/conf/




[ 本帖最后由 freemongolia 于 2007-11-25 14:52 编辑 ]
作者: freemongolia    时间: 2007-11-25 14:06

Step 3 编辑内核描述文件.






编辑内核描述文件

添加磁盘配额、禁用控制台中的热启动、等功能


编辑内核描述文件,vi /usr/src/sys/i386/conf/WOW


Shell:
vi /usr/src/sys/i386/conf/WOW


Editor:
# 具体选项请参考http://www.freebsd.org/doc/zh_CN.GB2312/books/handbook/kernelconfig-config.html
ident             WOW       #内核标记名称

增加以下内容
options         QUOTA                      #启用磁盘配额
options         SC_DISABLE_REBOOT    #在控制台禁用CTRL+ALT+DEL
存盘退出

以下2项不要注销

device scbus      # SCSI bus (required for SCSI)
device da     # Direct Access (disks)




[ 本帖最后由 freemongolia 于 2007-11-25 14:53 编辑 ]
作者: freemongolia    时间: 2007-11-25 14:07

Step 4 编译内核.






编译内核

根据/usr/src/Makefile文件方法,进行编译内核

1cd /usr/src (进入编译核心目录)

Shell:
cd /usr/src

2make buildworld(很漫长的等待大约1小时左右,有没有更漫长的事情?有。Ports安装XorgGnome33夜,33夜。嗯?好熟悉的旋律……..) (更新版本)

Shell:
make buildworld

3make buildkernel KERNCONF=你的内核描述文件名(default is GENERIC)(下面的WOW是我的内核描述文件名称)
(正式编译核心大约用时20分钟)

Shell:
make buildkernel KERNCONF=WOW

4make installkernel KERNCONF=你的内核描述文件名(default is GENERIC) (安装核心大约用时1分钟)

Shell:
make installkernel KERNCONF=WOW

5reboot (重新启动进入单人模式,重启选择4;具体操作可以查看第1章忘记root密码怎么办)

Shell:
reboot

以下几步为在单人模式下操作mount -u (重新挂载,参数-u表示挂载后可读写)

Shell:
单人模式#mount -u

mount -a (挂载全部磁盘,参数-a表示全部磁盘)

Shell:
单人模式#mount -a

cd /usr/src (进入编译核心目录)

Shell:
单人模式#cd /usr/src

mergemaster -p (此命令用来检验内核描述文件正确性)

Shell:
单人模式#mergemaster -p
*** Comparison complete
Do you wish to delete what is left of /var/tmp/temproot?[no]

make installworld(安装所有新的系统源代码,大约用时3分钟)

Shell:
单人模式#make installworld

mergemaster
系统询问是否删除/var/tmp/temproot目录时,按d键进行删除(用来更新或修改/etc的配置文件)

Shell:
单人模式#mergemaster
How should I deal with this? [Use the existing /var/tmp/temproot]d

系统提示发现/etc/rc.d/jail文件与旧的对比有变化,按键盘q键退出查看。询问对新文件怎么处理?按i键安装?还是按d键删除?还是按m键?我们没有编辑过的文件就选择新的,所以按i键选择安装。

Shell:
*** Displaying differences between ./etc/rc.d/jail and installed version
--- /etc/rc.d/jail
Fri Jan 12 15:42:21 2007

q
How should I deal with this? [Leave it for later]i

系统提示发现/etc/hosts文件与旧的对比有变化,按键盘q键退出查看。询问对新文件怎么处理?按i键安装?还是按d键删除?还是按m键?我们编辑过的文件就保留旧的配置,所以按d键选择删除新的。

Shell:
*** Displaying differences between ./etc/hosts and installed version
--- /etc/hosts
Sun Nov 25 05:21:04 2007

+++./etc/hosts Sun Nov 25 20:29:23 2007
q
How should I deal with this? [Leave it for later]d

系统提示发现/etc/mote文件与旧的对比有变化,按键盘q键退出查看。询问对新文件怎么处理?按i键安装?还是按d键删除?还是按m键?motd的作用就是你登入系统时出现的那个欢迎词,我们看看新的欢迎词有没有变化,所以按i键选择安装新的。

Shell:
*** Displaying differences between ./etc/motd and installed version
--- /etc/motd
Sun Nov 24 21:22:58 2007

+++./etc/motd
Sun Nov 25 20:29:23 2007

q
How should I deal with this? [Leave it for later]i

要不要删除/var/tmp/temproot目录,直接回车就行。

Shell:
Do you wish to delete what is left of /var/tmp/temproot? [no]

reboot(重启服务器)

Shell:
单人模式#reboot



[ 本帖最后由 freemongolia 于 2007-11-25 14:55 编辑 ]
作者: freemongolia    时间: 2007-11-25 14:08



Step 5 内核编译前后对比.





激动人心的时刻来临了,等了好几个小时后,我们现在要看看是否新内核安装成功了。

内核文件大小对比

编译后:

Shell:
du -h /boot/kernel

18M /boot/kernel

du -h /boot/kernel/kernel

2.7M /boot/kernel/kernel


编译前:

Shell:
du -h /boot/kernel.old/

23M /boot/kernel.old/

du -h /boot/kernel.old/kernel

6.8M /boot/kernel.old/kernel

内核配置文件名称对比

编译前:

Shell:
uname -a

FreeBSD ohaha.3322.org 6.2-RELEASE FreeBSD 6.2-RELEASE #0: Fri Jan 12 10:40:27 UTC 2007
[email=root@dessler.cse.buffalo.edu:/usr/obj/usr/src/sys/GENERIC]root@dessler.cse.buffalo.edu:
/usr/obj/usr/src/sys/GENERIC[/email] i386



编译后:

Shell:
uname -a

FreeBSD ohaha.3322.org 6.2-RELEASE-p8 FreeBSD 6.2-RELEASE-p8 #0: Sun Nov 25 12:04:05 CST 2007
[email=root@WOW.ohaha.3322.org:/usr/obj/usr/src/sys/WOW i386]root@WOW.ohaha.3322.org:
/usr/obj/usr/src/sys/WOW i386[/email]


内核编译前后SSH侦听端口协议对比

编译后(去除IPV6支持)

Shell:
netstat -an

tcp4 0 0 *.22 *.* LISTEN


编译前:

Shell:
netstat -an

tcp4 0 0 *.22 *.* LISTEN

tcp6 0 0 *.22 *.* LISTEN

登入时欢迎信息的对比

编译后(显示更人性化,居然会有一些操作技巧提示^_^)

Shell:
FreeBSD 6.2-RELEASE-p8 (WOW) #0: Sun Nov 25 12:04:05 CST 2007
Welcome to FreeBSD!
Before seeking technical support, please use the following resources:

>.............

You may also use sysinstall( to re-enter the installation and
configuration utility.
Edit /etc/motd to change this login announcement.
To obtain a neat PostScript rendering of a manual page, use ``-t'' switch
of the man(1) utility: ``man -t <topic>''.
For example:
man -t grep > grep.ps
# Save the PostScript version to a file
or
man -t printf | lp
# Send the PostScript directly to printer


编译前:

Shell:
Welcome to FreeBSD!
Before seeking technical support, please use the following resources:

>………………


注:文中所说大约XX时间,是根据不同的机器配置会有出入。主要是看你的CPUCPU够强劲,速度就够快,时间也就会少。

编译内核时CPU和内存占用

Shell:
top

CPU states: 92.9% user,0.0% nice,6.7% system,0.4% interrupt,0.0% idle

Mem: 26M Active, 721M Inact, 141M Wired, 200K Cache, 111M Buf, 107M Free



[ 本帖最后由 freemongolia 于 2007-11-25 14:49 编辑 ]
作者: freemongolia    时间: 2007-11-25 14:09



Step 4 内核编译完后的清理.




内核编译完成后,需要进行清理为下次编译做准备:

清理编译内核后的临时文件
Shell:

cd /usr/obj/

chflags -R noschg *

rm -rf *

至此内核编译安装完成。





Step 6 F.A.Q.






[ 本帖最后由 freemongolia 于 2007-11-25 14:28 编辑 ]
作者: freemongolia    时间: 2007-11-25 14:37


Links to other sources




FreeBSD使用手册

http://cnsnap.cn.freebsd.org/doc/zh_CN.GB2312/books/handbook/index.html


FreeBSD使用手册_内核配置

http://www.freebsd.org/doc/zh_CN.GB2312/books/handbook/kernelconfig-config.html



[ 本帖最后由 freemongolia 于 2007-11-25 14:50 编辑 ]
作者: pw东升    时间: 2007-11-25 15:47
内核编译最好本地操作,不要远程编译。

如果机子已经托管又不好到机房中升级,也不能通过远程编译吗?
作者: bcpxqz    时间: 2007-11-25 19:50
太谢谢啦,这系列的教程讲得很详细哦,解答了我的很多疑惑,在这以前我都是通过搜索引擎和论坛一点点的搜索来解决学习中遇到的问题。

我想既然是针对新手的,最好授之于鱼不如授只于渔,我更想学好这个系统来满足实际需要。

很可惜的是学校图书馆里FreeBSD方面的书籍太少,没有入门的,想学习只有看大家的教程和手册,感觉没有什么条理性(除了手册,毕竟我这样的新手看手册是有点吃力的),效率也很低,往往遇到一个问题,要花上一个下午的时间去搜索问题的解决方法。在douban里搜索FreeBSD方面的书籍似乎很少(图书馆里linux倒是很多)。

要是大侠们能说说自己学习的心得就好了,有没有比较好的书籍推荐给我们,谢谢!
作者: tecer    时间: 2007-11-25 20:06
提示: 作者被禁止或删除 内容自动屏蔽
作者: huzi1986    时间: 2007-11-26 14:48

作者: liwei6998    时间: 2007-11-26 17:08
太厉害了,十分感谢!!!
作者: snow888    时间: 2007-11-26 17:23
已经转成 pdf 格式,请大家自己下载。

FreeBSD新手入门之内核编译篇.pdf

453.5 KB, 下载次数: 533


作者: freemongolia    时间: 2007-11-26 21:43
原帖由 snow888 于 2007-11-26 17:23 发表
已经转成 pdf 格式,请大家自己下载。

---------------------------------------------------------------
同学感谢您制作成PDF,可是为啥偶下载了打开看。全是空白的呢?文字不全,版式也乱成一堆了呀。
上一张图请您看看。能不能再给调一下呢?

pdf.JPG (67.91 KB, 下载次数: 96)

pdf.JPG

作者: snow888    时间: 2007-11-27 09:28
原帖由 freemongolia 于 2007-11-26 21:43 发表

---------------------------------------------------------------
同学感谢您制作成PDF,可是为啥偶下载了打开看。全是空白的呢?文字不全,版式也乱成一堆了呀。
上一张图请您看看。能不能再给调一下呢?


晕!

我是在 Linux 下面做的,这个! 这个!


???????

Linux 下面能看到,Windows 下面看不见中文字符。

我好像是选的文鼎宋体 18030,是不是得改一下字库。我再看看,不行我再制作一次。
作者: tt2nn    时间: 2007-11-28 08:05
我在ubuntu下也看不到,估计是字库的问题了。
作者: amude888    时间: 2007-12-02 18:04
如果按照这个方案编译pcbsd可行不?pcbsd的make.conf和这个不一样的.

[ 本帖最后由 amude888 于 2007-12-2 18:06 编辑 ]
作者: cnleon    时间: 2007-12-03 10:26
make buildworld  LZ我一般是去掉这步的,直接运行下面2步,请问具体有点什么区别呢



make buildkernel KERNCONF=WOW



make installkernel KERNCONF=WOW
作者: bloodfoxs    时间: 2007-12-03 10:53
同上。。
make buildworld的作用是什么。。?
作者: 2599qiang    时间: 2007-12-03 21:52
顶了。。写的不错。。。。有这个文章,学习起来很快。。半年多时间LINUX我才做到这一步的。。。。FREEBSD和LINUX看来没什么区别。。但是更简单,就是内核加SHELL。。
作者: cu_newuser    时间: 2007-12-07 09:31
谢谢楼主!我正需要这方面的资料。

请楼主把PDF文档乱码的问题解决一下,谢谢!
作者: hjk857    时间: 2007-12-07 09:56
:wink: 请问有没有.PDF格式的文件下载呀?
作者: arbiter_2012    时间: 2007-12-07 17:16
谢谢楼主的辛苦奉献
作者: powerv_cu    时间: 2007-12-08 03:51
没什么好说的了,一定要顶。
作者: 451763407    时间: 2007-12-26 18:45
这个不错,按这不愁步骤基本完成了,
不过还是有不明白的,有些步骤地方没有能执行 比如说MAKE INSTALLWORLD
作者: arust    时间: 2008-03-02 17:58
1、cd /usr/src (进入编译核心目录)

2、make buildworld

3、make buildkernel KERNCONF=你的内核描述文件名(default is GENERIC)

4、make installkernel KERNCONF=你的内核描述文件名(default is GENERIC)


为什么操作手册上只写了这三步?

进入 /usr/src 目录:
# cd /usr/src

编译内核:
# make buildkernel KERNCONF=MYKERNEL

安装新内核:
# make installkernel KERNCONF=MYKERNEL
作者: 杜比环绕声    时间: 2008-03-02 18:15
make buildworld 的作用是建立FreeBSD系统工具集,如果是定制内核的话,不需要做make buildworld
作者: hy0kl    时间: 2008-05-21 14:53
Question:

参考手册,在同步了系统源码之后,再重新编译系统源码安装新系统,然后再切到单用户模式下运行 mergemaster 命令来做新重构系统后的一些更新后的工作.

如只是调整了当前系统的内核某些参数,比较加上对声卡的支持,去掉 IPV6,加磁盘配额,去掉多余的网卡驱动等,也要切到单用户模式下运行 mergemaster 命令吗?

我之前在虚拟机上编译过系统内核,并没有运行 mergemaster,但系统可以正常运行;但从 6.2 升级到 6.3 时是完全参看手册的,能够顺利的升级.
作者: andrew_young    时间: 2008-06-06 15:27
顶,我跟着handbook编译的内核,看lz这里比handbook更多步骤啊!
作者: yuyinyuyin664    时间: 2008-06-13 10:29
标题: 非常不错
对初学很有用哦~
收藏了~
作者: happy1123    时间: 2008-06-13 10:38
下沉很深的帖子都能顶起来
作者: ttleezhaoyu    时间: 2008-06-16 14:47

作者: ChestHair    时间: 2008-12-28 00:21
顶起来。。。。让大家多看下
作者: ycxm    时间: 2009-02-25 15:08
!!!!
作者: wangbin    时间: 2009-03-02 00:19
楼主写了很多废话,如果不是跨版本没有必要折腾。
作者: sev7eno    时间: 2009-04-14 12:51
非常感谢~很有用~
作者: xhw1910    时间: 2009-04-17 12:54
原帖由 wangbin 于 2009-3-2 00:19 发表
楼主写了很多废话,如果不是跨版本没有必要折腾。

看来阁下是位高手,也没见有何贡献。
我相信楼主之所以写那么多你认为的“废话”,是因为知道我们新手需要什么。
作者: linuxsun.cn    时间: 2009-04-18 14:15
呵,,,不错啊。
作者: freeman_super    时间: 2009-08-14 11:32
我电脑里面/etc目录下没有make.conf文件
这3个目录下面有
/usr/share/examples/etc/make.conf
/usr/src/share/examples/etc/make.conf
/usr/ports/ports-mgmt/portmk/files/make.conf
作者: easybegin    时间: 2009-08-14 13:49
谢谢楼主,已经收藏




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2