安装过程这个很多人觉得能安装即可,没必要去理解是怎么安装的,但是本人之前由于吃过这个亏(面试的时候),所以还是写下来,万一大家碰到了,可以有个参考。
我们首先看一下CentOS安装光盘的目录:
我们解释一下这些目录的作用(文件没有什么作用,都是一些KEY文件,GPL信息等等)
EFI #关于EFI引导使用的一些文件 images #安装镜像install.img和一些关于pxe启动的文件 isolinux #引导文件的目录,包括vmlinuz,initrd.img,isolinux.bin等等 Packages #常用的rpm包 repodata #yum的索引源,还有一些说明文件 |
我们这里主要关心images和isolinux目录,EFI目录仅仅是作于EFI引导,所以没什么好深究的,其他两目录也都是附加的。
images目录的内容:
pxeboot目录:
install.img文件,提供更多的命令、更完整的anaconda程序在里面。 vmlinuz是压缩内核,引导程序启动后第一件事就是将内核启动; initrd.img则是为内核提供了一些额外的驱动程序和一个模拟的文件系统环境。 efi的还是关于efi引导的,忽略即可。 |
2.isolinux目录:
这个目录的文件比较多:
isolinux.bin #引导程序(可以理解为bootloader),BIOS加电自检后就会启动这个程序 isolinux.cfg #引导程序的配置文件 vmlinuz #压缩的内核,isolinux.bin启动后就会启动vmlinuz和initrd.img initrd.img #提供驱动程序以及为内核提供基本的系统环境,里面就是一个小文件系统,其中有一个init程序供内核调用,用来启动anaconda grub.conf #提供grub的样例配置文件,安装的时候没有启动grub所以用不到 vesamenu.c32 #选择菜单,由isolinux启动 bootmsg #一行文字映射 splash.jpg #背景图片 |
大家发现了,pxeboot和isolinux目录中都包含有vmlinuz和initrd.img,这两个目录中的文件其实是一模一样的。
抛去重复的,我们真正需要关心的其实只有下面这几个:
①isolinux.bin ②isolinux.cfg ③vmlinuz ④initrd.img ⑤install.img ⑥vesamenu.c32 |
大致的安装流程是这样的:
插入光盘并开机后,计算机首先会自检(POST),自检没有问题后,就会启动BIOS,BIOS根据启动顺序找到光盘并查找BOOTLoader,此时的BOOTLoader就是isolinux.bin,isolinux.bin根据isolinux.cfg提供一个菜单界面(启动vesamenu.c32这个程序)让用户选择操作,看一下isolinux.cfg文件
default vesamenu.c32 #提供菜单程序功能,如果不需要交互模式的话可以略过 #prompt 1 #是否进入交互模式,1是,0否 timeout 600 #超时时长 display boot.msg #显示boot.msg文件,没啥用,可以忽略 menu background splash.jpg #这个显示一个背景文件,isolinux目录中可以看见splash.jpg menu title Welcome to CentOS 6.5! #打出一个Welcome to CentOS 6.5! menu color border 0 #ffffffff #00000000 menu color sel 7 #ffffffff #ff000000 menu color title 0 #ffffffff #00000000 menu color tabmsg 0 #ffffffff #00000000 menu color unsel 0 #ffffffff #00000000 menu color hotsel 0 #ff000000 #ffffffff menu color hotkey 7 #ffffffff #ff000000 menu color scrollbar 0 #ffffffff #00000000 这些都是颜色配置 label linux #这个是启动标签 menu label ^Install or upgrade an existing system #安装或升级系统 menu default #默认启动标签 kernel vmlinuz #启动内核 append initrd=initrd.img #启动initrd label vesa menu label Install system with ^basic video driver #安装基本的设备 kernel vmlinuz #启动内核 append initrd=initrd.img xdriver=vesa nomodeset #启动initrd并且安装基本设备参数 label rescue menu label ^Rescue installed system #救援模式 kernel vmlinuz append initrd=initrd.img rescue #救援模式启动 label local menu label Boot from ^local drive localboot 0xffff label memtest86 menu label ^Memory test kernel memtest append - |
大家可以将上面的menu label行对比一下下面的安装图以及splash.jpg图:
安装图:
背景图(splash.jpg):
我们可以看出来,其实isolinux.bin读取isolinux.cfg文件并启动vesamenu.c32,将背景图加载,然后把提供选项菜单。用户选择安装菜单后,isolinux根据选择的信息(我们这里是第一项):
label linux #是启动标签 menu label ^Install or upgrade an existing system #安装或升级系统 menu default #默认启动标签 kernel vmlinuz #启动内核 append initrd=initrd.img #启动initrd
启动内核,内核将initrd(initrd的作用就是在内存中虚拟成为一个基本的文件系统,里面含有一些命令和驱动程序等等)展开并挂载,然后启动其中的一个基本的anaconda程序,并启动/sbin/loader程序加载install.img,install.img提供里面有更完整的anaconda程序、比initrd.img更完整的命令、库文件等等。之后anaconda根据kickstart文件进行安装。
-------------------------------------------------------------------------------------------------------
自动安装:
上面介绍了,anaconda可以根据kickstart配置文件实现系统自动的安装。接下来我们就来制作一个镜像让其自动安装:
1、需要准备的文件有:
isolinux.bin | 引导程序 |
isolinux.cfg | 引导程序的配置文件,比如告诉引导程序启动内核、initrd.img的时候传递什么参数 |
vmlinuz | 启动的内核 |
initrd.img | 提供一个最最基本的文件系统。这个文件系统里面有驱动模块、网络配置指令 |
kickstart文件 | 安装程序的配置文件 |
vesamenu.c32 | 负责提供选择安装方法 |
需要的大概就是这几个,大家可以发现没有install.img这个文件。因为这个文件完全可以等需要调用的时候再从网络上下载(默认只需要isolinux.bin根据isolinux.cfg引导vmlinuz和initrd.img,之后启动anaconda并根据kickstart文件下载更完整的install.img即可)。
创建一个单独的目录,用来制作iso文件:
mkdir /createiso
将光盘挂载到/mnt目录上:
[root@localhost createiso]# mount /dev/cdrom /mnt/ mount: block device /dev/sr0 is write-protected, mounting read-only [root@localhost createiso]#
开始制作,总体流程为:
1、提供kickstart文件到createiso目录并命名为ks.cfg:大家使用vim编辑器就可以:
[root@localhost createiso]# pwd /createiso [root@localhost createiso]# ls -l ks.cfg -rw-r--r-- 1 root root 2293 Nov 20 04:10 ks.cfg [root@localhost createiso]#
文件内容:
#platform=x86, AMD64, or Intel EM64T #平台为PC平台 #version=DEVEL # Firewall configuration firewall --disabled #关闭防火墙 # Install OS instead of upgrade install #执行安装 # Use network installation url --url=http://mirrors.aliyun.com/centos/6/os/x86_64/ #安装树,我这里指向了阿里的镜像站 repo --name="CentOS" --baseurl=http://mirrors.aliyun.com/centos/6/os/x86_64/ #安装源,我指向了阿里云镜像 # Root password rootpw --iscrypted $1$Y3XLo9Ff$Efi6bHS1XJgWAblDr/ujP/ #root的密码,这里位加密的 # System authorization information auth --useshadow --passalgo=sha512 #认证 使用shadow文件 使用sha512加密 # Use text mode install text #使用文本模式安装 firstboot --disable #关闭第一次启动配置 # System keyboard keyboard us #键盘为us模式 # System language lang en_US #系统语言为en_US # SELinux configuration selinux --disabled #关闭selinux # Installation logging level logging --level=info #安装日志级别为info # Reboot after installation reboot #安装后重启 # System timezone timezone Asia/Shanghai #时区为亚洲/上海 # Network information network --bootproto=dhcp onboot=on #启动网络,dhcp协议获取IP # System bootloader configuration bootloader --append="crashkernel=auto rhgb rhgb quiet quiet" --location=mbr --driveorder="sda" #追加给bootloader参数,并且安装在本地sda磁盘的sda中的mbr # Partition clearing information zerombr #清空MBR信息 clearpart --all #删除所有分区 # Disk partitioning information #下面的是分区 part /boot --fstype="ext4" --size=200 part pv.008002 --grow --size=61440 volgroup VolGroup --pesize=4096 pv.008002 logvol /home --fstype=ext4 --name=lv_home --vgname=VolGroup --grow --size=10000 logvol / --fstype=ext4 --name=lv_root --vgname=VolGroup --grow --size=1024 --maxsize=20000 logvol swap --name=lv_swap --vgname=VolGroup --grow --size=1024 --maxsize=1024 %packages #下面的都是选择的安装的包 @base @compat-libraries @console-internet @core @development @kde-desktop @office-suite @server-platform-devel @server-policy @workstation-policy device-mapper-persistent-data git xsettings-kde -aic94xx-firmware -b43-fwcutter -bfa-firmware -biosdevname -bridge-utils -cpuspeed -dmraid -dosfstools -fprintd-pam -hunspell-en -ipw2100-firmware -ipw2200-firmware -ivtv-firmware -iwl100-firmware -iwl1000-firmware -iwl3945-firmware -iwl4965-firmware -iwl5000-firmware -iwl5150-firmware -iwl6000-firmware -iwl6000g2a-firmware -iwl6050-firmware -kexec-tools -man-pages -man-pages-overrides -mdadm -microcode_ctl -pcmciautils -pinfo -pm-utils -ql2100-firmware -ql2200-firmware -ql23xx-firmware -ql2400-firmware -ql2500-firmware -rng-tools -rt61pci-firmware -rt73usb-firmware -smartmontools -sysstat -system-config-firewall-tui -system-config-network-tui -usbutils -vconfig -virt-what -wireless-tools -words -zd1211-firmware %end
2、在createiso目录下创建一个isolinux目录
mkdir /createiso/isolinux
3、提供isolinux.bin及isolinux.cfg配置文件到isolinux目录:
[root@localhost createiso]# cp /mnt/isolinux/isolinux.bin ./isolinux [root@localhost createiso]# ls isolinux isolinux.bin [root@localhost createiso]# echo "default vesamenu.c32 > prompt 1 > timeout 1 > label linux > menu label ^Install or upgrade an existing system > menu default > kernel vmlinuz > append initrd=initrd.img ks=cdrom:/ks.cfg" >isolinux/isolinux.cfg [root@localhost createiso]# ls isolinux/ isolinux.bin isolinux.cfg
isolinux.cfg配置文件:
default vesamenu.c32 prompt 1 timeout 1 label linux menu label ^Install or upgrade an existing system menu default kernel vmlinuz append initrd=initrd.img ks=cdrom:/ks.cfg #指定kickstart文件给initrd.img,自动安装必须的文件
4、提供vesamenu.c32、vmlinuz、initrd.img到isolinux目录:
[root@localhost createiso]# cp -f /mnt/isolinux/{vesamenu.c32,vmlinuz,initrd.img} ./isolinux [root@localhost createiso]# ls isolinux/ initrd.img isolinux.bin isolinux.cfg vesamenu.c32 vmlinuz [root@localhost createiso]#
5.创建光盘镜像文件,各位直接复制我的命令即可,比较长:
mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "Centos" -b isolinux/isolinux.bin -o /tmp/centos-test.iso /createiso
[root@localhost createiso]# mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "Centos" -b isolinux/isolinux.bin -o /tmp/centos-test.iso /createiso I: -input-charset not specified, using utf-8 (detected in locale settings) genisoimage 1.1.9 (Linux) Scanning /createiso Scanning /createiso/isolinux Writing: Initial Padblock Start Block 0 Done with: Initial Padblock Block(s) 16 Writing: Primary Volume Descriptor Start Block 16 Done with: Primary Volume Descriptor Block(s) 1 Writing: Eltorito Volume Descriptor Start Block 17 Size of boot image is 4 sectors -> No emulation Done with: Eltorito Volume Descriptor Block(s) 1 Writing: Joliet Volume Descriptor Start Block 18 Done with: Joliet Volume Descriptor Block(s) 1 Writing: End Volume Descriptor Start Block 19 Done with: End Volume Descriptor Block(s) 1 Writing: Version block Start Block 20 Done with: Version block Block(s) 1 Writing: Path table Start Block 21 Done with: Path table Block(s) 4 Writing: Joliet path table Start Block 25 Done with: Joliet path table Block(s) 4 Writing: Directory tree Start Block 29 Done with: Directory tree Block(s) 2 Writing: Joliet directory tree Start Block 31 Done with: Joliet directory tree Block(s) 2 Writing: Directory tree cleanup Start Block 33 Done with: Directory tree cleanup Block(s) 0 Writing: Extension record Start Block 33 Done with: Extension record Block(s) 1 Writing: The File(s) Start Block 34 26.93% done, estimate finish Fri Nov 20 04:24:40 2015 53.76% done, estimate finish Fri Nov 20 04:24:40 2015 80.68% done, estimate finish Fri Nov 20 04:24:40 2015 Total translation table size: 3823 Total rockridge attributes bytes: 1120 Total directory bytes: 2782 Path table size(bytes): 26 Done with: The File(s) Block(s) 18420 Writing: Ending Padblock Start Block 18454 Done with: Ending Padblock Block(s) 150 Max brk space used 0 18604 extents written (36 MB) [root@localhost createiso]# ls /tmp/ centos-test.iso yum.log [root@localhost createiso]#
保存到/tmp下了,命名为centos-test.iso,下载来就可以安装了。