运维自动化之系统部署
运维自动化发展历程及技术应用
什么是自动化的安装部署操作系统?
在工作中我们可能经常部署很多台主机,手工的一台一台的安装只适合主机非常少的情况,但大的互联网公司在一些特殊的日子要部署大量的主机,以应对要到来的特大流量访问。这时候我们就不能,一台一台的安装主机了,一是效率太慢,二是太累,三是费时间。基于这个情况我们可以自动化的一起部署很多的主机,而不用我们人工一台一台的去安装部署,节约了大量的时间。
centos 6的启动流程
1.POST开机加电自检
2.MBR 读取硬盘mbr引导的前446字节,属于grub的stage1第一阶段
3.进入grub的stage1.5阶段,加载/boot分区所在的文件系统驱动
4.进入grub的stage2阶段,关键的文件已经在/boot/grub目录里面了,关键的文件 有/boot/grub.grub.conf文件,文件里面kernel /vmlinuz root=/dev/sda2,定义了内核文件所在的位置
5.加载vmlinuz内核,完成以后找/根目录,想要加载根文件系统,需要识别根所在的文件系统驱动,配合/boot/目录里面两个重要的文件,一个是vmlinuz内核文件和initramfs驱动文件完成加载根文件系统
6.加载完成根文件系统以后,启动根下面的第一个进程/sbin/init,这个进程要读取/etc/inittab配置文件,决定后续加载的一些脚本的启动顺序,也定义了运行模式
7.运行第一个初始化脚本/etc/rc.d/rc.sysinit这个是真正的os初始化脚本,任何根据/etc/inittab配置文件默认模式运行相应的/etc/rc.d/rc*.d 里面的脚本,当然里面的脚本都是软链接,真正的脚本在/etc/rc.d/init.d里面,在/etc/rc.d/rc*.d目录下是以K和S开头的文件,执行相应模式关闭或开启的服务
8.无论哪种模式运行都要运行/etc/rc.local
9.最后执行/bin/login程序,等待用户的登录
实现半自动话安装过程:
在自动化安装系统之前我们可以先实现半自动化的安装,例如将系统放到U盘或者光盘中,这样我们插到主机上就可以实现自动化的安装,当然只适合小范围的安装
系统的安装程序叫anaconda
在安装完成操作系统以后会在root的目录里面自动出现一个文件anaconda-ks.cfg,这个文件就是anaconda安装向导在安装过程中生成的一个配置文件。
安装部署系统的时候在启动界面的一些基础设置
当我们安装一个新的操作系统的时候由于硬盘的MBR是空的系统任务硬盘不能引导所有自动切换到光盘引导
- 第一项为正常启动
- 第二项是加载最基本的显卡驱动
- 第三项是救援模式
- 第四项是直接在硬盘启动
- 第五项是检查内存
按esc会出现一个boot界面:
如果输入linux rescue/rescue就会进入救援模式:
如果输入linux text为字符界面最小化安装界面,只输入linux命令就是正常安装。
cat /misc/cd/isolinux/isolinux.cfg中有相关的救援模式、正常模式、及本机菜单等信息。
label linux 正常模式光盘安装 menu label ^Install CentOS 7 kernel vmlinuz append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 quiet label rescue 救援模式信息 menu indent count 5 menu label ^Rescue a CentOS system text help If the system will not boot, this lets you access files and edit config files to try to get it booting again. endtext kernel vmlinuz append initrd=initrd.img inst.stage2=hd:LABEL=CentOS\x207\x20x86_64 rescue quiet label local 本地菜单 menu label Boot from ^local drive localboot 0xffff
安装程序的启动流程
1.MBR 放在了光盘的isolinux目录下的boot.cat文件里面
2. stage2阶段放在了isolinux目录下的isolinux.bin 文件里面,相当于硬盘里面的/boot/grub/目录下的文件
3. 配置文件在光盘的isolinux目录的isolinux.cfg文件,定义了加载内核文件的路径
我们来说一下centos6系统半自动化安装过程,通过光盘挂载到网络进行安装:
新加的光盘网络适配器需选择NAT模式:
在一个已经安装好的系统(centos6)将光盘挂载到网上:
第一步:cd /var/www/html
第二步:mkdir -pv centos/{6,7}/os/x86_64/
第三步:mount /dev/sr0 /centos/6/os/x86_64/ 挂载的路径就可以当yum源用来当做光盘做引导,下图为挂载后的文件信息。
第四步:制作应答文件,需要我们安装工具 :
由于制作应答文件的是一个图形化工具,所以要到图形化桌面执行
启动前在最好调一下分辨率
1)yum install system-config-kickstart
system-config-kickstart 输入,进去之后注意调整分辨率,然后进行设置应答文件。
2)输入完密码,对勾去掉,密码就可见,在后面配置应答文件时,可以重新修改密码;下面是安装完之后重启,选择的第二个对勾是以最小化文本安装。
3)选择http模式安装,并将挂载在网上的光盘路径写上。
4)给grub加入密码,并且可以给kerbel加内核参数:max_loop=100 selinux=0
5)对磁盘进行格式化和分区:
6)设置网卡名称:
7)禁用selinux和防火墙
8)不安装图形界面
9)选择基本安装
10)将其配置文件保存到root目录:
11)应答文件信息做完,以下是应答文件信息,vim ks.cfg 里边的地区,和开机后实行的对称秘钥脚本。
[root@centos6~]#cat ks.cfg #platform=x86, AMD64, or Intel EM64T #version=DEVEL # Firewall configuration firewall --disabled # Install OS instead of upgrade install # Use network installation url --url="http://192.168.34.100/centos/6/os/x86_64" 指定的挂载网络光盘路径 # Root password rootpw --plaintext centos # System authorization information auth --useshadow --passalgo=sha512 # Use text mode install text # System keyboard keyboard us # System language lang en_US # SELinux configuration selinux --disabled 禁用的selinux # Do not configure the X Window System skipx # Installation logging level logging --level=info # Reboot after installation reboot # System timezone timezone Asia/Shanghai 将地址写成亚洲/上海 # Network information network --bootproto=dhcp --device=eth0 --onboot=on # System bootloader configuration bootloader --append="max_loop=100 selinux=0" --location=mbr --password="centos" # Clear the Master Boot Record zerombr # Partition clearing information clearpart --all --initlabel # Disk partitioning information part /boot --fstype="ext4" --size=500 part / --fstype="ext4" --size=10000 part /home --fstype="ext4" --size=20000 part swap --fstype="swap" --size=1024 %post mkdir /etc/yum.repos.d/bak mv /etc/yum.repos.d/*.repo /etc/yum.repos.d/bak cat > /etc/yum.repos.d/base.repo << EOF [base] basurl=http://192.168.34.100/centos/6/os/x86_64 gpgckeck=0 EOF useradd wang echo centos |passwd --stdin wang mkdir /root/.ssh 生产公钥脚本 cat > /root/.ssh/authorized.keys << EOF 将已经安装好的centos6的id_rsa.pub公钥信息写入。 ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA5hEv1/BQLBftA/tK5h+cF+zop59zMlpsMpXdaww8j3zktwSywDHhJI1cpWHS+rbUD1BKnapSL3Lfvi7o03rFAauAECgFjrJkAHX53Q1eh2ORfMpScaSPQ78CALSQ3pWN6Elgs6xwAAIc2MUXyoG5TTOJ0PSekzKrTww5xHuNsitXgrKfD2dBIAWFk7vwekk4kvRLBT3rbG19fYc0cTv9u+b6+Xi8EhpwR+v4BAN3eE+CFvEIsZDrp0ul566B9NZBBUBe8EJkr+H/dPRA4PR5Hctyhd27uE9hQ70QzBGBuhrL+NKxi3hRTWuLWoSUs3pP99x9km02FjzDDVOHWS7MVQ== root@centos6.10.localdomain EOF chmod 700 /root/.ssh chmod 600 /root/.ssh/authorized.keys %end %packages @base %end
12)下来在已装好的centos6将应答文件放到当时挂载光盘的网上:
mkdir /var/www/html/ksdir/{6,7} 新建一个文件夹
mv ks6.cfg /var/www/html/ksdir/6/ks6_mini.cfg 将root下的应答文件放入到此目录文件下并起名叫ks6_mini.cfg
13)进入安装界面按esc,然后boot下输入内容,指定应答文件路径:直接回车就等待全部安装过程:
boot: linux ks=http://192.168.34.100/ksdir/6/ks6_mini.cfg ip=192.168.34.123 netmask=255.255.255.0 指定一个能临时连接外网的IP地址,获取外网挂载的应答文件
如果想安装图形界面,我们可以安装一个包组: yum groupinstall desktop 安装完之后就会有图形界面,上面的半自动化系统安装完成。
我们来说一下centos6半自动化安装过程,在centos6基础上进行安装:
之前做的centos6要一直将本地光盘挂载到网页上,保证能访问:
service httpd start
mount /dev/sr0 /var/www/html/centos/6/os/x86_64/
制作iso格式的应答文件准备工作:
[root@centos6~]#mkdir /data/iso
[root@centos6data]#cp -r /misc/cd/isolinux /data/iso
[root@centos6data]#cp /var/www/html/ksdir/6/ks6_mini.cfg /data/iso 将应答文件内容复制到iso文件中
[root@centos6iso]#mkdir ksdir 创建应答文件目录
[root@centos6iso]#mv ks6_mini.cfg ksdir/ 将应答文件放到此目录里
查看菜单里边的内容,修改isolinux.cfg应答文件内容:
[root@centos6iso]#tree
.
├── isolinux
│ ├── boot.cat
│ ├── boot.msg
│ ├── grub.conf
│ ├── initrd.img
│ ├── isolinux.bin
│ ├── isolinux.cfg 修改此配置文件里边的内容
│ ├── memtest
│ ├── splash.jpg
│ ├── TRANS.TBL
│ ├── vesamenu.c32
│ └── vmlinuz
└── ksdir
└── ks6_mini.cfg
vim isolinux/isolinux.cfg:修改配置文件内容
label Auto 实现自动化安装 menu label ^Auto Install an system menu default kernel vmlinuz append initrd=initrd.img ks=cdrom:/ksdir/ks6_mini.cfg 指定挂载在网上应答文件路径 label Manual 实现手动安装 menu label ^Manual Install an system menu default kernel vmlinuz append initrd=initrd.img repo=http://192.168.34.100/centos/6/os/x86_64/ 将挂载在网上的iso的yum源光盘路径写入 abel local 实现本地安装 menu label Boot from ^local drive localboot 0xffff
将该配置文件转换成iso文件
[root@centos6~]#mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6.9 x86_64 boot" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso /data/iso/ 将文件制定成iso文件,文件路径在/root/boot.iso家目录下
[root@centos6~]#sz boot.iso 将家目录的iso文件放到桌面,此文件只能做启动作用。
注意:以上相对路径都是相对于光盘的根,和工作目录无关
然后将桌面的boo.iso文件进行放入到指定目录中:
开机启动,进入菜单界面,选择第一项,就是我们做的应答文件,点回车,等待安装结束:
上面的系统安装过程已经完成。
下面我们来介绍怎么将iso 文件制作到硬盘里,作为启动文件,间接使用网上挂载的光盘安装过程:
注:将本地光盘要一直保持在网页上挂载状态,否则无法通过网页光盘安装。
[root@centos6~]#mount /dev/sr0 /var/www/html/centos/6/os/x86_64/ 挂载光盘,不然没有光盘引导安装。
[root@centos6~]#service httpd start 服务启动,不起动无法加载
添加一个20G的硬盘:
[root@centos6x86_64]#echo "- - -" > /sys/class/scsi_host/host0/scan 将插入未识别的硬盘进行加载 [root@centos6~]isohybrid boot.iso 转换当前的iso文件 [root@centos6~]#dd if=/root/boot.iso of=/dev/sdb 将文件写入到sdb硬盘里 92160+0 records in 92160+0 records out 47185920 bytes (47 MB) copied, 1.33288 s, 35.4 MB/s [root@centos6~]# sync 从缓存中写入到磁盘内 [root@centos6~]# sync [root@centos6~]# sync [root@centos6~]# sync
将制作好的文件路径去搜索,找到CensOS6.10-2.vadk文件名的文件,临时放到桌面
然后将要安装的新系统文件进行添加镜像路径,选择现有虚拟机:
将制作好的iso文件导入:
因为当前只会默认加载第一个硬盘启动,我们需要设置之前刻录的文件硬盘作为启动项,启动机器按esc进入bios界面设置,然后按最下面的setup选项,选择Hard Drive 硬盘设置,回车进入。
按+号将第二个硬盘置顶,然后按F10,保存重启,就开始选择自己的应答文件开始自动化安装整个过程,等待安装结束,整个安装就会结束。
硬盘引导安装方法完成。
我们来讲解怎么将ISO镜像和应答文件全部放在硬盘里安装系统:
在之前安装的基础上继续制作:
[root@centos66]#mkdir /data/fulliso [root@centos66]#cp -rv /misc/cd/. /data/fulliso [root@centos6fulliso]#find -name TRANS.TBL ./Packages/TRANS.TBL ./EFI/BOOT/TRANS.TBL ./EFI/TRANS.TBL ./isolinux/TRANS.TBL ./TRANS.TBL ./images/pxeboot/TRANS.TBL ./images/TRANS.TBL ./repodata/TRANS.TBL [root@centos6fulliso]#find -name TRANS.TBL -exec rm {} \; 删除里边特定的文件
[root@centos6fulliso]#rm -rf repodata/* 清空仓库,重新建内容 [root@centos6fulliso]#createrepo -g /misc/cd/repodata/5a045ecddfcca9dcbf1c28b6543e740de844ff4ef221e70308e7ad6decaea417-c6-x86_64-comps.xml ./ 在当前文件重新生成仓库的源数据 [root@centos6~]#cp anaconda-ks.cfg /data/fulliso 因为root里边有一个相关配置信息,可以对其里边的配置大概修改一下即可 [root@centos6fulliso]#mv anaconda-ks.cfg ks.cfg 将anaconda-ks.cfg 重新命名为ks.cfg
vim ks.cfg
# Kickstart file automatically generated by anaconda. #version=DEVEL install cdrom lang en_US.UTF-8 keyboard us network --onboot yes --device eth0 --bootproto dhcp --noipv6 rootpw --iscrypted $6$6pdd/ulLIO5IoQ2u$EKDznPOR19rWTeBjVVTYGay3PbNd3t0v9.Ae.jOsxP9i3T8khOMhDxDwTzfa9E3gqirD7qD3Pw6qK1 QKf2pDE0 firewall --disabled authconfig --enableshadow --passalgo=sha512 selinux --disabled timezone Asia/Shanghai bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" # The following is the partition information you requested # Note that any partitions you deleted are not expressed # here so unless you clear all partitions first, this is # not guaranteed to work clearpart --all 清空磁盘 zerombr 格式化mbr reboot 安装完重启 text 文本格式安装 part /boot --fstype=ext4 --size=1024 boot磁盘分区 part / --fstype=ext4 --size=100000 根磁盘分区 part /data --fstype=ext4 --size=50000 data磁盘分区 part swap --size=2048 swap磁盘分区 %packages @base 安装基本包 %end
制作应答文件:vim isolinux/isolinux.cfg
label Auto menu label ^Auto Install an system menu default kernel vmlinuz append initrd=initrd.img ks=cdrom:/ks.cfg 指定应答文件路径 label Desktop menu label ^Desktop Install an system menu default kernel vmlinuz append initrd=initrd.img ks=cdrom:/ks_desktop.cfg 备用:指定要安装的桌面应答文件路径 label local menu label Boot from ^local drive localboot 0xffff
将文件都打包制作成iso文件,生成文件默认保存在root下,名称叫centos6.iso
[root@centos6~]#mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6.9 x86_64" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/centos6.iso /data/fulliso
然后将文件传到桌面: sz centos6.iso
下来将压缩的iso文件导入当前路径:
然后启动系统,按esc启动光盘安装,直接选择第一选项开始安装,直至结束。
好了,小范围的Linux主机安装就介绍到这里,下章我们来学习批量自动化安装系统,敬请期待。