Linux的设计模式:核心和外围功能性模块组构成的,其内核支持动态模块的装载和卸载。
裁剪Liniux的原理:
-->POST(Power-on Self Test:开机自检)
-->BIOS(Boot Sequence :指定启动的设备读取磁盘中操作系统内核文件)
-->GRUB [
BootLoader :加载内核文件至内存
(stage1:MBR;
stage1.5:识别内核文件所在的文件系统,提供文件系统是别的扩展
stage2:GRUB的引导程序,其配置文件:/boot/grub/grun.conf ) ]
-->kernel( initrd :将内核解压缩为根目录,加载合适的驱动程序,最后退出虚拟文件系统)
-->SHELL
init是linux的第一个进程,实现系统的初始化,负责管理用户空间的进程;
PID为1
其二进制程序为/sbin/init
配置文件:/etc/inittab
/lib/modules/:linux需要的驱动程序在此目录下
Grub的功能:
1.选择要启动的内核或系统,界面可隐藏
2.提供交互式接口,可以编辑grub.conf文件:e进入编辑模式
3.基于密码保护
启动内核映像:定义在相应的title下
传递参数(进入编辑模式):定义在全局段
grub.conf的语法:
default=n:指定默认启动该grub.conf中的第n-1个title选项(0表示第一个)
timeout=n:启动进行读秒,用没有其他操作的情况下需要等待n秒
splashimage=(hd0,0) /path/to/Splashimage_File:指定使用的背景图片
hiddenmenu:启动时是否显示菜单
title
root:内核文件存放的分区
hd0:表示设备;从0开始编号
0:代表分区;从0开始编号
格式:root(hd0,0)
kernel:指定内核文件以及传递给内核文件的参数
格式:kernel /path/to/kernel_file [参数] ro root=/path/to/Device [quiet]
initrd:指定initrd制作的以.img结尾的文件
格式:initrd: /FileName.img
裁剪Linux并自动安装网卡模块:
环境: 宿主机
目标机
1.在宿主机中添加一块新的磁盘
2.为新添加的磁盘创建两个主分区
3.分别对/dev/sdb1和/dev/sdb2创建文件系统,且都为ext4
4.在/mnt目录下创建两个目录/boot和sysroot
5.将/dev/sdb1挂载到/mnt/boot目录下;将/dev/sdb2挂载到/mnt/sysroot目录下
6.安装grub至/dev/sdb上
7.复制内核文件和initrd文件至/mnt/boot/目录下
8.为目标主机创建根文件系统
9.移植bash和一些相关的命令至目标主机的跟文件系统
10.测试bash是否移植成功:用chroot将根目录切换为/mnt/sysroot
11.为grub提供配置文件且基于md5对grub进行加密:启用内核映像和参数传递模式的保护
12.创建/mnt/sysroot/lib/modules目录并将ib/modules/2.6.32-358.el6.i686/kernel/drivers/net/e1000/e1000.ko拷贝到其目录下
13.编写init脚本使其完成自动网卡模块的加载并为其目标主机配置IP
14.为/mnt/sysroot/sbin/init赋予可执行权限 chmod +x /mnt/sysroot/sbin/init
15.将所有信息同步至磁盘CentOS1.1-000002.vmdk
16.挂起目标主机新建目标主机并为其添加一块已存在的磁盘CentOS1.1-000002.vmdk
17.基于md5加密的grub参数传递模式,编辑grub时需要输入加密时的密码
18.基于md5加密的内核映像模式,启动系统时需要输入加密时的密码
19.最终完成linux的裁剪,并能够成功进入系统
20.测试之后能够成功ping同172.16.0.1的主机
安装网卡模块需要用到的相关命令:
查看PCI设备的信息:
# lspci
查看当前系统转载的模块:
# lsmod
查看某模块的信息:
# modinfo MOD_NAME
查看某模块的依赖关系:
# depmod MOD_NAME
动态装载某模块:
# modprobe MOD_NAME 或 # insmod /path/to/Module_File
动态卸载某模块:
# modprobe -r MOD_NAME 或 # rmmod /path/to/Module_File