1 概述
以下的截图主要是用来说明自动化运维发展的阶段
第一阶段:全人肉阶段,此时是处于无流程规范的约束,所有的运维工作都是靠人去一步步执行,这将大大降低工作的效率,也容易带来误操作
第二阶段:工具化阶段,制定了规范制度,此时是通过编写脚本等工具来代替运维的大部分重复性工作。但是工具没有一个统一的管理平台
第三阶段:平台化阶段,此时通过完善规范来提高运维的效率,降低运维的误操作,平台在这个阶段完成,通过统一的平台,对机器进行管理,实现了企业化的平台统一管理
第四阶段:自驱动阶段,通过流程进行驱动,制度是关键,制度已经完善,系统出了问题,能够自己解决。
本文将介绍自动化运维的第一步,即实现自动化安装系统。本文将介绍两个方面的自动化安装:
1. 半自动化安装:通过光盘引导系统系统,然后手动指定kickstart文件,安装包源为系统的光盘或者是网络(这里包的路径是在kickstart文件里指定),安装过程由kickstart文件设定。
2. 本地自动化安装,通过自己生成一个本地的光盘文件,刻录在光盘或者U盘里,实现本地自动化安装,制作方法是:拷贝一份光盘的所有资料到本地路径,如/root/fulliso目录下,把kickstart文件放在该目录下,生成新的包依赖关系的文件,然后再通过命令mkisofs生成光盘文件。如果需要U盘启动,只需要通过dd命令将新生成的iso文件刻录到U盘里即可实现U盘启动
接下来,我们将介绍安装启动过程,安装需要的文件的内容,以及每个自动化安装方式的实现步骤
2 安装程序和相关文件介绍
2.1 系统启动流程如下
bootloader-->kernel(initramfs)-->rootfs-->/sbin/init
系统安装完成后,在启动时,先开机自检,读取硬盘的第一扇区MBR,加载bootloader,即第一阶段,还有1.5.和2阶段。根据配置文件,找到kernel(vmlinuz)和initramfs(临时根文件系统),由initramfs加载小linux系统,然后把控制权交给了rootfs,然后加载/sbin/init,按脚本命令执行相关脚本,完成启动的过程
2.2 系统安装程序:anaconda
在安装过程中我们需要借助的anaconda这个安装程序来实现,该程序有两种安装界面
1.gui:图形窗口
2 tui:基于图形库curses的文本窗口
anaconda的配置方式:
(1) 交互式配置方式
(2) 通过读取事先给定的配置文件自动完成配置:按特定语法给出的配置选项,改配置文件叫kickstart文件,这个文件可以手动编写,也可以通过图形化工具system-config-kickstart来生成。我们既然要实现自动化的安装,自然anaconda的配置方式就要选择该方式,不能是图形化,否则就实现不了自动化的安装
默认我们通过光盘来安装的时候,装载根文件系统,并启动anaconda,可以对这个配置方式进行选择,当光盘启动到菜单页面的时候,默认启动GUI接口,若是要指定使用TUI接口:向内核传递text参数即可。
(1)按tab键,在后面增加 text
(2)按ESC键:boot: linux text
在全自动化安装中,我们是直接在ks文件中设置了该方式为text。
anaconda工作过程
.Anaconda安装系统分成三个阶段:
a 安装前配置阶段
安装过程使用的语言
键盘类型
安装目标存储设备
Basic Storage:本地磁盘
特殊设备:iSCSI
设定主机名
配置网络接口
时区
管理员密码
设定分区方式及MBR的安装位置
创建一个普通用户
选定要安装的程序包
b 安装阶段
在目标磁盘创建分区,执行格式化操作等
将选定的程序包安装至目标位置
安装bootloader和initramfs
c 图形模式首次启动
进行以下的配置
iptables
selinux
core dump
2.3 光盘部分文件介绍
isolinux/boot.cat:这个文件作用是类型MBR(Main Boot Record),负责磁盘操作系统(DOS)对磁盘进行读写时分区合法性的判别、分区引导信息的定位,启动的stage1.
isolinux/isolinux.bin,负责光盘的stage2,也是二进制文件,作用类似grub的第二阶段
isolinuz/vmlinuz:是linux的内核,相当于是一个小的linux系统
isolinuz/initrd.img,一般被用来临时的引导硬件到实际内核vmlinuz能够接管并继续引导的状态
isolinux/isolinux.cfg:这个是光盘启动时的菜单文件,菜单的风格是文件vesamenu.c32.在isolinux.cfg里有调用,该文件里还指定了内核isolinuz/vmlinuz和isolinuz/initrd.img的路径,向内核传递参数:append initrd=initrd.img,这段参数可以自己定制,如在后面加text,就会实现字符界面安装,这个用于自动化安装,不适合于手动安装,鼠标点不了的。字符界面一般用于自动化安装。
在isolinux.cfg文件中指明kickstart文件的位置,有以下几个路径进行调用该文件,写法如下
DVD drive:ks=cdrom:/PATH/TO/KICKSTART_FILE
Hard drive:ks=hd:device:/directory/KICKSTART_FILE
HTTP server:ks=http://host:port/path/to/KICKSTART_FILE
FTP server:ks=ftp://host:port/path/to/KICKSTART_FILE
HTTPS server:ks=https://host:port/path/to/KICKSTART_FILE
NFSserver:ks=nfs:host:/path/to/KICKSTART_FILE
2.4 kickstart文件
kickstart文件创建
有两个方法:
1 直接手动编写:依据某模板修改
2:.可使用创建工具:system-config-kickstart,依据某模板修改并自动生成新配置anaconda-ks.cfg,这个软件是在桌面端的环境下才能启用
.检查ks文件的语法错误:ksvalidator
ksvalidator /PATH/TO/KICKSTART_FILE
kickstart 文件的格式如下
kickstart文件的格式
anaconda-ks.cfg的格式如下分为 命令段,程序包段,脚本段三段
.命令段:
指明各种安装前配置,如键盘类型等
命令段中的命令:
.必备命令
authconfig:认证方式配置
authconfig--useshadow--passalgo=sha512
bootloader:bootloader的安装位置及相关配置
bootloader--location=mbr--driveorder=sda–
append="crashkernel=autorhgbquiet"
keyboard:设定键盘类型
lang:语言类型
part:创建分区
rootpw:指明root的密码
timezone:时区
.可选命令
install OR upgrade
text:文本安装界面
network
firewall
selinux
halt
poweroff
reboot
repo
user:安装完成后为系统创建新用户
url:指明安装源
key –skip跳过安装号码,适用于rhel版本
.程序包段:
指明要安装的程序包组或程序包,不安装的程序包等
程序包段指安装了哪些包,
@开头的是包组
不是@的是一般的包
--减号,是指把包组中的某个包去掉
例子如下
%packages
@group_name
package
-package
%end
注意,桌面包组,desktop默认是GNOME包组,如果桌面端安装不成功,安装一下xorg-x11-server-Xorg这个包,桌面端依赖这个包
.脚本段:
脚本段分为安装前和安装后脚本段
%pre:安装前脚本,安装操作系统前,初始化环境
运行环境:运行于安装介质上的微型Linux环境
%post:安装后脚本,系统都安装完成后才执行脚本
格式如下
%post
脚本
在这里有一个地方需要注意,当CentOS7通过命令启动system-config-kickstart时,选择包的时候可能出现如下报错,看不到包的信息
解决办法:
配置光盘的yum源,修改yum 的repo id为development,这个是系统指定的,一般情况下repo id可以随便指定,只要是没有空格隔开就可以,但在要用system-config-kickstart命令来选择包是,id一定要配置为development。如下截图
3 自动化安装
本文将介绍两种自动化安装的方式:半自动化和本地自动化
3.1 半自动化安装
半自动化安装,启动的方式通过光盘进行启动,这里有两种方式:1. 本地光盘直接作为包的来源 2. 包在其他路径上,如http服务器上
3.1.1 安装包为本地
1.通过system-config-kickstart这个工具在图形界面定制ks文件,这里要实现的是半自动化的安装,需要在ks文件里指定安装包的路径,用本地的光盘启动
2.在虚拟机中选择好光盘后,启动虚拟机。注意,7安装的内存要大于1024M,否则会出现空间不足的问题,无法安装。
默认情况下,6和7通过光盘启动的菜单界面如下截图
6的启动菜单页面如下截图
7的启动菜单页面如下截图
3.编辑好ks文件,这个ks文件就是用来做自动化安装的,指导机器安装ks文件里的语句进行安装,半自动化的时候,这个文件的路径要 人为指定路径,在开机的菜单处输入特定按键后进行指定(如下两张截图的方法),然后才能加载ks文件进行安装
这里要注意,首先要确保网络是通的,如果不用dhcp,也可以再ks文件里指定固定ip,和网络中的ftp服务器在同一网段
看到这个界面,敲入Esc键,看到boot:输入linux ks=进行指定ks路径,如果放到ftp下,就写全路径
看到图一的开机界面,按下tab键,UI看到vmlinuz initrd=initrd.img输入ks=把ks文件的路径指出来,如下截图是放到ftp下
指定好ks文件后,系统就会安装ks设置的安装步骤一步步执行。最后安装完成后进行重启机器。注意,重启机器这个步骤也是在ks文件里设定。
3.1.2 安装包在http服务器
这里和安装包在本地的区别是,需要制作一个光盘,这个光盘仅仅用了引导机器启动,进入到启动菜单。同时要在一台http服务器上将光盘直接挂到机器上
1.制作启动光盘:
将光盘的isolinux这个目录拷贝到本地/root/bootiso/下
cp -r /media/isolinux/ /root/bootiso/
编辑ks文件
vim ks65min.cfg
在这个ks文件里,需要注意以下两项
# Use network installation,配置http服务器下yum源的路径,如下
url --url="http://172.18.50.75/os/6i386/"
# Network information 网络配置,直接配置成静态,或者是自动获取,以下是直接配置成静态ip的例子,原则是保证新增的机器ip和http在同一网段,能够去访问http那台服务器,
network --bootproto=static --device=eth0 --gateway=172.18.0.1 --ip=172.18.50.99 --nameserver=172.18.0.1 --netmask=255.255.0.0 --onboot=on
将这个文件拷贝到本地的bootiso目录下
cp /root/ks65min.cfg /root/bootiso/
编辑菜单文件,这里需要注意的是,要指定ks文件的路径,注意,这里因为把ks65min.cfg拷贝到了/root/bootiso/,这个目录要被制作成启动光盘,所以ks文件的目录写出ks=cdrom:/ks65min.cfg
vim /root/bootiso/isolinux/isolinux.cfg
如下
label linux
menu label ^Install or upgrade an existing system
menu default
kernel vmlinuz
append initrd=initrd.img ks=cdrom:/ks65min.cfg
2 启动引导光盘
mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6.5 386 boot" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/centos65_boot.iso /root/bootiso/
centos65_boot.iso生成的这个光盘就可以实现半自动化安装了,开机的时候,不需要在指定ks文件的路径了,这里所谓半自动化安装,是因为,还需要指定光盘才能安装。
3.2 本地自动化安装
全自动化安装
1将光盘里的所有文件拷贝一份到本地系统
mount /dev/sr0 /media
cp -r /media /root/fulliso
2 删掉.TBL文件,mkisofs命令创建的时候,通过选项-T会自动生成
find /root/fulliso -name TRANS.TBL -exec rm {} \;
3.repodata这个文件夹下除了comps.xml这个文件要保留,是存放包组信息的文件,该文件夹的其他文件都要删除。是一个xml格式的文件 ,创建的时候,依赖这个文件来创建包组信息。该目录下目前只剩下后缀为comps.xml这个文件,命令如下
find /root/fulliso/repodata2/ ! -name '*comps.xml' -type f -exec rm -rf {} \;
4.根据createrepo这个文件来创建yum源,在拷贝的fulliso这个目录下,命令后面的./是指在哪个目录下创建yum源.这一步要等3分钟左右,出现Sqlite DBs complete表示完成,命令如下
createrepo -g repodata/43d8fd068164b0f042845474d6a22262798b9f0d1f49ad1bf9f95b953089777d-c6-x86_64-comps.xml ./
执行以上语句后,repodata文件夹就会创建出新的数据,如下
5. 6配置yum的kickstart文件,这里是直接复制一个ks文件作为模板进行修改。或者直接在桌面端里打开终端命令窗口,执行命令system-config-kickstart进行定制kickstart文件按自己的安装需求进行设置.
注意,将新生成的ks文件放到/fulliso这个目录,可以放置多个应答文件,来实现不一样的安装,如ks6-desk.cfg,ks6-mini.cfg
6. 制作启动菜单,修改isolinux目录下的isolinux.cfg这个文件,这里制作了四个菜单,根据指定ks文件来实现不一样的安装,如下截图
到这里,所有的准备文件都完成了,接下来要制作成光盘
7. 制作成全量光盘,和半自动化2的的区别是这里重新生成yum仓库配置文件,把光盘的所有文件都拷贝到新的目录下,包括安装包,之前只是拷贝光盘下的isolinux这个目录下的内容,制作一个引导的菜单,包放在了http等远程端
这里可以制作成整个6的光盘,只需要把安装包都拷贝到同一Packages目录下即可.
执行如下的语句制作.iso文件
mkisofs -R -J -T -v --no-emul-boot--boot-load-size 4 --boot-info-table -V "CentOS 6.5 autoinstall" -bisolinux/isolinux.bin -c isolinux/boot.cat -o /root/auto65.iso /root/fulliso/
这一步比较久,根据机器的性能决定时间快慢,大概要10分钟
这样制作完成后,这个就可以实现通过光盘实现全自动化的安装
如果要做成u盘启动,就用命令dd把生成的这个文件拷贝到U盘下,实现同U盘来安装系统,,假设U盘的识别为设备/dev/sdf .命令如下
dd if=/root/auto65.isoof=/dev/sdf
然后装机开机时,进入bios,将启动项设置为U盘启动即可
mkisofs选项
.-o指定映像文件的名称。
.-b指定在制作可开机光盘时所需的开机映像文件。
.-c制作可开机光盘时,会将开机映像文件中的no-eltorito-
catalog全部内容作成一个文件。
.-no-emul-boot非模拟模式启动。
.-boot-load-size 4设置载入部分的数量
.-boot-info-table在启动的图像中现实信息
.-R或-rock使用RockRidgeExtensions
.-J或-joliet使用Joliet格式的目录与文件名称
.-v或-verbose执行时显示详细的信息
.-T或-translation-table建立文件名的转换表,适用于不支持Rock Ridge Extensions的系统上
3.3 报错解决
3.3.1 安装65 mini 32位系统
出现如下的报错
在CentOS 6.X下不支持通过HDMI端口进行音频输出。 但是,支持主板音频端口。 出现错误信息时,解决办法:按OK继续安装操作系统。
3.3.2 CentOS7 桌面版安装后问题
CentOS7 桌面版安装后重启出现如下的界面,解决办法是依次按 1--》2--》c--》c然后重启机器就能解决
3.3.3 CentOS 7 内存不够
如配置为1024M时,出现如下的报错,解决办法是将centOS7通过该PXE安装最小内存调整为1100M
卡在以下这一步骤
然后5分钟后出现如下的报错,
最终结果如下,是异常安装
4 小结
本文主要介绍了自动化安装的相关概念,以及两种自动化安装系统的方法。如果工作环境不允许用网络的方式安装系统,制作一个全量的自动化安装镜像则会大大降低工作量。
关于自动化安装系统,还有两种方式,PXE 和 cobbler方式。接下来将会有一个文章专门介绍这两个安装方式的原理,以及实现。