cobbler --- 前传

1、基本知识点的简单介绍:

为了便于理解 cobbler 这里将搭建一个 DHCP + TFTP + FTP + Kickstart 环境

一个传统的安装流程简介:

  1. 主机设备加电后,进行 BIOS自检,并根据设置,取得第一个可开机设备(常见的是 cdrom)
  2. 通过第一个可开机设备,获取 Boot Load
  3. boot load 根据设定,载入系统内核
  4. 系统内核通过 initrd 来载入硬件驱动,以完成硬件的识别、检测
  5. 当完成硬件检测后,内核会呼叫 anaconda 来进行系统安装
  6. 最后通过人机交互完成安装

而通过 kickstart 进行自动化网络安装,流程基本相似:

我们先介绍 kickstart 的组成部分:

  • PXE(Pre-boot eXecution Environment): 字面意思为预启动执行环境.通过 PXE 可以让主机通过网络启动。要实现 PXE 需要三个必要条件:
    • 主机的网卡支持 PXE 客户端功能(该网卡含有 PEX_client + TFTP_client),并在 BIOS 中设定第一个可开机设备为网络
    • 一个 DHCP Service 为主机网卡提供所必须的网络参数,如 IP 等.并告知主机,TFTP 服务器的相关信息
    • 一个 TFTP Service 为主机提供开机所必须的 boot loader 和 kernel file 等文件

注:

这边的主机是指那台需要安装操作系统的裸机,下同

  • HTTP: 但满足以上条件,仅能实现主机的启动,主机启动后,还要提供系统安装程序以及安装程序所需的各种资源才能完成系统的安装。所以我们还需要一个放置这些资源的地方。放置这些资源,可以是 HTTP、NFS、FTP 中的任意一种。在这里,我选择 FTP 来作为安装资源的容器

  • Kickstart: 对照安装的基本流程,当安装程序 anaconda 启动后,还需要通过人机交互来进行相关设定。因此完成以上条件,还远远称不上自动化。因此就需要用到 kickstart 了。那什么时 Kickstart 呢?

    • 简单来说,Kickstart 创建一个名为 ks.cfg 的文件,这个文件里面包含了安装过程中所有人机交互所需要的配置参数,在一个典型安装过程中,只需要告知安装程序 ks.cfg 文件的位置,安装程序在需要进行人机交互的时候,就会去 ks.cfg 文件中查找对应的配置参数,以实现自动化安装。

用一张图来表示 普通安装与 kickstart 安装的区别

cobbler --- 前传_第1张图片
两者区别

2、环境搭建

实验虚拟机的安装、配置,请参见《VMware --- CentOS6.x 实验机的安装配置》,实验拓扑如下:

cobbler --- 前传_第2张图片
实验拓扑
2.1、安装 DHCP

一般在 linux 上面安装一个服务,是按安装、配置、启动、检查 4 步来做的。下面我们安装,也是按这个流程来进行。

  • 安装
]# yum -y install dhcp
  • 查看配置文件位置
]# rpm -ql dhcp |grep "dhcpd.conf"
# 配置文件
/etc/dhcp/dhcpd.conf    
/usr/share/doc/dhcp-4.1.1/dhcpd-conf-to-ldap
# 模板
/usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample
/usr/share/man/man5/dhcpd.conf.5.gz
  • 编写配置文件
]# vim /etc/dhcp/dhcpd.conf
# 不进行 DDNS 的更新
ddns-update-style none;
# 不允许客户机更新 DNS 记录
ignore client-updates;
# 与下面的 range 配合声明可分配IP的范围
subnet 192.168.80.0 netmask 255.255.255.0
{
# 可分配的起始 IP 结束 IP
range 192.168.80.10 192.168.80.20;
# 设定 netmask
option subnet-mask 255.255.255.0;
# 设置默认的 IP 租用期限
default-lease-time 21600;
# 设置最大的 IP 租用期限
max-lease-time 43200;
# 用来告知主机 TFTP 服务器的 ip
next-server 192.168.80.3;
# 告知主机从 TFTP 根目录下载 pxelinux.0 文件
# pxelinux.0 是 PXE 专用的一个 boot loader 文件
filename "/pxelinux.0";
}
  • 启动 DHCP
]# service dhcpd start
Starting dhcpd: [ OK ]
  • 检查 DHCP 是否正常监听
]# netstat -nlptu |grep dhcp
udp 0 0 0.0.0.0:67 0.0.0.0:* 1875/dhcpd
2.2、安装 TFTP
  • 安装
]# yum -y install tftp-server
  • 配置
]# vim /etc/xinetd.d/tftp
service tftp
{
        socket_type = dgram
        protocol = udp
        wait = yes
        user = root
        server = /usr/sbin/in.tftpd
# 指定默认目录
        server_args = -s /var/lib/tftpboot 
        disable = yes --> no
        per_source = 11
        cps = 100 2
        flags = IPv4
}
2.3、配置引导文件:

在这我们暂时先不启动 TFTP 服务,继续配置主机引导所需要的文件:

2.3.1、复制 boot loader 和选单展示文件到 TFTP 的根目录
  • 复制 pxelinux.0 文件
]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/

注:

pxelinux.0 文件由 syslinux 提供,如果没有找到这个文件,可以安装一下

]# yum -y install syslinux
]# rpm -ql syslinux |grep pxelinux
/usr/share/doc/syslinux-4.02/pxelinux.txt
/usr/share/syslinux/gpxelinux.0
/usr/share/syslinux/pxelinux.0
  • 复制选单展示文件
]# cp /usr/share/syslinux/vesamenu.c32 /var/lib/tftpboot/
2.3.2、通光 CentOS 的安装光盘,获取 vmlinuz 和 initrd.img 到 TFTP 的根目录
  • 先挂载光盘,再复制
# mount /dev/cdrom /media/
mount: block device /dev/sr0 is write-protected, mounting read-only
]# cd /media/isolinux/
]# cp vmlinuz /var/lib/tftpboot/
]# cp initrd.img /var/lib/tftpboot/

当然如果你图省事,直接把 /media/isolinux 目录下的所有文件都复制到 /var/lib/tftptboot/ 目录下,然后再进行下面的步骤,也没有问题,建议还是全复制了,这样开机选单画面还好看一点。

注:

这边用完先别把光盘umount掉,我们下面还有用

2.3.3、创建存放开机菜单配置文件的目录
]# mkdir -p /var/lib/tftpboot/pxelinux.cfg

将光盘 isolinux 目录下的 isolinux.cfg 复制到刚才我们新建的那个目录下,并改名为 default

]# cp isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default

这么多文件,第一次搞有点晕,先理理。在我理解中,这几个文件之间的关系是这样的:

  1. 主机先从 TFTP 服务器上面获取 pxelinux.0 文件,pxelinux.0 是个 bootloder 文件。
  2. 通过这个文件再去读取 default 文件,default 文件设置了开机选单
  3. 开机选单通过 vesamenu.c32 绘制出来
  4. vmlinuz initrd.img 这两个文件应该不用讲了吧
  • 启动 TFTP
]# /etc/init.d/xinetd restart
Stopping xinetd: [FAILED]
Starting xinetd: [ OK ]
  • 检查TFTP服务的监听是否正常
# netstat -nlptu |grep 69
udp 0 0 0.0.0.0:69 0.0.0.0:* 1675/xinetd

2.4、安装 vsFTP

把上面这几步做完,主机就可以顺利开机了,但我们要安装系统所需的安装介质还没有,所以还得继续下去

  • 安装 vsFTP 服务,提供系统安装程序以及安装程序所需的各种资源
]# yum -y install vsftpd
  • 安装完后,将系统安装盘中的所有文件复制到 /var/ftp/pub 目录下
]# cp -a /media/* /var/ftp/pub/
  • 启动 FTP
]# /etc/init.d/vsftpd start
Starting vsftpd for vsftpd: [ OK ]
  • 检查 vsFTP 服务监听是否正常
]# netstat -nlptu |grep vsftpd
tcp 0 0 0.0.0.0:21 0.0.0.0:* LISTEN 2118/vsftpd

3、创建ks.cfg文件

最基本的 ks.cfg 文件由 Command section(命令部分) 和 %packages section(软件安装部份)两部分组成,Command 部分在前,%Packages 部分在后。ks.cfg 文件,以项目列表的形式展现,每个项目以关键字来识别。

当你安装完系统,在 root 的家目录下,会有一个名为 anaconda-ks.cfg 的文件,它会自动记录,你安装过程中所使用的选项参数。刚开始的时候,可以使用这个文件,为模板文件,来创建我们的 ks.cfg 文件

#告知安装程序,这是一次全新安装,而不是升级
install
#告知安装程序,这是一个网络安装,使用FTP来提供安装所需的资源
#我这边是使用匿名方式,还可以使用用户名/密码
#url --url ftp://:@/
url --url="ftp://192.168.80.3/pub"
#使用文本模式安装
text
#默认语言是英语
lang en_US.UTF-8
#使用美式键盘
keyboard us
#清空mbr
zerombr
#指定bootloader的安装位置及参数
#--location 指定boot record位置,我们这边不做多系统,因此直接写在mbr里面
#--driveorder 指定第一开机装置
#--append 指定内核参数,这边我用的默认值,没有做更改
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
#设置安装完成后的主机网络,关键字是 network
#这边参数都比较常见,我就不一个个解释了
network --bootproto=static --ip=192.168.80.8 --netmask=255.255.255.0 --gateway=192.168.80.2 --hostname=CentOS6 --noipv6
#设置时区
#--utc 设定使用UTC
timezone --utc Asia/Shanghai
#设置密码加密方式为sha512 启用shadow文件
auth --useshadow --passalgo=sha512
#设定root的密码
#--iscrypted 如果root密码是已加密过,就必须使用这个参数,如何获得这个加密后的密码,详见本文附1
rootpw --iscrypted $6$qQaMyYyZMjz/tpqH$cjMWaGj8xpZK4jplrbUCnXD/8jesH7WTSBAefkL6HYcgFmKFUd/pbWtC75Q62d3PI8IYclNulf750Q7C7iYs.1
#清空所有分区
#--all 从系统中清除所有分区
#--initlable 初始化磁盘标签,例如我的虚拟机是x86架构的,通常是初始化为MSDOS
clearpart --all --initlabel
#新建磁盘分区
#新建/boot分区
part /boot --fstype=ext4 --size=500
#新建3个pv,每个pv大小为10G
part pv.008002 --size=10240
part pv.008003 --size=10240
part pv.008005 --size=10240
#新建一个VG,名为vg_root 包含了刚才创建的3个PV
volgroup vg_root --pesize=4096 pv.008002 pv.008003 pv.008005
#创建LV
logvol /home --fstype=ext4 --name=lv_home --vgname=vg_root --size=2048
logvol /opt --fstype=ext4 --name=lv_opt --vgname=vg_root --size=2048
logvol / --fstype=ext4 --name=lv_root --vgname=vg_root --size=6116
logvol /tmp --fstype=ext4 --name=lv_tmp --vgname=vg_root --size=4096
logvol /var --fstype=ext4 --name=lv_var --vgname=vg_root --size=4096
logvol swap --name=lv_swap --vgname=vg_root --size=2048
#禁止firstboot,firstboot就是我们使用图形化安装完系统,重启后有一个初始设置
firstboot --disable
#禁止selinux
selinux --disabled
#禁止防火墙
firewall --disabled
#设定安装过程中的日志级别
logging --level=info
#设定安装完成后关机
poweroff
#安装包我选择的是Basic模式,添加了中文支持
%packages
@base
#中文支持
@chinese-support
@console-internet
@core
@debugging
@directory-client
@hardware-monitoring
@java-platform
@large-systems
@network-file-system-client
@performance
@perl-runtime
@server-platform
@server-policy
%end

kickstart 文件的细节可以参考:《cobbler --- kickstart 文件的简单介绍》

ks.cfg 文件编写好了,下面还有两件事要做

  • 把 ks.cfg 文件放到 vsFTP 的根目录下
]# cd /var/ftp/
]# ls
ks.cfg pub
  • 告诉安装程序 ks.cfg 文件在哪里

找到 "Install or upgrade an existing system" 这个选项中的 append 那一行,添加 ks=ftp://192.168.80.3/ks.cfg 告知安装程序 ks.cfg 文件所在位置

]# pwd
/var/lib/tftpboot/pxelinux.cfg
]# vim default
label linux
  menu label ^Install or upgrade an existing system
  menu default
  kernel vmlinuz
  append initrd=initrd.img ks=ftp://192.168.80.3/ks.cfg

实验效果和验证,我就不啰嗦了,大家自己动手试一下吧

你可能感兴趣的:(cobbler --- 前传)