PXE&Cobbler全自动系统安装
1. DHCP上的一些PXE的配置
1.1 dhcp配置文件中的参数
- filename:指明引导文件名称,类似于一种基于网络引导时使用的bootloader文件
- next-server:指明引导文件所在的服务主机的IP地址
1.2 配置示例
- filename "pxelinux.0";
- 一般都会提供这个文件,这个文件是pxe自己提供的
- next-server 172.18.100.6;
- next-server指向的就是tftp服务器的地址
- 注意:文件是相对于tftp服务器的根路径的
1.3 关于tftp
- next-server所在的文件服务器一般是tftp服务器
- tftp:trivial ftp,通过udp协议提供服务
- 监听端口:69/udp
2. PXE详解
2.1 PXE简介
PXE:preboot excution environment(与启动执行环境),是Intel公司研发的一种技术
让任何一台没有安装操作系统的主机,能够完成基于网络引导的安装及启动操作
2.2 PXE的工作流程
1)前提:
- 客户端主机启动时,网卡必须支持网络引导机制
- 要将网卡调整为第一引导启动设备
- 客户机内存要大于或等于2G
2)工作流程
主机被唤醒后,开始加载网络引导应用时,此网卡会通过在本地局域网中广播一条rarp协议从dhcp服务器那里获得一个IP地址;
获得IP地址后,还会从DHCP那里获得一个文件名和一个文件服务器地址,随后,它会去找那个tftp文件服务器,去加载那个对应的文件;
等所需要的文件加载完成后,其会被在内存中展开,而后基于此文件可以去加载一个内核文件,此内核文件也一样会通过这个tftp文件服务器获取;加载内核通常还需要initrd虚根来完成对真实根所在的设备的驱动的加载,这一切操作都要通过这个tftp文件服务器来实现;
等加载完成后,这个内核文件通常是专用于为系统安装所设定的,因此,这个内核文件还需要去基于网络(通过配置在内核上的IP地址)把自己扮演成某种协议的客户端去加载一个能够启动安装程序的程序包(之前获得的IP地址是网卡上的IP地址,而不是内核上的IP地址);
而后在本地完成安装并启动那个应用程序,而此程序已经不在这个tftp服务器上了;通常是一个基于tfp或者http获取nfs等服务所提供的一个yum仓库,通过这个yum仓库来加载安装程序,以及这个这个安装程序启动以后,很可能要读取kickstart文件,并根据kickstart文件的内容解决依赖关系后,基于这个yum仓库完成后续的所有安装过程。
3. PXE在CentOS7上的配置
3.1 PXE大概的工作过程
- dhcp:获取ip/netmask、gw、dns;filename、next-server
- tftp server:获取bootloader、kernel、initrd等信息
- yum repository:获取与加载的内核所匹配的发行版的yum仓库(可以通过ftp、http、nfs来提供)
- 最好还要提供一个kickstart文件,以完成全自动化的安装;若不需要全自动化安装,则可以不提供kictstart文件
3.2 在tftp server上安装tftp-server
1)安装软件包
yum install tftp-server -y
2)启动tftp
# CentOS6上: chkconfig tftp on service xinetd restart # CentOS7上 systemctl start tftp.socket
3)占用端口
- 69/udp
4)默认的文件根目录
/var/lib/tftpboot/
3.3 在dhcp server上配置dhcp
option domain-name "hgzero.com"; # 搜索域 option routes 192.168.10.9; # 指明默认网关 option domain-name-server 172.18.0.1; # 指明nds服务器地址 default-lease-time 43200; # 默认的租约时间 max-leaase-time 86400; # 最大租约时间 log-facility local7; # 日志保存的设备 subnet 192.168.10.0 netmask 255.255.255.0 { # 定义子网和地址池 range 192.168.10.101 192.168.10.120; # 指明地址池范围 filename "pxelinux.0"; # 指明在tftp server上加载文件的名称 next-server 192.168.10.9; # 指明tftp server的地址 }
3.4 提供一个yum仓库
可以用httpd提供一个目录,然后直接将光盘挂载到这个目录,以直接将光盘当做yum仓库
然后可以将本地的kickstart文件复制到这个httpd提供的目录中,或者存储为 /var/www/html/kickstarts/centos7.cfg
要将kickstart文件中url指向修改为: url --url="http://192.168.10.9/centos/7/x86_64/"
3.5 配置PXE(CentOS7上)
1)安装syslinux
# pxelinux.0 这个文件是由syslinux这个程序包所提供的,所以需要安装syslinux包 yum install syslinux
2)复制一些文件到tftp的根目录下
# 或者可以直接将 /usr/share/syslinux/ 目录下的所有内容都复制到 /var/lib/tftpboot/ 下 # 然后再把对应的vmlinuz及initrd.img文件复制过来 cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/ cp /usr/share/syslinux/{chain.c32,mboot.c32,menu.c32,memdisk} /var/lib/tftpboot/
3)创建pxelinux.cfg的目录
# 在tftp server的默认目录下常见pxelinux.cfg目录 mkdir /var/lib/tftpboot/pxelinux.cfg/
4)创建default文件并写入内容
- 在 /var/lib/tftpboot/pxelinux.cfg 目录下创建 default 文件并写入以下内容
- 这个文件是用于显示一个安装界面
vim /var/lib/tftpboot/pxelinux.cfg/default default menu.c32 prompt 5 # 选择时间为5秒钟 timeout 30 # 超时时间为30秒钟 MENU TITLE CentOS 7 PXE Menu # 菜单项的名称,这是整个上面的大标题(只有MENU TITLE是固定的) LABEL linux # 每一个LABEL表示一个启动条目,不同的启动条目就是通过LABEL来区分 MENU LABEL Install CentOS 7 x86_64 # 某一个可选择的条目的标题,显示的内容 KERNEL vmlinuz # 使用的内核文件的名称 # 指定initrd文件、yum仓库的地址,kickstart文件的地址 APPEND initrd=initrd.img inst.repo=http://172.16.100.67/centos7 ks=http://172.16.100.67/centos7.cfg
- 注意:如果想让安装的过程自动进行,就要在default文件中加入 inst.repo选项
vim /var/lib/tftpboot/pxelinux.cfg/default # 在APPEND中添加上: initrd.img inst.repo=http://192.168.10.9/centos/7/x86_64 # 也可以在PXE界面键入tab键后手动修改 vmlinuz initrd=initrd.img ip=192.168.10.11 netmask=255.255.255.0 inst.repo=http://192.168.10.9/centos/7/x86_64/
3.6 多系统选择安装
1)分别挂载CentOS6和CentOS7的光盘镜像
# 为CentOS6和CentOS7分别创建挂载目录 mkdir /mnt/{centos6,centos7} -pv # 分别挂载镜像 mount -r /dev/sr0 /mnt/centos6 mount -r /dev/sr1 /mnt/centos7
2)为每个系统创建不同的目录
# 在 /var/lib/tftpboot/ 下为每个系统创建单独的目录 mkdir /var/lib/tftpboot/{centos6, centos7}
3)将对应操作系统类型的vmlinux和initrd.img复制到对应的目录中
# 复制centos6的vmlinuz和initrd.img cp /mnt/centos6/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/centos6/ # 复制centos7的vmlinuz和initrd.img cp /mnt/centos7/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/centos7/
4)复制 /usr/share/syslinux/ 中的所有内容到 /var/lib/tftpboot/ 中
cp -r /usr/share/syslinux/* /var/lib/tftpboot/
5)创建pxelinux.cfg目录并写入配置文件
# 创建pxelinux.cfg目录 mkdir pxelinux.cfg # 创建default配置文件,并写入配置 vim pxelinux.cfg/default default menu.c32 prompt 60 timeout 120 MENU TITLE Linux PXE Menu LABEL linux 1 MENU LABEL Install CentOS7 x86_64 KERNEL centos7/vmlinuz APPEND initrd=centos7/initrd.img inst.repo=http://172.16.0.201/centos7 ks=http://172.16.0.201:81/centos7.cfg LABEL Linux 2 MENU LABEL Install CentOS6 x86_64 KERNEL centos6/vmlinuz APPEND initrd=centos6/initrd.img inst.repo=http://172.16.0.201/centos6 ks=http://172.16.0.201:81/centos6.cfg
3.7 分享两个kickstart文件
- 以下文件都经过测试并能成功安装系统,使用时要按需对文件内容进行修改
1)能成功安装CentOS7的kickstart文件
#platform=x86, AMD64, or Intel EM64T #version=DEVEL # Install OS instead of upgrade install # Keyboard layouts keyboard 'us' # Root password rootpw --iscrypted $1$HBfE.Z/Q$KMBdtT8gpSKcO3moDhGAv0 # System language lang en_US # System authorization information auth --useshadow --passalgo=sha512 # Use graphical install graphical # SELinux configuration selinux --disabled # Do not configure the X Window System skipx # Firewall configuration firewall --disabled # Network information network --bootproto=dhcp --device=ens33 # Reboot after installation reboot # System timezone timezone Asia/Shanghai --isUtc # Use network installation url --url="http://172.16.0.201/centos7" # System bootloader configuration bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda autopart --type=lvm # Partition clearing information clearpart --none --initlabel %packages @^minimal @core @debugging @development chrony vim
%end
2)能成功安装CentOS6的kickstart文件
#platform=x86, AMD64, or Intel EM64T #version=DEVEL # Install OS instead of upgrade install # Keyboard layouts keyboard 'us' # Root password rootpw --iscrypted $1$HBfE.Z/Q$KMBdtT8gpSKcO3moDhGAv0 # System language lang en_US.UTF-8 # System authorization information auth --useshadow --passalgo=sha512 # Use graphical install graphical # SELinux configuration selinux --disabled # Do not configure the X Window System skipx # Firewall configuration firewall --disabled # Network information network --bootproto=dhcp --device=eth0 # Reboot after installation reboot # System timezone timezone Asia/Shanghai --isUtc # Use network installation url --url="http://172.16.0.201/centos6" # System bootloader configuration bootloader --location=partition --driveorder=sda --append="rhgb quite" # Partition clearing information zerombr clearpart --all --initlabel autopart text %packages @base vim %end
4. Cobbler概述
Cobbler是多安装树的PXE环境,它是PXE的高级封装
4.1 Cobbler核心术语
1)Distribution发行版
- CentOS6.7,CentOS7.1(vmlinuz+initrd.img)
- distro:表示一个发行版(标记一个发行版的最关键资源是kernel和ramdisk)
- 单个系统安装:
- 特定系统:(pxeboot)vmlinuz,initrd.img
- 特定系统安装源:yum repository
2)Profile:distor+kickstart(Profile还有subprofile)
- CentOS6 web
- CentOS6 pxeboot + CentOS6 yum repo + kickstart_WEB
- CentOS6 database
- CentOS6 pxeboot + CentOS6 yum repo + kickstart_DB
- CentOS5:
- CentOS5 pxeboot + CentOS5 yum repo
3)System
- 为特定主机指派特有的配置信息
4.2 三个核心组件
- repository
- mirror
- import
- distribution
- prifile
4.3 Cobbler依赖的服务
- tftp
- rsync
- DHCP
- DNS
5. Cobbler的安装启动与配置
5.1 Cobbler的安装
1)组件
- cobbler
- cobbler-web:WEB GUI接口
2)安装所依赖的服务
# epel源中有安装包,直接yum安装即可 yum install cobbler cobbler-web -y yum install pykickstart debmirror httpd syslinux -y # 还要手动装上DHCP和tftp服务,配置好并启动 # 要注意指定好DHCP配置文件中的filename和next-server
5.2 Cobbler的启动
1)启动cobbler
# 先要将httpd、dhcp、tftp全启动,httpd必须要启动 service cobblerd start
2)启动后进行语法检查
# 语法检查是为了查看还有哪些选项需要解决 cobbler check # 检查配置文件
3)安装cobbler check显示的内容进行配置
# 1. 配置文件: /etc/cobbler/settions server: 指定cobbler主机的IP地址(本机的可被人访问的IP地址) next_server:指定tftp服务器IP地址(本地主机) # 2. 关闭SELinux # 3. 启动tftp,并设置开机自启动 chkconfig tftp on # 修改 /etc/xinetd.d/tftp,将其中的disable的值改为no,使其开机自启动 # 重启超级守护进程 systemctl restart xinetd.service # 4. 启动rsync systemctl start xinetd.service # 5. 复制 /usr/share/syslinux/{pxelinux.0, menu.c32} 文件至 /var/lib/cobbler/loaders/目录中 ###也可以将syslinux目录中的内容全部复制过去 # 6. 设置默认密码 openssl passwd -1 salt $(openssl rand -hex 4) vim /etc/cobbler/settings default_password_crypted: "自己设置的密码" # 7. 配置并启动dhcp服务器
5.3 Cobbler的配置
- 注意:每一次修改之后都要做 cobbler sync
1)将安装光盘挂载到本地
2)配置kickstart文件
- 将kickstart文件放置在 /var/lib/cobbler/kickstarts/ 目录下
- 修改kickstart文件中的url项,使其指向cobbler主机
3)导入系统
cobbler import --path=/mnt --name="CentOS-6.7-x86_64" --kickstart=/var/lib/cobbler/kickstarts/centos6.x86_64.cfg # 参数说明: --path=指明导入的位置 --name=指明显示的系统名 --kickstart=指明kickstart文件的路径(这个文件一般放置在/var/lib/cobbler/kickstart/ 目录中) # 说明:这时所创建的系统在 /var/www/cobbler/ks_mirror/ 目录下
4)查看
# 查看所有已经创建好的distro cobbler distro list # 查看所有已经创建好的profile cobbler profile list # 同步 cobbler sync # 同步所做的事就是在/var/lib/tftpboot/pxelinux.cfg/下创建了一个default文件,并且每次同步自动更新
5)创建profile文件
# 查看自动生成的profile文件 cobbler profile list # 删除指定的的profile cobbler profile remove --name=CentOS-6.7-x86_64 cobbler profile add --name=CentOS-6.7-x86_64 --distro=CentOS-6.7-x86_64 --kickstart=/var/lib/cobbler/kickstarts/centos6.x86_64.cfg # 参数: --name= 创建的profile的名字 --distro= 基于哪个distro来创建 --kickstart= 使用哪个kickstart文件 # 同步 cobbler sync
6. cobbler-web的安装和使用
6.1 安装cobbler-web
cobber-web是基于Django框架所研发
yum install cobbler-web -y
6.2 认证cobbler_web用户
1)使用authn_configfile模块认证cobbler_web用户
# 1. 配置加载authn_configfile模块 vim /etc/cobbler/modules.conf [authentication] module = authn_configfile # 2. 创建认证文件/etc/cobbler/user.digest,并添加所需用户 htdigest -c /etc/cobbler/user.digest Cobbler hgzerowzh Cobbler表示是realm,注意cobbler_web的realm只能为Cobbler hgzerowzh是添加的用户 # 注意:添加第一个用户时,需要为htdigest命令使用 -c 选项,后续添加其他用户时不能再次使用 # 3. 重启cobbler服务 systemctl restart cobblerd # 4. 通过 http://IP地址/cobbler_web 来进行访问
2)使用auth_pam模块认证cobbler_web用户
# 1. 配置使用authn_pam模块 vim /etc/cobbler/modules.conf [authentication] module = authn_pam # 2. 添加系统用户,用户名和密码按需设定 useradd cobadmin echo "shitshit" | passwd --stdin cobadmin # 3. 将cobadmin用户添加至cobbler_web的admin组中 # 修改/etc/cobbler/user.conf文件,将cobadmin用户名添加为admin参数的值即可 [admins] admin = "cobadmin" # 4. 重启cobbler服务 systemctl restart cobblerd # 5. 通过 http://IP地址/cobbler_web 来访问
6.3 访问失败解决
1)关闭SSL选项
- 现象:访问报403,错误日志显示如下
[ssl:error] [pid 3987] [client 172.16.0.204:35592] AH02219: access to /usr/share/cobbler/web/cobbler.wsgi failed, reason: SSL connection required
- 解决:关闭httpd 关于cobbler-web配置文件 /etc/httpd/conf.d/cobbler_web.conf 中的SSL选项
vim /etc/httpd/conf.d/cobbler_web.conf # 注释的部分 <Directory "/usr/share/cobbler/web/"> #<IfModule mod_ssl.c> # SSLRequireSSL #</IfModule> #<IfModule mod_nss.c> # NSSRequireSSL #</IfModule> SetEnv VIRTUALENV Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all </Directory> <Directory "/var/www/cobbler_webui_content/"> #<IfModule mod_ssl.c> # SSLRequireSSL #</IfModule> #<IfModule mod_nss.c> # NSSRequireSSL #</IfModule> Options +Indexes +FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory>