24.2 核心编译的前处理与核心功能选择
什么?核心编译还要进行前处理?没错啦!事实上,核心的目的在管理硬件与提供系统核心功能,因此你必须要先找到你的系统硬件, 并且规划你的主机未来的任务,这样才能够编译出适合你这部主机的核心!所以,整个核心编译的重要工作就是在“挑选你想要的功能”。 下面鸟哥就以自己的一部主机软/硬件环境来说明,解释一下如何处理核心编译啰!
24.2.1 硬件环境检视与核心功能要求
鸟哥的一部主机硬件环境如下 (在虚拟机中,通过 /proc/cpuinfo 及 lspci 观察):
CPU:Intel(R) Xeon(R) CPU E5-2650
主板芯片组: KVM 虚拟化仿真的主版 (Intel 440FX 相容)
显卡: Red Hat, Inc. QXL paravirtual graphic card
内存: 2.0GB 内存
硬盘: KVM Virtio 界面磁盘 40G (非 IDE/SATA/SAS 喔!)
网卡: Red Hat, Inc Virtio network device
硬件大致如上,至于这部主机的需求,是希望做为未来在鸟哥上课时,可以通过虚拟化功能来处理学生的练习用虚拟机。 这部主机也是鸟哥用来放置学校上课教材的机器,因此,这部主机的 I/O 需求须要好一点,未来还需要打开防火墙、 WWW 服务器功能、FTP 服务器功能等,基本上,用途就是一部小型的服务器环境啰。大致上需要这样的功能啦!
24.2.2 保持干净源代码: make mrproper
了解了硬件相关的数据后,我们还得要处理一下核心源代码下面的残留文件才行!假设我们是第一次编译, 但是我们不清楚到下面载下来的源代码当中有没有保留目标文件 (*.o) 以及相关的配置文件存在, 此时我们可以通过下面的方式来处理掉这些“编译过程的目标文件以及配置文件”:
[root@study ~]# cd /usr/src/kernels/linux-3.10.89/
[root@study linux-3.10.89]# make mrproper请注意,这个动作会将你以前进行过的核心功能选择文件也删除掉, 所以几乎只有第一次执行核心编译前才进行这个动作,其余的时刻,你想要删除前一次编译过程的残留数据, 只要下达:
[root@study linux-3.10.89]# make clean因为 make clean 仅会删除类似目标文件之类的编译过程产生的中间文件,而不会删除配置文件! 很重要的!千万不要搞乱了喔!好了,既然我们是第一次进行编译,因此,请下达“make mrproper”吧!
24.2.3 开始挑选核心功能: make XXconfig
不知道你有没有发现 /boot/ 下面存在一个名为 config-xxx 的文件?那个文件其实就是核心功能列表文件! 我们下面要进行的动作,其实就是作出该文件!而我们后续小节所要进行的编译动作,其实也就是通过这个文件来处理的! 核心功能的挑选,最后会在 /usr/src/kernels/linux-3.10.89/ 下面产生一个名为 .config 的隐藏文件, 这个文件就是 /boot/config-xxx 的文件啦!那么这个文件如何创建呢?你可以通过非常多的方法来创建这个文件! 常见的方法有:
make menuconfig 最常使用的,是文字模式下面可以显示类似图形接口的方式,不需要启动 X Window 就能够挑选核心功能菜单!
make oldconfig 通过使用已存在的 ./.config 文件内容,使用该文件内的设置值为默认值,只将新版本核心内的新功能选项列出让使用者选择, 可以简化核心功能的挑选过程!对于作为升级核心源代码后的功能挑选来说,是非常好用的一个项目!
make xconfig 通过以 Qt 为图形接口基础功能的图形化接口显示,需要具有 X window 的支持。例如 KDE 就是通过 Qt 来设计的 X Window,因此你如果在 KDE 画面中,可以使用此一项目。
make gconfig 通过以 Gtk 为图形接口基础功能的图形化接口显示,需要具有 X window 的支持。例如 GNOME 就是通过 Gtk 来设计的 X Window,因此你如果在 GNOME 画面中,可以使用此一项目。
make config 最旧式的功能挑选方法,每个项目都以条列式一条一条的列出让你选择,如果设置错误只能够再次选择,很不人性化啊!
大致的功能选择有上述的方法,更多的方式可以参考核心目录下的 README 文件。鸟哥个人比较偏好 make menuconfig 这个项目啦!如果你喜欢使用图形接口, 然后使用鼠标去挑选所需要的功能时,也能使用 make xconfig 或 make gconfig ,不过需要有相关的图形接口支持! 如果你是升级核心源代码并且需要重新编译,那么使用 make oldconfig 会比较适当!
通过既有的设置来处理核心项目与功能的选择
如果你跟鸟哥一样懒,那可以这样思考一下。既然我们的 CentOS 7 已经有提供它的核心设置值,我们也只是想要修改一些小细节而已, 那么能不能以 CentOS 7 的核心功能为底,然后来细部微调其它的设置呢?当然可以啊!你只要这样做即可:
接下来要开始调整啰!那么如何选择呢?以 make menuconfig 来说,出现的画面会有点像这样:
Tips 注意,你可能会被要求安装好多软件,请自行使用 yum 来安装喔!这里不再介绍了! 另外:“不要再使用 make mrproper ”喔!因为我们已经复制了 .config 啊!使用 make mrproper 会将 .config 删除喔!
图24.2.1、make menuconfig 核心功能挑选菜单示意图
看到上面的图示之后,你会发现画面主要分为两大部分,一个是大框框内的反白光柱,另一个则是下面的小框框, 里面有 select, exit 与 help 三个选项的内容。这几个元件的大致用法如下:
“左右方向键”:可以移动最下面的 <Select>, <Exit>, <Help>项目;
“上下方向键”:可以移动上面大框框部分的反白光柱,若该行有箭头 (--->) 则表示该行内部还有其他细项需要来设置的意思;
选定项目:以“上下键”选择好想要设置的项目之后,并以“左右键”选择 <Select> 之后, 按下“ Enter ”就可以进入该项目去作更进一步的细部设置啰;
可挑选之功能:在细部项目的设置当中,如果前面有 [ ] 或 < > 符号时,该项目才可以选择, 而选择可以使用“空白键”来选择;
若为 [] <> 则表示编译进核心;若为 <M> 则表示编译成模块! 尽量在不知道该项目为何时,且有模块可以选,那么就可以直接选择为模块啰!
当在细项目选择 <Exit> 后,并按下 Enter ,那么就可以离开该细部项目啰!
基本上建议只要“上下左右的方向键、空白键、Enter”这六个按键就好了!不要使用 Esc ,否则一不小心就有可能按错的!另外,关于整个核心功能的选择上面,建议你可以这样思考:
“肯定”核心一定要的功能,直接编译进核心内;
“可能在未来会用到”的功能,那么尽量编译成为模块;
“不知道那个东西要干嘛的,看 help 也看不懂”的话,那么就保留默认值,或者将他编译成为模块;
总之,尽量保持核心小而美,剩下的功能就编译成为模块,尤其是“需要考虑到未来扩充性”, 像鸟哥之前认为螃蟹卡就够我用的了,结果,后来竟然网站流量大增,鸟哥只好改换 3Com 的网卡。 不过,我的核心却没有相关的模块可以使用~因为.....鸟哥自己编译的核心忘记加入这个模块了。 最后,只好重新编译一次核心的模块,呵呵!真是惨痛的教训啊!
24.2.4 核心功能细项选择
由上面的图示当中,我们知道核心的可以选择的项目有很多啊!光是第一面,就有 17 个项目,每个项目内还有不同的细项!哇!真是很麻烦啊~每个项目其实都可能有 <Help> 的说明,所以,如果看到不懂的项目,务必要使用 Help 查阅查阅! 好了,下面我们就一个一个项目来看看如何选择吧!
Tips 在下面的案例中,因为鸟哥使用的是 CentOS 7.1 的核心配置文件来进行默认的设置, 所以基本上许多默认的设置都不用重新调整。下面只列出几个鸟哥认为比较重要的设置项目。其他更详细的核心功能项目,还请自行参考 help 的说明喔!
General setup
与 Linux 最相关的程序互动、核心版本说明、是否使用发展中程序码等信息都在这里设置的。 这里的项目主要都是针对核心与程序之间的相关性来设计的,基本上,保留默认值即可! 不要随便取消下面的任何一个项目,因为可能会造成某些程序无法被同时执行的困境喔! 不过下面有非常多新的功能,如果你有不清楚的地方,可以按 <Help> 进入查阅,里面会有一些建议! 你可以依据 Help 的建议来选择新功能的启动与否!
loadable module + block layer
要让你的核心能够支持动态的核心模块,那么下面的第一个设置就得要启动才行!至于第二个 block layer 则默认是启动的, 你也可以进入该项目的细项设置,选择其中你认为需要的功能即可!
CPU 的类型与功能选择
进入“Processor type and features”后,请挑选你主机的实际 CPU 形式。鸟哥这里使用的是 Intel E5 的 CPU, 而且鸟哥的主机还有启动 KVM 这个虚拟化的服务 (在一部主机上面同时启动多个操作系统),因此,所以下面的选择是这样的:
电源管理功能
如果选择了“Power management and ACPI options”之后,就会进入系统的电源管理机制中。 其实电源管理机制还需要搭配主板以及 CPU 的相关省电功能,才能够实际达到省电的效率啦! 不论是 Server 还是 Desktop 的使用,在目前电力不足的情况下,能省电就加以省电吧!
一些总线 (bus) 的选项
这个“Bus options (PCI etc.)”项目则与总线有关啦!分为最常见的 PCI 与 PCI-express 的支持,还有笔记本电脑常见的 PCMCIA 插卡啊!要记住的是,那个 PCI-E 的接口务必要选取!不然你的新显卡可能会捉不到!
编译后可执行文件的格式
选择“Executable file formats / Emulations”会见到如下选项。 下面的选项必须要勾选才行喔!因为是给 Linux 核心运行可执行文件之用的数据。通常是与编译行为有关啦!
核心的网络功能
这个“Networking support”项目是相当重要的选项,因为他还包含了防火墙相关的项目!就是未来在服务器篇会谈到的防火墙 iptables 这个数据啊!所以,千万注意了!在这个设置项目当中,很多东西其实我们在基础篇还没有讲到, 因为大部分的参数都与网络、防火墙有关!由于防火墙是在启动网络之后再设置即可,所以绝大部分的内容都可以被编译成为模块,而且也建议你编成模块!有用到再载入到核心即可啊!
各项设备的驱动程序
进入“Device Drivers”这个是所有硬件设备的驱动程序库!哇!光是看到里面这么多内容,鸟哥头都昏了~ 不过,为了你自己的主机好,建议你还是得要一个项目一个项目的去挑选挑选才行~ 这里面的数据就与你主机的硬件有绝对的关系了!
在这里面真的很重要,因为很多数据都与你的硬件有关。核心推出时的默认值是比较符合一般状态的, 所以很多数据其实保留默认值就可以编的很不错了!不过,也因为较符合一般状态, 所以核心额外的编译进来很多跟你的主机系统不符合的数据,例如网卡设备~ 你可以针对你的主板与相关硬件来进行编译。不过,还是要记得有“未来扩充性”的考虑! 之前鸟哥不是谈过吗,我的网卡由螃蟹卡换成 3Com 时,核心捉不到~ 因为...鸟哥并没有将 3Com 的网卡编译成为模块啊! @_@
至于“ Firmware Drivers ”的项目,请视你的需求来选择~基本上就保留设置值即可!所以鸟哥这里就不显示啰!
文件系统的支持
文件系统的支持也是很重要的一项核心功能!因为如果不支持某个文件系统,那么我们的 Linux kernel 就无法认识,当然也就无法使用啦!例如 Quota, NTFS 等等特殊的 filesystem 。 这部份也是有够麻烦~因为涉及核心是否能够支持某些文件系统,以及某些操作系统支持的 partition table 项目。在进行选择时,也务必要特别的小心在意喔! 尤其是我们常常用到的网络操作系统 (NFS/Samba 等等),以及基础篇谈到的 Quota 等, 你都得要勾选啊!否则是无法被支持的。如果你有兴趣,也可以将 NTFS 的文件系统设置为可读写看看啰!
核心骇客、信息安全、密码应用
再接下来有个“Kernel hacking”的项目,那是与核心开发者比较有关的部分,这部分建议保留默认值即可, 应该不需要去修改他!除非你想要进行核心方面的研究喔。然后下面有个“ Security Options ”,那是属于信息安全方面的设置, 包括 SELinux 这个细部权限强化模块也在这里编入核心的!这个部份只要记得 SELinux 作为默认值,且务必要将 NSA SELinux 编进核心即可, 其他的细部请保留默认值。
另外还有“ Cryptographic API ”这个密码应用程序接口工具选项,以前的默认加密机制为 MD5,近年来则改用了 SHA 这种机制。 不过,反正默认已经将所有的加密机制编译进来了,所以也是可以保留默认值啦!都不需要额外修改就是了!
虚拟化与函数库
虚拟化是近年来非常热门的一个议题,因为计算机的能力太强,所以时常闲置在那边, 此时,我们可以通过虚拟化技术在一部主机上面同时启动多个操作系统来运行,这就是所谓的虚拟化。 Linux 核心已经主动的纳入虚拟化功能喔!而 Linux 认可的虚拟化使用的机制为 KVM (Kernel base Virtual Machine)。 至于常用的核心函数库也可以全部编为模块啰!
现在请回到如[图24.2.1] 的画面中,在下方设置处移动到“Save”的选项,点选该项目, 在出现的窗口中确认文件名为 .config 之后,直接按下“OK”按钮,这样就将刚刚处理完毕的选项给记录下来了。 接下来可以选择离开菜单画面,准备让我们来进行编译的行为啰。
要请你注意的是,上面的数据主要是适用在鸟哥的个人机器上面的, 目前鸟哥比较习惯使用原本 distributions 提供的默认核心,因为他们也会主动的进行更新, 所以鸟哥就懒的自己重编核心了~ ^_^
此外,因为鸟哥重视的地方在于“网络服务器与虚拟化服务器”上面,所以里头的设置少掉了相当多的个人桌上型 Linux 的硬件编译!所以,如果你想要编译出一个适合你的机器的核心, 那么可能还有相当多的地方需要来修正的!不论如何,请随时以 Help 那个选项来看一看内容吧!反正 Kernel 重编的概率不大!花多一点时间重新编译一次! 然后将该编译完成的参数文件储存下来,未来就可以直接将该文件叫出来读入了! 所以花多一点时间安装一次就好!那也是相当值得的!
Last updated