前言:

    想当年,我还是一个萌新的时候(其实,现在也还是萌新)。经常干的一件事情就是安装操作系统,有次听别人说可以实现全自动安装,感觉甚屌~今天,我们就来玩玩这个吊炸天的东东。

正文:

    我们先大概描述一下安装系统的流程,一般来讲,我们是用光盘或者U盘来装系统,第一步我们要从U盘启动,而u盘或者光盘里面本身就会存在一个小的linux系统,通过这个小的系统把linux安装到我们的硬盘上。为了实现全自动话安装,我们就得把上面所有的过程实现自动化。我们想象一下,如果一个网络中有100台主机需要装centos系统,我们不可能拿光盘或者U盘一个一个的插去安装系统,所以我们有第三种选择就是通过网络引导安装,这就以为者我们得有一个东东才存放安装系统所用到的镜像源。所有我们网络中得有一个ftp服务器或者http服务器来为网络安装提供源。不过安装之前我们得加载一个小系统来为我们系统安装提供一些必要的基础。这个就得用到我们的主角,pxe了~pxe是一个预启动执行环境,它主要的作用是引导操作系统。不过在引导客户端主机之前,我们得先从一个TFTP服务器上下载启动软件包到客户机的内存中执行。我们所有的行为都是基于网络的,所以我们的还得给终端机分配ip地址,就得用到一个DHCP服务器了。所以,我们再完整的总结一下这个过程:

    当一个客户机开机之后会先从dhcp服务器上获取一个ip地址,并且dhcp服务器告诉客户机去哪找pxe,接着从pxe上获得启动一个基础系统所需要的文件,然后启动系统并从http服务器或httpd服务器上获取安装完整系统所需要的资源,开始系统的安装过程。这个安装过程也是可以全自动进行的,此时就得用到kickstart生成一个交互脚本,让安装过程自动化进行。

    现在我们已经知道了,实现整个自动化过程我们得需要如下几个服务:tftp dhcp httpd,接下来我们就变配置边解释了~

    先介绍一下环境,我们在192.168.6.0/24这个网络中,提供服务的主机ip为192.168.6.100,系统是centos7,我们要配置自动化安装centos6(后面会说7怎么安装)假如我们的网关为192.168.6.1,dns服务器为114.114.114.114。

    第一步,先来安装我们要用到的服务(自己配置好yum源哦~)

yum install httpd tftp-server dhcp

    以及,我们用到的程序,后面结束怎么用。

yum install syslinux system-config-kickstart

    我们先来配置dhcp服务,dhcp的配置文件在/etc/dhcp/dhcp.conf,编辑此文件,里面应该是没有什么配置内容的,我们就直接添加配置把

#/etc/dhcp/dhcp.conf
option domain-name "xiaofengfeng.cn";     #域名
option routers 192.168.6.1;               #网关
option domain-name-servers 144.144.144.144;   #域名服务器

default-lease-time 43200;                    #默认的租约时间
max-lease-time 86400;                        #最大租约时间
log-facility local7;                         
subnet 192.168.6.0 netmask 255.255.255.0 {    
        range 192.168.6.101 192.168.6.199;    #地址池范围
        filename "pxelinux.0";                #pxe文件名
        next-server 192.168.6.100;            #pxe的服务器地址
}

    然后开启dhcp服务

systemctl start dhcpd

接下来得配置我们的tftp即pxe那个东东,tftp直接启动就好,并且tftp的工作目录为/var/lib/tftpboot/

systemctl start tftp.socket

还记得那个syslinux不?就是它提供给我们配置pxe所需要的文件。我们直接从syslinux的安装路径复制文件即可,我们还需要centos的一些启动内核呀之类的文件来启动一个小的linux,所以我们还得挂载一个centos6的光盘。

mkdir /media/cdrom            #创建光盘挂载点
mount /dev/sr0 /media/cdrom   #挂载centos6安装光盘
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/            #复制pxe文件
cp /media/cdrom/p_w_picpaths/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/   #复制内核文件
cp /media/cdrom/isolinux/{boot.*,vesamenu.c32,splash.jpg} /var/lib/tftpboot/
#复制引导启动文件
mkdir /var/lib/tftpboot/pxelinux.cfg/   #创建放pxe配置的文件
cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default  
#centos6直接复制配置文件即可

我们还得编辑一下/var/lib/tftpboot/pxelinux.cfg/default文件,让它有一个label就好,并且指定kickstart的位置,

label linux
  menu label ^Install or upgrade an existing system
  menu default
  kernel vmlinuz
  append initrd=initrd.img ks=  #注意指定ks哦

接下来我们就得创建我们的kickstart文件了,不过在此之前,我们得先创建我们httpd文件来为我们安装系统提供按装源,我们可以直接把centos6安装盘挂载到httpd的工作目录下。

mkdir -p /var/www/html/centos/6/x86_64   #创建挂载点
mount /dev/sr0 /var/www/html/centos/6/x86_64  #挂载
systemctl start httpd                      #开启http服务

我们可以测试一下我们的源,http://192.168.6.100/centos/6/x86_64,如果不能访问也许使我们的防火墙禁止掉了我们的http服务,为了方便可以直接清空防火墙规则或者开启上面所有服务的端口,允许通过。测试能列出centos6安装盘的文件列表就是可用的。接下来我们接来生成kickstart配置文件了,此时就要用上上面安装的system-config-kickstart程序,此程序要用到图形话界面哟~~

system-config-kickstart

基于pxe+kickstart 全自动化安装centos系统_第1张图片

基于pxe+kickstart 全自动化安装centos系统_第2张图片

基于pxe+kickstart 全自动化安装centos系统_第3张图片

基于pxe+kickstart 全自动化安装centos系统_第4张图片

基于pxe+kickstart 全自动化安装centos系统_第5张图片


基于pxe+kickstart 全自动化安装centos系统_第6张图片

此时就会在/root目录下生成一个以.cfg结尾的配置文件,把它复制到192.168.6.100/var/www/html/kickstarts目录下,重命名为centos6.cfg。如果kickstarts这个目录不存在,就创建一个

mkdir /var/lib/html/kickstarts

当你输入192.168.6.100/kickstarts时,也许会拒绝访问这个文件夹,除了前面的iptables还有个坑爹的东东得关闭就是selinux。我们可以用getenforce查看selinux状态,如果是Enforcing表示开启了selinux,我们得关闭它

setenforce 0

如果是在centos7上运行kickstart程序,要注意一点,必须得把yum源的名称改为development,才会有软件列表~

到此我们所有的配置就完成了~直接你打开一个机器,并且这个机器和192.168.6.100在同一个网段就会全自动安装一个centos6系统。一定得记得centos不支持xfs!!设置分区时请选择ext系列的文件系统格式!!



centos7的过程与6类似,不过也有不一样的地方,除了我们要挂载centos7的安装盘以外,一些引导启动文件也不一样

yum -y install syslinux
#记得把centos7安装盘挂载到/media/cdrom哟
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
cp /media/cdrom/Images/pxeboot/{vmlinuz,intrd.img} /var/lib/tftpboot   #复制centos7的内核
cp /usr/share/syslinux/{chain.c32,mboot.c32,menu.c32,memdisk}     #复制引导用到的文件
/var/lib/tftpboot
 
mkdir /var/lib/tftpboot/pxelinux.cfg/
 
 在7中我们得手动差un关键default文件,不过和centos6类似。
vim /var/lib/tftpboot/pxelinux.cfg/default
default menu.c32       
prompt 5
timeout 30
MENU TITLE CENTOS 7 PXE Menu             #最上面的标题
 
LABEL linux                              #选择界面的标签
MENU LABEL install CentOS 7 x86_64       #选择条目提示信息
KERNEL vmlinuz                           #内核文件
APPEND initrd=initrd.img inst.repo=  ks=http://192.168.6.100/kickstarts/centos7.cfg
centos7必须指定inst.repo哟这就是我们系统的安装源~~

到此我们就完成了centos6 和centos7的全自动化安装了,内容已经是相当的详细了,不过如果依然有问题,或遇到不能解决的问题可以留言,有时间就会回复解答。当然如果很急的话也可以发邮件。

[email protected]

这也是博主的qq号码~如果加好友请注明自己是做什么的~博主好分类~

后记:

    话说我们确实是实现了一个系统的全自动化安装,但是如果我们向有更多的功能呢?比如说即能安装cento6又同时可以选择centos7,更有甚者想安装windows呢?我们将会将下一片博客中来说明如何实现~~~尽请期待~