- 浏览: 239187 次
- 性别:
- 来自: 北京
“简单的东西不容易出问题。”
至理名言!事实上,削减操作系统中那些对你没用的功能是一件非常重要的事情。这不仅仅意味着一个更小的操作系统,占用更少的磁盘空间(现在的硬盘少说也有几十GB,几兆的空间根本就是九牛一毛),而且意味着你被攻击的可能性也更低――简而言之,你不需要担心操作系统中没有安装的模块存在问题会对你造成影响。
这篇文章中,我们将一起对FreeBSD-i386的内核进行优化配置。这篇文章是针对FreeBSD4.7-STABLE写的,并且,FreeBSD 4.x的配置不会和这篇文章有太大出入。如果你要优化FreeBSD 5或FreeBSD 2/3的内核的话,则需要仔细参考它们的LINT文件了(后面将会提到)。
[注意:FreeBSD 5.0预定将于2002年11月20日发布。FreeBSD的开发组非常重视发行版本的质量,并认为这比发行版本的计划还重要,但由于同样的原因,我们往往会发现FreeBSD实际发行的版本比预定计划晚一些,通常在半个月之内。FreeBSD 5.0作为FreeBSD近期最为重要的发行版本,很可能也会延后发表,但笔者个人认为无论如何我们在今年年底之前肯定是可以看到最终的发行版本的。FreeBSD 5.0对系统进行了大量的修改,这一系列的文章将在FreeBSD 5.0发布当天发表针对5.0的修订版本,而现有版本将保留,但进入维护阶段,不再引入新的内容。]
FreeBSD的源代码可以直接从中央cvsup服务器同步,也可以作为系统的一部分在安装的时候一兵装上。前面已经说过如何同步源代码,在此不再赘述。FreeBSD的源代码(通常在/usr/src)包含建造基本系统的全部代码,而在/usr/src/sys中则有若干个目录,对应不同的计算机体系结构(4.x只支持i386和alpha)。i386是一个泛指的名字,包含了与Intel 80386兼容的所有机器,并不是特指80386。
简单介绍一下FreeBSD的内核文件。在4.x系统中,/kernel这个文件是默认的内核,通常正常启动使用的就是它。 /kernel.GENERIC这个文件是兼容性较强的内核,如果/kernel无法引导系统, 就得靠这个文件来引导。/kernel.old是本次make kernel之前的内核,通常如果你的kernel坏掉, 也可以考虑使用/kernel.old来引导系统。
/modules/是内核的模块,而/modules.old/是对应/kernel.old的模块。这些文件在每次替换kernel的时候都会同时替换。
在5.0中,内核以及内核的模块都被保存在/boot/kernel中。
在/usr/src/sys/i386/conf中有两个配置文件,GENERIC和LINT。其中GENERIC是make kernel的默认配置文件,直接make kernel生成的是GENERIC内核,但安装时命名为/kernel。系统在安装时会安装一个kernel.GENERIC,以后,这个文件不会跟随系统的make kernel更新,因此,如果你认为这个文件有必要更新的话,需要手工make kernel,并把/kernel改名为kernel.GENERIC。当然,通常并不需要这样做。
LINT是包括几乎所有内核编译配置详细信息的文件。这个配置并不是用来真正建立kernel的,他的主要用途是向用户展示可用的内核编译配置。在修改内核编译配置时,最好先参考这个文件。
为了配置自己的内核,应将GENERIC复制为一个另外的文件。习惯上这个文件和主机名相同。例如,我把自己的这台Web机器命名为apache.intranet.frontfree.net,就把配置文件命名为APACHE:
cd /usr/src/sys/i386/conf
cp GENERIC APACHE
随后,用ee APACHE编辑它。我们拿一个实际的GENERIC文件来说明。
为了节省篇幅,这个文件头上的注释被删掉了一部分。
machine i386 # 体系模型为i386
cpu I386_CPU # 支持80386
cpu I486_CPU # 支持80486
cpu I586_CPU # 支持Pentium
cpu I686_CPU # 支持Pentium Pro以及更高
ident GENERIC # 内核文件的名字
maxusers 0 # 自动检测同时允许的最大用户数
#makeoptions DEBUG=-g # 包含调试符号。通常只有current版本打开
options MATH_EMULATE #支持协处理器模拟
options INET #支持互联网
options INET6 #IPv6通讯协议
options FFS #伯克利快速文件系统
options FFS_ROOT #FFS作为根设备[必须保留]
options SOFTUPDATES #打开FFS soft updates支持
options UFS_DIRHASH #提高大型目录的支持
options MFS #内存文件系统
options MD_ROOT #MD作为根设备
options NFS #Network Filesystem
options NFS_ROOT #NFS作为根设备(需要NFS)
options MSDOSFS #MSDOS文件系统
options CD9660 #ISO 9660文件系统(光盘)
options CD9660_ROOT #CD-ROM作为根设备(需要CD9660)
options PROCFS #进程文件系统
options COMPAT_43 #兼容4.3BSD[必须保留]
options SCSI_DELAY=15000 #检测SCSI设备前的延时(ms)
options UCONSOLE #用户可以夺取控制台
options USERCONFIG #boot -c编辑器 editor
options VISUAL_USERCONFIG #菜单式boot -c编辑器
options KTRACE #ktrace(1)支持
options SYSVSHM #SYSV-风格的共享内存
options SYSVMSG #SYSV-风格的消息队列
options SYSVSEM #SYSV-风格的信号量(semaphores)
options P1003_1B #Posix P1003_1B实时扩展
options _KPOSIX_PRIORITY_SCHEDULING
options ICMP_BANDLIM #对恶意ICMP请求进行限制
options KBD_INSTALL_CDEV # 在/dev安装一个CDEV设备
# 下面两项在制作对称多处理器(SMP)内核时需要
#options SMP #对称多处理器内核
#options APIC_IO #对称(APIC) I/O
device isa
device eisa
device pci
# 软驱
device fdc0 at isa? port IO_FD1 irq 6 drq 2
device fd0 at fdc0 drive 0
device fd1 at fdc0 drive 1
#
# 如果使用东芝Libretto以及他的Y-E Y-E Data PCMCIA软驱
# 不要使用上面的fdc0,而应使用
#device fdc0
# ATA以及ATAPI设备
device ata0 at isa? port IO_WD1 irq 14
device ata1 at isa? port IO_WD2 irq 15
device ata
device atadisk # ATA 磁盘驱动器(IDE硬盘)
device atapicd # ATAPI 光驱
device atapifd # ATAPI 软驱
device atapist # ATAPI 磁带机
options ATA_STATIC_ID #静态设备编号
# SCSI控制器
device ahb # EISA AHA1742 family
device ahc # AHA2940 板载AIC7xxx设备
device amd # AMD 53C974 (Tekram DC-390(T))
device isp # Qlogic family
device ncr # NCR/Symbios Logic
device sym # NCR/Symbios Logic (较新的芯片组)
options SYM_SETUP_LP_PROBE_MAP=0x40
# 使用ncr可以在配置了sym和ncr的情况下挂接旧的NCR设备
device adv0 at isa?
device adw
device bt0 at isa?
device aha0 at isa?
device aic0 at isa?
device ncv # NCR 53C500
device nsp # Workbit Ninja SCSI-3
device stg # TMC 18C30/18C50
# SCSI 外设
device scbus # SCSI 总线(如果使用SCSI设备,必须有)
device da # Direct Access (硬盘)
device sa # Sequential Access (磁带,等等)
device cd # CD
device pass # Passthrough device (直接 SCSI 访问)
# 通过SCSI子系统接口的RAID控制器
device asr # DPT SmartRAID V, VI and Adaptec SCSI RAID
device dpt # DPT Smartcache - See LINT for options!
device iir # Intel Integrated RAID
device mly # Mylex AcceleRAID/eXtremeRAID
device ciss # Compaq SmartRAID 5* series
# RAID控制器
device aac # Adaptec FSA RAID, Dell PERC2/PERC3
device aacp # SCSI passthrough for aac (requires CAM)
device ida # Compaq Smart RAID
device amr # AMI MegaRAID
device mlx # Mylex DAC960 family
device twe # 3ware Escalade
# atkbdc0 控制键盘和PS/2鼠标
device atkbdc0 at isa? port IO_KBD
device atkbd0 at atkbdc? irq 1 flags 0x1
device psm0 at atkbdc? irq 12
device vga0 at isa?
# 启动画面和屏幕保护程序
pseudo-device splash
# syscons 是默认的控制台驱动,类似SCO控制台
device sc0 at isa? flags 0x100
# 对于pcvt vt220控制台,启用这个和PCVT_FREEBSD
#device vt0 at isa?
#options XSERVER # 在vt控制台支持X服务器
#options FAT_CURSOR # 使用大光标
# 如果你是用ThinkPad,将下面的一行和其他PCVT相关设备的注释去掉
#options PCVT_SCANSET=2 # IBM使用非标准键盘
# 浮点运算支持 - 请勿禁用
device npx0 at nexus? port IO_NPX irq 13
# 电源管理支持
device apm0 at nexus? disable flags 0x20 # Advanced Power Management
# PCCARD (PCMCIA) 支持
device card
device pcic0 at isa? irq 0 port 0x3e0 iomem 0xd0000
device pcic1 at isa? irq 0 port 0x3e2 iomem 0xd4000 disable
# 串口(COM)
device sio0 at isa? port IO_COM1 flags 0x10 irq 4
device sio1 at isa? port IO_COM2 irq 3
device sio2 at isa? disable port IO_COM3 irq 5
device sio3 at isa? disable port IO_COM4 irq 9
# 并口
device ppc0 at isa? irq 7
device ppbus # 并口总线 (所有并口设备都需要)
device lpt # 打印机
device plip # 并口TCP/IP
device ppi # 并口接口设备
#device vpo # 需要scbus和da
# PCI 以太网适配器
device de # DEC/Intel DC21x4x (``Tulip'')
device em # Intel PRO/1000 adapter Gigabit Ethernet Card (``Wiseman'')
device txp # 3Com 3cR990 (``Typhoon'')
device vx # 3Com 3c590, 3c595 (``Vortex'')
# 使用公共的MII总线控制器代码的PCI以太网适配器
# 注意:一定要保留'device miibus'以确保可用
device miibus # MII总线支持
device dc # DEC/Intel 21143 and various workalikes
device fxp # Intel EtherExpress PRO/100B (82557, 82558)
device pcn # AMD Am79C97x PCI 10/100 NICs
device rl # RealTek 8129/8139
device sf # Adaptec AIC-6915 (``Starfire'')
device sis # Silicon Integrated Systems SiS 900/SiS 7016
device ste # Sundance ST201 (D-Link DFE-550TX)
device tl # Texas Instruments ThunderLAN
device tx # SMC EtherPower II (83c170 ``EPIC'')
device vr # VIA Rhine, Rhine II
device wb # Winbond W89C840F
device xl # 3Com 3c90x (``Boomerang'', ``Cyclone'')
device bge # Broadcom BCM570x (``Tigon III'')
# ISA以太网适配器
# 'device ed' 需要 'device miibus'
device ed0 at isa? port 0x280 irq 10 iomem 0xd8000
device ex
device ep
device fe0 at isa? port 0x300
# Xircom Ethernet
device xe
# PRISM I IEEE 802.11b wireless NIC.
device awi
# WaveLAN/IEEE 802.11 wireless NICs. Note: the WaveLAN/IEEE really
# exists only as a PCMCIA device, so there is no ISA attachment needed
# and resources will always be dynamically assigned by the pccard code.
device wi
# Aironet 4500/4800 802.11 wireless NICs. Note: the declaration below will
# work for PCMCIA and PCI cards, as well as ISA cards set to ISA PnP
# mode (the factory default). If you set the switches on your ISA
# card for a manually chosen I/O address and IRQ, you must specify
# those parameters here.
device an
# The probe order of these is presently determined by i386/isa/isa_compat.c.
device ie0 at isa? port 0x300 irq 10 iomem 0xd0000
#device le0 at isa? port 0x300 irq 5 iomem 0xd0000
device lnc0 at isa? port 0x280 irq 10 drq 0
device cs0 at isa? port 0x300
device sn0 at isa? port 0x300 irq 10
# 伪设备 - 数字表示分配多少个
pseudo-device loop # 环回网络
pseudo-device ether # 以太网支持
pseudo-device sl 1 # 核心级SLIP
pseudo-device ppp 1 # 核心级PPP
pseudo-device tun # 数据包隧道
pseudo-device pty # 伪-tty(telnet等等)
pseudo-device md # 内存虚拟盘
pseudo-device gif # IPv6和IPv4隧道
pseudo-device faith 1 # IPv6-to-IPv4转发(翻译)
# `bpf'伪设备将启用伯克利数据包过滤器。
# 小心由此带来的管理问题
pseudo-device bpf #Berkeley packet filter
# USB支持
device uhci # UHCI PCI->USB interface
device ohci # OHCI PCI->USB interface
device usb # USB Bus (required)
device ugen # Generic
device uhid # "Human Interface Devices"
device ukbd # Keyboard
device ulpt # Printer
device umass # Disks/Mass storage - Requires scbus and da
device ums # Mouse
device uscanner # Scanners
device urio # Diamond Rio MP3 Player
# USB 以太网,需要mii
device aue # ADMtek USB ethernet
device cue # CATC USB ethernet
device kue # Kawasaki LSI USB ethernet
现在要做的是去掉我们不需要的任何设备。(红色、中划线表示删除,红色无修饰表示修改,蓝色表示增加)。这份配置是生产服务器上的配置文件。
#
# APACHE -- FreeBSD/i386内核配置文件
#
machine i386 # 体系模型为i386
cpu I386_CPU # 支持80386
cpu I486_CPU # 支持80486
cpu I586_CPU # 支持Pentium
cpu I686_CPU # 支持Pentium Pro以及更高
ident APACHE # 内核文件的名字
maxusers 0 # 自动检测同时允许的最大用户数
#makeoptions DEBUG=-g # 包含调试符号。通常只有current版本打开
options MATH_EMULATE #支持协处理器模拟
#options GPL_MATH_EMULATE #GPL模拟更好,但仍然没必要,P III有内建协处理器
options INET #支持互联网
options INET6 #IPv6通讯协议
options FFS #伯克利快速文件系统
options FFS_ROOT #FFS作为根设备[必须保留]
options SOFTUPDATES #打开FFS soft updates支持
options UFS_DIRHASH #提高大型目录的支持
options MFS #内存文件系统
options MD_ROOT #MD作为根设备
options NFS #Network Filesystem
options NFS_ROOT #NFS作为根设备(需要NFS)
options MSDOSFS #MSDOS文件系统
options CD9660 #ISO 9660文件系统(光盘)
options CD9660_ROOT #CD-ROM作为根设备(需要CD9660)
options PROCFS #进程文件系统
options COMPAT_43 #兼容4.3BSD[必须保留]
options SCSI_DELAY=5000 #检测SCSI设备前的延时(ms)
options UCONSOLE #用户可以夺取控制台[没有X,不用]
options USERCONFIG #boot -c编辑器 editor
options VISUAL_USERCONFIG #菜单式boot -c编辑器
options KTRACE #ktrace(1)支持
options SYSVSHM #SYSV-风格的共享内存
options SYSVMSG #SYSV-风格的消息队列
options SYSVSEM #SYSV-风格的信号量(semaphores)
options P1003_1B #Posix P1003_1B实时扩展
options _KPOSIX_PRIORITY_SCHEDULING
options ICMP_BANDLIM #对恶意ICMP请求进行限制[例如flood ping]
options KBD_INSTALL_CDEV # 在/dev安装一个CDEV设备
options CPU_ENABLE_SSE #启用SSE支持(Pentium III)
#options CPU_ATHLON_SSE_HACK #如果你的BIOS不能正确识别Athlon SSE
#options NO_F00F_HACK #如果你使用Pentium且没有F00F bug
# 对ISA总线,AUTO_EOI将启用8259A的自动EOI功能
# 这意味着每次中断调用节省0.7-1.25微秒,但不应用于笔记本
options AUTO_EOI_1
#options AUTO_EOI_2 # 请不要和AUTO_EOI_1同时打开,否则会崩溃。
#options MAXMEM="(1024*1024)" #除非你的BIOS设置不正确造成
#无法检测内存大小,单位是KB
#在xntpd(Cool的监督下启用内核相同步逻辑
#options PPS_SYNC
#IPFirewall。我们需要的功能IPFilter都提供,并且更高效
#除非你需要IPFirewall的某些专有功能,否则这部分不必编译
#options IPFIREWALL #防火墙
#options IPFIREWALL_VERBOSE #允许防火墙日志
#options IPFIREWALL_FORWARD #允许透明代理
#options IPFIREWALL_VERBOSE_LIMIT=100 #限制日至
#options IPFIREWALL_DEFAULT_TO_ACCEPT #默认允许所有IP包
#options IPFW2 # IPFW2,这一特性并非4.x默认。
options IPFILTER #ipfilter支持
options IPFILTER_LOG #ipfilter日志
options IPFILTER_DEFAULT_BLOCK #默认阻断所有IP包
# 静态数据包过滤许可规则(直接放入内核)
options ACCEPT_FILTER_DATA
options ACCEPT_FILTER_HTTP
#options DEVICE_POLLING #改善网络响应时间,但realtek不支持
options IPSTEALTH #支持秘密IP转发
options RANDOM_IP_ID #随机IP ID,阻止信息泄漏
#options TCP_DROP_SYNFIN #抛弃SYN+FIN包,阻止检测服务器
#的TCP协议栈、操作系统,但这对Web
#服务器是不推荐的,因为不符合RFC1644
#options QUOTA #启用配额支持,但此处没用
makeoptions CONF_CFLAGS=-fno-builtin #禁用memcpy等GCC默认的影响性能的设置
# 根据内存大小配置应用程序可用的最大内存
# 这台机器有1GB内存
# FreeBSD默认是允许使用128MB
options MAXDSIZ="(1024*1024*1024)"
options MAXSSIZ="(1024*1024*1024)"
options DFLDSIZ="(1024*1024*1024)"
#options PMAP_SHPGPERPROC=201 #每一进程的可用PV项数。
#options NO_SWAPPING #禁用交换区。不推荐
options PANIC_REBOOT_WAIT_TIME=0 #内核异常(kernel panic)立即重启
#核心内存大小限制。我倾向使用默认值
#options VM_KMEM_SIZE="(12*1024*1024)"
#options VM_KMEM_SIZE_MAX="(256*1024*1024)"
#options VM_KMEM_SIZE_SCALE="4"
#将这份配置文件保存到kernel文件中,以便以后读取
#使用这样的命令:
# strings -n 3 /kernel | sed -n 's/^___//p' > APACHE
#这里我们不需要这样做。
#options INCLUDE_CONFIG_FILE # 包含配置文件到内核中
#options USER_LDT #某些ports需要这么做,未来的FreeBSD可能也需要
# 下面两项在制作对称多处理器(SMP)内核时需要
#options SMP #对称多处理器内核
#options APIC_IO #对称(APIC) I/O
device isa
device eisa
device pci
# 软驱
device fdc0 at isa? port IO_FD1 irq 6 drq 2
device fd0 at fdc0 drive 0
device fd1 at fdc0 drive 1
#
# 如果使用东芝Libretto以及他的Y-E Y-E Data PCMCIA软驱
# 不要使用上面的fdc0,而应使用
#device fdc0
# ATA以及ATAPI设备
# 下面两行被删去,因为新系统不再需要它们。
device ata0 at isa? port IO_WD1 irq 14
device ata1 at isa? port IO_WD2 irq 15
device ata
device atadisk # ATA 磁盘驱动器(IDE硬盘)
device atapicd # ATAPI 光驱
device atapifd # ATAPI 软驱
device atapist # ATAPI 磁带机
options ATA_STATIC_ID #静态设备编号[新系统不再需要]
# SCSI控制器
device ahb # EISA AHA1742 family
device ahc # AHA2940 板载AIC7xxx设备
device amd # AMD 53C974 (Tekram DC-390(T))
device isp # Qlogic family
device ncr # NCR/Symbios Logic
device sym # NCR/Symbios Logic (较新的芯片组)
options SYM_SETUP_LP_PROBE_MAP=0x40
# 使用ncr可以在配置了sym和ncr的情况下挂接旧的NCR设备
device adv0 at isa?
device adw
device bt0 at isa?
device aha0 at isa?
device aic0 at isa?
device ncv # NCR 53C500
device nsp # Workbit Ninja SCSI-3
device stg # TMC 18C30/18C50
# SCSI 外设
device scbus # SCSI 总线(如果使用SCSI设备,必须有)
device da # Direct Access (硬盘)
device sa # Sequential Access (磁带,等等)
device cd # CD
device pass # Passthrough device (直接 SCSI 访问)
# 通过SCSI子系统接口的RAID控制器
device asr # DPT SmartRAID V, VI and Adaptec SCSI RAID
device dpt # DPT Smartcache - See LINT for options!
device iir # Intel Integrated RAID
device mly # Mylex AcceleRAID/eXtremeRAID
device ciss # Compaq SmartRAID 5* series
# RAID控制器
device aac # Adaptec FSA RAID, Dell PERC2/PERC3
device aacp # SCSI passthrough for aac (requires CAM)
device ida # Compaq Smart RAID
device amr # AMI MegaRAID
device mlx # Mylex DAC960 family
device twe # 3ware Escalade
# atkbdc0 控制键盘和PS/2鼠标[这台机器没配鼠标,也不用图形界面]
device atkbdc0 at isa? port IO_KBD
device atkbd0 at atkbdc? irq 1 flags 0x1
device psm0 at atkbdc? irq 12 #鼠标器
device vga0 at isa?
options VGA_NO_FONT_LOADING # 不需要保存/加载字体[节省内存]
options VGA_NO_MODE_CHANGE # 不需要修改显示模式[节省内存]
# 启动画面和屏幕保护程序[我的服务器平时不接显示器]
pseudo-device splash
# syscons 是默认的控制台驱动,类似SCO控制台
device sc0 at isa? flags 0x100
options MAXCONS=4 # 不需要更多的控制台
options SC_DISABLE_REBOOT # 禁止Ctrl+Alt+Del重启,必须以root登录。
options SC_NO_CUTPASTE # 禁用剪贴板[节省内存]
options SC_NO_FONT_LOADING # 禁用字体加载[节省内存]
options SC_NO_SYSMOUSE # 禁用鼠标[节省内存]
# 对于pcvt vt220控制台,启用这个和PCVT_FREEBSD
#device vt0 at isa?
#options XSERVER # 在vt控制台支持X服务器
#options FAT_CURSOR # 使用大光标
# 如果你是用ThinkPad,将下面的一行和其他PCVT相关设备的注释去掉
#options PCVT_SCANSET=2 # IBM使用非标准键盘
# 浮点运算支持 - 请勿禁用
device npx0 at nexus? port IO_NPX irq 13
# 电源管理支持[这台机器期待长期运行]
device apm0 at nexus? disable flags 0x20 # Advanced Power Management
# PCCARD (PCMCIA) 支持
device card
device pcic0 at isa? irq 0 port 0x3e0 iomem 0xd0000
device pcic1 at isa? irq 0 port 0x3e2 iomem 0xd4000 disable
# 串口(COM)
device sio0 at isa? port IO_COM1 flags 0x10 irq 4
device sio1 at isa? port IO_COM2 irq 3
device sio2 at isa? disable port IO_COM3 irq 5
device sio3 at isa? disable port IO_COM4 irq 9
# 并口
device ppc0 at isa? irq 7
device ppbus # 并口总线 (所有并口设备都需要)
device lpt # 打印机
device plip # 并口TCP/IP
device ppi # 并口接口设备
#device vpo # 需要scbus和da
# PCI 以太网适配器
device de # DEC/Intel DC21x4x (``Tulip'')
device em # Intel PRO/1000 adapter Gigabit Ethernet Card (``Wiseman'')
device txp # 3Com 3cR990 (``Typhoon'')
device vx # 3Com 3c590, 3c595 (``Vortex'')
# 使用公共的MII总线控制器代码的PCI以太网适配器
# 注意:一定要保留'device miibus'以确保可用
device miibus # MII总线支持
device dc # DEC/Intel 21143 and various workalikes
device fxp # Intel EtherExpress PRO/100B (82557, 82558)
device pcn # AMD Am79C97x PCI 10/100 NICs
device rl # RealTek 8129/8139
device sf # Adaptec AIC-6915 (``Starfire'')
device sis # Silicon Integrated Systems SiS 900/SiS 7016
device ste # Sundance ST201 (D-Link DFE-550TX)
device tl # Texas Instruments ThunderLAN
device tx # SMC EtherPower II (83c170 ``EPIC'')
device vr # VIA Rhine, Rhine II
device wb # Winbond W89C840F
device xl # 3Com 3c90x (``Boomerang'', ``Cyclone'')
device bge # Broadcom BCM570x (``Tigon III'')
# ISA以太网适配器
# 'device ed' 需要 'device miibus'
device ed0 at isa? port 0x280 irq 10 iomem 0xd8000
device ex
device ep
device fe0 at isa? port 0x300
# Xircom Ethernet
device xe
# PRISM I IEEE 802.11b wireless NIC.
device awi
# WaveLAN/IEEE 802.11 wireless NICs. Note: the WaveLAN/IEEE really
# exists only as a PCMCIA device, so there is no ISA attachment needed
# and resources will always be dynamically assigned by the pccard code.
device wi
# Aironet 4500/4800 802.11 wireless NICs. Note: the declaration below will
# work for PCMCIA and PCI cards, as well as ISA cards set to ISA PnP
# mode (the factory default). If you set the switches on your ISA
# card for a manually chosen I/O address and IRQ, you must specify
# those parameters here.
device an
# The probe order of these is presently determined by i386/isa/isa_compat.c.
device ie0 at isa? port 0x300 irq 10 iomem 0xd0000
#device le0 at isa? port 0x300 irq 5 iomem 0xd0000
device lnc0 at isa? port 0x280 irq 10 drq 0
device cs0 at isa? port 0x300
device sn0 at isa? port 0x300 irq 10
# 伪设备 - 数字表示分配多少个
pseudo-device loop # 环回网络
pseudo-device ether # 以太网支持
pseudo-device sl 1 # 核心级SLIP
pseudo-device ppp 1 # 核心级PPP
pseudo-device tun # 数据包隧道
pseudo-device pty # 伪-tty(telnet等等)
pseudo-device md # 内存虚拟盘
pseudo-device gif # IPv6和IPv4隧道
pseudo-device faith 1 # IPv6-to-IPv4转发(翻译)
# `bpf'伪设备将启用伯克利数据包过滤器。
# 小心由此带来的管理问题
pseudo-device bpf #Berkeley packet filter
# USB支持
device uhci # UHCI PCI->USB interface
device ohci # OHCI PCI->USB interface
device usb # USB Bus (required)
device ugen # Generic
device uhid # "Human Interface Devices"
device ukbd # Keyboard
device ulpt # Printer
device umass # Disks/Mass storage - Requires scbus and da
device ums # Mouse
device uscanner # Scanners
device urio # Diamond Rio MP3 Player
# USB 以太网,需要mii
device aue # ADMtek USB ethernet
device cue # CATC USB ethernet
device kue # Kawasaki LSI USB ethernet
LINT中对于配置有更详细的说明。由于时间关系,这里不给出LINT的完整翻译。对于常用的LINT配置(蓝色
,但被注释的部分),我做了一点说明。
需要说明的是,我个人的经验,在较旧的AMD处理器上运行FreeBSD服务器不是一个明智的选择。我个人的经验是,在K6上运行FreeBSD,只要CPU占用超过98%,系统就会死机。这可能是由于FreeBSD的设计过分地挖掘了系统的性能(按FreeBSD.org自己的说法,榨干服务器的每一滴油Smile,旧的AMD处理器可能会吃不消;但我在双AMD Athlon MP 1900+上运行FreeBSD没有出现类似的情况。与AMD不同,在Intel的全系列处理器上(包括存在F00F bug的Pentium处理器,486,Pentium-III, Pentium 4, Celeron-II 667等等)我从未遇到过任何问题。
这台服务器的网卡使用的是Realtek-8139芯片,这样的网卡在市场上非常常见。为了确认你的网卡型号,请运行ifconfig(Cool。
编辑完配置文件,是用下面的命令编译、安装内核:
cd /usr/src
make kernel KERNCONF=APACHE
LINT中对于配置有更详细的说明。由于时间关系,这里不给出LINT的完整翻译。对于常用的LINT配置(蓝色,但被注释的部分),我做了一点说明。
需要说明的是,我个人的经验,在较旧的AMD处理器上运行FreeBSD服务器不是一个明智的选择。我个人的经验是,在K6上运行FreeBSD,只要CPU占用超过98%,系统就会死机。这可能是由于FreeBSD的设计过分地挖掘了系统的性能(按FreeBSD.org自己的说法,榨干服务器的每一滴油Smile,旧的AMD处理器可能会吃不消;但我在双AMD Athlon MP 1900+上运行FreeBSD没有出现类似的情况。与AMD不同,在Intel的全系列处理器上(包括存在F00F bug的Pentium处理器,486,Pentium-III, Pentium 4, Celeron-II 667等等)我从未遇到过任何问题。
这台服务器的网卡使用的是Realtek-8139芯片,这样的网卡在市场上非常常见。为了确认你的网卡型号,请运行ifconfig(Cool。
编辑完配置文件,是用下面的命令编译、安装内核:
cd /usr/src
make kernel KERNCONF=APACHE
注意,实际应用中,请将APACHE换成你自己的配置文件名。
重新编译内核需要重新启动系统才能够生效。
上面的配置文件是我根据LINT以及经验编写的配置文件,其编写目标在于尽可能避免不必要的代码,尽可能高效,尽可能安全,并且,在崩溃(注意,FreeBSD事实上很少会崩溃,我管理的FreeBSD机器的崩溃原因目前为止只有硬件故障或停电)之后尽可能快地恢复。(FreeBSD4.x目前还不支持后台fsck,因此启用softupdates只是改善运行性能和文件系统可靠性,而不保证重新启动速度的提高)
由于在内核中屏蔽掉了大量的设备,因此,休想以这个内核启动去操作软盘或光盘,或者使用并口,以及SCSI设备(虽然这可能不是你想要的)。此外,这个内核在没有root允许的情况下,是不能在控制台上按Ctrl+Alt+Del启动的。如果你希望其他工作人员在停电(总之,或类似肯定引起系统关机的情况)之前能够帮助你关闭系统,你可能需要其他方法,比如告诉他root口令(假如那个人可以信任),sudo(比较好的方法,只允许他做reboot),或者去掉禁用Ctrl+Alt+Del的设置。此外,经过这样处理的内核只支持Realtek-8139芯片的网卡,因此,如果你的情况和我不同,应该做适当的修改。 如果您对这个配置有什么建议,欢迎给我写信。
如此编译的内核大约是GENERIC内核大小的一半,当然,由于节省了一些内存,它的性能肯定会更好。
至理名言!事实上,削减操作系统中那些对你没用的功能是一件非常重要的事情。这不仅仅意味着一个更小的操作系统,占用更少的磁盘空间(现在的硬盘少说也有几十GB,几兆的空间根本就是九牛一毛),而且意味着你被攻击的可能性也更低――简而言之,你不需要担心操作系统中没有安装的模块存在问题会对你造成影响。
这篇文章中,我们将一起对FreeBSD-i386的内核进行优化配置。这篇文章是针对FreeBSD4.7-STABLE写的,并且,FreeBSD 4.x的配置不会和这篇文章有太大出入。如果你要优化FreeBSD 5或FreeBSD 2/3的内核的话,则需要仔细参考它们的LINT文件了(后面将会提到)。
[注意:FreeBSD 5.0预定将于2002年11月20日发布。FreeBSD的开发组非常重视发行版本的质量,并认为这比发行版本的计划还重要,但由于同样的原因,我们往往会发现FreeBSD实际发行的版本比预定计划晚一些,通常在半个月之内。FreeBSD 5.0作为FreeBSD近期最为重要的发行版本,很可能也会延后发表,但笔者个人认为无论如何我们在今年年底之前肯定是可以看到最终的发行版本的。FreeBSD 5.0对系统进行了大量的修改,这一系列的文章将在FreeBSD 5.0发布当天发表针对5.0的修订版本,而现有版本将保留,但进入维护阶段,不再引入新的内容。]
FreeBSD的源代码可以直接从中央cvsup服务器同步,也可以作为系统的一部分在安装的时候一兵装上。前面已经说过如何同步源代码,在此不再赘述。FreeBSD的源代码(通常在/usr/src)包含建造基本系统的全部代码,而在/usr/src/sys中则有若干个目录,对应不同的计算机体系结构(4.x只支持i386和alpha)。i386是一个泛指的名字,包含了与Intel 80386兼容的所有机器,并不是特指80386。
简单介绍一下FreeBSD的内核文件。在4.x系统中,/kernel这个文件是默认的内核,通常正常启动使用的就是它。 /kernel.GENERIC这个文件是兼容性较强的内核,如果/kernel无法引导系统, 就得靠这个文件来引导。/kernel.old是本次make kernel之前的内核,通常如果你的kernel坏掉, 也可以考虑使用/kernel.old来引导系统。
/modules/是内核的模块,而/modules.old/是对应/kernel.old的模块。这些文件在每次替换kernel的时候都会同时替换。
在5.0中,内核以及内核的模块都被保存在/boot/kernel中。
在/usr/src/sys/i386/conf中有两个配置文件,GENERIC和LINT。其中GENERIC是make kernel的默认配置文件,直接make kernel生成的是GENERIC内核,但安装时命名为/kernel。系统在安装时会安装一个kernel.GENERIC,以后,这个文件不会跟随系统的make kernel更新,因此,如果你认为这个文件有必要更新的话,需要手工make kernel,并把/kernel改名为kernel.GENERIC。当然,通常并不需要这样做。
LINT是包括几乎所有内核编译配置详细信息的文件。这个配置并不是用来真正建立kernel的,他的主要用途是向用户展示可用的内核编译配置。在修改内核编译配置时,最好先参考这个文件。
为了配置自己的内核,应将GENERIC复制为一个另外的文件。习惯上这个文件和主机名相同。例如,我把自己的这台Web机器命名为apache.intranet.frontfree.net,就把配置文件命名为APACHE:
cd /usr/src/sys/i386/conf
cp GENERIC APACHE
随后,用ee APACHE编辑它。我们拿一个实际的GENERIC文件来说明。
为了节省篇幅,这个文件头上的注释被删掉了一部分。
machine i386 # 体系模型为i386
cpu I386_CPU # 支持80386
cpu I486_CPU # 支持80486
cpu I586_CPU # 支持Pentium
cpu I686_CPU # 支持Pentium Pro以及更高
ident GENERIC # 内核文件的名字
maxusers 0 # 自动检测同时允许的最大用户数
#makeoptions DEBUG=-g # 包含调试符号。通常只有current版本打开
options MATH_EMULATE #支持协处理器模拟
options INET #支持互联网
options INET6 #IPv6通讯协议
options FFS #伯克利快速文件系统
options FFS_ROOT #FFS作为根设备[必须保留]
options SOFTUPDATES #打开FFS soft updates支持
options UFS_DIRHASH #提高大型目录的支持
options MFS #内存文件系统
options MD_ROOT #MD作为根设备
options NFS #Network Filesystem
options NFS_ROOT #NFS作为根设备(需要NFS)
options MSDOSFS #MSDOS文件系统
options CD9660 #ISO 9660文件系统(光盘)
options CD9660_ROOT #CD-ROM作为根设备(需要CD9660)
options PROCFS #进程文件系统
options COMPAT_43 #兼容4.3BSD[必须保留]
options SCSI_DELAY=15000 #检测SCSI设备前的延时(ms)
options UCONSOLE #用户可以夺取控制台
options USERCONFIG #boot -c编辑器 editor
options VISUAL_USERCONFIG #菜单式boot -c编辑器
options KTRACE #ktrace(1)支持
options SYSVSHM #SYSV-风格的共享内存
options SYSVMSG #SYSV-风格的消息队列
options SYSVSEM #SYSV-风格的信号量(semaphores)
options P1003_1B #Posix P1003_1B实时扩展
options _KPOSIX_PRIORITY_SCHEDULING
options ICMP_BANDLIM #对恶意ICMP请求进行限制
options KBD_INSTALL_CDEV # 在/dev安装一个CDEV设备
# 下面两项在制作对称多处理器(SMP)内核时需要
#options SMP #对称多处理器内核
#options APIC_IO #对称(APIC) I/O
device isa
device eisa
device pci
# 软驱
device fdc0 at isa? port IO_FD1 irq 6 drq 2
device fd0 at fdc0 drive 0
device fd1 at fdc0 drive 1
#
# 如果使用东芝Libretto以及他的Y-E Y-E Data PCMCIA软驱
# 不要使用上面的fdc0,而应使用
#device fdc0
# ATA以及ATAPI设备
device ata0 at isa? port IO_WD1 irq 14
device ata1 at isa? port IO_WD2 irq 15
device ata
device atadisk # ATA 磁盘驱动器(IDE硬盘)
device atapicd # ATAPI 光驱
device atapifd # ATAPI 软驱
device atapist # ATAPI 磁带机
options ATA_STATIC_ID #静态设备编号
# SCSI控制器
device ahb # EISA AHA1742 family
device ahc # AHA2940 板载AIC7xxx设备
device amd # AMD 53C974 (Tekram DC-390(T))
device isp # Qlogic family
device ncr # NCR/Symbios Logic
device sym # NCR/Symbios Logic (较新的芯片组)
options SYM_SETUP_LP_PROBE_MAP=0x40
# 使用ncr可以在配置了sym和ncr的情况下挂接旧的NCR设备
device adv0 at isa?
device adw
device bt0 at isa?
device aha0 at isa?
device aic0 at isa?
device ncv # NCR 53C500
device nsp # Workbit Ninja SCSI-3
device stg # TMC 18C30/18C50
# SCSI 外设
device scbus # SCSI 总线(如果使用SCSI设备,必须有)
device da # Direct Access (硬盘)
device sa # Sequential Access (磁带,等等)
device cd # CD
device pass # Passthrough device (直接 SCSI 访问)
# 通过SCSI子系统接口的RAID控制器
device asr # DPT SmartRAID V, VI and Adaptec SCSI RAID
device dpt # DPT Smartcache - See LINT for options!
device iir # Intel Integrated RAID
device mly # Mylex AcceleRAID/eXtremeRAID
device ciss # Compaq SmartRAID 5* series
# RAID控制器
device aac # Adaptec FSA RAID, Dell PERC2/PERC3
device aacp # SCSI passthrough for aac (requires CAM)
device ida # Compaq Smart RAID
device amr # AMI MegaRAID
device mlx # Mylex DAC960 family
device twe # 3ware Escalade
# atkbdc0 控制键盘和PS/2鼠标
device atkbdc0 at isa? port IO_KBD
device atkbd0 at atkbdc? irq 1 flags 0x1
device psm0 at atkbdc? irq 12
device vga0 at isa?
# 启动画面和屏幕保护程序
pseudo-device splash
# syscons 是默认的控制台驱动,类似SCO控制台
device sc0 at isa? flags 0x100
# 对于pcvt vt220控制台,启用这个和PCVT_FREEBSD
#device vt0 at isa?
#options XSERVER # 在vt控制台支持X服务器
#options FAT_CURSOR # 使用大光标
# 如果你是用ThinkPad,将下面的一行和其他PCVT相关设备的注释去掉
#options PCVT_SCANSET=2 # IBM使用非标准键盘
# 浮点运算支持 - 请勿禁用
device npx0 at nexus? port IO_NPX irq 13
# 电源管理支持
device apm0 at nexus? disable flags 0x20 # Advanced Power Management
# PCCARD (PCMCIA) 支持
device card
device pcic0 at isa? irq 0 port 0x3e0 iomem 0xd0000
device pcic1 at isa? irq 0 port 0x3e2 iomem 0xd4000 disable
# 串口(COM)
device sio0 at isa? port IO_COM1 flags 0x10 irq 4
device sio1 at isa? port IO_COM2 irq 3
device sio2 at isa? disable port IO_COM3 irq 5
device sio3 at isa? disable port IO_COM4 irq 9
# 并口
device ppc0 at isa? irq 7
device ppbus # 并口总线 (所有并口设备都需要)
device lpt # 打印机
device plip # 并口TCP/IP
device ppi # 并口接口设备
#device vpo # 需要scbus和da
# PCI 以太网适配器
device de # DEC/Intel DC21x4x (``Tulip'')
device em # Intel PRO/1000 adapter Gigabit Ethernet Card (``Wiseman'')
device txp # 3Com 3cR990 (``Typhoon'')
device vx # 3Com 3c590, 3c595 (``Vortex'')
# 使用公共的MII总线控制器代码的PCI以太网适配器
# 注意:一定要保留'device miibus'以确保可用
device miibus # MII总线支持
device dc # DEC/Intel 21143 and various workalikes
device fxp # Intel EtherExpress PRO/100B (82557, 82558)
device pcn # AMD Am79C97x PCI 10/100 NICs
device rl # RealTek 8129/8139
device sf # Adaptec AIC-6915 (``Starfire'')
device sis # Silicon Integrated Systems SiS 900/SiS 7016
device ste # Sundance ST201 (D-Link DFE-550TX)
device tl # Texas Instruments ThunderLAN
device tx # SMC EtherPower II (83c170 ``EPIC'')
device vr # VIA Rhine, Rhine II
device wb # Winbond W89C840F
device xl # 3Com 3c90x (``Boomerang'', ``Cyclone'')
device bge # Broadcom BCM570x (``Tigon III'')
# ISA以太网适配器
# 'device ed' 需要 'device miibus'
device ed0 at isa? port 0x280 irq 10 iomem 0xd8000
device ex
device ep
device fe0 at isa? port 0x300
# Xircom Ethernet
device xe
# PRISM I IEEE 802.11b wireless NIC.
device awi
# WaveLAN/IEEE 802.11 wireless NICs. Note: the WaveLAN/IEEE really
# exists only as a PCMCIA device, so there is no ISA attachment needed
# and resources will always be dynamically assigned by the pccard code.
device wi
# Aironet 4500/4800 802.11 wireless NICs. Note: the declaration below will
# work for PCMCIA and PCI cards, as well as ISA cards set to ISA PnP
# mode (the factory default). If you set the switches on your ISA
# card for a manually chosen I/O address and IRQ, you must specify
# those parameters here.
device an
# The probe order of these is presently determined by i386/isa/isa_compat.c.
device ie0 at isa? port 0x300 irq 10 iomem 0xd0000
#device le0 at isa? port 0x300 irq 5 iomem 0xd0000
device lnc0 at isa? port 0x280 irq 10 drq 0
device cs0 at isa? port 0x300
device sn0 at isa? port 0x300 irq 10
# 伪设备 - 数字表示分配多少个
pseudo-device loop # 环回网络
pseudo-device ether # 以太网支持
pseudo-device sl 1 # 核心级SLIP
pseudo-device ppp 1 # 核心级PPP
pseudo-device tun # 数据包隧道
pseudo-device pty # 伪-tty(telnet等等)
pseudo-device md # 内存虚拟盘
pseudo-device gif # IPv6和IPv4隧道
pseudo-device faith 1 # IPv6-to-IPv4转发(翻译)
# `bpf'伪设备将启用伯克利数据包过滤器。
# 小心由此带来的管理问题
pseudo-device bpf #Berkeley packet filter
# USB支持
device uhci # UHCI PCI->USB interface
device ohci # OHCI PCI->USB interface
device usb # USB Bus (required)
device ugen # Generic
device uhid # "Human Interface Devices"
device ukbd # Keyboard
device ulpt # Printer
device umass # Disks/Mass storage - Requires scbus and da
device ums # Mouse
device uscanner # Scanners
device urio # Diamond Rio MP3 Player
# USB 以太网,需要mii
device aue # ADMtek USB ethernet
device cue # CATC USB ethernet
device kue # Kawasaki LSI USB ethernet
现在要做的是去掉我们不需要的任何设备。(红色、中划线表示删除,红色无修饰表示修改,蓝色表示增加)。这份配置是生产服务器上的配置文件。
#
# APACHE -- FreeBSD/i386内核配置文件
#
machine i386 # 体系模型为i386
cpu I386_CPU # 支持80386
cpu I486_CPU # 支持80486
cpu I586_CPU # 支持Pentium
cpu I686_CPU # 支持Pentium Pro以及更高
ident APACHE # 内核文件的名字
maxusers 0 # 自动检测同时允许的最大用户数
#makeoptions DEBUG=-g # 包含调试符号。通常只有current版本打开
options MATH_EMULATE #支持协处理器模拟
#options GPL_MATH_EMULATE #GPL模拟更好,但仍然没必要,P III有内建协处理器
options INET #支持互联网
options INET6 #IPv6通讯协议
options FFS #伯克利快速文件系统
options FFS_ROOT #FFS作为根设备[必须保留]
options SOFTUPDATES #打开FFS soft updates支持
options UFS_DIRHASH #提高大型目录的支持
options MFS #内存文件系统
options MD_ROOT #MD作为根设备
options NFS #Network Filesystem
options NFS_ROOT #NFS作为根设备(需要NFS)
options MSDOSFS #MSDOS文件系统
options CD9660 #ISO 9660文件系统(光盘)
options CD9660_ROOT #CD-ROM作为根设备(需要CD9660)
options PROCFS #进程文件系统
options COMPAT_43 #兼容4.3BSD[必须保留]
options SCSI_DELAY=5000 #检测SCSI设备前的延时(ms)
options UCONSOLE #用户可以夺取控制台[没有X,不用]
options USERCONFIG #boot -c编辑器 editor
options VISUAL_USERCONFIG #菜单式boot -c编辑器
options KTRACE #ktrace(1)支持
options SYSVSHM #SYSV-风格的共享内存
options SYSVMSG #SYSV-风格的消息队列
options SYSVSEM #SYSV-风格的信号量(semaphores)
options P1003_1B #Posix P1003_1B实时扩展
options _KPOSIX_PRIORITY_SCHEDULING
options ICMP_BANDLIM #对恶意ICMP请求进行限制[例如flood ping]
options KBD_INSTALL_CDEV # 在/dev安装一个CDEV设备
options CPU_ENABLE_SSE #启用SSE支持(Pentium III)
#options CPU_ATHLON_SSE_HACK #如果你的BIOS不能正确识别Athlon SSE
#options NO_F00F_HACK #如果你使用Pentium且没有F00F bug
# 对ISA总线,AUTO_EOI将启用8259A的自动EOI功能
# 这意味着每次中断调用节省0.7-1.25微秒,但不应用于笔记本
options AUTO_EOI_1
#options AUTO_EOI_2 # 请不要和AUTO_EOI_1同时打开,否则会崩溃。
#options MAXMEM="(1024*1024)" #除非你的BIOS设置不正确造成
#无法检测内存大小,单位是KB
#在xntpd(Cool的监督下启用内核相同步逻辑
#options PPS_SYNC
#IPFirewall。我们需要的功能IPFilter都提供,并且更高效
#除非你需要IPFirewall的某些专有功能,否则这部分不必编译
#options IPFIREWALL #防火墙
#options IPFIREWALL_VERBOSE #允许防火墙日志
#options IPFIREWALL_FORWARD #允许透明代理
#options IPFIREWALL_VERBOSE_LIMIT=100 #限制日至
#options IPFIREWALL_DEFAULT_TO_ACCEPT #默认允许所有IP包
#options IPFW2 # IPFW2,这一特性并非4.x默认。
options IPFILTER #ipfilter支持
options IPFILTER_LOG #ipfilter日志
options IPFILTER_DEFAULT_BLOCK #默认阻断所有IP包
# 静态数据包过滤许可规则(直接放入内核)
options ACCEPT_FILTER_DATA
options ACCEPT_FILTER_HTTP
#options DEVICE_POLLING #改善网络响应时间,但realtek不支持
options IPSTEALTH #支持秘密IP转发
options RANDOM_IP_ID #随机IP ID,阻止信息泄漏
#options TCP_DROP_SYNFIN #抛弃SYN+FIN包,阻止检测服务器
#的TCP协议栈、操作系统,但这对Web
#服务器是不推荐的,因为不符合RFC1644
#options QUOTA #启用配额支持,但此处没用
makeoptions CONF_CFLAGS=-fno-builtin #禁用memcpy等GCC默认的影响性能的设置
# 根据内存大小配置应用程序可用的最大内存
# 这台机器有1GB内存
# FreeBSD默认是允许使用128MB
options MAXDSIZ="(1024*1024*1024)"
options MAXSSIZ="(1024*1024*1024)"
options DFLDSIZ="(1024*1024*1024)"
#options PMAP_SHPGPERPROC=201 #每一进程的可用PV项数。
#options NO_SWAPPING #禁用交换区。不推荐
options PANIC_REBOOT_WAIT_TIME=0 #内核异常(kernel panic)立即重启
#核心内存大小限制。我倾向使用默认值
#options VM_KMEM_SIZE="(12*1024*1024)"
#options VM_KMEM_SIZE_MAX="(256*1024*1024)"
#options VM_KMEM_SIZE_SCALE="4"
#将这份配置文件保存到kernel文件中,以便以后读取
#使用这样的命令:
# strings -n 3 /kernel | sed -n 's/^___//p' > APACHE
#这里我们不需要这样做。
#options INCLUDE_CONFIG_FILE # 包含配置文件到内核中
#options USER_LDT #某些ports需要这么做,未来的FreeBSD可能也需要
# 下面两项在制作对称多处理器(SMP)内核时需要
#options SMP #对称多处理器内核
#options APIC_IO #对称(APIC) I/O
device isa
device eisa
device pci
# 软驱
device fdc0 at isa? port IO_FD1 irq 6 drq 2
device fd0 at fdc0 drive 0
device fd1 at fdc0 drive 1
#
# 如果使用东芝Libretto以及他的Y-E Y-E Data PCMCIA软驱
# 不要使用上面的fdc0,而应使用
#device fdc0
# ATA以及ATAPI设备
# 下面两行被删去,因为新系统不再需要它们。
device ata0 at isa? port IO_WD1 irq 14
device ata1 at isa? port IO_WD2 irq 15
device ata
device atadisk # ATA 磁盘驱动器(IDE硬盘)
device atapicd # ATAPI 光驱
device atapifd # ATAPI 软驱
device atapist # ATAPI 磁带机
options ATA_STATIC_ID #静态设备编号[新系统不再需要]
# SCSI控制器
device ahb # EISA AHA1742 family
device ahc # AHA2940 板载AIC7xxx设备
device amd # AMD 53C974 (Tekram DC-390(T))
device isp # Qlogic family
device ncr # NCR/Symbios Logic
device sym # NCR/Symbios Logic (较新的芯片组)
options SYM_SETUP_LP_PROBE_MAP=0x40
# 使用ncr可以在配置了sym和ncr的情况下挂接旧的NCR设备
device adv0 at isa?
device adw
device bt0 at isa?
device aha0 at isa?
device aic0 at isa?
device ncv # NCR 53C500
device nsp # Workbit Ninja SCSI-3
device stg # TMC 18C30/18C50
# SCSI 外设
device scbus # SCSI 总线(如果使用SCSI设备,必须有)
device da # Direct Access (硬盘)
device sa # Sequential Access (磁带,等等)
device cd # CD
device pass # Passthrough device (直接 SCSI 访问)
# 通过SCSI子系统接口的RAID控制器
device asr # DPT SmartRAID V, VI and Adaptec SCSI RAID
device dpt # DPT Smartcache - See LINT for options!
device iir # Intel Integrated RAID
device mly # Mylex AcceleRAID/eXtremeRAID
device ciss # Compaq SmartRAID 5* series
# RAID控制器
device aac # Adaptec FSA RAID, Dell PERC2/PERC3
device aacp # SCSI passthrough for aac (requires CAM)
device ida # Compaq Smart RAID
device amr # AMI MegaRAID
device mlx # Mylex DAC960 family
device twe # 3ware Escalade
# atkbdc0 控制键盘和PS/2鼠标[这台机器没配鼠标,也不用图形界面]
device atkbdc0 at isa? port IO_KBD
device atkbd0 at atkbdc? irq 1 flags 0x1
device psm0 at atkbdc? irq 12 #鼠标器
device vga0 at isa?
options VGA_NO_FONT_LOADING # 不需要保存/加载字体[节省内存]
options VGA_NO_MODE_CHANGE # 不需要修改显示模式[节省内存]
# 启动画面和屏幕保护程序[我的服务器平时不接显示器]
pseudo-device splash
# syscons 是默认的控制台驱动,类似SCO控制台
device sc0 at isa? flags 0x100
options MAXCONS=4 # 不需要更多的控制台
options SC_DISABLE_REBOOT # 禁止Ctrl+Alt+Del重启,必须以root登录。
options SC_NO_CUTPASTE # 禁用剪贴板[节省内存]
options SC_NO_FONT_LOADING # 禁用字体加载[节省内存]
options SC_NO_SYSMOUSE # 禁用鼠标[节省内存]
# 对于pcvt vt220控制台,启用这个和PCVT_FREEBSD
#device vt0 at isa?
#options XSERVER # 在vt控制台支持X服务器
#options FAT_CURSOR # 使用大光标
# 如果你是用ThinkPad,将下面的一行和其他PCVT相关设备的注释去掉
#options PCVT_SCANSET=2 # IBM使用非标准键盘
# 浮点运算支持 - 请勿禁用
device npx0 at nexus? port IO_NPX irq 13
# 电源管理支持[这台机器期待长期运行]
device apm0 at nexus? disable flags 0x20 # Advanced Power Management
# PCCARD (PCMCIA) 支持
device card
device pcic0 at isa? irq 0 port 0x3e0 iomem 0xd0000
device pcic1 at isa? irq 0 port 0x3e2 iomem 0xd4000 disable
# 串口(COM)
device sio0 at isa? port IO_COM1 flags 0x10 irq 4
device sio1 at isa? port IO_COM2 irq 3
device sio2 at isa? disable port IO_COM3 irq 5
device sio3 at isa? disable port IO_COM4 irq 9
# 并口
device ppc0 at isa? irq 7
device ppbus # 并口总线 (所有并口设备都需要)
device lpt # 打印机
device plip # 并口TCP/IP
device ppi # 并口接口设备
#device vpo # 需要scbus和da
# PCI 以太网适配器
device de # DEC/Intel DC21x4x (``Tulip'')
device em # Intel PRO/1000 adapter Gigabit Ethernet Card (``Wiseman'')
device txp # 3Com 3cR990 (``Typhoon'')
device vx # 3Com 3c590, 3c595 (``Vortex'')
# 使用公共的MII总线控制器代码的PCI以太网适配器
# 注意:一定要保留'device miibus'以确保可用
device miibus # MII总线支持
device dc # DEC/Intel 21143 and various workalikes
device fxp # Intel EtherExpress PRO/100B (82557, 82558)
device pcn # AMD Am79C97x PCI 10/100 NICs
device rl # RealTek 8129/8139
device sf # Adaptec AIC-6915 (``Starfire'')
device sis # Silicon Integrated Systems SiS 900/SiS 7016
device ste # Sundance ST201 (D-Link DFE-550TX)
device tl # Texas Instruments ThunderLAN
device tx # SMC EtherPower II (83c170 ``EPIC'')
device vr # VIA Rhine, Rhine II
device wb # Winbond W89C840F
device xl # 3Com 3c90x (``Boomerang'', ``Cyclone'')
device bge # Broadcom BCM570x (``Tigon III'')
# ISA以太网适配器
# 'device ed' 需要 'device miibus'
device ed0 at isa? port 0x280 irq 10 iomem 0xd8000
device ex
device ep
device fe0 at isa? port 0x300
# Xircom Ethernet
device xe
# PRISM I IEEE 802.11b wireless NIC.
device awi
# WaveLAN/IEEE 802.11 wireless NICs. Note: the WaveLAN/IEEE really
# exists only as a PCMCIA device, so there is no ISA attachment needed
# and resources will always be dynamically assigned by the pccard code.
device wi
# Aironet 4500/4800 802.11 wireless NICs. Note: the declaration below will
# work for PCMCIA and PCI cards, as well as ISA cards set to ISA PnP
# mode (the factory default). If you set the switches on your ISA
# card for a manually chosen I/O address and IRQ, you must specify
# those parameters here.
device an
# The probe order of these is presently determined by i386/isa/isa_compat.c.
device ie0 at isa? port 0x300 irq 10 iomem 0xd0000
#device le0 at isa? port 0x300 irq 5 iomem 0xd0000
device lnc0 at isa? port 0x280 irq 10 drq 0
device cs0 at isa? port 0x300
device sn0 at isa? port 0x300 irq 10
# 伪设备 - 数字表示分配多少个
pseudo-device loop # 环回网络
pseudo-device ether # 以太网支持
pseudo-device sl 1 # 核心级SLIP
pseudo-device ppp 1 # 核心级PPP
pseudo-device tun # 数据包隧道
pseudo-device pty # 伪-tty(telnet等等)
pseudo-device md # 内存虚拟盘
pseudo-device gif # IPv6和IPv4隧道
pseudo-device faith 1 # IPv6-to-IPv4转发(翻译)
# `bpf'伪设备将启用伯克利数据包过滤器。
# 小心由此带来的管理问题
pseudo-device bpf #Berkeley packet filter
# USB支持
device uhci # UHCI PCI->USB interface
device ohci # OHCI PCI->USB interface
device usb # USB Bus (required)
device ugen # Generic
device uhid # "Human Interface Devices"
device ukbd # Keyboard
device ulpt # Printer
device umass # Disks/Mass storage - Requires scbus and da
device ums # Mouse
device uscanner # Scanners
device urio # Diamond Rio MP3 Player
# USB 以太网,需要mii
device aue # ADMtek USB ethernet
device cue # CATC USB ethernet
device kue # Kawasaki LSI USB ethernet
LINT中对于配置有更详细的说明。由于时间关系,这里不给出LINT的完整翻译。对于常用的LINT配置(蓝色
,但被注释的部分),我做了一点说明。
需要说明的是,我个人的经验,在较旧的AMD处理器上运行FreeBSD服务器不是一个明智的选择。我个人的经验是,在K6上运行FreeBSD,只要CPU占用超过98%,系统就会死机。这可能是由于FreeBSD的设计过分地挖掘了系统的性能(按FreeBSD.org自己的说法,榨干服务器的每一滴油Smile,旧的AMD处理器可能会吃不消;但我在双AMD Athlon MP 1900+上运行FreeBSD没有出现类似的情况。与AMD不同,在Intel的全系列处理器上(包括存在F00F bug的Pentium处理器,486,Pentium-III, Pentium 4, Celeron-II 667等等)我从未遇到过任何问题。
这台服务器的网卡使用的是Realtek-8139芯片,这样的网卡在市场上非常常见。为了确认你的网卡型号,请运行ifconfig(Cool。
编辑完配置文件,是用下面的命令编译、安装内核:
cd /usr/src
make kernel KERNCONF=APACHE
LINT中对于配置有更详细的说明。由于时间关系,这里不给出LINT的完整翻译。对于常用的LINT配置(蓝色,但被注释的部分),我做了一点说明。
需要说明的是,我个人的经验,在较旧的AMD处理器上运行FreeBSD服务器不是一个明智的选择。我个人的经验是,在K6上运行FreeBSD,只要CPU占用超过98%,系统就会死机。这可能是由于FreeBSD的设计过分地挖掘了系统的性能(按FreeBSD.org自己的说法,榨干服务器的每一滴油Smile,旧的AMD处理器可能会吃不消;但我在双AMD Athlon MP 1900+上运行FreeBSD没有出现类似的情况。与AMD不同,在Intel的全系列处理器上(包括存在F00F bug的Pentium处理器,486,Pentium-III, Pentium 4, Celeron-II 667等等)我从未遇到过任何问题。
这台服务器的网卡使用的是Realtek-8139芯片,这样的网卡在市场上非常常见。为了确认你的网卡型号,请运行ifconfig(Cool。
编辑完配置文件,是用下面的命令编译、安装内核:
cd /usr/src
make kernel KERNCONF=APACHE
注意,实际应用中,请将APACHE换成你自己的配置文件名。
重新编译内核需要重新启动系统才能够生效。
上面的配置文件是我根据LINT以及经验编写的配置文件,其编写目标在于尽可能避免不必要的代码,尽可能高效,尽可能安全,并且,在崩溃(注意,FreeBSD事实上很少会崩溃,我管理的FreeBSD机器的崩溃原因目前为止只有硬件故障或停电)之后尽可能快地恢复。(FreeBSD4.x目前还不支持后台fsck,因此启用softupdates只是改善运行性能和文件系统可靠性,而不保证重新启动速度的提高)
由于在内核中屏蔽掉了大量的设备,因此,休想以这个内核启动去操作软盘或光盘,或者使用并口,以及SCSI设备(虽然这可能不是你想要的)。此外,这个内核在没有root允许的情况下,是不能在控制台上按Ctrl+Alt+Del启动的。如果你希望其他工作人员在停电(总之,或类似肯定引起系统关机的情况)之前能够帮助你关闭系统,你可能需要其他方法,比如告诉他root口令(假如那个人可以信任),sudo(比较好的方法,只允许他做reboot),或者去掉禁用Ctrl+Alt+Del的设置。此外,经过这样处理的内核只支持Realtek-8139芯片的网卡,因此,如果你的情况和我不同,应该做适当的修改。 如果您对这个配置有什么建议,欢迎给我写信。
如此编译的内核大约是GENERIC内核大小的一半,当然,由于节省了一些内存,它的性能肯定会更好。
相关推荐
**FREEBSD安装与优化全攻略** FreeBSD是一种开源的类UNIX操作系统,以其稳定性和安全性而闻名,广泛应用于服务器环境和嵌入式设备。本攻略将深入探讨如何安装FreeBSD以及如何进行系统优化,以实现最佳性能和可靠性...
FreeBSD是一款强大的类Unix操作系统,因其稳定性、安全性和性能优化而备受服务器管理和技术爱好者的青睐。随着版本更新和技术进步,FreeBSD支持从U盘安装已成为一种便捷高效的安装方式。本文档基于一篇名为《FreeBSD...
### FreeBSD基本安装与汉化详解 #### 一、FreeBSD简介 FreeBSD是一种类Unix操作系统,以其稳定性、安全性和性能而著称。它基于Berkeley Software Distribution (BSD)的源代码,提供了强大的网络功能和广泛的硬件...
**一、FreeBSD的下载与安装** 1. **选择版本**:FreeBSD有多个稳定版本,如12.x和13.x系列,要根据自己的硬件兼容性和需求选择合适的发行版。 2. **下载ISO镜像**:访问FreeBSD官网,选择对应版本的ISO镜像进行下载...
FreeBSD 是一个开源的类 Unix 操作系统,以其稳定性和安全性著称,尤其适合用作服务器平台。本文将详细讲解如何在 FreeBSD 上搭建 Web ...不断学习和理解FreeBSD的特性和工作原理,将有助于更好地管理和优化Web服务器。
一、FreeBSD安装与系统配置 1. 安装流程:FreeBSD提供了多种安装方式,包括光盘、USB设备、网络安装等。用户可以根据自己的硬件环境选择最适合的安装方法。 2. 分区规划:合理规划硬盘分区对于系统的高效运行至关...
这本书《FreeBSD 6.0架设管理与应用》旨在帮助读者深入理解和实践在FreeBSD 6.0版本上的系统配置、管理和应用程序的使用。 一、FreeBSD基础 FreeBSD基于Berkeley Software Distribution (BSD) 的衍生版,它具有强大...
**FreeBSD新手安装指南** FreeBSD是一款开源的类UNIX操作系统,以其稳定性、安全性和灵活性而闻名。对于初学者来说,安装FreeBSD可能会遇到一些挑战,但通过以下详细步骤和注意事项,您将能够顺利进行。 **1. 获取...
在FreeBSD 11.0操作系统中安装Drupal 7.51是一个相对复杂但非常值得学习的过程,因为FreeBSD以其稳定性和安全性著称。Drupal是一个流行的开源内容管理系统,用于构建功能丰富的网站。以下是对这个过程的详细说明: ...
在FreeBSD操作系统上安装并配置CompizFusion桌面环境是一个技术性强且有趣的过程,它可以为用户提供炫酷的3D特效和高度自定义的工作环境。CompizFusion是Compiz的一个分支,它集成了多种视觉效果插件,为Linux和类...
根据给定的信息,本文将详细解释FreeBSD操作系统...综上所述,通过合理的系统配置和优化,以及采取有效的DDoS防御措施,可以在FreeBSD环境下搭建一个高性能、稳定的Web服务器。这对于维护网站的安全和稳定性至关重要。
**FreeBSD:开源操作系统的深度探索** FreeBSD是一款基于UNIX的开源操作系统,以其稳定性和高效性能而备受赞誉。...《FREEBSD安装与优化全攻略.pdf》这份文档将更深入地介绍这些内容,帮助你成为FreeBSD的驾驭者。
3. `FreeBSD-13.2-RELEASE-amd64-dvd1`:这同样是AMD64平台的安装媒介,但通常DVD镜像会包含更多软件包和更新,适合那些需要完整功能集或离线安装的用户。 在标签中提到的"FreeBSD",是操作系统的核心标识,表明了...
Apache、PHP、MySQL和Zend是构建Web服务器的关键组件,在FreeBSD系统中,这些可以通过ports来安装和配置。Ports系统提供了一种便捷的方式,允许用户定制安装所需的软件,并自动处理依赖关系,避免了在Linux中手动...
手册共200多页,深入浅出地介绍了FreeBSD的核心组件、系统管理以及优化策略。 1. **FreeBSD简介** - FreeBSD源自伯克利软件发行版(BSD),它遵循BSD许可证,提供了一个自由、开放源码的环境。 - FreeBSD的特点...
6. FreeBSD 的性能优化:本手册提供了 FreeBSD 的性能优化技术,包括磁盘优化、内存优化、CPU 优化等。 7. FreeBSD 的故障排除:本手册提供了 FreeBSD 的故障排除方法,包括排除常见的系统故障、网络故障、磁盘故障...
这份2010年更新的"FreeBSD 8.1使用手册"是针对该版本的重要参考资料,旨在帮助用户理解和掌握FreeBSD 8.1系统的安装、配置、管理及优化。 一、安装与升级 在FreeBSD 8.1中,安装过程可以通过图形化的安装程序或...