1、制作全功能的iso镜像文件
全功能的iso镜像文件指把yum源和kickstart文件都放到iso镜像文件里,这样即使没有网络也可以进行自动化安装系统。
1 准备相关文件,yum源
cp -r /misc/cd/* /app/fulliso
cp -r /misc/cd/.* /app/fulliso
rm -rf /app/fulliso/repodata/* ---删除软件包的元数据文件
cp /misc/cd/repodata/43d8fd068164b0f042845474d6a22262798b9f0d1f49ad1bf9f95b953089777d-c6-x86_64-comps.xml /app/fulliso/repodata/ ---把包组的元数据的文件拷贝过来
cd /app/fulliso
createrepo -g repodata/43d8fd068164b0f042845474d6a22262798b9f0d1f49ad1bf9f95b953089777d-c6-x86_64-comps.xml ./ ---创建仓库,会重新生成包的元数据文件
find /app/fulliso -name TRANS.TBL -exec rm {} \; ---删除所有TRANS.TBL文件
2 准备ks文件,可以以家目录下的anaconda-ks.cfg文件为模板进行修改
vim /app/fulliso/ks6.cfg
# Kickstart file automatically generated by anaconda.
#version=DEVEL
install
cdrom ---光盘为安装包的源文件
lang en_US.UTF-8
keyboard us
network --onboot yes --device eth0 --bootproto dhcp --noipv6
rootpw --iscrypted $6$hfb25YOYZDU3YZTl$VxTkHGGJGGBbr59OPnY5kTJzvJ9hb9NRwrh5FMHLIAlXh9VQ74PYoK7QzPWYN0zaJrm3mv/IP0fDkHxFglNi6/
firewall --service=ssh
authconfig --enableshadow --passalgo=sha512
selinux --disabled ---可以禁用selinux
timezone Asia/Shanghai
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet"
# The following is the partition information you requested
# Note that any partitions you deleted are not expressed
# here so unless you clear all partitions first, this is
# not guaranteed to work
zerombr ---清除mbr,如果是一块旧的磁盘,要清除
clearpart --all ---清除分区
text --以文本方式安装系统
reboot ---安装之后重新启动系统
part /boot --fstype=ext4 --size=1000
part / --fstype=ext4 --size=50000
part /app --fstype=ext4 --size=40000
part swap --size=2048
#repo --name="CentOS" --baseurl=cdrom:sr0 --cost=100 ---一定要把这一项给注释掉,不然会有问题的
%packages
@base
@core
@basic-desktop
@desktop-debugging
autofs
vim
%end
%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
3 定制启动菜单
vim /app/fulliso/isolinux/isolinux.cfg
default vesamenu.c32
#prompt 1
timeout 600
display boot.msg
menu background splash.jpg
menu title Welcome to CentOS Automatic Install!
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 desktop
menu label Install an ^desktop system
kernel vmlinuz
append initrd=initrd.img ks=cdrom:/ks6.cfg
label mini
menu label Install an m^ini system
kernel vmlinuz
append initrd=initrd.img ks=cdrom:/ks6-mini.cfg
label manual
menu label ^Manual install an system
kernel vmlinuz
append initrd=initrd.img
label local
menu label Boot from ^local drive
menu default
localboot 0xffff
4 制作ISO文件
mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6.9 autoinstall" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/centos6.iso /app/fulliso/
总结:系统安装过程:通过引导文件找到启动菜单文件,这个文件里会规定内核文件和initrd的路径,同时也会指定kickstart文件的路径,kickstart文件里规定了如何安装操作系统,软件包的安装源、分区情况等,然后加载内核和initrd,加载根文件系统的驱动,挂载根后启动第一个安装程序anaconda,所以安装操作系统时,要有启动文件、启动菜单文件、kickstart文件以及安装源。
2、如何配置dhcp服务器
dhcp服务的安装包来自于dhcp包
dhcp服务器的配置文件:/etc/dhcp/dhcpd.conf
[root@centos6 dhclient]#cat /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.sample
# see 'man 5 dhcpd.conf'
#
可以看到这个文件默认很少,而且都是注释,可以进行如下操作,将这个例子文件拷贝过来并覆盖,这样这个配置文件就会有很多例子,告诉你怎么配置dhcp服务器。
cp /usr/share/doc/dhcp*/dhcpd.conf.sample /etc/dhcp/dhcpd.conf
cp: overwrite `/etc/dhcp/dhcpd.conf'?
配置dhcp服务器的配置文件如下图,可以给客户端分配ip地址,网关,DNS和域名
服务器端查看地址分配记录
/var/lib/dhcpd/dhcpd.leases
dhcp客户端工具是dhclient
可以通过这个目录中的文件来查看客户端自动获取的IP信息:/var/lib/dhclient
dhcp服务器端和客户端端口
dhcpserver:67/udp
dhcpclient: 68/udp
其它配置选项:
filename: 指明引导文件名称,用于dhcp服务器给客户端分配完ip地址后,客户端的主机可以根据这个引导文件来引导内核,进而进行安装系统。
next-server:提供引导文件的服务器IP地址,可以提供引导文件的服务器是tftp服务器。
示例:可以在dhcp服务器的配置文件中加入如下行
filename "pxelinux.0"; ---指明引导文件的名称
next-server 192.168.100.100; ---指明提供引导文件的服务器的ip地址
检查语法
service dhcpd configtest ---检查配置文件的语法,只能在centos6中使用。
如何给某一个网卡分配一个固定的ip地址,如下图所示
3、实验:在centos7实现PXE安装centos6和centos7
- PXE工作原理:
- 实验过程:
1安装前准备:关闭防火墙和SELINUX,DHCP服务器静态IP,网卡设置为自定义VMnet1
2安装相关软件包
如果在centos7中做实验准备的包
yum install httpd tftp-server dhcp syslinux
如果centos6中做实验准备的包
yum install vsftpd tftp-server dhcp syslinux-nonlinux
3 配置文件共享服务和yum源
systemctl enable httpd
systemctl start httpd
mkdir /var/www/html/centos/{6,7}
mount /dev/sr0 /var/www/html/centos/7
mount /dev/sr1 /var/www/html/centos/6
4 准备kickstart文件
cp /root/anaconda-ks.cfg /var/www/html/ksdir/ks7.cfg
chmod a+r /var/www/html/ksdir/ks7.cfg
vim /var/www/html/ksdir/ks7.cfg ---修改这个文件后制作成centos7的
kickstart文件
主要修改如下几项
url --url=http://192.168.25.21/centos7
zerombr ---清除mbr,如果是一块旧的磁盘,要清除
clearpart --all ---清除分区
text --以文本方式安装系统
reboot ---安装之后重新启动系统
#repo --name="CentOS" --baseurl=cdrom:sr0 --cost=100 ---centos6中一定要把这一项给注释掉,不然会有问题的
scp 172.18.21.106:/root/anaconda-ks.cfg /var/www/html/ksdir/ks6.cfg ---把centos6中的也拷贝过来
chmod a+r /var/www/html/ksdir/ks6.cfg
vim /var/www/html/ksdir/ks6.cfg ---制作centos6的kickstart文件
5 开启tftp服务
systemctl enable tftp.socket
systemctl start tftp.socket
6 配置DHCP服务
vim /etc/dhcp/dhcpd.conf
default-lease-time 600;
max-lease-time 7200;
subnet 192.168.25.0 netmask 255.255.255.0 {
range 192.168.25.50 192.168.25.100;
next-server 192.168.25.107; ---指明提供引导文件的tftp服务器
地址
filename "pxelinux.0"; ---指明引导文件的名字,这个名字可以
随便写,但要和后面的引导文件名对上
}
systemctl enable dhcpd
systemctl start dhcpd
7 准备PXE相关文件
mkdir/var/lib/tftpboot/pxelinux.cfg/ ---在tftp的共享目录下新建一个这
样的目录,用于存放引导菜单文件
cp/usr/share/syslinux/{pxelinux.0,menu.c32} /var/lib/tftpboot/
---把引导文件和菜单风格的文件拷贝到tftp共享目录下,这两个文件是来自于syslinux(centos7)、syslinux-nonlinux(centos6)软件包
cp/misc/cd/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/ ---拷贝内核文件到共享目录下
cp/misc/cd/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
拷贝引导菜单到/pxelinux.cfg目录下,并且改名为default
目录结构如下
[root@centos7 tftpboot]#tree
.
├── centos6
│ ├── initrd.img
│ └── vmlinuz
├── centos7
│ ├── initrd.img
│ └── vmlinuz
├── menu.c32 ---菜单风格文件
├── pxelinux.0 ---引导文件
└── pxelinux.cfg
└── default ---引导菜单文件,里面指定vmlinuz和initrd.img路径
和ks文件路径
3 directories, 7 files
8 制作启动菜单文件
[root@centos7 tftpboot]#cat pxelinux.cfg/default
default menu.c32
timeout 600
menu title CentOS Linux PXE Install
label centos7
menu label Auto Install CentOS Linux ^7
kernel centos7/vmlinuz
append initrd=centos7/initrd.img ks=http://192.168.25.21/ksdir/ks7.cfg
label centos6
menu label Auto Install CentOS Linux ^6
kernel centos6/vmlinuz
append initrd=centos6/initrd.img ks=http://192.168.25.21/ksdir/ks6.cfg
label local
menu default
menu label Boot from ^local drive
localboot 0xffff
menu end
新建一个虚拟机进行安装,并把网卡设置为自定义VMnet1,保证和上面的主机在同一个网段,并且不影响本机的其他虚拟机,这里需要注意的是安装centos7时要把虚拟机的内存调大一点,要超过1G,不然安装的时候总会出错。
4、实验cobbler安装系统
- 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的工作流程和PXE的工作流程大体相同。 - 安装包
安装包
cobbler
cobbler 服务集成
PXE
DHCP
rsync
Http
DNS
Kickstart
IPMI 电源管理
检查cobbler环境
cobbler check - 配置文件
/etc/cobbler/settings : 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重要参数
/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 地址>
具体过程
1、 安装包
yum install cobbler dhcp tftp-server httpd
systemctl enable cobblerd
systemctl start cobblerd
systemctl enable tftp
systemctl start tftp
systemctl enable httpd
systemctl start httpd
2 、根据cobbler check 提示
1) vim /etc/cobbler/settings
default_password_crypted: "$1$8ckh4FrM$ayLsgQi85bi8Nt5Gj4Drj/" #openssl passwd -1 生成口令
next_server: 192.168.25.107 ---tftp服务器的IP 地址,也就是提供引
导文件的服务器地址
manage_dhcp: 1 ---改为1表示dhcp服务受cobbler服务管理
server: 192.168.25.107 ----cobbler服务器的地址
systemctl restart cobblerd ---重启服务
cobbler sync ---同步数据
2)生成dhcp模版文件
vim /etc/cobbler/dhcp.template
subnet 192.168.25.0 netmask 255.255.255.0 {
range dynamic-bootp 192.168.25.100 192.168.25.254;
dhcp服务的配置文件不需要进行修改,只要修改cobbler的这个模板
文件,同步之后,就会发现dhcp服务器的配置文
件/etc/dhcp/dhcpd.conf的内容变成和这个模板的内容一样了,说明
cobbler可以间接的管理dhcp服务,不用你再去手动配置。
cobbler sync
3) 准备启动文件和和菜单风格文件
连接internet,如果可以连接到网络,直接用下面的命令就可以生成启动文件和菜单风格文件
cobbler get-loaders
不连internet,也可以从下面的目录中拷贝后放到cobbler的存放各种引导程序的目录
cp /usr/share/syslinux/{pxelinux.0,memu.c32} /var/lib/cobbler/loaders
3 、导入yum源
cobbler import --path=/misc/cd --name=centos7.3 --arch=x86_64
cobbler import --path=/misc/cd --name=centos6.9 --arch=x86_64
[root@centos7 pxelinux.cfg]#cd /var/www/cobbler/ks_mirror/---导入的发行版系统的所有数据得目录
[root@centos7 ks_mirror]#ls ---可以看到有两个yum仓库的目录
centos6.9-x86_64 centos7.3-x86_64 config
[root@centos7 ks_mirror]#cd centos6.9-x86_64/
[root@centos7 centos6.9-x86_64]#ls ---进入仓库目录可以看到光盘
内容已经全部导过来了
CentOS_BuildTag isolinux RPM-GPG-KEY-CentOS-Debug-6
EFI Packages RPM-GPG-KEY-CentOS-Security-6
EULA RELEASE-NOTES-en-US.html RPM-GPG-KEY-CentOS-Testing-6
GPL repodata TRANS.TBL
images RPM-GPG-KEY-CentOS-6
[root@centos7 config]#cd /var/lib/tftpboot/
[root@centos7 tftpboot]#ls ---发现启动文件已经帮我们自动生成了
boot centos7 grub images2 menu.c32 pxelinux.0 s390x
centos6 etc images memdisk ppc pxelinux.cfg
[root@centos7 pxelinux.cfg]#cobbler profile list ---查看启动菜单的
标签,发现已经有三个启动菜单标签做好了
centos6.9-i386
centos6.9-x86_64
centos7.3-x86_64
[root@centos7 pxelinux.cfg]#cat cd /var/lib/tftpboot/pxelinux.cfg/default
1 DEFAULT menu
2 PROMPT 0
3 MENU TITLE Cobbler | http://cobbler.github.io/
7
8 LABEL local
9 MENU LABEL (local)
10 MENU DEFAULT
11 LOCALBOOT -1
1 DEFAULT menu
2 PROMPT 0
3 MENU TITLE Cobbler | http://cobbler.github.io/
7
8 LABEL local
9 MENU LABEL (local)
10 MENU DEFAULT
11 LOCALBOOT -1
12
13 LABEL centos6.9-i386
14 kernel /images/centos6.9-i386/vmlinuz
15 MENU LABEL centos6.9-i386
16 append initrd=/images/centos6.9-i386/initrd.img ksdevice=bootif
lang= kssendmac text ks=http://192.168.25.21/cblr/svc/op/ks/profile/
centos6.9-i386
17 ipappend 2
18
19 LABEL centos6.9-x86_64
20 kernel /images/centos6.9-x86_64/vmlinuz
21 MENU LABEL centos6.9-x86_64
22 append initrd=/images/centos6.9-x86_64/initrd.img ksdevice=boot
if lang= kssendmac text ks=http://192.168.25.21/cblr/svc/op/ks/profil
e/centos6.9-x86_64
23 ipappend 2
24
25 LABEL centos7.3-x86_64
26 kernel /images/centos7.3-x86_64/vmlinuz
27 MENU LABEL centos7.3-x86_64
28 append initrd=/images/centos7.3-x86_64/initrd.img ksdevice=boot
if lang= kssendmac text ks=http://192.168.25.21/cblr/svc/op/ks/profile/centos7.3-x86_64 --ks文件也已经生成
29 ipappend 2
30
31
32
33 MENU end
说明cobbler可以帮助我们自动在tftp服务器的目录下生成启动文件,
并且启动菜单文件也帮我们生成好了,kickstart文件也已经帮我们生
成好了。到此已经可以安装系统了。
如果你要定制自己的kickstart文件和启动菜单标签,可以进行如下操
作
4 、自己生成ks文件和启动菜单文件
cp ks6.cfg ks7.cfg /var/lib/cobbler/kickstarts/ ---可以把自己定制的
ks文件放到这个目录下
cobbler profile remove --name=centos6.9-x86_64
cobbler profile remove --name=centos7.3-x86_64 --可以删除原有的
启动菜单标签和ks文件
cobbler profile add --name=centos6.9_mini --distro=centos6.9-x86_64 --kickstart=/var/lib/cobbler/kickstarts/ks6.cfg
cobbler profile add --name=centos7.3_mini --distro=centos7.3-x86_64 --kickstart=/var/lib/cobbler/kickstarts/ks7.cfg
--name=centos7.3_mini启动菜单标签的名字 --distro=centos7.3-x86_64yum仓库目录 --kickstart=/var/lib/cobbler/kickstarts/ks7.cfg --- 指明ks文件路径
cobbler sync ---同步一下
[root@centos7 pxelinux.cfg]#cat default --看一下启动菜单文件,发现标签是安装我们指定的标签
DEFAULT menu
PROMPT 0
MENU TITLE Cobbler | http://cobbler.github.io/
TIMEOUT 200
TOTALTIMEOUT 6000
ONTIMEOUT local
LABEL local
MENU LABEL (local)
MENU DEFAULT
LOCALBOOT -1
LABEL centos6.9_mini ---启动菜单的标签,标签在启动菜单界面不显示,只显示里面的菜单名,标签相当于一个大的标题,里面包含有内核的名字、菜单的名字、及内核参数
kernel /images/centos6.9-x86_64/vmlinuz
MENU LABEL centos6.9_mini ---菜单名
append initrd=/images/centos6.9-x86_64/initrd.img ksdevice=bootif lang= kssendmac text ks=http://192.168.25.21/cblr/svc/op/ks/profile/centos6.9_mini
ipappend 2
LABEL centos7.3_mini ---启动菜单的标签
kernel /images/centos7.3-x86_64/vmlinuz
MENU LABEL centos7.3_mini ---菜单名
append initrd=/images/centos7.3-x86_64/initrd.img ksdevice=bootif lang= kssendmac text ks=http://192.168.25.21/cblr/svc/op/ks/profile/centos7.3_mini
ipappend 2
MENU end
[root@centos7 pxelinux.cfg]#wget http://192.168.25.21/cblr/svc/op/ks/profile/centos7.3_mini ---可以把应答文件下载下来看一下
5、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
设置登录密码 echo centos|passwd --stdin cobbler
修改文件/etc/cobbler/users.conf
[admins]
admin = "cobbler"
systemctl restart httpd
systemctl restart cobblerd
通过https://172.18.21.107/cobbler_web访问即可
- 认证方式二
使用authn_configfile模块认证cobbler_web用户
[authentication]块中module=authn_configfile
htdigest-c /etc/cobbler/users.digest Cobbler zhang ---创建其认证
文件/etc/cobbler/users.digest,并添加所需的用户,这里登录的用户
是zhang,创建的时候会让输入密码为登录密码
注意:添加第一个用户时,使用“-c”选项,后续添加其他用户时不要再
使用,cobbler_web的realm只能为Cobbler
systemctl restart httpd
systemctl restart cobblerd