• 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 ,进入命令行,和上图一样的:

  • 相关阅读:
    2017《Java技术》预备作业 计科1501 杨欣蕊
    Java技术预备作业02杨欣蕊
    系统无法从光盘启动
    动态数组ArrayList的使用
    dbgrid数据显示和数据源不同
    异步任务判断服务器是否开启
    Java字符串格式化
    思科2960 监听端口设置
    64位win7安装jdk和eclipse
    Delphi临界区的使用
  • 原文地址:https://www.cnblogs.com/zhangchaocoming/p/14855565.html
Copyright © 2020-2023  润新知