Linux_19 内核启动流程详解、centos安装、内核编译

Linux内核启动流程详解

CentOS系统启动流程:
	Linux 系统的组成部分:内核+根文件系统
		内核:进程管理、内存管理、网络协议栈、文件系统、驱动程序、安全功能
			IPC:Inter Process Communication
				消息队列、semerphor、shm
				socket
	运行中系统环境可分为两层:内核空间、用户空间
		用户空间:应用程序(进程或线程)
		内核空间:内核代码(系统调用)
	
	内核设计流派:
		单内核设计:把所有功能集成于同一个程序;
			Linux
		微内核设计:每种功能使用一个单独的子系统实现;
			Windows,Solaris
		
		Linux内核特点:
			支持模块化:.ko(kernel object)
			支持模块运行时动态装载或卸载;
			
			组成部分:
				核心文件:/boot/vmlinuz-VERSION-release
				ramdisk:
					CentOS 5:/boot/initrd-VERSION-release.img
					CentOS6.7:/boot/initramfs-VERSION-release.img
				模块文件:/lib/modules/VERSION-release

CentOS 系统的启动流程:
	POST:加电自检;
		ROM:CMOS
			BIOS:Basic Input and Output System
		ROM+RAM
	
	Boot Sequence:
		按次序查找各引导设备,第一个由引导程序的设备即为本次启动要用到的设备;
		
		bootloader:引导加载器,程序;
			Windows:ntloader
			Linux:
				LILO:Linux Loader
				GRUB:Grand Uniform Bootloader
					GRUB0.x:Brub Legacy
					GRUB1.x:Grub2
			
			功能:提供一个菜单,允许用户选择要启动的系统或不同的内核版本;把用户选定的内核装载到RAM中,解压、展开,而后把系统控制权移交给内核;
			
		MBR:Master Boot Record
			512Bytes:
				446Bytes:bootloader
				64Bytes:fat
				2Bytes:55AA
		
		GRUB:
			bootloader:1st stage
			Partition:filesystem driver,1.5 stage
			Partition:/boot/grub,2nd stage
		注意:UEFI,GPT
	
	Kernel:
		自身初始化:
			探测可识别到的所有硬件设备;
			加载硬件驱动程序;(有可能会借助于ramdisk加载驱动)
			以只读方式挂载根文件系统;
			运行用户空间的第一个应用程序:/sbin/init

		init程序的类型:
			CentOS 5-:SysV init
				配置文件:/etc/inittab
			CentOS 6:Upstart
				配置文件:/etc/inittab
					/etc/init/*.conf
			CentOS 7:Systemd
				配置文件:/usr/lib/systemd/system,/etc/systemd/system/
		
		ramdisk:
			Linux内核的特性之一:使用缓冲和缓存来加速对磁盘上的文件访问;
				ramdisk-->ramfs
				
				CentOS 5:initrd
					工具程序:mkinitrd
				CentOS 6,7: initramfs
					工具程序:dracut,mkinitrd
	
	系统初始化流程(内核级别):POST-->BootSequence(BIOS)-->Bootloaser(MBR)-->Kernel(ramdisk)-->rootfs(readonly)-->/sbin/init()

/sbin/init:
	CentOS 5:SysV init
		运行级别:为了系统的运行或维护等目的而设定的机制;
			0-6:7各级别:
				0:关机,shutdown
				1:单用户模式(single user),root用户,无须认证;维护模式;
				2:多用户模式(multi user),会启动网络功能,但不会启动NFS;维护模式;
				3:多用户模式(multi user),完全功能模式;文本界面;		
                  4.预留级别:目前无特别使用的目的,但习惯以同3级别功能使用;
                  5.多用户模式(multi user),完成功能模式,图形界面;
                  6.重启,reboot

              默认级别:3,5
              级别切换:init#
              级别查看:
                  who -r
                  runlevel

          配置文件:/etc/inittab
              每行定义一种action以及与之对应的process
                  id:runlevels:action:process
                      id:一个任务的标识符;
                      runlevels:在哪些级别启动此任务:#,###,也可以为空,表示所有级别;
                      action:在什么条件下启动此任务;
                      process:任务;
                  action:
                      wait:等待切换至此任务所在的级别时执行一次;
                      respawn:一旦此任务终止,就自动重新启动之;
                      initdefault:设定默认运行级别;此时,process省略;
                      sysinit:设定系统初始化方式,此处一般为指定/etc/rc.d/rc.sysinit脚本;
                  例如:
                      id:3:initdefault
                      sl::sysinit:/etc/rc.d/rc.sysinit

                      l0:0:wait:/etc/rc.d/rc 0
                      l1:1:wait:/etc/rc.d/rc 1
                      ………………………………
                      l6:6:wait:/etc/rc.d/rc 6
                          意味着去启动或关闭/etc/rc.d/rc3.d/目录下的服务脚本所控制服务;
                              K*:要停止的服务;K##*,优先级,数字越小,越是优先关闭;依赖的服务先关闭,而后关闭被依赖的;
                              S*:要启动的服务;S##*,优先级,数字越小,越是优先启动;被依赖的服务先启动,而依赖的服务后启动;

                          rc脚本:接收一个运行级别数字为参数:
                              脚本框架:
                                  for srv in /etc/rc.d/rc#.d/K*;do
                                      $srv stop
                                  done

                                  for srv in /etc/rc.d/rc#.d/S*;do
                                      $srv start
                                  done

                          /etc/init.d/*(/etc/rc.d/init.d/*)脚本执行方式:
                              # /etc/init.d/SRV_SCRIPT {start|stop|restart|status}
                              #service SRV_SCRIPT {start|stop|restart|status}

                          chkconfig命令:管控/etc/init.d/每个服务脚本在各级别下的启动或关闭状态;
                              查看:chkcofnig --list [name]
                              添加:chkconfig --add name
                                  能被添加的服务的脚本定义格式之一:
                                      #!/bin/bash
                                      #
                                      # chkconfig: LLL NN NN
                                      # description:
                              删除:chkconfig --del name
                              修改指定的链接类型:
                               chkconfig [--level LEVELS ] name <on|off|reset>
                                  --level LEVELS:指定要控制的级别;默认为2345;

                      注意:正常级别下,最后启动的一个服务S99lcoal没有链接至/etc/init.d下的某脚本,而是链接至了/etc/rc.d/rc.local(/etc/rc.local)脚本;因此,不便或不需写为服务脚本呢的程序期望能开机自动运行时,直接放置于此脚本文件中即可。

              tty1:2345:respawn:/usr/sbin/mingetty tty1
              …… ……
              tty6:2345:respawn:/usr/sbin/mingetty tty6
                  (1) mingetty会调用login程序;
                  (2) 打开虚拟终端的程序除了mingetty之外,还有诸如getty等;
	
系统初始化脚本:/etc/rc.d/rc.sysinit
	(1) 设置主机名;
	(2) 设置欢迎信息;
	(3) 激活udev和selinux
	(4) 挂载/etc/fstab文件中定义的所有文件系统;
	(5) 检测根文件系统,并以读写方式重新挂载根文件系统;
	(6) 设置系统时钟;
	(7) 根据/etc/sysctl.conf文件来设置内核参数;
	(8) 激活lvm及软raid设备;
	(9) 激活swap设备;
	(10) 加载额外设备的驱动程序;
	(11) 清理操作;

	系统启动流程结束。。。。。
	
	以下是用户空间的启动流程:/sbin/init(/etc/inittab)
		设置默认运行级别-->运行系统初始化脚本,完成系统初始化-->关闭对应级别下需要停止的服务,启动对应级别下需要开启的服务-->设置登录终端[-->启动图形终端]
	
CentOS6:
	init程序:upstart,但依然为/sbin/init,其配置文件:
		/etc/init/*.conf,/etc/inittab(仅用于定义默认运行级别)
		
			注意:*.conf为upstart风格的配置文件;
			
			rcS.conf
			rc.conf
			start-ttys.conf

CentOS 7:
	init程序:systemd,配置文件:/usr/lib/systemd/system/*,/etc/systemd/system/*
	完全兼容SysV脚本机制;因此,service命令依然可用;不过,建议使用systemctl 命令来控制服务;
		# systemctl {start|stop|status|restart} name[.service]


CenOS 6 启动流程:
	POST --> Boot Sequence(BIOS) --> Boot loader (MBR) --> Kernel(ramdisk) --> rootfs -->switchroot --> /sbin/init/ --> (/etc/inittab,/etc/init/*.conf) --> 设定默认运行级别 --> 系统初始化脚本 --> 关闭或启动对应级别下的服务 --> 启动终端

GRUB(Boot Loader):
	grub:Grand Unified Bootloader
		grub 0.x:grub legacy
		grub 1.x:grub2
	
	grub legacy:
		stage1:mbr
		stage1_5:mbr之后的扇区,让stage1中的bootloader能识别stage2所在的分区上的文件系统;
		stage2:磁盘分区(/boot/grub)
		
		配置文件:/boot/grub/grub.conf<-- /etc/grub.conf
		
		stage2及内核等通常放置于一个基本磁盘分区:
			功用:
				(1)提供菜单那,并提供交互式接口
					e:编辑模式,用于编辑菜单;
					c:命令模式,交互式接口;
				(2)加载用户选择的内核或操作系统
					允许传递参数给内核
					可隐藏此菜单
				(3)为菜单提供了保护机制
					为编辑菜单进行认证
					为启用内核或操作系统进行认证
		
		grub的命令接口:
			help:获取帮助列表
			help KEYWORD:详细帮助信息
			find (hd#,#)/PATH/TO/SOMEFILE;
			root (hd#,#)
			kernel /PATH/TO/KERNEL_FILE:设定本次启动时用到的内核文件;额外还可以添加许多内核支持使用的cmdline参数;
				例如:init=/path/to/init,selinux=0
			initrd /PATH/TO/INITRAMFS_FILE:设定为选定的内核提供额外文件的ramdisk;
			boot:引导启动选定的内核;
			
			手动在grub命令行接口启动系统:
				grub> root (hd#,#)
				grub> kernel /vmlinuz-VERSION-RELEASE ro root=/dev/DEVICE
				grub> initrd /initramfs-VERSION-RELEASE.img
				grub> boot
			
			配置文件:/boot/grub/grub.conf
				配置项:
					default=#:设定默认启动菜单项;落单想(title)编号从0开始;
					timeout=0;指定菜单项等待选项选择的时长;
					splashimage=(hd#,#)/PATH/TO/XPM_PIC_FILE:指明菜单背景图片文件路径;
					hiddenmenu:隐藏菜单;
					password [--md5] STRING:菜单编辑认证;
					title TITLE:定义菜单项“标题”,可出现多次,用于引导不同的内核和操作系统。
						root (hd#,#):grub查找stage2及kernel文件所在设备分区:为grub的“根”;
						kernel /PATH/TO/VMLINUZ_FILE [PARAMETERS]:启动的内核
						initrd /PATH/TO/INITRAMFS_FILE:内核匹配的ramfs文件;
						password [--md5] STRING:启动选定的内核或操作系统时进行认证;
				
				grub-md5-crypt命令:可以生成密文串,替换内核启动时查找的引导菜单文件grub.conf中定义的密码(如果启动内核时有需要安全认证,可以在grub.conf定义启动认证密码)
				
			如果grub的配置文件丢失,启动时不会显示菜单,只会显示一个grub命令行提示符给我们,所以grub依赖配置文件显示菜单,并决定接下来如何操作。可以在grub命令行手动输入root kernel initrd boot 启动,启动完之后再手动编辑grub.conf配置文件就可以了。
			如果是grub中的文件损坏,比如;不小心使用dd命令覆盖了MBR,此时bootloader坏掉了,位于此硬盘上的操作系统都将无法引导。此时需要修复bootloader;可以进入救援模式或者把硬盘拆下来,放到其他主机上,使用grub命令重新安装grub并对grub进行修复
				
			进入单用户模式:
				(1)编辑grub菜单(选定要编辑的title,而后使用e命令);
				(2)在选定的kernel后附加1,s,S或single都可以;
				(3)在kernel所在行,键入"b"命令;
			
			安装grub:centos6:grub-install  centos7:grub2-install
				(1)grub-install
					grub-install --root-directory=ROOT /dev/DISK
				(2) grub
					grub> root(hd#,#)
					grub> setup (hd#)
			
			1.添加一块新的硬盘
			2.分区
				fdisk /dev/sdc
					partition1:100M  # /boot
					partition2:2G
					partition3:2G  # /-->/mnt/sysroot
				
				cat /proc/partitions
				partx -a /dev/sdc
				
				mke2fs -t ext4 /dev/sdc3 # 挂载为ext1-4类型的文件系统都可以
				mkswap /dev/sdc2
				
			3.挂载分区:
				mkdir /mnt/boot /mnt/sysroot
                
				mount /dev/sdc1 /mnt/boot
                  mount /dev/sdc3 /mnt/sysroot
                  
			4. cp grub必要的文件:
				mkdir /mnt/grub2
				mkdir bin dev etc home lib lib64 proc sbin sys tmp usr var
				cp -a /boot/grub /mnt/
				cp /boot/grub2/grub.cfg /mnt/boot/grub2
				cp /boot/initramfs-3.10.0-1160.21.1.el7.x86_64.img /mnt/boot/initramfs.img
				cp /boot/vmlinuz-3.10.0-1160.21.1.el7.x86_64 /mnt/boot/vmlinuz

            5. cp bash二进制文件及其依赖的动态库
                ldd /bin/bash
                cp /bin/bash /mnt/sysroot/bin
                cp /lib64/libtinfo.so.5 /mnt/sysroot/lib64/
                cp /lib64/libdl.so.2 /mnt/sysroot/lib64/
                cp /lib64/libc.so.6 /mnt/sysroot/lib64/
			   cp /lib64/ld-linux-x86-64.so.2 /mnt/sysroot/lib64/
		   6.切换根
		   	chroot /mnt/sysroot 
		   	进入到我们制作的根
				

CentOS7 grub安装及损坏修复:https://blog.csdn.net/weixin_36383252/article/details/117014905

CentOS启动流程:POST-->Bootloader(BIOS,MBR)-->Kernel(initrd)-->rootfs-->switch_root-->/sbin/init
	root (hd0,0)
	kernel
	initrd

ldd命令:
	- print shared library dependencies
	ldd [OPTION]... FILE...

内核设计体系,单内核、微内核
	Linux:单内核设计,但充分借鉴了微内核体系的设计的优点;为内核引入了模块化机制;
		内核的组成部分:
			kernel:内核核心,一般为bzimage,通常位于/boot目录,名称为vmlinuz-VERSION-release;
			kernel object:内核对象,即内核模块,一般放置于/lib/modules/VERSION-release/
				内核模块与内核核心版本一定要严格匹配;

				[ ]:N
				[M]:Module
				[*]:Y,编译进内核核心
				
				内核:动态装载和卸载;
			
			ramdisk:辅助性文件,并非必须,这取决于内核是否能直接驱动rootfs所在的设备;
				目标设备驱动,例如SCSI设备的驱动;
				逻辑设备驱动,例如LVM设备的驱动;
				文件系统:例如xfs文件系统;
				
				ramdisk:是一个简装版的根文件系统;
	
	内核信息获取:
		uname 命令:
			- print system information
			
			格式:uname [OPTION] ...
				-r:内核的release(发行)号
				-n:主机名
		
		模块信息获取:
			lsmod命令:
				- Show the status of modules in the Linux Kernel
				
				显示的内核来自于/proc/modules
			
			modporbe命令:
				- Add and remove modules from the Linux Kernel 
				
				格式:modprobe [-r] module_name
					模块的动态装载:modprobe modprobe_name
					动态卸载:modprobe -r module_name
			
			depmod 命令:
				- Generate modules.dep and map files.
				内核模块依赖关系文件的生成工具;
			
			模块的装载和卸载的另一组命令:
				insmod命令:
					insmod [filename] [module options...]
						filename:模块文件的文件路径;
				
				rmmod命令:
					rmmod [module_name] [module_name]
				depmod
		
		ramdisk文件的管理:
			(1) mkinitrd命令  centos5,6,7皆可用
				为当前使用中的内核重新制作ramdisk文件:
					# mkinitrd [OPTION...] [<initrd-image>] <kernel-version>
						--with=<module>:除了默认的模块之外需要装载至initramfs中的模块;
						--preload=<module>:initramfs所提供的模块需要预先装载的模块;
					示例:~]# mkinitrd /boot/initramfs-$(uname-r).img $(uname -r)
					
			(2) dracut命令 centos6+
				-low-level tool for generating an initramfs image
					# gracut [OPTION...] [<image> [<kernel version>]]
						示例:~] # dracut /boot/initramfs-$(uname -r).img $(uname -r) 

		内核信息输出的伪文件系统:不能使用vim命令编辑修改,需要使用sysctl和echo覆盖重定向
			/proc:内核状态和统计信息的输出接口;同时,还提供一个配置接口,/proc/sys;
				参数:
					只读:信息输出;例如/proc/#/*
					可写:可接受用户指定一个“新值”来实现对内核某功能或特性的配置;/proc/sys
						
						/proc/sys:
							net/ipv4/ip_forward相当于 net.ipv4.ip_forward
						(1)sysctl命令
							专用于查看或设定/proc/sys目录下参数的值;
								sysctl [options] [variable[=value]]
									查看:
										# sysctl -a 查看所有的内核参数
										# sysctl variable # 查看某一个内核参数
											sysctl net.ipv4.ip_forward
									修改其值:
										# sysctl -w variable=value
										sysctl -w kernel.hostname=www.chaozhang.com
						(2) 文件系统命令(cat,echo)
							查看:
								# cat /proc/sys/PATH/TO/SOME_KERNEL_FILE
							设定:
								# echo "VALUE" > /proc/sys/PATH/TO/SOME_KERNEL_FILE
						注意:上述两种方式的设定仅当运行内核有效;如果想长期有效,可以修改配置文件:
						
						(3)配置文件:/etc/sysctl.conf,/etc/sysctl.d/*.conf
							立即生效的方式:sysctl -p [/PATH/TO/CONFIG_FILE]
					内核参数:
						net.ipv4.ip_forward:核心转发;
						vm.drop_caches:
						kernel.hostname:主机名
						net.ipv4.icmp_echo_ignore_all:忽略所有的ping操作;
			/sys:
				sysfs:输出内核识别出的各硬件设备的相关属性信息,也有内核对硬件特性的可设置参数,即可定制硬件设备的工作特性;
				udev:通过读取/sys目录下的硬件设备信息按需为各硬件设备创建设备文件;udev是用户空间程序;专用工具;devadmin,hotplug;
				udev为设备创建设备文件时,会读取其事先定义好的规则文件,一般在/etc/udev/rules.d/目录下,以及/usr/lib/udev/rules.d/目录下;

编译内核

程序包的编译安装:
	./configure:检查编译环境的依赖关系,并设定编译参数
	make:执行真正编译过程,它不是一个编译工具,是一个构建工具,它会调用各所需的编译工具,执行编译操作。
	make install:把编译好的各文件(程序)包括:二进制程序,库文件,帮助文档以及配置文件复制到对应的目录下,这个目录时我们在编译时指定的路径。

开源:
	源代码 --> 可执行格式
		发行版:以“通用”的目标;
	
前提:
	(1)准备好开发环境
	(2)获取目标主机上硬件设备的相关信息;
	(3)获取到目标主机胸痛功能的相关信息,例如要启用的文件系统;
	(4)获取内核源代码包:www.kernel.org
	
	准备开发环境:
		CentOS6.7:
			包组:
				Debelopment Tools
				Server Platform Development
		
		CentOS 7:
			包组:
				Debelopment Tools
				Server Platform Development
			
			依赖包:ncurses-devel
			
	获取目标主机上硬件设备的相关信息:
		CPU:
			1.cat /proc/cpuinfo  
			2.lscpu
			3.x86info -a # yum install -y x86info
		
		PCI设备:
			lspci
				-v
				-vv
			lsblk
		
		了解全部硬件设备信息:
			hal-device # centos 6有此命令,centos7没了   yum install -y hal
	
	内核编译过程:
		步骤:
			1. tar xf linux-3.10.67.tar.xz -C /usr/src  # 内核代码可以在www.kernel.org下载
			2.cd /usr/src
			3. ln -sv linux-3.10.67 linux
             4. cd linux
             5. make menuconfig # 进入图形界面,配置内核选项。 需要依赖4.9以上版本的gcc(c语言编译器)
             6. make [-j #] # 编译内核,-j可以根据自己电脑CPU的核心数启动其2倍数量的线程同时编译
             7. make modules_install # 安装内核模块
             8. make install # 安装内核
			
			重启系统,选择使用新内核
			
		screen 命令:
			打开screen:~]# screen
			拆除screen:Ctrl+a,松开按 d
			列出screen: screen -ls
			连接至screen: screen -r SCREEN_ID
			是关闭screen:exit
		
		(1)配置内核选项
			支持“更新”模式进行配置:在已有的.config文件的基础之上进行“修改”配置;
				(a)make config:基于命令行以遍历的方式去配置内核中可配置的每个选项;
				(b)make menuconfig:基于cureses的文本配置窗口;
				(c)make gconfig:基于GTK开发环境的窗口界面;包组“桌面平台开发”;
				(d) make xconfig:基于QT开发环境的窗口界面;
			支持“全新配置”模式进行配置:
				(a)make defconfig:基于内核为目标平台提供的“默认”配置为模板进行配置;
				(b)make allnoconfig: 所有选项均为“no”;
		(2) 编译
			(a)多线程编译:make [-j #]
			(b)编译内核中的一部分代码:
				(i)只编译某子目录中的相关代码:
					# cd /usr/src/linux
					# make path/to/dir
						比如: 
                                cd /usr/src/linux 
                                make drivers/net/wireless/
                           
				  (ii) 只编译一个特定的模块
				  		# cd /usr/src/linux
				  		# make path/to/dir/file.ko
			   (c) 如何交叉编译:
			   		目标平台与当前编译操作所在的平台不同
			   		
			   		# make ARCH=arch_name
			   		要获取特定目标平台的使用帮助
			   			# make ARCH=arch_name help
			   	
		(3) 如何在执行过编译操作的内核源码树上做重新编译:
			事先清理操作:
				# make clean:清理编译生成的绝大多数文件,但会保留config,及编译外部模块所需要的文件;
				# make mrproper:清理编译生成的所有文件,包括配置生成的config文件及某些备份文件;
				# make disclean:相当于mrproper,额外清理各种patches以及编辑器备份文件;

CentOS系统安装

安装程序:
	anaconda
		bootloader-->kernel(rootfs)-->anaconda
		
		anaconda:
			tul:基于cureses的文本配置窗口
			gul:图形界面
		
		CentOS的安装过程启动流程:
			MBR:boot.cat
			Stage2:isolinux/isolinux.bin
				配置文件:isolinux/vmlinuz
				
				每个对应的菜单选项:
					加载内核:isolinux/vmlinuz
					向内核传递参数:append initrd=initrd.img
					
				装载根文件系统,并启动anaconda
					默认界面时图形界面:512MB+内存空间;
					若需要显式指定启动TUI接口:向启动内核传递一个参数"text"即可;
						ESC,
							boot:linux text
							
				注意:上述内容一般位于引导设别,例如可通过光盘、U盘或网络等;后续的anacona及其安装用到程序包等可以来自于程序包仓库,此仓库的位置可以为:
					本地光盘
					本地硬盘
					ftp server
					http server
					nfs server
					
					如果想手动指定安装仓库:
						ESC
							boot:linux method # 提醒用户选择安装方法

anaconda的工作过程:
	安装前配置阶段
		安装过程使用的语言
		键盘类型
		安装目标存储设备
			Basic Storage:本地磁盘
			Special Storage:本地磁盘
		设定主机名
		配置网络接口
		时区
		管理员密码
		设定分区方式及MBR的安装位置;
		创建一个普通用户;
		选定要安装的程序包;
		
	安装阶段
		在目标磁盘创建分区并执行格式化;
		将选定的程序包安装至目标位置;
		安装bootloader;

	首次启动	
		iptables
		selinux
		core dump # 核心转储,当内核在某一时刻崩溃时,能够将内存中的数据创建一个映像文件保存在磁盘上。内存小于2G做不了。
				
anaconda的配置方式:
	(1)交互式配置方式;
	(2)支持通过读取配置文件中事先定义好的配置项自动完成配置;遵循特定的语法格式,此文件即为kickstart文件;
	
安装引导选项:
	boot:
		text:文本安装方式
		method:手动指定使用的安装方法
		与网络相关的引导选项:
			ip=IPADDR
			netmask=MASK
			gateway=GW
			dns=DNS_SERVER_IP
		远程访问功能相关的引导选项:
			vnc
			vncpassword='PASSWORD'
		启动紧急救援模式:
			rescue
		装载额外驱动:
			dd
		
		www.redhat.com/docs,《Installation guide》


	ks:指明kickstart文件的位置;
		ks=
			DVD drive:ks=cdrom:/PATH/TO/KICKSTART_FILE
			Hard Drive:ks=hd:/DEVICE/PATH/TO/KICKSTART_FILE
			FTP Server:ks=ftp://HOST:[PORT]/PATH/TO/KICKSTART_FILE
			HTTPS_Server:ks=https://HOST[:PORT]/PATH/TO/KICKSTART_FILE
			
	kickstart文件的格式:
    	命令段:
    		指定各种安装前配置选项,如键盘类型等;
    	程序包段:
    		指明要安装程序包,以及包组,也包括不安装的程序包;
    			%packages
    			@group_name
    			package
    			-package
    			%end
		脚本段:
			%pre:安装前脚本
				运行环境:运行安装介质上的卫星Linux系统环境;
			%post:安装后脚本:
				运行环境:安装完成的系统;
		命令段中的必备命令:
			auth:认证方式配置
				auth --enableshadow --passalgo=sha512
			bootloader:定义bootloader的安装位置及相关配置
				bootloader --append=" crashkernel=auto rhgb quiet" --location=mbr --boot-drive=sda
			keyboard:设置键盘类型
				keyboard us
			lang:语言类型
				lang zh_CN.UFT-8
    		part:分区布局;
    			part /boot --fstype=ext4 --size=500
    			part pv.008002 --size=500
    		rootpw:管理员密码
    			rootpw --iscrypted XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    		timezone:时区
			   	timezone Asia/Shanghai
    		
            补充:分区相关的其他指令
            	clearpart:清除分区
            		clearpart --none --drivers=sda:清空磁盘分区;
            	volgroup:创建卷组
            		volgroup:myvg --pesize=4096 pv.008002
            	logvol:创建逻辑卷
            		logvol /home --fstype=ext4 --name=lv_home --vgname-mtvg --size=5120
			  
			   生成加密密码的方式:
			   		openssl passwd -1 -salt `openssl rand -hex 4`

		可选命令:
        	install OR upgrade:安装或升级
        	text:安装界面类型,text为tul,默认为GUI。
            network:配置网络接口
            	network --onboot yes --device eth0 --bootproto dhcp --noipv6
            firewall:防火墙
            	firewall --disabled
            selinux:SELinux
            	selinux --disabled
		   halt、poweroff或reboot:安装完成之后的行为;
		   repo:指明安装时使用的repository;
		   		repo --name="CentOS" --baseurl=cdrom:sr0 --cost=100
		   url:指明安装时使用的repository,但为url格式;
		   		url --url=http://192.16.0.1/cobbler/ks_mirror/CentOS-6.7-x86_64/
		   
		   系统安装完成之后禁用防火墙:
		   		centos6:
		   			# service iptables stop
		   			# chkconfig iptables off
		   		centos7:
		   			# systemctl stop firewalld.service
		   			# systemctl disable firewalld.service
		   系统安装完成后禁用SElinux:
		   		编辑/etc/sysconfig/selinux或/etc/selinux/config文件,修改SELINUX参数的值为下面其中之一:
		   			permissive
		   			disabled
		   		立即生效:
		   			# getenforce 
		   			# setenforce 0
		  
		  定制kickstart文件:
		  	# yum install system-config-kickstart
		  	# system-config-kickstart
		  	
		  	检查语法错误:
		  		# ksvalidator
	创建光盘镜像:
		mkisofs -R -j -T -v --no-emul-boot --boot-into-table -V "CentOS 6 x86_64 boot" -c isolinux/boot.cat -b isolinux/isolinux.bin -o /root/boot.iso myboot/

按ESC ,进入命令行,和上图一样的:

原文地址:https://www.cnblogs.com/zhangchaocoming/p/14855565.html