Linux内核编译、管理以及kickstart和引导镜像制作
内核的组成:核心文件:/boot/vmlinuz-VERSION
模块管理:lsmod命令:列出已经装载的模块/另一种办法:# cat /proc/modules
-n模块名: 只显示模块文件路径
显示出的信息中:
depends: 显示被此模块所依赖的其它模块;
modprobe命令:实现模块的装载和卸载
装载:modprobe MOD_NAME
模块文件装载和卸载
装载:insmod命令
insmod/path/to/module_file
注意:不会自动解决依赖关系;
例:insmod`modinfo -n ext3`
卸载:rmmod命令
rmmodMOD_NAME
与内核交互:
/proc伪文件系统接口
每个文件名均是内核参数,目录名为内核参数节点(子系统或子功能)信息;
例: net.ipv4.ip_forward = 1
/proc/sys/net/ipv4/ip_forward
/proc下的只读文件:输出内核信息
/proc下的读写文件:可修改的内核工作特性/proc/sys目录下
伪文件系统:文件不能够直接使用编辑器编辑;修改方法:
1 echo
echo"New_Value" > /proc/sys/path/to/somefile
例:echo "lx">/proc/sys/kernel/hostname
2 sysctl -w
sysctl-w path.to.somefile=New_Value
例如:/proc/sys/net/ipv4/ip_forward
echo"1" > /proc/sys/net/ipv4/ip_forward
sysctl -w net.ipv4.ip_forward=1
注意:此两种设定立即生效,但内核重启后无效;
3 内核参数配置文件/etc/sysctl.conf
sys伪文件系统接口:伪文件系统:sysfs;主要用于输出内核识别出的各硬件设备的相关属性信息;还能够让用户修改某些参数的值来改变硬件的工作特性;
用户空间的应用程序:udev通过读取/sys目录下保存硬件设备的相关信息来为每个当前内核探测到的硬件设备创建设备文件;创建设备文件的文件权限、名称等属性是可定制的;
udev有规则文件:/etc/udev/rules.d/
修改网卡设备名字;vim /etc/udev/rules.d/70-persistent-net ;要生效则要先卸载网卡模块,在装上即可;即modprobe -r e1000 在modprobe e1000
uname命令:-r: 内核的release号;-n: 主机名;-a: 显示所有信息;ramdisk制作:
CentOS5: mkinitrd
CentOS6: dracut, mkinitrd
dracut [OPTION]... <image> <kernel-release>
-m LIST: 模块列表/-d LIST: 驱动列表
#dracut /boot/initramfs-$(uname -r).img $(uname -r)
修改:
展开initramfs文件:
#cp initramfs-2.6.32-504.el6.x86_64.img /tmp
#cd /tmp
#mv initramfs-2.6.32-504.el6.x86_64.img initramfs-2.6.32-504.el6.x86_64.img.gz
#gzip -d initramfs-2.6.32-504.el6.x86_64.img
#mkdir ramdisk
#cd ramdisk
#cpio -id < ../initramfs-2.6.32-504.el6.x86_64.img
归档:
#find . | cpio -o -H newc --quiet > /boot/myramdisk.img
#gzip /boot/myramdisk.img
#mv /boot/myramdisk.img.gz /boot/myramdisk
常用的内核参数:/proc/sys
kernel.hostname:主机名
net.ipv4.ip_forward: 本机的路由功能,开启或关闭在接口之间转发报文的功能;
/proc/sys/net/ipv4/icmp_echo_ignore_all:0表示不忽略所有人的ping请求,1表示忽略
wKioL1UybcyDrTeNAAA0QGNfJPM340.jpg
内核编译:
1) 要充分获知目标硬件设备的信息;
2) 充分获知目标系统平台的各相关信息,如文件系统类型等;
3) 打算启用的新功能;
4)准备好软件开发环境及内核源代码树;
设备信息:
1)CPU
#cat /proc/cpuinfo
#lscpu
#x86info -a
2)PCI
#lspci [-v]
#lsusb [-v]
#lsblk
3)hal-device
hal:hardware abstract layer
开发环境
(1) 安装开发包组:Development Tools, Server Platform Development
(2) 获取内核源码:www.kernel.org
内核编译步骤
1.解压内核源码
tar -Jxf linux-3.10.67.tar.xz
2.内核功能的选择
进入解压的目录下,用make menuconfig命令选定配置:
用空格键切换:
[ ] 不启用此功能
[M] 编译成内核模块
[*] 编译进内核
注意:要保存退出;所有选定的配置会保存在.config隐藏文件中;
3.编译:
(1)在解压的目录下用make命令先创建MakeFile文件
# make help:获取make命令的使用帮助
选定配置(其中一种即可,但偶尔会结合两种或以上的方式进行):
# make config:遍历每个选项
# make menuconfig:打开文本窗口
# make xconfig:Qt窗口,依赖于KDE开发组件;
# make gconfig:gtk窗口,依赖于GTK开发组件;
# make allnoconfig: 所有可选择项均不选择;
结果会保存至内核选项的配置文件中:.config
(2)安装内核模块:
#make modules_install
安装在/lib/modules/VERSION
(3)安装内核:
#make install
注:编译时可以在终端使用screen命令,以免断开连接等意外
screen命令:
打开:# screen
终止:# exit
拆除:Ctrl+a, d
4.重启系统,即可选择使用新内核
1、在原有曾经编译过的内核源码基础上再次进行重编译之前,要清理源代码;
# make clean: 保留.config配置文件及外部模块的相关文件;
# make mrproper:删除所有编译生成的文件,包括.config和各种备份文件;
# make distclean: 相当mrproper,以及删除编辑器备份及补丁文件,相当于编译之前;
2、只编译其中部分代码:
(1) 只编译选定目录中的代码
#make dir/
(2) 只编译一个模块
#make dir/file.[oisS]
(3) 完整编译一个模块
#make dir/file.ko
3、查看内核版本信息
#make kernelrelease
#make kernelversion
4、只编译内核核心,不编译模块
#make bzImage
5、交叉编译
编译操作所在的平台非目标代码运行的平台,事实上,目标代码将运行于另一个不同的平台;
#make ARCH=arch_name
要获取目标平台的帮助:
#make ARCH=arch_name help
CentOS系统安装:
安装过程:通过安装程序anaconda来进行;
bootloader--> vmlinuz, initrd.img --> anaconda
anaconda支持两种模式:
GUI:图形界面
text:文本界面
anaconda把安装过程分成三个阶段:
安装前配置阶段:
键盘类型
语言
时区
管理员密码
磁盘及其分区方式
要安装的程序包
安装阶段:
在目标磁盘创建分区、执行格式化;
将选定的程序包安装至目标磁盘;
生成bootloader;
第一次启动:
配置iptables, selinux, core dump
系统安装的基本分区:
/ : 根分区
swap:交换分区
注意:如果根分区放置于逻辑卷,由于grub无法驱动并访问逻辑卷,就必须将/boot单独分区,并使用基本磁盘分区
anaconda支持通过读取kickstart配置文件的内容来完成安装过程的配置:
系统安装后会在管理员的家目录下生成/root/anaconda-ks.cfg,用于保存其安装配置信息
kickstart文件即/root/anaconda-ks.cfg的组成:
命令段
程序包段:%packages, %end
@group
package[表示安装这个包组]
安装过程的安装引导选项
wKioL1UybofBxcALAAKf9nyqhug926.jpg
按Esc键进入boot提示符界面
wKiom1UybVyQ1GyRAAAeUIwD2p4047.jpg
boot:
linux:默认安装模式
linux text:文本安装模式
与网络相关的引导选项:
ip=IPADDR
例ip=192.168.1.107
netmask=MASK
gateway=GW
dns=DNS_SERVER_IP
ifname=NAME:MAC_ADDR
指明获取 kickstart 文件的路径:
ks=
DVD drive ks=cdrom:/path/to/kickstart_file
HTTP Server ks=http://server_ip:port/path/to/kickstart_file
HTTPS Serverks=https://server_ip:port/path/to/kickstart_file
FTP Server ks=ftp://serverip:port/path/to/kickstart_file
NFS Server ks=nfs:server_ip:/path/to/kickstart_file
一个引导光盘:仅帮助启动安装过程,不提供安装树:
准备工作目录,例如这里使用/tmp/dvd;
mkdir/tmp/dvd
挂载系统发行光盘,复制isolinux目录至/tmp/dvd;
mount/dev/cdrom /mnt
mkdir/tmp/dvd/isolinux
cp/mnt/isolinux/* /tmp/dvd/isolinux
chmodu+x /tmp/dvd/isolinux -R
复制制作好的kickstart文件ks.cfg至/tmp/cdrom某位置;将/root/anaconda-ks.cfg修改成合适的kickstart文件并命名为ks.cfg
cp/root/ks.cfg /tmp/dvd 如果需要,可以编辑/tmp/dvd/isolinux/isolinux.cfg在某label后的append指令后附加ks=cdrom:/ks.cfg信息,从而实现自动调用光盘上提供的ks文件;若ks.cfg在服务器上,就必须进入boot命令行,设置ip地址即boot> linux
建立iso镜像:这个命令必须在dvd的父目录执行[创建好的iso镜像在/root下]
# mkisofs -R -J -T -v --no-emul-boot--boot-load-size 4 --boot-info-table -V "CentOS 6.6 X86_64 boot disk"-b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso dvd/当ks.cfg在光盘上时,可以不用手动设置ip地址,可在ioslinux.cfg文件中直接设置。而且若光盘上还有安装树,可以不用连接网络直接安装。而当ks.cfg在网络服务器上时,就必须在boot提示符界面下手动指定ip地址,才能去连接网络获取安装程序
本文出自 “吕航@博客” 博客,请务必保留此出处http://10116624.blog.51cto.com/10106624/1657270
Linux内核编译、管理以及kickstart和引导镜像制作
原文地址:http://10116624.blog.51cto.com/10106624/1657270