当前位置:   article > 正文

FreeBSD入门④_freebsd 内核初始化

freebsd 内核初始化

原帖:http://ewangsoft.blog.163.com/blog/static/77215582200962911124129/

-----------------

93、配置内核:(1)获取一份硬件的配置清单:dmesg和man,pciconf(pciconf -lv)。(2)在编译一个制定的内核之前,如果仅是需要某个特定的硬件支持的话, 那么很可能已经存在一个现成的模块了。内核模块存放在目录/boot/kernel 中,并能由 kldload(8) 命令加载入正在运行的内核。 基本上所有的内核驱动都有特定的模块和手册页。比如, 下面提到的 ath 无线以太网驱动。 在这个设备的联机手册中有以下信息:Alternatively, to load the driver as a module at boot time, place the following line in loader.conf(5):    if_ath_load="YES",遵照示例,在 /boot/loader.conf 中加入 if_ath_load="YES" 则能在机器启动的时候动态加载这个模块。(3)更改配置文件:默认的内核配置文件是/usr/src/sys/arch/conf/GENERIC。如果 需要与平台有关的选项和设备的详细列表, 请参考与 GENERIC 文件在同一个目录中的那个 NOTES, 而平台无关的选项, 则可以在 /usr/src/sys/conf/NOTES 找到。(4)进入/usr/src,译内核:# make buildkernel KERNCONF=MYKERNEL(5)安装新内核# make installkernel KERNCONF=MYKERNEL(6)使用这种方法联编内核时, 需要安装完整的 FreeBSD 源代码。默认情况下, 在联编您所定制的内核时, 全部内核模块也会同时参与构建。 如果您希望更快地升级内核,或者只希望联编您所需要的模块, 则应在联编之前编辑 /etc/make.conf:MODULES_OVERRIDE = linux acpi sound/sound sound/driver/ds1 ntfs,这个变量的内容是所希望构建的模块列表。WITHOUT_MODULES = linux acpi sound/sound sound/driver/ds1 ntfs,这个变量的内容是在联编过程中将不被编译的模块列表。

94、CLI下显示当前路径:在/.cshrc中添加:set prompt = "%B[%n@%m %~]%b# "  。不重启就生效:source .cshrc。

95、系统的配置信息主要位于 /etc/rc.conf,此文件可以被sh阅读。这个文件包含了配置信息很大的一部分,主要在系统启动的时候来配置系统。使用 sysinstall(8) 或者 make world 来升级系统不会覆盖 rc.conf 文件(sysinstall可能会修改此文件)。系统管理员应该在 /etc/rc.conf 文件中建立记录来覆盖/etc/defaults/rc.conf 中的默认设置。这个默认文件不应该被逐字的复制到 /etc ,它包含的是默认值而不是一个例子。 所有特定的改变应该在 rc.conf 中。在集群应用中,为了降低管理成本,可以应用多种策略把涉及全站范围的设置从特定于系统的设置中分离出来。建议的方法是将全站范围的设置放在另一个文件 中,例如 /etc/rc.conf.site,并且把它包含进 /etc/rc.conf中(在rc.conf中添加一行:. /etc/rc.conf.site)。

96、当一个 port 或者 package 被安装的时候,配置文件示例也同样被安装了,通常,这些文件被安装在 /usr/local/etc。它们通常用 .default 的后缀来标识。

97、在 rc.d 出现之前,应用程序会把一个简单的启动脚本放到 /usr/local/etc/rc.d 目录中,这个目录中的脚本会被系统初始化脚本读取。在 2002 年, FreeBSD 整合了来自 NetBSD 的 rc.d 系统,并通过它来完成系统的初始化工作。 在 /etc/rc.d 目录下的文件大多数是用来管理基础服务的, 它们可以通过 start、 stop, 以及 restart 选项来控制。rc.d的使用:(1)启动或停止某个服务# /etc/rc.d/sshd start;(2)要配置使系统启动时启动网络服务, 可以在 /etc/rc.conf 中加入设置:如在系统启动时启动网络地址转换服务,在/etc/rc.conf加入:natd_enable="YES"。(3)不管一个服务是否启动, 都可以在命令前加“one”前缀,如 # /etc/rc.d/sshd onerestart,这样,不管服务是否工作,都可以执 行。(4)用选项 rcvar 可以简单来的检查 /etc/rc.conf 中用适当的 rc.d 脚本启动的服务是否被启用。管理员可以运行这样的程序来检查 sshd 是否真的在 /etc/rc.conf 中被启动了,如:# /etc/rc.d/sshd rcvar ;# sshd;#sshd_enable=YES,表明在rc.conf中启用了。(5)为了确定一个服务是否真的在运行,可以用 status 选项。例如验证 sshd 是否真的启动了:# /etc/rc.d/sshd status。

98、一些服务,如POP3 服务器, IMAP等,可以通过 inetd(8) 来启动(当然,inetd服务要先启动了)。一些情况下, 通过 cron(8) 来启动系统服务也是一种可行的选择。 这种方法有很多好处, 因为 cron 会以 crontab 的文件属主身份执行那些进程。 这使得普通用户也能够执行他们的应用。cron 工具提供了一个独有的功能, 以 @reboot 来指定时间。 这样的设置将在 cron(8) 启动时运行,通常这也是系统初始化的时候。

99、cron 软件在后台运行并且经常检查 /etc/crontab 文件。cron 软件也检查 /var/cron/tabs 目录,搜索新的 crontab 文件。这些 crontab 文件存储一些 cron 在特定时间执行任务的信息。
cron 程序使用两种不同类型的配置文件, 即系统 crontab 和用户 crontabs。 两种格式的唯一区别是第六个字段。 在系统 crontab 中,第六个字段是用于执行命令的用户名。 这给予了系统 crontab 以任意用户身份执行命令的能力。 在用户 crontab 中, 第六个字段是要执行的命令,所有的命令都会以这个用户自己的身份执行; 这是一项重要的安全功能。同其他用户一样, root 用户也可以有自己的 crontab。 它不同于 /etc/crontab (也就是系统 crontab)。由于有系统 crontab 的存在, 通常并不需要给 root 建立单独的用户 crontab。

 

100、FreeBSD 支持很多种 PCI 和 ISA 网卡。 可以查看该版本硬件兼容性列表以确定网卡是否被支持。确认系统支持网卡后,还需要为它选择合适的驱动程序。 /usr/src/sys/conf/NOTES 和 /usr/src/sys/arch/conf/NOTES 会提供所支持的一些网卡和芯片组的信息。如果您的网卡没有出现在 GENERIC 中,则需要手工加载合适的驱动程序。 要完成这项工作可以使用下面两种方法之一:1)最简单的办法是用 kldload(8) 加载网卡对应的内核模块(在/boot/kernel中)。 除此之外, 通过在 /boot/loader.conf 文件中加入适当的设置, 也可以让系统在引导时自动加载这些模块。 不过,并不是所有的网卡都能够通过这种方法提供支持; ISA 网卡是比较典型的例子。2)可以将网卡的支持静态联编进内核。 察看/usr/src/sys/conf/NOTES,/usr/src/sys/arch/conf/NOTES 以及驱动程序的联机手册以了解需要在您的内核配置文件中加一些什么。


101、很多系统服务依赖其他服务提供的相应功能。例如,NIS 和其他基于 RPC 的服务启动可能在 rpcbind 服务启动之前失败。要解决这个问题,依赖关系信息和其他头信息当作注释被包含在每个启动脚本文件的前面。程序在系统初始化时分析这些注释以决定调用其他系 统服务来满足依赖关系。


102、PROVIDE: 指定此文件所提供的服务的名字;REQUIRE: 列出此服务启动之前所需要的其他服务。此脚本提供的服务会在指定的那些服务 之后 启动;BEFORE: 列出依赖此服务的其他服务。此脚本提供的服务将在指定的那些服务之前启动。

 

103、从 FreeBSD 5.3-RELEASE 开始, 已经可以“直接地”支持网络驱动接口标准(NDIS, Network Driver Interface Specification) 了。FreeBSD NDISulator (也被称为 Project Evil) 可以支持二进制形式的 Windows 驱动程序,并让它相信正在运行的是 Windows。由于 ndis(4) 驱动使用的是用于 Windows 的二进制形式的驱动,因此它只能在 i386 和 amd64 系统上使用。ndis(4) 驱动在设计时主要提供了PCI、CardBus 和PCMCIA设备的支持,而 USB 设备目前则没有提供支持。


104、使用Windows NDIS 驱动程序:(1)准备WINDOWS下的二进制驱动程序文件(SYS文件)、驱动程序配置文件(INF文件);(2)将二进制形式的驱动程序组装成内核模 块:# ndisgen W32DRIVER.INF W32DRIVER.SYS,作完成之后,它会在当前目录生成一个内核模块文件, 这个文件可以通过下述命令来加载:# kldload ./W32DRIVER.ko。除了这个内核模块之外, 还必须加载 ndis.ko 和 if_ndis.ko 这两个内核模块,通常系统会自动完成这一操作,如果想手工加载它们,则可以使用下列命令:# kldload ndis # kldload if_ndis
。(3)与任何其它模块一样,可以配置系统令其在启动时自动加载 NDIS 模块。首先,将生成的模块 *.ko 复制到 /boot/modules 目录中。 然后在 /boot/loader.conf 中加入:模块名_load="YES"。


105、网卡配置可以通过使用 ifconfig(8) 命令行方式来完成, 但是这样每次启动都要做一遍。放置网卡配置信的文件是 /etc/rc.conf。例子:ifconfig_dc0="inet 192.168.1.3 netmask 255.255.255.0" ;ifconfig_dc1="inet 10.0.0.1 netmask 255.255.255.0 media 10baseT/UTP";ifconfig_dc2="DHCP",用自己正确的设备名和地址来替换例子中的 dc0,dc1 等内容。要配置网卡,您需要 root 权限。


106、在“11.8.3.2” 小节有调试网卡的几点注意事项。


107、FreeBSD 的一个很普通的用途是虚拟主机站点,一个服务器虚拟成很多服务器一样提供网络服务。这通过在一个接口上绑定多个网络地址来实现。一个特定的网络接口有一个 “真实”的地址, 也可能有一些“别名”地址。这些别名通常用 /etc/rc.conf 中的记录来添加。一个 fxp0 的别名记录类似于:ifconfig_fxp0_alias0="inet xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx",别名记录必须从 alias0 开始并且按顺序递增(例如 _alias1、 _alias2)。配置程序将会停止在第一个缺少的数字的地方。计算别名的子网掩码是很重要的,幸运的是它很简单。对于一个接口来说,必须有一个描述子网 掩码的地址。 任何在这个网段下的地址必须有一个全是 1 的子网掩码(通常表示为 255.255.255.255 或 0xffffffff。举例来说, 假设使用 fxp0 连接到两个网络, 分别是 10.1.1.0, 其子网掩码为 255.255.255.0, 以及 202.0.75.16, 其子网掩码为 255.255.255.240。 我们希望从 10.1.1.1 到 10.1.1.5 以及从 202.0.75.17 到 202.0.75.20 的地址能够互相访问。 如前所述,只有两个网段中的第一个地址 (本例中, 10.0.1.1 和 202.0.75.17) 应使用真实的子网掩码; 其余的 (10.1.1.2 到 10.1.1.5 以及 202.0.75.18 到 202.0.75.20) 则必须配置为使用 255.255.255.255 作为子网掩码:
ifconfig_fxp0="inet 10.1.1.1 netmask 255.255.255.0"
ifconfig_fxp0_alias0="inet 10.1.1.2 netmask 255.255.255.255"
ifconfig_fxp0_alias1="inet 10.1.1.3 netmask 255.255.255.255"
ifconfig_fxp0_alias2="inet 10.1.1.4 netmask 255.255.255.255"
ifconfig_fxp0_alias3="inet 10.1.1.5 netmask 255.255.255.255"
ifconfig_fxp0_alias4="inet 202.0.75.17 netmask 255.255.255.240"
ifconfig_fxp0_alias5="inet 202.0.75.18 netmask 255.255.255.255"
ifconfig_fxp0_alias6="inet 202.0.75.19 netmask 255.255.255.255"
ifconfig_fxp0_alias7="inet 202.0.75.20 netmask 255.255.255.255"


108、使/etc/rc.conf立即生效:#/etc/netstart。


109、/etc 布局:
/etc 一般的系统配置信息。这儿的数据是与特定系统相关的。
/etc/defaults 系统配置文件的默认版本。
/etc/mail 额外的 sendmail(8) 配置信息,其他 MTA 配置文件。
/etc /ppp 用于用户级和内核级 ppp 程序的配置。
/etc/namedb named(8) 数据的默认位置。通常 named.conf 和区域文件存放在这里。
/usr/local/etc 被安装的应用程序配置文件。可以参考每个应用程序的子目录。
/usr/local/etc/rc.d 被安装程序的 启动/停止 脚本。
/var/db 特定系统自动产生的数据库文件,像 package 数据库,位置数据库等等。


110、/etc/resolv.conf 指示了 FreeBSD 如何访问域名系统(DNS)。resolv.conf 中最常见的记录是:nameserver 按顺序要查询的名字服务器的 IP 地址,最多三个。 search 搜索机器名的列表。这通常由本地机器名的域决定。 domain 本地域名。一个典型的 resolv.conf 文件:
search example.com
nameserver 147.11.1.11
nameserver 147.11.100.30
注 意: 只能使用一个 search 和 domain 选项。如果您在使用 DHCP,dhclient(8) 经常使用从 DHCP 服务器接受来的信息重写 resolv.conf。


111、修改 /sbin/dhclient-script,可以让dhclient在获取ip地址的时候不更新/etc/resolv.conf;或者chflags schg /etc/resolv.conf;或者在 /etc/dhclient.conf 中增加如下设定:prepend domain-name-servers  <ip1>, <ip2>;其中ip1, ip2就是你的dns服务器。


112、etc/hosts 格式:[Internet address] [official hostname] [alias1] [alias2] ...例如:10.0.0.1 myRealHostname.example.com myRealHostname foobar1 foobar2


113、sysctl.conf 和 rc.conf 这两个文件的风格很接近。 其中的配置均为 变量=值 这样的形式。在这个文件中配置的值, 均会在系统进入多用户模式之后进行实际的修改操作。 需要注意的是,并不是所有的变量都能够在多用户模式下修改。如果希望关闭对收到致命的信号退出的进程进行记录,并阻止普通用户看到其他用户的进程, 可以在 sysctl.conf 中进行下列配置:# 不记录由于致命信号导致的进程退出 (例如信号 11,访问越界)kern.logsigexit=0 # 阻止用户看到以其他用户 UID 身份执行的进程。security.bsd.see_other_uids=0


114、syslog.conf 是 syslogd(8) 程序的配置文件。 它指出了的 syslog 哪种信息类型被存储在特定的日志文件中。newsyslog.conf 是一个通常用 cron(8) 计划运行的 newsyslog(8) 程序的配置文件。 newsyslog(8) 指出了什么时候日志文件需要打包或者重新整理。 比如 logfile 被移动到 logfile.0,logfile.0 被移动到 logfile.1 等等。另外,日志文件可以用 gzip(1) 来压缩,它们是这样的命名格式: logfile.0.gz,logfile.1.gz 等等。


115、sysctl(8) 是一个允许您改变正在运行中的 FreeBSD 系统的接口。它包含一些 TCP/IP 堆栈和虚拟内存系统的高级选项, 这可以让有经验的管理员提高引人注目的系统性能。用 sysctl(8) 可以读取设置超过五百个系统变量。基于这点,sysctl(8) 提供两个功能:读取和修改系统设置。查看所有可读变量:% sysctl -a;读一个指定的变量,例如 kern.maxproc:% sysctl kern.maxproc kern.maxproc: 1044;要设置一个指定的变量,直接用 variable=value 这样的语法:# sysctl kern.maxfiles=5000 kern.maxfiles: 2088 -> 5000。sysctl 变量的设置通常是字符串、数字或者布尔型。 (布尔型用 1 来表示'yes',用 0 来表示'no')。如果你想在每次机器启动时自动设置某些变量, 可将它们加入到文件 /etc/sysctl.conf 之中。


116、“11.12“小节有使用sysctl调整磁盘的一些参数说明。


117、11.13 调整内核限制;11.13.1 文件/进程限制;11.13.1.1 kern.maxfiles; kern.maxusers ;


118、kern.ipc.somaxconn sysctl 变量 限制了接收新 TCP 连接侦听队列的大小。对于一个经常处理新连接的高负载 web服务环境来说,默认的 128 太小了。 大多数环境这个值建议增加到 1024 或者更多。 服务进程会自己限制侦听队列的大小(例如 sendmail(8) 或者 Apache), 常常在它们的配置文件中有设置队列大小的选项。大的侦听队列对防止拒绝服务 DoS 攻击也会有所帮助。


119、11.13.2 网络限制:kern.ipc.nmbclusters ;net.inet.ip.portrange.*;net.inet.tcp.inflight.enable


120、在 FreeBSD 中创建交换文件:1.确认您的内核配置包含虚拟磁盘(Memory disk)驱动 (md(4))。它在 GENERIC 内核中是默认的。device   md   # Memory "disks";2.创建一个交换文件(/usr/swap0):# dd if=/dev/zero of=/usr/swap0 bs=1024k count=64;3.赋予它(/usr/swap0)一个适当的权限:# chmod 0600 /usr/swap0;4.在 /etc/rc.conf 中启用交换文件:swapfile="/usr/swap0"   # Set to name of swapfile if aux swapfile desired;5.通过重新启动机器或下面的命令使交换文件立刻生效:# mdconfig -a -t vnode -f /usr/swap0 -u 0 && swapon /dev/md0


121、11.15 电源和资源管理:配置 ACPI;11.16:使用和调试 FreeBSD ACPI。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号