一、简介
1、PXE
PXE称作是一种引导方式而不是安装方式似乎更加准确,PXE(Pre-boot Execution Environment)是由Intel设计的协议,它可以使计算机通过网络启动,但是有一个前提条件是计算机的网卡必须具有引导功能,这个网卡中要有一个PXE客户端。当计算机POST自检成功以后,BIOS把网卡中ROM的PXE客户端调入内存执行,PXE客户端通过网络中的DHCP服务器获取一个IP地址,拿到IP地址以后PXE继续引导计算机与网络中的TFTP客户端建立连接,从而从TFTP服务器中获取开机引导文件之后请求并下载安装需要的文件。在这个过程中需要一台服务器来提供启动文件、安装文件、以及安装过程中的自动应答文件等。
PXE工作步骤:
原理分析:
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目录下,这是系统菜单文件,格式和isolinux.cfg格式一样,功能也是类似),TFTP将配置文件发回Client,继而Client根据配置文件执行后续操作。
Client向TFTP发送Linux内核请求信息,TFTP接收到消息之后将内核文件发送给Client
Client向TFTP发送根文件请求信息,TFTP接收到消息之后返回Linux根文件系统
Client启动Linux内核
Client下载安装源文件,读取自动化安装脚本
2、Cobbler
Cobbler 可以用来快速建立Linux网络安装环境,它已将 Linux 网络安装的技术门槛,从大专以上文化水平,成功降低到初中以下,连补鞋匠都能学会。Cobbler是一个Linux服务器快速网络安装的服务,由python开发,小巧轻便(15k行python代码),可以通过PXE的方式来快速安装、重装物理服务器和虚拟机,同时还可以管理DHCP,DNS,TFTP、RSYNC以及yum仓库、构造系统ISO镜像。
Cobbler可以使用命令行方式管理,也提供了基于Web的界面管理工具(cobbler-web),还提供了API接口,可以方便二次开发使用。
Cobbler 工作步骤:
Server端:
第一步,启动Cobbler服务
第二步,进行Cobbler错误检查,执行cobbler check命令
第三步,进行配置同步,执行cobbler sync命令
第四步,复制相关启动文件文件到TFTP目录中
第五步,启动DHCP服务,提供地址分配
第六步,DHCP服务分配IP地址
第七步,TFTP传输启动文件
第八步,Server端接收安装信息
第九步,Server端发送ISO镜像与Kickstart文件
第一步,客户端以PXE模式启动
第二步,客户端获取IP地址
第三步,通过TFTP服务器获取启动文件
第四步,进入Cobbler安装选择界面
第五步,客户端确定加载信息
第六步,根据配置信息准备安装系统
第七步,加载Kickstart文件
第八步,传输系统安装的其它文件
第九步,进行安装系统
3、kickstart
kickstart是一个定义了Linux安装过程的配置文件,比如要在系统中使用的时区、如何对驱动器进行分区、或者应该安装哪些软件包。有了这个文件可以解放双手,让Linux安装过程按照我们预先定义的要求进行自动化安装,同时部署大量主机时十分有用。一般centos系统安装后,会在root目录下生成一个名为anaconda-ks.cfg的kickstart配置文件。Kickstart 是红帽开发的一种工具,我们可以简单理解为一个自动安装应答配置管理程序。通过读取这个配置文件,系统知道怎么去分区,要安装什么包,配什么IP,优化什么内核参数等等。其主要有以下部分组成:
Kickstart 安装选项,包含语言的选择,防火墙,密码,网络,分区的设置等;
%Pre 部分,安装前解析的脚本,通常用来生成特殊的ks配置,比如由一段程序决定磁盘分区等;
%Package 部分,安装包的选择,可以是 @core 这样的group的形式,也可以是这样 vim-* 包的形式;
%Post 部分,安装后执行的脚本,通常用来做系统的初始化设置。比如启动的服务,相关的设定等。
二、操作系统及软件版本
操作系统:Centos 7:CentOS Linux release 7.5.1804 (Core)
Cobbler:Cobbler 2.8.5
网络: enp4s0: 172.16.30.3
三、部署搭建步骤
1、操作系统准备:
cat /etc/redhat-release
关闭防火墙:
systemctl stop firewalld
systemctl disable firewalld
systemctl status firewalld
管理selinux 服务:(备注:改完selinux,需要重启系统才生效)
vi /etc/sysconfig/selinux
SELINUX=enforcing 改为:SELINUX=disabled
IP地址信息:
安装wget
yum install -y wget
2、更新centos7 yum源:
备份原来的 CentOS-Base.repo 源:
cd /etc/yum.repos.d/
ls
mv CentOS-Base.repo CentOS-Base.repo.bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
ls
yum clean all
yum makecache
yum update -y
3、安装依赖包:
安装httpd 服务:yum install -y httpd
安装dhcp服务:yum install -y dhcp
安装tftp服务:yum install -y tftp-server
4、安装Cobbler:
安装cobbler服务:yum install -y cobbler
提示没有cobbler安装包
更新一下yum源的包:
wget -P /etc/yum.repos.d/ http://mirrors.aliyun.com/repo/epel-7.repo
继续安装cobbler:yum install -y cobbler
安装cobbler-web服务:yum install -y cobbler-web
5、安装pykicksstart:
安装pykickstart服务:yum install -y pykickstart
6、查看cobbler安装的部分文件
rpm -ql cobbler # 查看安装cobbler 生成的文件夹,主要分析如下:
7、重启相关服务:
重启cobbler服务:systemctl start cobblerd
systemctl restart cobblerd
重启http服务:systemctl restart httpd
添加开机自启动:systemctl enable httpd
systemctl enable cobblerd
8、检查cobbler
检查cobbler: cobbler check
9、根据上面检查的结果,进行逐一的配置:
(1) 修改提供cobbler服务的主机的IP或主机名:
sed -i 's/^server: 127.0.0.1/server: 172.16.30.3/' /etc/cobbler/settings #设置服务器的地址为:172.16.30.3
grep "^server" /etc/cobbler/settings #检查是否该成功
(2)、修改“next_server”为PXE网络上启动服务器的IP地址(这里PXE服务器和cobbler服务器是同一台):
sed -i 's/^next_server: 127.0.0.1/next_server: 172.16.30.3/' /etc/cobbler/settings
grep "^next_server" /etc/cobbler/settings
(3)、修改/etc/xinet.d/tftp文件中的disable的参数为no
cd /etc/xinetd.d/
ls
cp tftp tftp.bak #备份 tftp文件
cd
vim /etc/xinet.d/tftp
disable = no
(4)执行cobbler get-loaders 命令: (
cobbler get-loaders
有可能会失败,是下载一下包失败,多尝试几次。直至出现成功:
(5)启动rsync 服务:
重启rsync服务:systemctl start rsyncd.service
systemctl restart rsyncd.service
设置开机自启动服务:systemctl enable rsyncd.service
(6)、安装包用来管理debian部署和存储库,这里不需要,就不安装了
(7)、修改cobbler中的加密密码(即为自动安装系统后的root登录密码)
#生成加密密码openssl passwd -1 -salt 'random-phrase-here' 'your-password-here'
openssl passwd -1 -salt '123456' '11111111' # 123456 使用加密机制; 11111111 是安装系统后的root登录密码
vim /etc/cobbler/settings
(8)安装cman fence-agents(可选),电源管理功能
yum install cman fence-agents -y
(9)修改一些其他的配置
vim /etc/cobbler/settings
manage_dhcp: 1 #用cobbler管理dhcp
pxe_just_once: 1 #防止循环安装系统,适用于服务器第一启动选项是pxe启动
(10)同步cobbler配置:
cobbler sync
systemctl restart cobblerd.service
(11)重新检测cobbler:
cobbler check
#管理deban,这里不需要安装,如果需要安装deban或Ubuntu系统,需要安装
yum install -y debmirror
vim /etc/debmirror.conf
禁用下面两个选项
#@dists="sid";
#@arches="i386";
10、配置dhcp服务:
备份dhcp.template 文件:
cd /etc/cobbler/
cp dhcp.template dhcp.template.bak
ls
cd
vim /etc/cobbler/dhcp.template
vim /etc/cobbler/dhcp.template
同步cobbler配置:
cobbler sync
重新检测cobbler
cobbler check
11、设置开机自启:
systemctl enable dhcpd
systemctl enable rsyncd.service
systemctl enable tftp.service
systemctl enable httpd.service
systemctl enable cobblerd.service
重启所有服务,防止有些服务没有开启:
systemctl restart tftp.service
systemctl restart dhcpd.service
systemctl restart rsyncd.service
systemctl restart httpd.service
systemctl restart cobblerd.service
四、挂载光盘镜像
由于安装的文件只能识别iso挂载后的文件,不能直接识别iso镜像文件,所以需要将iso镜像挂载到服务器上,然后将挂载后的系统文件复制到其他目录以备后用。(备注:也可以根据自己的实际情况创建目录)。具体操作如下:
1、创建存放系统镜像文件的目录 (可以根据自己的需求进行创建)
mkdir /data1/os/ #将挂载后的系统镜像文件复制的此目录
mkdir /data1/os/centos7.5 #将centos7.5系统挂载后的文件全部复制到此目录
mkdir /data1/os/ubuntu16.04.06 #将Ubuntu16.04.06系统挂载后的文件全部复制到此目录
mkdir /data1/os/ubuntu16.04.04 #将Ubuntu16.04.04系统挂载后的文件全部复制到此目录
2、创建用户临时挂载镜像的目录:
mkdir /data1/oscahe/ #用于将系统镜像iso文件挂载到此目录下
3、将系统iso镜像文件上传到服务器中(可以通过xftp工具进行上传,可以用U盘上传等方式)
cd /data1
ls
4、挂载系统iso镜像
mount -t iso9660 -o loop /data1/CentOS-7-x86_64-DVD-1804.iso /data1/oscahe/ #将Centos7系统挂载到/data1/oscahe目录下
ls /data1/oscahe
5、将/data1/oscahe中的系统文件全部复制到镜像文件目录 /data1/os/centos7.5
cp -rf /data1/oscahe/* /data1/os/centos7.5/
6、卸载系统iso镜像文件
umount /data1/CentOS-7-x86_64-DVD-1804.iso
ls /data1/oscahe/
(备注:如果想要挂载其他系统的iso镜像文件,重复上面的4 5 6 三个步骤)
7、查询系统挂载了几个系统镜像文件
ls /data1/os/centos7.5/
ls /data1/os/ubuntu16.04.04
ls /data1/os/ubuntu16.04.06
五、导入镜像
1、 使用以下的方法导入镜像:
cobbler import --path=/iso/ --name=Centos7.5 --arch=x86_64
解释:
--path:镜像路径
--name: 为安装源定义一个名字,可以根据自己的喜好指定
--arch:指定安装源是64位或32位
下面分别导入上面上传的4个系统镜像:
cobbler import --path=/data1/os/centos7.5 --name=Centos7.5 --arch=x86_64 #导入Centos7.5系统镜像
cobbler import --path=/data1/os/ubuntu16.04.04 --name=ubuntu16.04.04 --arch=x86_64 #导入Ubuntu16.04.04系统镜像
cobbler import --path=/data1/os/ubuntu16.04.06 --name=ubuntu16.04.06 --arch=x86_64 #导入Ubuntu16.04.06系统镜像
2、查看镜像列表:
cobbler distro list
3、查看镜像存放目录
cd /var/www/cobbler/ks_mirror/
ls
六、配置ks文件
1、查看ks文件位置:
cd /var/lib/cobbler/kickstarts/
ls
2、配置自定义ks文件,以sample_end.ks模板
cp sample_end.ks Centos7.5-x86_64
vim Centos7.5-x86_64
修改的内容如下:
firewall --disable #关闭防火墙
timezone Asia/Shanghai #设置时区
# autopart #把自动分区注释,手动如下设置
part /boot --fstype=ext4 --asprimary --size=200
part swap --asprimary --size=1024
part / --fstype=ext4 --grow --asprimary --size=10240
%packages #安装需要安装的软件包
$SNIPPET('func_install_if_enabled') #这里默认
%end
解释:
--asprimary,强迫把分区分配为主分区,否则提示分区失败.
--fstype=,为分区设置文件系统类型.有效的类型为ext2,ext3,swap和vfat
--grow 让分区自动增长利用可用的磁盘空间,或是增长到设置的maxsize值;
--size= 设置分区的最小值,默认单位为M,但是不能写单位;
%packages部分,这部分选择需要安装的软件包.
d-i debian-installer/locale string en_US
d-i console-setup/ask_detect boolean false
d-i keyboard-configuration/toggle select No toggling
d-i keyboard-configuration/layoutcode string us
d-i keyboard-configuration/variantcode string
d-i netcfg/choose_interface select auto
d-i netcfg/get_hostname string $myhostname
d-i time/zone string US/Eastern
d-i clock-setup/utc boolean true
d-i clock-setup/ntp boolean true
d-i clock-setup/ntp-server string ntp.ubuntu.com
d-i mirror/country string manual
d-i mirror/http/hostname string $http_server
d-i mirror/http/directory string $install_source_directory
d-i mirror/http/proxy string
d-i live-installer/net-image string http://$http_server/cobbler/links/$distro_name/install/filesystem.squashfs
d-i partman/choose_partition select finish
d-i partman/confirm boolean true
d-i partman/confirm_nooverwrite boolean true
d-i partman-auto/method string lvm
d-i partman-lvm/device_remove_lvm boolean true
d-i partman-lvm/confirm boolean true
d-i partman-lvm/confirm_nooverwrite boolean true
d-i partman-md/device_remove_md boolean true
d-i partman-partitioning/confirm_write_new_label boolean true
d-i partman-auto/choose_recipe select atomic
d-i passwd/root-login boolean true
d-i passwd/root-password-crypted password $default_password_crypted
d-i passwd/make-user boolean false
$SNIPPET('preseed_apt_repo_config')
tasksel tasksel/first multiselect standard
d-i pkgsel/include string ntp ssh wget
d-i grub-installer/grub2_instead_of_grub_legacy boolean true
d-i grub-installer/bootdev string default
d-i debian-installer/add-kernel-opts string $kernel_options_post
d-i finish-install/reboot_in_progress note
d-i preseed/early_command string wget -O- \
http://$http_server/cblr/svc/op/script/$what/$name/?script=preseed_early_default | \
/bin/sh -s
d-i preseed/late_command string wget -O- \
http://$http_server/cblr/svc/op/script/$what/$name/?script=preseed_late_default | \
chroot /target /bin/sh -s
3、查看自动生成的自动安装文件
第一次导入系统镜像后,cobbler会给镜像指定一个默认的kickstart自动安装文件
(/var/lib/cobbler/kickstarts/sample_end.ks)
cobbler list
4、查看安装镜像文件信息
cobbler distro report --name=Centos7.5-x86_64
5、查看镜像的profile 设置
cobbler profile report --name=Centos7.5-x86_64
6、编辑profile,修改关联的ks文件(指定自定义的ks文件)
cobbler profile edit --name=Centos7.5-x86_64 --kickstart=/var/lib/cobbler/kickstarts/Centos7.5-x86_64.ks
7、查看profile,确认kickstart 关联文件是否被修改:
cobbler profile report --name=Centos7.5-x86_64
8、同步数据
cobbler sync
systemctl restart cobblerd.service
9、修改PXEE默认启动项
默认情况下PXE启动的是Local(启动后会出现local和自定义CentOS7.5-x86_64两个选项,需手动,要无人工干涉,就需要修改)
修改前:
cd /var/lib/tftpboot/pxelinux.cfg/
cat default
可以修改里面的启动顺序,也可以不修改。
七、测试自动安装:
1、将要安装系统的设备,接入到网络中,从网络启动:(不通的设备,网卡名字不同)
进入网络启动界面:
获取到DHCP服务器的地址,设备获取到IP地址:
获取到可安装的系统镜像:
拉取安装系统的文件:
开始自动安装操作系统:
以上步骤均不需手动操作,自动安装(备注:如果被安装的设备有两个网卡,需要手动选择正确的网卡。如果有多块硬盘,需要手动选择安装的盘,无亲自测试,建议安装对的时候安装一块盘,待系统安装完成后,用脚本进行挂载和格式化。)。
此教程比较适用于自动化安装centos系统,兼容性较高。对于安装Ubuntu系统,ks文件兼容性不是很好。
参考文献如下:
https://blog.csdn.net/yuanfangPOET/article/details/89279733
https://blog.csdn.net/anqixiang/article/details/98050676
https://www.cnblogs.com/linuxliu/p/7668048.html
来源:oschina
链接:https://my.oschina.net/u/4375893/blog/4556692