实现cobbler+pxe自动化装机
前言:
pxe和cobbler自动化安装系统,都要依赖于dhcp、tftp、httpd服务的开启所以首先我们要了解这些服务。
客户端PXE安装过程
一 、dhcp服务
1、dhcp协议
- 动态主机配置协议是一个局域网的网络协议控制一段IP地址范围,客户机登录服务器时就可以自动获得服务器分配的IP地址和子网掩码。
- 与dhcp功能相同是dnsmasq
2、续租请求:
-
通常主机会在50%时候续租一次时长
-
在找不到server时候,时间到75%时候续租一次时长
-
在找不到server时候,时间到87.5%时候续租一次时长
-
续租时长:单播给服务器
情况一: dhcp request 告诉服务器再租一次
dhcp ack 服务器返回同意续租
情况二: dhcp request 告诉服务器再租一次
dhcp nak 服务器拒绝续租
3、dhcp服务
- dhcpd可以提供dhcp服务和(dhcrelay)dhcp中继服务
4、dhcp的安装
[root@vs ~]# yum -y -install dhcp安装
[root@vs ~]# cd /etc/dhcp/
[root@vs dhcp]# ls
dhclient.d dhclient-exit-hooks.d dhcpd6.conf dhcpd.conf scripts
[root@vs dhcp]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example ./dhcpd.conf -f
cp:是否覆盖"./dhcpd.conf"? y
[root@vs dhcp]# vim dhcpd.conf
# dhcpd.conf
#
# Sample configuration file for ISC dhcpd
#
# option definitions common to all supported networks...
option domain-name "hehe.com";#定义选项
option domain-name-servers 192.1681.6;#dhcp服务器地址
default-lease-time 3600;#默认租约期限
max-lease-time 7200;#最长租约期限
..................
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.8.8 192.168.8.50 #起始地址
}
}定义子网和作用域
................
host passacaglia {
hardware ethernet 0:0:c0:5d:bd:95;#根据主机名那台主机绑定分配ip地址
filename "vmunix.passacaglia";
server-name "toccata.fugue.com";
}
host fantasia {
hardware ethernet 08:00:07:26:c0:a5;#根据名mac主机绑定分配ip地址
option roulers 192.168.1.1 #指定网关
fixed-address 192.168.1.6;
}
其他不用的配置行注释掉,用.,$s/^[^#]/#/g行首非#号添加#
[root@vs ~]systemctl start dhcpd.service#启动服务
[root@vs ~]# less /var/lib/dhcpd/dhcpd.leases#查看分发出去的客户机租约
其他配置:
filename:指明引导文件名称
例如: filename"pxelinux.0";
next-server:指明引导所在的服务器主机的ip地址
例如: next-server 192.168.1.6;
- 客户端命令:dhclient
-d 运行在前台
二、tftp服务
1、tftp定义
TFTP(Trivial File Transfer Protocol)简单文件传输协议是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务端口号为utp协议的69。
2、tftp作用
通过tfrp server加载 (bootloader,kernel,initrd)
3、安装
[root@vs ~]# yum -y install tftp-server tftp#安装tftp和tftp服务
三、httpd服务和syslinux
1、httpd服务提供yum repository下载路径和kickstart文件提供安装配置
2、syslinux是一个的引导加载程序,需要他的pxelinux.0文件。
3、PXE安装
* PXE: preboot excution environment
* 首先 由dhcp分配给主机ip,netmask,gw,dns,通过tfrp server加载(bootloader,kernel,initrd),然后到yum repository可以通过 (ftp,http,nfs),由kickstart自动应答文件提供安装配置,完成自动化安装。
四、CentOS6的pxe自动化安装示例:
[root@bogon ~]# yum install dhcp tftp-server tftp syslinux vsftpd -y#安装pex所需的程序包
[root@bogon ~]# cd /etc/dhcp #切换目录
[root@bogon dhcp]# ls
dhclient.d dhclient-exit-hooks.d dhcpd6.conf dhcpd.conf
[root@bogon dhcp]# cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample ./dhcpd.conf
#拷贝配置文件
cp: overwrite `./dhcpd.conf'? y
[root@bogon dhcp]# vim dhcpd.conf#编辑dhcp配置文件
.........
# option definitions common to all supported networks...
option domain-name "hehe.com";
option domain-name-servers 192.168.3.133; #dhcp服务器地址
default-lease-time 600; #默认租期
max-lease-time 7200;
..........
log-facility local7;
..............
subnet 192.168.3.0 netmask 255.255.255.0 { #定义子网
range 192.168.3.3 192.168.3.20; #地址范围
filename "pxelinux.0"; #引导文件
next-server 192.168.3.133;
}
[root@bogon dhcp]# service dhcpd configtest #语法检查
Syntax: OK
[root@bogon dhcp]# service dhcpd start #启动dhcp服务
Starting dhcpd: [ OK ]
[root@bogon dhcp]# vim /etc/xinetd.d/tftp #编辑超级守护进程里面的tftp设置
tftp设置
[root@bogon dhcp]# chkconfig dhcpd on #开机自动启动dhcp服务
[root@bogon dhcp]# service xinetd restart #重启超级守护进程
Stopping xinetd: [FAILED]
Starting xinetd: [ OK ]
[root@bogon dhcp]# chkconfig xinetd on #开机自动启动超级守护进程
[root@bogon dhcp]# ss -unl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
UNCONN 0 0 *:67 *:* #dhcp服务已经启动
UNCONN 0 0 *:68 *:*
UNCONN 0 0 *:69 *:* #超级守护进程已启动
[root@bogon ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ #拷贝pxelinux文件
[root@bogon ~]# tftp 192.168.3.133 #测试tftp下载服务
tftp> get pxelinux.0
tftp> quit
[root@bogon ~]# ls
anaconda-ks.cfg install.log meun pxelinux.0
[root@bogon ~]# mkdir /media/cdrom #创建光盘挂载目录
[root@bogon ~]# mount -r /dev/cdrom /media/cdrom #挂载光盘
[root@bogon ~]# ls /media/cdrom #查询光盘内容
[root@bogon ~]# cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/#拷贝光盘文件
[root@bogon ~]# cp /media/cdrom/isolinux/{boot.msg,vesamenu.c32,splash.jpg} /var/lib/tftpboot/#拷贝光盘文件
[root@bogon ~]# mkdir /var/lib/tftpboot/pxelinux.cfg/#创建目录
[root@bogon ~]# cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default#拷贝启动引导文件
[root@bogon ~]# chmod +w /var/lib/tftpboot/pxelinux.cfg/default #修改写入权限
[root@bogon ~]# vim /var/lib/tftpboot/pxelinux.cfg/default #编辑
default vesamenu.c32
#prompt 1
timeout 600
display boot.msg
menu background splash.jpg #颜色背景配置段
menu title Welcome to CentOS 6.9!
menu color border 0 #ffffffff #00000000
menu color sel 7 #ffffffff #ff000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #ffffffff #00000000
menu color unsel 0 #ffffffff #00000000
menu color hotsel 0 #ff000000 #ffffffff
menu color hotkey 7 #ffffffff #ff000000
menu color scrollbar 0 #ffffffff #00000000
label autoinst
menu label ^Auto Install CentOS #新建自动安装项
menu default
kernel vmlinuz
append initrd=initrd.img ks=ftp://192.168.3.133/pub/centos6.cfg #指明ks地址
............
[root@bogon ~]# mkdir /var/ftp/pub/centos #创建仓库存放目录
[root@bogon ~]# mount --bind /media/cdrom/ /var/ftp/pub/centos #绑定挂载cdrom到新创建仓库目录
[root@bogon ~]# ls /var/ftp/pub/centos/ #测试
[root@bogon ~]# vim anaconda-ks.cfg #编辑ks
#platform=x86, AMD64, 或 Intel EM64T
#version=DEVEL
# Firewall configuration
firewall --disabled
# Install OS instead of upgrade
install
url --url = "ftp://192.168.3.133/pub/centos"
lang en_US.UTF-8
keyboard us
# Root password
rootpw 123456
# 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
# Do not configure the X Window System
skipx
# Installation logging level
logging --level=info
key --skip
# Reboot after installation
reboot
# System timezone
timezone Asia/Shanghai
# Network information
network --bootproto=dhcp --device=eth0 --onboot=on
# System bootloader configuration
bootloader --location=mbr
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part swap --fstype="swap" --size=1024
part / --fstype="ext4" --grow --size=1
%packages
@base
@compat-libraries
@core
@debugging
@development
@server-policy
@workstation-policy
python-dmidecode
sgpio
device-mapper-persistent-data
systemtap-client
%end
[root@bogon ~]# cp anaconda-ks.cfg /var/ftp/pub/centos6.cfg
[root@bogon ~]# service vsftpd start#启动vsftpd服务
Starting vsftpd for vsftpd: [ OK ]
[root@bogon ~]# ss -unl #查看tftp启动在69号端口
客户端启动安装测试:
自动获取地址
五、CentOS7的pxe自动化安装示例:
第一步准备tftp server:
[root@vs ~]# yum -y install tftp-server tftp安装tftp和tftp服务
[root@vs ~]# systemctl start tftp #启动
[root@vs ~]# tftp 192.168.1.6 #登录tftp测试
tftp> status#查询信息
Connected to 192.168.1.6.
Mode: netascii Verbose: off Tracing: off Literal: off
Rexmt-interval: 5 seconds, Max-timeout: 25 seconds
tftp> quit#退出
默认的文件目录:/var/lib/tftpboop/把文件放在这里
第二步准备dhcp服务器:
安装dhcpd服务
[root@vs dhcp]# vim dhcpd.conf#编辑dhcpd配置文件
option domain-name "hehe.com";
option domain-name-servers 192.168.1.6;#dhcp服务器地址
option routers 192.168.1.6;#默认路由
default-lease-time 600;
max-lease-time 7200;
..................
log-facility local7;
.......................
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.80 192.168.1.90;#地址池
filename "pxelinux.0";#配置文件名称
next-server 192.168.1.6; #tftp服务器地址
}
[root@vs ~]# systemctl start dhcpd #启动dhcp服务
[root@vs ~]# ss -unl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
UNCONN 0 0 *:67 *:* #端口已启动
第三步准备yum仓库
安装httpd服务
[root@samba-105 ~]# yum -y install httpd #安装httpd
[root@samba-105 ~]# mkdir /var/www/html/centos/7/x86_64 -pv创建目录
[root@samba-105 ~]# mount -r /dev/cdrom /var/www/html/centos/7/x86_64 #挂载光盘上的文件
[root@samba-105 ~]# systemctl start httpd.service启动httpd
web访问镜像目录
[root@samba-105 ~]# mkdir /var/www/html/kickstarts/ #创建ks目录
[root@samba-105 ~]# cp anaconda-ks.cfg /var/www/html/kickstarts/centos7.cfg
[root@samba-105 ~]# vim /var/www/html/kickstarts/centos7.cfg #编辑ks应答文件
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Firewall configuration
firewall --disabled
# Install OS instead of upgrade
install
#Use network installation
url --url="http://http://172.16.15.105/centos/7/x86_64/"
# Root password
rootpw --iscrypted $1$lgzpzCCE$Y6xpvPBLom/J4zAipUjfr. ##此密码为123.com
# System authorization information
auth useshadow passalgo=sha512
# Use graphical install
graphical
firstboot disable
# System keyboard
keyboard us
# System language
lang en_US
# SELinux configuration
selinux disabled
# Installation logging level
logging level=info
# System timezone
timezone Europe/Amsterdam
# System bootloader configuration
# Reboot afer installing
reboot ##一定要有此 选项否则操作系统安装完后不会自动重启。
######
bootloader location=mbr
clearpart --all --initlabel
part swap --asprimary --fstype="swap" --size=1024
part /boot --fstype xfs --size=300
part pv.01 --size=1 --grow
volgroup root_vg01 pv.01
logvol / --fstype xfs --name=lv_01 --vgname=root_vg01 --size=1 --grow
%packages ###要安装的包
@^minimal
@core
acpid
iputils
man
net-tools
ntp
ntpdate
parted
vim-enhanced
wget
%end ###以%end结尾
#%addon com_redhat_kdump --disable --reserve-mb='auto'
#%end
%post #--nochroot --log=/mnt/sysimage/var/log/ks.post01.log
mkdir /root/test
%end
[root@samba-105 ~]# yum -y install syslinux #安装syslinux
[root@samba-105 ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ #拷贝文件
[root@samba-105 ~]# cp /var/www/html/centos/7/x86_64/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/ #拷贝文件
[root@samba-105 ~]# cp /usr/share/syslinux/{chain.c32,menu.c32,memdisk,mboot.c32} /var/lib/tftpboot/ #拷贝文件
[root@samba-105 ~]# cd /var/lib/tftpboot/
[root@samba-105 tftpboot]# mkdir pxelinux.cfg #创建引导配置文件
[root@samba-105 tftpboot]# cd pxelinux.cfg
[root@samba-105 pxelinux.cfg]# vim default #创建启动时候菜单
LABEL linux
MENU LABEL Install CentOS 7 x86_64
KERNEL vmlinuz
APPEND initrd=initrd.img inst.repo=http://172.16.15.105/centos/7/x86_64
LABEL linux_autoinst #自动安装选项
MENU LABEL Install CentOS 7 x86_64
KERNEL vmlinuz
APPEND initrd=initrd.img inst.repo=http://172.16.15.105/centos/7/x86_64 #安装时候使用的yum仓库ks=http://172.16.15.105/kickstarts/centos7.cfg #ks文件位置
客户端测试安装:
自动获取ip地址
启动安装引导界面
六、cobbler自动化装机
1、cobbler
-
Cobbler是一个Linux服务器安装的服务,可以通过网络启动(PXE)的方式来快速安装、重装物理服务器和虚拟机,同时还可以管理DHCP,DNS等。
-
Cobbler可以使用命令行方式管理,也提供了基于Web的界面管理工具(cobbler-web),还提供了API接口,可以方便二次开发使用。
-
cobbler集成的服务有;
PXE服务支持
DHCP服务管理
DNS服务管理(可选bind,dnsmasq)
电源管理
Kickstart服务支持
YUM仓库管理
TFTP(PXE启动时需要)
Apache(提供kickstart的安装源,并提供定制化的kickstart配置)
2、cobbler的三个层次:
distro:不同的发行版系统
profile:不同配置的同一发行版系统
system:不同ip地址同一配置的同一发行版系统
3、安装配置
安装:cobbler安装yum仓库是epel源
[root@vs ~]#yum -y install cobbler dhcp tftp-server tftp httpd #安装服务
[root@vs ~]# useradd user1#创建用户
[root@vs ~]# echo "123" | passwd --stdin user1#添加密码
[root@vs ~]# tail -1 /etc/shadow#查询密码
user1:$6$tFcPsnxL$zoUdRFzeBCSbAgIOfFepsR4UI2uyUJCfoSe9cWCttpbGiHHWZI5sASzfrDf.y0wn.UhXMmN76t1GaGkc4uESu0:17754:0:99999:7:::
[root@vs ~]# cp /usr/share/syslinux/{pxelinux.0,menu.c32} /var/lib/cobbler/loaders/ #复制文件到cobbler目录
[root@vs ~]# vim /etc/cobbler/settings
server: 192.168.1.6 #修改成可以访问外网的ip地址
next_server: 192.168.1.6 #修改成可以访问外网的ip地址
default_password_crypted: "$6$tFcPsnxL$zoUdRFzeBCSbAgIOfFepsR4UI2uyUJCfoSe9cWCttpbGiHHWZI5sASzfrDf.y0wn.UhXMmN76t1GaGkc4uESu0"#修改用户密码
[root@vs ~]# systemctl start dhcpd#启动dhcp服务
[root@vs ~]# systemctl start tftp#启动tftp服务
[root@vs ~]# systemctl start rsyncd#同步启动
[root@vs ~]# systemctl start httpd#启动httpd服务
[root@vs ~]# systemctl start cobblerd#cobbler启动
[root@vs ~]# cobblerd check#配置检查
[root@vs ~]# cobblerd sync
[root@vs ~]# vim /etc/cobbler/settings#编辑配置文件
使用cobbler管理dhcp、dns、tftp、rsync启用或停止,这里我们都是默认为0,不使用cobbler管理这些服务,我们自己手动管理。
cobbler管理配置
cobbler使用格式
[root@vs ~]# cobbler #cobbler使用格式
usage
=====
cobbler <distro|profile|system|repo|image|mgmtclass|package|file> ...
[add|edit|copy|getks*|list|remove|rename|report] [options|--help]
cobbler <aclsetup|buildiso|import|list|replicate|report|reposync|sync|validateks|version|signature|get-loaders|hardlink> [options|--help]
[root@vs ~]# cobbler distro add --help#添加一个发行版系统
--name=NAME Name (Ex: Fedora-11-i386) #指明发行版名字
--kernel=KERNEL Kernel (Absolute path to kernel on filesystem)发行版特定的内核
--initrd=INITRD Initrd (Absolute path to kernel on filesystem)特定的inittrd
--arch=ARCH Architecture (valid options:
i386,x86_64,ia64,ppc,ppc64,ppc64le,s390,arm)指明此发行版的平台架构
[root@vs ~]# cobbler import --help #导入光盘镜像方式,自动生成一个distro
Usage: cobbler import [options]
Options:
-h, --help show this help message and exit
--arch=ARCH OS architecture being imported平台架构
--breed=BREED the breed being imported
--os-version=OS_VERSION
the version being imported
--path=PATH local path or rsync location
--name=NAME name, ex 'RHEL-5'对应的导入的名字
--available-as=AVAILABLE_AS
tree is here, don't mirror
--kickstart=KICKSTART_FILE
assign this kickstart file
--rsync-flags=RSYNC_FLAGS
pass additional flags to rsync
- 当使用命令时候,cobbler将把挂载的光盘内容自动复制到/var/www/html/目录下,因此要确保磁盘空间充足
[root@vs ~]# cobbler import --name="CentOS-7.0_x86_64" --path=/media/cdrom
task started: 2018-08-12_150622_import
task started (id=Media import, time=Sun Aug 12 15:06:22 2018)
.................
*** TASK COMPLETE ***
[root@vs ~]# cobbler distro list#查询已生成的distro
CentOS-7.0-x86_64
[root@vs ~]# cobbler profile list#查询已生成的profile,但此时没有kiskstart
[root@vs ~]# cobbler sync#同步配置
[root@vs ~]# systemctl restart cobblerd
CentOS-7.0-x86_64
- 测试安装,此时profile并没有kiskstart文件,但cobbler会自动提供一个最小化安装的kiskstart文件,并完成安装
-
注意:
安装过程中碰到的内存小问题,安装过程会卡主,最后超时失败测试安装系统主机必须要配置大于等于2G的内存,官方文档这么说的,否则会导致安装失败,这个坑我掉进去很久才爬出来。
安装cobbler错误:
查看导入列表,如果报如下内容,需要重启cobbler,并执行cobbler get-loaders.
xmlrpclib.Fault: <Fault 1: "cobbler.cexceptions.CX:'login failed'">
~]# systemctl restart cobblerd
~]# cobbler get-loaders