本地自动化安装CentOS系统

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方式。接下来将会有一个文章专门介绍这两个安装方式的原理,以及实现。

推荐阅读更多精彩内容