设为首页 收藏本站
查看: 519|回复: 0

[经验分享] Linux内核编译、管理以及kickstart和引导镜像制作

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-6-2 09:00:18 | 显示全部楼层 |阅读模式
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地址,才能去连接网络获取安装程序




  • 运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
    2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
    3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
    4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
    5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
    6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
    7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
    8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

    所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-73028-1-1.html 上篇帖子: sort命令:文件排序 下篇帖子: rabbitmq集群 Linux 制作
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    扫码加入运维网微信交流群X

    扫码加入运维网微信交流群

    扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

    扫描微信二维码查看详情

    客服E-mail:kefu@iyunv.com 客服QQ:1061981298


    QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


    提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


    本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



    合作伙伴: 青云cloud

    快速回复 返回顶部 返回列表