- DHCP服务
- DHCP实现
- PXE(Preboot Excution Environment) 预启动执行环境
- Cobbler
一、DHCP服务
DHCP (Dynamic Host Configuration Protocol)
动态主机配置协议,是一种局域网协议,属于UDP协议应用:为局域网内的主机分配ip地址,同时也作为内网的管理手段
使用场景:自动化安装系统,解决ipv4地址不足的问题
-
DHCP报文:共有八种报文
- DHCP DISCOVER:客户端到服务器
- DHCP OFFER :服务器到客户端
- DHCP REQUEST:客户端到服务器
- DHCP ACK :服务器到客户端
- DHCP NAK:服务器到客户端,通知用户无法分配合适的IP地址
- DHCP DECLINE :客户端到服务器,指示地址已被使用
- DHCP RELEASE:客户端到服务器,放弃网络地址和取消剩余的租约时间
- DHCP INFORM:客户端到服务器,客户端如果需要从DHCP服务器端获取更为详细的配置信息,则发送Inform报文向服务器进行请求,极少用到
-
续租:
- 50% :租赁时间达到50%时续租,向DHCP服务器发送新的DHCP REQUEST请求。如果dhcp服务没有拒绝的理由,则回应DHCP ACK信息。当DHCP客户端收到该应答信息后,就重新开始新的租用周期
- 87.5%:如果之前DHCP Server没有回应续租请求,等到租约期的7/8时,主机会再发送一次广播请求
*DHCP服务必须基于本地,
DHCP服务器一般来说应该与需要DHCP服务的客户端处于同一个网段中
这是因为DHCP服务过程基于广播,而广播只能在同一个网段内传送
-
实现跨网段的DHCP服务
- 需要在客户机网段指定一台代理(dhcrelay:中继)负责客户机与另一个网段的DHCP服务器的通信,实现IP地址的分配
- 符合RFC 1542 Compliant Routers标准的路由器可以直接实现中继的功能
二、DHCP实现
Linux DHCP协议的实现程序:dhcp, dnsmasq(包含dhcp, dns功能)
端口:
dhcp_server: 67/udp
dhcp_client: 68/udp-
配置DHCP服务器端
- DHCP服务的配置文件位于:/etc/dhcp/dhcpd.conf,打开文件后如下图:
提示模板文件/usr/share/doc/dhcp*/dhcpd.conf.sample和帮助参考位置:man 5 dhcpd.conf
直接赋值模板文件覆盖配置文件,在模板基础上修改配置
cp /usr/share/doc/dhcp*/dhcpd.conf.sample /etc/dhcp/dhcpd.conf
- 修改配置文件:
vim /etc/dhcp/dhcpd.conf
核心配置内容包含在subnet条目中,这里的配置属于全局配置
基本格式如下:
subnet SUBNET_IP netmask NETMASK_IP { range START_IP END_START; 其余设置项 }
- 例如:DHCP服务器本机IP为192.168.136.229,子网掩码:225.225.225.0,分配的地址库范围:192.168.136.10-192.168.136.30,则配置文件格式如下:
subnet 192.168.136.0 netmask 225.225.225.0 { range 192.168.136.10 192.136.136.30 }
- 配置好后,启动dhcp服务
service dhcpd start
,在另一台同网段主机上可以看到被分配的ip地址,从192.168.136.10/24开始分配
- 可以查看/var/lib/dhcpd/dhcpd.leases文件内容,查询DHCP服务器地址分配记录
其它配置选项:
filename:指明引导文件名称(用于网络安装系统)
next-server:提供引导文件的服务器IP地址(用于网络安装系统)检查配置文件语法
service dhcpd configtestDHCP客户端(dhclient)
自动获取的IP信息文件:/var/lib/dhclient目录下,可以看到被分配的地址、DHCP服务器、分配的租期时间等信息
三、PXE(Preboot Excution Environment) 预启动执行环境
(一)简介
- 基于C/S架构设计
- 支持远程主机通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统
(二)工作原理
- Client向PXE Server上的DHCP发送IP地址请求消息,DHCP检测Client是否合法(主要是检测Client的网卡MAC地址),如果合法则返回Client的IP地址,同时将启动文件pxelinux.0的位置信息一并传送给Client
- Client向PXE Server上的TFTP发送获取pxelinux.0请求消息,TFTP接收到消息之后再向Client发送pxelinux.0大小信息,试探Client是否满意,当TFTP收到Client发回的同意大小信息之后,正式向Client发送pxelinux.0
- Client执行接收到的pxelinux.0文件
- Client向TFTP Server发送针对本机的配置信息文件(在TFTP 服务的pxelinux.cfg目录下),TFTP将配置文件发回Client,继而Client根据配置文件执行后续操作。
- Client向TFTP发送Linux内核请求信息,TFTP接收到消息之后将内核文件发送给Client
- Client向TFTP发送根文件请求信息,TFTP接收到消息之后返回Linux根文件系统
- Client启动Linux内核
- Client下载安装源文件,读取自动化安装脚本
(三)PXE自动化安装CentOS 7(CentOS7作为HTTP、DHCP、TFTP服务器)
(1)安装前准备关闭SELinux和防火墙,DHCP服务器设置为静态IP
-
(2)安装相关软件包httpd, tftp-server, dhcp, syslinux
- httpd服务提供yum源服务,
- tftp服务器为客户机提供安装系统所需的启动文件、启动菜单、内核文件、伪文件系统
- dhcp服务器为客户机提供IP地址,并将tftp服务器的地址提供给客户机
- 启动文件、启动菜单需要安装syslinux软件包后获得
- 执行命令:
yum install httpd tftp-server dhcp syslinux
-
(3)配置yum源服务
- 将httpd服务设置为开机自启动:
systemctl enable httpd
- 打开httpd服务:
systemctl start httpd
- 配置yum源1:建立centos7目录
mkdir -p /var/www/html/centos/7
- 配置yum源2:复制centos7光盘文件内容至centos7目录下,这里将光盘挂载至目录下,效果与前者相同,实际中应该复制至硬盘,保证系统安装执行效率
mount /dev/sr0 /var/www/html/centos/7
- 将httpd服务设置为开机自启动:
-
(4)准备kickstart文件
- 准备桌面和最小化安装两份文件,可以根据/root/anaconda-ks.cfg文件修改
注意:使用system-config-kickstart时,CentOS7环境下可能出现无法选择软件包的情况,此时需要将yum源配置文件的首个源配置信息的源标识符改名为"development",即可正常选择软件包
准备的kickstart文件:ks7.cfg为桌面安装使用,ks7-mini为最小化安装使用
mkdir /var/www/html/ksdir
建立kickstart文件目录
cp /root/anaconda-ks.cfg /var/www/html/ksdir/ks7.cfg
复制模板
cp /root/anaconda-ks.cfg /var/www/html/ksdir/ks7-mini.cfg
复制模板两份kickstart文件示例如下:
vim /var/www/html/ksdir/ks7.cfg #platform=x86, AMD64, or Intel EM64T #version=DEVEL # Install OS instead of upgrade install # X Window System configuration information xconfig --startxonboot # Keyboard layouts # old format: keyboard us # new format: keyboard --vckeymap=us --xlayouts='us' # Root password rootpw --iscrypted $1$B2Ve3zbv$S2d5TSE.8Iwbo4o3BoRxM1 # Use network installation url --url="http://192.168.136.230/centos/7" # System language lang en_US user --name=hellopeiyang --password=$6$vFs7gFIqwNrxjVEx$UwrqEc4BanhssQpLa./g/ySepGSRLNll65NvI/PSJuavDVQJvVXukrUmHPHDX7tVyWb4uXlyEXBTYmVD0KxLK/ --iscrypted # Firewall configuration firewall --disabled # System authorization information auth --useshadow --passalgo=sha512 # Use text mode install text # Run the Setup Agent on first boot firstboot --enable # SELinux configuration selinux --disabled # System services services --disabled="chronyd" ignoredisk --only-use=sda # Network information network --bootproto=dhcp --device=ens33 --onboot=on # Reboot after installation reboot # System timezone timezone Asia/Shanghai --nontp # System bootloader configuration bootloader --append="crashkernel=auto" --location=mbr --boot-drive=sda # Clear the Master Boot Record zerombr # Partition clearing information clearpart --all # Disk partitioning information part /app --fstype="xfs" --ondisk=sda --size=51200 part / --fstype="xfs" --ondisk=sda --size=51200 part swap --fstype="swap" --ondisk=sda --size=2048 part /boot --fstype="xfs" --ondisk=sda --size=1024 %post systemctl enable autofs rm -rf /etc/yum.repos.d/* cat > /etc/yum.repos.d/base.repo <<eof [base] name=base baseurl=file:///misc/cd gpgcheck=0 eof %end %packages @^graphical-server-environment @base @core @desktop-debugging @dial-up @fonts @gnome-desktop @guest-agents @guest-desktop-agents @hardware-monitoring @input-methods @internet-browser @multimedia @print-client @x11 wodim autofs %end
vim /var/www/html/ksdir/ks7-mini.cfg #platform=x86, AMD64, or Intel EM64T #version=DEVEL # Install OS instead of upgrade install # Keyboard layouts # old format: keyboard us # new format: keyboard --vckeymap=us --xlayouts='us' # Root password rootpw --iscrypted $1$C8HufR6L$JuAxRzQnv7dGxVw.xDNLc0 # Use network installation url --url="http://192.168.136.230/centos/7" # System language lang en_US user --name=hellopeiyang --password=$6$hbPuvZcl0TRrYyFG$Vb0pNhuS/uBLMpq6nbDzruRtZr0K1qGmCey6.PL3dyKA.iUvZds4JRgQ8LpzTJ.6STbuFD2Tu5xgXt68KIjrc/ --iscrypted --gecos="hellopeiyang" # Firewall configuration firewall --disabled # System authorization information auth --useshadow --passalgo=sha512 # Use text mode install text # Run the Setup Agent on first boot firstboot --enable # SELinux configuration selinux --disabled # System services services --disabled="chronyd" ignoredisk --only-use=sda # Network information network --bootproto=dhcp --device=ens33 --onboot=on # Reboot after installation reboot # System timezone timezone Asia/Shanghai --nontp # System bootloader configuration bootloader --append="crashkernel=auto" --location=mbr --boot-drive=sda # Clear the Master Boot Record zerombr # Partition clearing information clearpart --all # Disk partitioning information part /app --fstype="xfs" --ondisk=sda --size=51200 part / --fstype="xfs" --ondisk=sda --size=51200 part swap --fstype="swap" --ondisk=sda --size=2048 part /boot --fstype="xfs" --ondisk=sda --size=1024 %post systemctl enable autofs rm -rf /etc/yum.repos.d/* cat > /etc/yum.repos.d/base.repo <<eof [base] name=base baseurl=file:///misc/cd gpgcheck=0 eof %end %packages @^minimal @core autofs %end
- kickstart文件的权限可能不合适,为文件的所有用户增加读权限
chmod +r /var/www/html/ksdir/{rs7.cfg,rs7-mini.cfg}
- 准备桌面和最小化安装两份文件,可以根据/root/anaconda-ks.cfg文件修改
-
(5)配置TFTP服务
- 设置tftp服务开机自启动:
systemctl enable tftp.socket
- 开启tftp服务:
systemctl start tftp.socket
- 设置tftp服务开机自启动:
-
(6)配置DHCP服务
复制dhcp配置模板文件
cp /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcpd.conf
编辑/etc/dhcp/dhcpd.conf文件,subnet字段修改后如下:
subnet 192.168.136.0 netmask 255.255.255.0 { range 192.168.136.10 192.168.136.30; next-server 192.168.136.230; filename "pxelinux.0"; }
- 将dhcp服务设置为自启动:
systemctl enable dhcpd
- 启动dhcp服务:
systemctl start dhcpd
-
(7)准备PXE相关文件
- 建立PXE启动配置文件存放目录:
mkdir /var/lib/tftpboot/pxelinux.cfg
- 复制启动相关文件:
cp /usr/share/syslinux/{pxelinux.0,menu.c32} /var/lib/tftpboot/
- 复制内核, initrd文件:
cp /misc/cd/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/
- 复制启动项设置文件(必须重命名为default):
cp /misc/cd/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
- 文件目录结构如下:
- 建立PXE启动配置文件存放目录:
(8)修改启动菜单文件
vim /var/lib/tftpboot/pxelinux.cfg/default
default menu.c32 //启动菜单风格
timeout 600
menu title CentOS Linux 7 PXE Install
label desktop //桌面自动安装
menu label Install CentOS Linux 7 ^Desktop
kernel vmlinuz
append initrd=initrd.img ks=http://192.168.136.230/ksdir/ks7.cfg
label mini //最小化自动安装
menu label Install CentOS Linux 7 M^ini
kernel vmlinuz
append initrd=initrd.img ks=http://192.168.136.230/ksdir/ks7-mini.cfg
label manual //手动安装
menu label Install CentOS Linux 7 ^Manual
kernel vmlinuz
append initrd=initrd.img inst.repo=http://192.168.136.230/centos/7
label local //本地硬盘启动
menu default
menu label Boot from ^local drive
localboot 0xffff
menu end
-
(9)从网卡启动主机,正确进入PXE安装的启动项
(四)PXE自动化安装CentOS 6 (CentOS 6作为FTP、DHCP、TFTP服务器)
(1)安装前准备:关闭SELinux和防火墙,DHCP服务器设置为静态IP
-
(2)安装相关软件包vsftpd, tftp-server, dhcp, syslinux
- 安装软件包:
yum install vsftpd tftp-server dhcp syslinux
- 安装软件包:
-
(3)配置yum源服务
- 建立centos6目录:
mkdir -p /var/ftp/pub/centos/6
- 配置yum源:
mount /dev/sr0 /var/ftp/pub/centos/6
- 设置vsftpd服务为自启动:
chkconfig vsftpd on
- 启动vsftpd服务:
service vsftpd start
- 建立centos6目录:
-
(4)准备kickstart文件
与自动安装CentOS7相似,准备桌面和最小化安装两份文件
ks6.cfg为桌面安装使用,ks7-mini为最小化安装使用
mkdir /var/ftp/pub/ksdir
建立kickstart文件目录
cp /root/ananconda-ks.cfg /var/ftp/pub/ksdir/ks6.cfg
复制模板
cp /root/ananconda-ks.cfg /var/ftp/pub/ksdir/ks6-mini.cfg
复制模板两份kickstart文件示例如下:
vim /var/ftp/pub/ksdir/ks6.cfg #platform=x86, AMD64, or Intel EM64T #version=DEVEL # Firewall configuration firewall --disabled # Install OS instead of upgrade install # Use network installation url --url="ftp://192.168.136.229/pub/centos/6" #repo --name="CentOS" --baseurl=cdrom:sr0 --cost=100 # Root password rootpw --iscrypted $1$QmHn/VZt$YE/c30khjQ1i1hSHeMN8h/ # System authorization information auth --useshadow --passalgo=sha512 # Use text mode install text firstboot --disable # System keyboard keyboard us # System language lang en_US # SELinux configuration selinux --disabled # Installation logging level logging --level=info # Reboot after installation reboot # System timezone timezone Asia/Shanghai # Network information network --bootproto=dhcp --device=eth0 --onboot=on # System bootloader configuration bootloader --append="crashkernel=auto rhgb quiet" --location=mbr --driveorder="sda" # Clear the Master Boot Record zerombr # Partition clearing information clearpart --all # Disk partitioning information part /boot --fstype="ext4" --size=1000 part / --fstype="ext4" --size=50000 part swap --fstype="swap" --size=2000 part /app --fstype="ext4" --size=20000 %post rm -rf /etc/yum.repos.d/* cat > /etc/yum.repos.d/base.repo <<eof [base] name=base baseurl=file:///misc/cd gpgcheck=0 eof %end %packages @base @basic-desktop @core @debugging @desktop-debugging @desktop-platform @directory-client @fonts @general-desktop @graphical-admin-tools @input-methods @internet-applications @internet-browser @java-platform @legacy-x @network-file-system-client @office-suite @print-client @remote-desktop-clients @server-platform @server-policy @workstation-policy @x11 abrt-gui certmonger device-mapper-persistent-data genisoimage krb5-workstation libXmu mtools oddjob pam_krb5 pax python-dmidecode samba-winbind sgpio wodim %end
vim /var/ftp/pub/ksdir/ks6-mini.cfg #platform=x86, AMD64, or Intel EM64T #version=DEVEL # Firewall configuration firewall --disabled # Install OS instead of upgrade install # Use network installation url --url="ftp://192.168.136.229/pub/centos/6" # Root password rootpw --iscrypted $1$H3QsWt7L$uezUXA.OuYFONmwP027tS. # System authorization information auth --useshadow --passalgo=sha512 # Use text mode install text firstboot --disable # System keyboard keyboard us # System language lang en_US # SELinux configuration selinux --disabled # Installation logging level logging --level=info # Reboot after installation reboot # System timezone timezone Asia/Shanghai # Network information network --bootproto=dhcp --device=eth0 --onboot=on # System bootloader configuration bootloader --append="crashkernel=auto rhgb quiet" --location=mbr --driveorder="sda" # Clear the Master Boot Record zerombr # Partition clearing information clearpart --all # Disk partitioning information part /boot --fstype="ext4" --size=1000 part / --fstype="ext4" --size=50000 part swap --fstype="swap" --size=2000 part /app --fstype="ext4" --size=20000 %post rm -rf /etc/yum.repos.d/* cat > /etc/yum.repos.d/base.repo <<eof [base] name=base baseurl=file:///misc/cd gpgcheck=0 eof %end %packages @core @server-policy @workstation-policy autofs %end
- kickstart文件的权限可能不合适,统一增加写权限
chmod +r /var/ftp/pub/ksdir/*
-
(5)配置TFTP服务
- 启动tftp服务:
chkconfig tftp on //tftp服务自启动 service xinetd restart //xinetd服务重启服务,为tftp服务监听端口
-
(6)配置DHCP服务
复制dhcp配置模板文件
cp /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcpd.conf
编辑/etc/dhcp/dhcpd.conf文件,subnet字段修改后入下:
subnet 192.168.136.0 netmask 255.255.255.0 {
range 192.168.136.10 192.168.136.30;
next-server 192.168.136.229;
filename "pxelinux.0";
}
- dhcpd服务自启动:
chkconfig dhcpd on
- 启动dhcp服务:
service dhcpd start
-
(7)准备PXE相关文件
- 建立PXE启动配置文件存放目录:
mkdir /var/lib/tftpboot/pxelinux.cfg
- 复制启动相关文件:
cp /usr/share/syslinux/{pxelinux.0,menu.c32} /var/lib/tftpboot
- 复制内核,initrd文件:
cp /misc/cd/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/
- 复制启动项设置文件(必须重命名为default):
cp /misc/cd/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
- 文件目录结构如下:
- 建立PXE启动配置文件存放目录:
- (8)修改启动菜单文件
vim /var/lib/tftpboot/pxelinux.cfg/default
default menu.c32
timeout 600
menu title CentOS Linux 6 PXE Install
label desktop
menu label Install CentOS Linux 6 ^Desktop
kernel vmlinuz
append initrd=initrd.img ks=ftp://192.168.136.229/pub/ksdir/ks6.cfg
label mini
menu label Install CentOS Linux 6 M^ini
kernel vmlinuz
append initrd=initrd.img ks=ftp://192.168.136.229/pub/ksdir/ks6-mini.cfg
label manual
menu label Install CentOS Linux 6 ^Manual
kernel vmlinuz
append initrd=initrd.img inst.repo=ftp://192.168.136.229/pub/centos/6
label local
menu default
menu label Boot from ^local drive
localboot 0xfffmenu end
menu end
- (9)从网卡启动主机,正确进入PXE安装的启动项
(五)PXE自动化安装CentOS 6 和CentOS 7(CentOS 7作为HTTP、DHCP、TFTP服务器)
(1)安装前准备:关闭SELinux和防火墙,DHCP服务器设置为静态IP
(2)安装相关软件包httpd, dhcp, tftp-server, syslinux
yum install httpd dhcp tftp-server syslinux
-
(3)配置CentOS 6和CentOS 7的源
- 将httpd服务设置为自启动:
systemctl enable httpd
- 打开httpd服务:
systemctl start httpd
- 将httpd服务设置为自启动:
-
配置centos 7的yum源:
mkdir -p /var/www/html/centos/6
mount /dev/sr1 /var/www/html/centos/6
mkdir -p /var/www/html/centos/7
mount /dev/sr0 /var/www/html/centos/7
- (4)准备kickstart文件
- 调整上面两个实验中的kickstart文件,分别为ks7.cfg, ks7-mini.cfg, ks6.cfg, ks6-mini.cfg。主要调整的是远程安装路径,即
usl --url=
字段后面的设置 - 将kickstart文件复制到指定目录:
mkdir -p /var/www/html/ksdir/{6,7}
vim /var/www/html/ksdir/6/ks6.cfg
vim /var/www/html/ksdir/6/ks6-mini.cfg
vim /var/www/html/ksdir/7/ks7.cfg
vim /var/www/html/ksdir/7/ks7-mini.cfg
- 调整上面两个实验中的kickstart文件,分别为ks7.cfg, ks7-mini.cfg, ks6.cfg, ks6-mini.cfg。主要调整的是远程安装路径,即
*(5)配置TFTP服务:
设置tftp服务开机自启动:
systemctl enable tftp.socket
开启tftp服务:
systemctl start tftp.socket
-
(6)配置DHCP服务
- 复制dhcp配置模板文件
cp /usr/share/doc/dhcp*/dhcpd.conf.example /etc/dhcp/dhcpd.conf
- 编辑/etc/dhcp/dhcpd.conf文件,subnet字段修改后如下:
subnet 192.168.136.0 netmask 255.255.255.0 { range 192.168.136.10 192.168.136.30; next-server 192.168.136.230; filename "pxelinux.0"; }
- 将dhcp服务设置为自启动:
systemctl enable dhcpd
- 启动dhcp服务:
systemctl start dhcpd
- 复制dhcp配置模板文件
-
(7)准备PXE相关文件
- 建立PXE启动配置文件存放目录:
mkdir /var/lib/tftpboot/pxelinux.cfg
- 分别建立存放CentOS6和7的内核相关文件的目录:
mkdir -p /var/lib/tftpboot/centos/6
mkdir -p /var/lib/tftpboot/centos/7
- 复制启动相关文件:
cp /usr/share/syslinux/{pxelinux.0,menu.c32} /var/lib/tftpboot
- 分别复制CentOS 6和7的内核与initrd文件至不同的目录:
cp /var/www/html/centos/6/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/centos/6
cp /var/www/html/centos/7/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/centos/7
- 复制启动项设置文件(必须重命名为default)
cp /var/www/html/centos/7/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
- 文件目录结构如下:
- 建立PXE启动配置文件存放目录:
(8)修改启动菜单文件:
注意CentOS6和CentOS7系统内核相关文件的不同路径需要相应修改配置文件的设置
default menu.c32
timeout 600
menu title CentOS Linux PXE Install
label desktop 7
menu label Install CentOS Linux 7 ^Desktop
kernel centos/7/vmlinuz
append initrd=centos/7/initrd.img ks=http://192.168.136.230/ksdir/7/ks7.cfg
label desktop 6
menu label Install CentOS Linux 6 D^esktop
kernel centos/6/vmlinuz
append initrd=centos/6/initrd.img ks=http://192.168.136.230/ksdir/6/ks6.cfg
label mini 7
menu label Install CentOS Linux 7 M^ini
kernel centos/7/vmlinuz
append initrd=centos/7/initrd.img ks=http://192.168.136.230/ksdir/7/ks7-mini.cfg
label mini 6
menu label Install CentOS Linux 6 Mi^ni
kernel centos/6/vmlinuz
append initrd=centos/6/initrd.img ks=http://192.168.136.230/ksdir/6/ks6-mini.cfg
label manual 7
menu label Install CentOS Linux 7 ^Manual
kernel centos/7/vmlinuz
append initrd=centos/7/initrd.img inst.repo=http://192.168.136.230/centos/7
label manual 6
menu label Install CentOS Linux 6 M^anual
kernel centos/6/vmlinuz
append initrd=centos/6/initrd.img inst.repo=http://192.168.136.230/centos/6
label local
menu default
menu label Boot from ^local drive
localboot 0xffff
menu end
- (9)从网卡启动主机,正确进入PXE安装的启动项
可以同时安装CentOS6 和CentOS 7
四、cobbler
(一)cobbler简介
- 功能:快速网络安装Linux系统
- PXE的二次封装,将多种安装参数封装到一个菜单
- 集成了PXE、DHCP、rsync、http、DNS、Kickstart、IPMI(电源管理)多种服务
- 由Python编写
- 提供CLI和Web管理两种方式
(二)cobbler工作流程
- client裸机配置了从网络启动后,开机后会广播包请求DHCP服务器(cobbler server)发送其分配好的一个IP
- DHCP服务器(cobbler server)收到请求后发送responese,包括其ip地址
- client裸机拿到ip后再向cobbler server发送请求OS引导文件的请求
- cobbler server告诉裸机OS引导文件的名字和TFTP server的ip和port
- client裸机通过上面告知的TFTP server地址通信,下载引导文件
- client裸机执行执行该引导文件,确定加载信息,选择要安装的os,期间会再向cobbler server请求kickstart文件和os image
- cobbler server发送请求的kickstart和os iamge
- client裸机加载kickstart文件
- client裸机接收os image,安装该os image
(三)cobbler相关术语
- 发行版:
表示一个操作系统版本,它承载了内核和initrd的信息,以及内核参数等其他数据 - 配置文件:
包含一个发行版、一个kickstart 文件以及可能的存储库,还包含更多特定的内核参数等其他数据 - 系统:
表示要配置的主机,它包含一个配置文件或一个镜像,还包含IP和MAC地址、电源管理(地址、凭据、类型)以及更为专业的数据等信息 - 存储库:
保存一个yum或rsync存储库的镜像信息 - 镜像:
可替换一个包含不属于此类别的文件的发行版对象(例如,无法分为内核和initrd的对象)
(四)cobbler配置文件
- 配置文件目录:/etc/cobbler
- /etc/cobbler/settings:cobbler 主配置文件
- /etc/cobbler/iso/:iso模板配置文件
- /etc/cobbler/pxe:pxe模板文件
- /etc/cobbler/power:电源配置文件
- /etc/cobbler/user.conf:web服务授权配置文件
- /etc/cobbler/users.digest:web访问的用户名密码配置文件
- /etc/cobbler/dhcp.template:dhcp服务器的配置模板
- /etc/cobbler/dnsmasq.template:dns服务器的配置模板
- /etc/cobbler/tftpd.template:tftp服务的配置模板
- /etc/cobbler/modules.conf:模块的配置文件
(五)cobbler目录
- 数据目录
/var/lib/cobbler/config/:用于存放distros, system, profiles 等信息配置文件
/var/lib/cobbler/triggers/:用于存放用户定义的cobbler命令
/var/lib/cobbler/kickstart/:默认存放kickstart文件
/var/lib/cobbler/loaders/:存放各种引导程序 - 镜像目录
/var/www/cobbler/ks_mirror/:导入的发行版系统的所有数据
/var/www/cobbler/images/:导入发行版的kernel和initrd镜像用于远程网络启动
/var/www/cobbler/repo_mirror/:yum 仓库存储目录 - 日志目录
/var/log/cobbler/installing:客户端安装日志
/var/log/cobbler/cobbler.log:cobbler日志
(六)cobbler命令
- cobbler check:核对当前设置是否有问题
- cobbler list:列出所有的cobbler元素
- cobbler report:列出元素的详细信息
- cobbler sync:同步配置到数据目录,更改配置最好都要执行下
- cobbler reposync:同步yum仓库
- cobbler distro:查看导入的发行版系统信息
- cobbler system:查看添加的系统信息
- cobbler profile:查看配置信息
(七)cobbler重要参数
- /etc/cobbler/settings中重要的参数设置
- default_password_crypted:"$1$gEc7ilpP$pg5iSOj/mlxTxEslhRvyp/"
- manage_dhcp:1
- manage_tftpd:1
- pxe_just_once:1
- next_server:< tftp服务器的IP 地址>
- server:<cobbler服务器的IP 地址>
(八)cobbler相关管理
- 下载启动菜单:cobbler get-loaders
- 管理distro
cobbler import --name=centos-6.9-x86_64 --path=/media/cdrom
- 管理profile
cobbler profile add --name=centos-6.9-x86_64-basic --distro=centos-6.9-x86_64 --kickstart=/tmp/centos-6.9-x86_64.cfg
- 查看profiles
cobbler profile list
- 查看引导文件
cat /var/lib/tftpboot/pxelinux.cfg/default
- 同步cobbler配置
cobbler sync
(九)cobbler实现步骤
- 安装包,并设置服务
- 检查配置
- 根据上面提示修改配置
- 下载启动相关文件菜单
- 配置DHCP服务
- 分别导入centos的安装源,并查看
- 准备kickstart文件并导入cobbler
- 测试
(十)cobbler实现Web管理
- cobbler-web
提供cobbler的基于web管理界面,epel源
yum install cobbler-web
- 认证方式
- 定义认证方法:/etc/cobbler/modules.conf
- 使用authn_pam模块认证cobbler_web用户
- [authentication]块中指定module = authn_pam
- 创建cobbler用户:
useradd cobbler
- 修改文件/etc/cobbler/users.conf
[admins]
admin = "cobbler"
- 使用authn_configfile模块认证cobbler_web用户
- [authentication]块中module=authn_configfile
- 创建其认证文件/etc/cobbler/users.digest,并添加所需的用户
htdigest -c /etc/cobbler/users.digest Cobbler admin - 注意:添加第一个用户时,使用“-c”选项,后续添加其他用户时不要再使用,cobbler_web的realm只能为Cobbler
- Web访问cobbler
- 重启cobblerd服务
- 通过http://cobblerserver/cobbler_web访问即可
(十一)cobbler实现自主选择安装CentOS6或7系统
(1)安装cobbler并配置相关服务
yum install cobbler
systemctl enable cobblerd
systemctl start cobblerd
systemctl enable tftp
systemctl start tftp
systemctl enable httpd
systemctl start httpd
(2)执行cobbler check
命令,根据提示修改设置
- 执行
cobbler check
命令,反馈类似结果
- 根据问题,修改/etc/cobbler/settings文件,修改后如下:
vim /etc/cobbler/settings
default_password_crypted: "$1$3AUU7.oO$g7Dkuzmu1uFmcp4HYRLw9." //加密密码
next_server: 192.168.136.230 //tftp服务器IP
manage_dhcp: 1 //管理dhcp服务
server: 192.168.136.230 //cobbler服务器IP
vim /etc/cobbler/dhcp.template //修改dhcp模板文件
subnet 192.168.136.0 netmask 255.255.255.0 {
range dynamic-bootp 192.168.136.10 192.168.136.30;
注明:密码可以用openssl passwd -1
来生成
- 重启cobbler服务并同步配置到数据目录,同步成功结果如下
systemctl restart cobblerd
cobbler sync
(3)准备启动文件和菜单风格文件
- 具备联网条件时,执行
cobbler get-loaders
- 不具备联网条件时,操作类似PXE的操作
cp /var/lib/tftpboot/{menu.c32,pxelinux.0} /var/lib/cobbler/loaders
(4)导入yum源
- 导入centos 7.3的yum源,/mnt/centos6为centos6的光盘挂载点
cobbler import --path=/mnt/centos7 --name=centos7.3 --arch=x86_64
- 导入centos 6.9的yum源,/mnt/centos6为centos6的光盘挂载点
cobbler import --path=/mnt/centos6 --name=centos6.9 --arch=x86_64
- 查看导入的发行版及其配置信息,确认导入成功
cobbler distro list
查看导入的发行版信息
cobbler profile list
查看配置信息
(5)生成kickstart文件
复制CentOS 6的kickstart文件
cp /var/www/html/ksdir/6/ks6.cfg /var/lib/cobbler/kickstarts/
复制CentOS 7的kickstart文件
cp /var/www/html/ksdir/7/ks7.cfg /var/lib/cobbler/kickstarts/
删除原先导入CentOS 6的yum源时的配置信息
cobbler profile remove --name=centos6.9-x86_64
删除原先导入CentOS 7的yum源时的配置信息
cobbler profile remove --name=centos7.3-x86_64
重新生成CentOS 6的kickstart配置
cobbler profile add --name=centos6.9_desktop --distro=centos6.9-x86_64 --kickstart=/var/lib/cobbler/kickstarts/ks6.cfg
重新生成CentOS 7的kickstart配置
cobbler profile add --name=centos7.3_desktop --distro=centos7.3-x86_64 --kickstart=/var/lib/cobbler/kickstarts/ks7.cfg
同步设置到数据目录
cobbler sync