本章概要
- 系统安装过程
- 配置anaconda
- 自动化安装系统
- 制作引导光盘和U盘
- DHCP服务
- PXE安装系统
- cobbler企业级应用
1、系统安装过程
系统安装程序
-
CentOS系统安装
系统启动流程:
1、post加电自检
2、寻找启动设备:硬盘,寻找启动程序grub
1阶段:mbr 446字节
1.5:mbr后续的27个扇区
2阶段:
3、进入grub目录下,寻找grub.conf文件,该文件指定内核文件、initramfs文件位置
4、加载内核文件,寻找系统的根,读取initramfs文件加载驱动程序,才能挂在根
5、运行系统中第一个进程init1或systemd,读取系统中的配置文件/etc/inittab,该文件定义了启动模式(3为字符界面或5为图形界面)
6、运行初始化脚本/etc/rc.d/rc.sysinit,对系统中的swap分区,主机名,raid,逻辑卷等进行初始化
7、初始化完毕,根据定义的启动模式,运行/etc/rc.d/rcN.d下的服务脚本,先启动以K开头的服务脚本,后启动以S开头的服务脚本
8、运行/etc/rc.d/rc.local,启动自定义的服务
9、在用户登录界面,用户登录 -
anaconda: 系统安装程序
gui:图形窗口
tui: 基于图形库curses的文本窗口
安装程序启动过程
- MBR:isolinux/boot.cat
- stage2: isolinux/isolinux.bin
- 配置文件:isolinux/isolinux.cfg
每个对应的菜单选项:
加载内核:isolinuz/vmlinuz
向内核传递参数:append initrd=initrd.img ... - 装载根文件系统,并启动anaconda
默认启动GUI接口
若是显式指定使用TUI接口:向内核传递text参数即可
(1)按tab键,在后面增加text
(2)按ESC键:boot: linux text
anaconda工作过程
- Anaconda安装系统分成三个阶段:
(1)安装前配置阶段
安装过程使用的语言
键盘类型
安装目标存储设备
Basic Storage:本地磁盘
特殊设备:iSCSI
设定主机名
配置网络接口
时区
管理员密码
设定分区方式及MBR的安装位置
创建一个普通用户
选定要安装的程序包
(2)安装阶段
在目标磁盘创建分区,执行格式化操作等
将选定的程序包安装至目标位置
安装bootloader和initramfs
(3)图形模式首次启动
iptables
selinux
core dump
示例:
[root@centos6 ~]#cat anaconda-ks.cfg
# Kickstart file automatically generated by anaconda.
#version=DEVEL
install
cdrom 光盘安装
lang en_US.UTF-8 语言为英语
keyboard us 键盘布局为美式键盘布局
network --onboot no --device eth0 --bootproto dhcp --noipv6
rootpw --iscrypted $6$e2ilz7V.IJ4CBJmG$FGhwOFgVtw2kXuIdjGVE//kRVcx58NJpjUOg/6ex68vShxQmSNFKO2qDShUXf30beEbz1zJSa.uC6ji3bOIBx0 口令为sha512加密
firewall --service=ssh 防火墙
authconfig --enableshadow --passalgo=sha512
selinux --enforcing selinux为开启模式
timezone Asia/Shanghai 时区
bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" 启动时第一阶段的mbr分区表
# 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
#clearpart --none
#part /boot --fstype=ext4 --size=1024 系统分区
#part / --fstype=ext4 --size=51200
#part /data --fstype=ext4 --size=30720
#part swap --size=3072
repo --name="CentOS" --baseurl=cdrom:sr0 --cost=100
%packages 安装时选择的软件包
@base
@core
@debugging
@basic-desktop
@desktop-debugging
@desktop-platform
@directory-client
@fonts
@general-desktop
@graphical-admin-tools
@input-methods
@internet-applications
@internet-browser
@java-platform
@kde-desktop
@legacy-x
@network-file-system-client
@office-suite
@print-client
@remote-desktop-clients
@server-platform
@server-policy
@workstation-policy
@x11
mtools
pax
python-dmidecode
oddjob
wodim
sgpio
genisoimage
device-mapper-persistent-data
abrt-gui
qt-mysql
samba-winbind
certmonger
pam_krb5
krb5-workstation
xterm
xorg-x11-xdm
libXmu
rdesktop
%end
系统安装
-
启动安装过程一般应位于引导设备之后;后续的anaconda及其安装用到的程序包等可来自下面几种方式:
本地光盘
本地硬盘
NFS
URL(通过网络安装系统):
ftp server: yum repository 通过ftp服务器使用yum仓库安装
http server: yum repostory 通过http服务器使用yum仓库安装
-
如果想手动指定安装源:
boot: linux askmethod
-
指定安装源的格式如下:
(1)centos6
DVD drive repo=cdrom :device
Hard Drive repo=hd:device/path
HTTP Server repo=http://host/path
HTTPS Server repo=https://host/path
FTP Server repo=ftp://username:password@ host/path
NFS Server repo=nfs:server:/path
ISO images on an NFS Server repo=nfsiso:server:/path
(2)centos7
Any CD/DVD drive inst.repo=cdrom
Hard Drive inst.repo=hd:device:/path
HTTP Server inst.repo=http://host/path
HTTPS Server inst.repo=https://host/path
FTP Server inst.repo=ftp://username:password@ host/path
NFS Server inst.repo=nfs:[options:]server:/path -
anaconda的配置方式:
(1) 交互式配置方式
(2) 通过读取事先给定的配置文件自动完成配置
按特定语法给出的配置选项
kickstart文件 -
安装boot引导选项:boot:
-
text: 文本安装方式(字符界面安装)
在boot:界面,通过命令行键入命令指定系统安装方式
(1)通过指定yum源安装系统
注意:必须要先配置好yum源,这里通过http服务配置网络yum源,地址为:http://192.168.32.128/centos/6
(2)通过指定kickstart应答文件安装系统
注意:这里可以把kickstart应答文件放入yum仓库所在的http服务器中:http://192.168.32.128/ks/ks6.cfg
网络相关的引导选项:
ip=IPADDR
netmask=MASK
gateway=GW
dns=DNS_SERVER_IP
ifname=NAME:MAC_ADDR
远程访问功能相关的引导选项:
vnc
vncpassword='PASSWORD'
指明kickstart文件的位置: ks=
DVD drive: ks=cdrom:/PATH/TO/KICKSTART_FILE
Hard drive: ks=hd:device:/directory/KICKSTART_FILE
HTTP server: ks=http://host:port/path/to/KICKSTART_FILE
FTP server: ks=ftp://host:port/path/to/KICKSTART_FILE
HTTPS server: ks=https://host:port/path/to/KICKSTART_FILE
NFS server:ks=nfs:host:/path/to/KICKSTART_FILE -
askmethod: 手动指定使用的安装方法
即boot:linux askmethod,后续出现图形界面选择安装方式
语言默认选择英语
键盘布局选择默认美式布局
系统镜像安装选择URL方式
默认通过dhcp获取地址
指定基于http服务的yum仓库路径:http://192.168.32.128/centos/6
注意:以上两种方式都需要输入系统源文件的路径或者kickstart应答文件的路径 -
启动紧急救援模式:
rescue
注意:以上两种方式均可以进入救援模式 -
详见官方文档:《Installation Guide》
kickstart文件的格式
- 参考/root/anaconda-ks.cfg
- 命令段:指明各种安装前配置,如键盘类型等
- 程序包段:指明要安装的程序包组或程序包,不安装的程序包等
%packages
@group_name
package
-package
%end - 脚本段:
%pre: 安装前脚本
运行环境:运行于安装介质上的微型Linux环境
%post: 安装后脚本
运行环境:安装完成的系统 - 命令段中的命令:
(1)必备命令
authconfig: 认证方式配置
authconfig --useshadow --passalgo=sha512
bootloader:bootloader的安装位置及相关配置
bootloader --location=mbr --driveorder=sda –
append="crashkernel=auto rhgb quiet"
keyboard: 设定键盘类型
lang: 语言类型
part: 创建分区
rootpw: 指明root的密码
timezone: 时区
(2)可选命令
install OR upgrade
text: 文本安装界面
network
firewall
selinux
halt
poweroff
reboot
repo
user:安装完成后为系统创建新用户
url: 指明安装源
key –skip 跳过安装号码,适用于rhel版本
kickstart文件创建
- 创建kickstart文件的方式
(1)直接手动编辑
依据某模板(模板文件为/root/anaconda-ks.cfg)修改
示例:
[root@centos6 ksdir]#vim ks6.cfg ks6.cfg为重命名后的模板文件
# Kickstart file automatically generated by anaconda.
#version=DEVEL
install
text 字符界面启动
reboot 安装完系统自动重启
url --url=http://192.168.32.128/centos/6 指定基于http的yum仓库
lang en_US.UTF-8
keyboard us
network --onboot yes --device eth0 --bootproto static --ip 192.168.32.135 --netmask 255.255.255.0 --noipv6
rootpw --iscrypted $6$ZSTExTIY28Nb3jiu$l6v9C13TQMfREV2sDvq5u6W6o2ibGfpB5AexWZHfggE5EoKqQrQE3VduGF/d8mllDpZUVOo4/nxi5/hpFK/Vc0
firewall --disabled 关闭防火墙
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
clearpart --all --initlabel
part /boot --fstype=ext4 --size=1024 启用分区,这里采用标准分区方式进行分区
part / --fstype=ext4 --size=51200
part /data --fstype=ext4 --size=30720
part swap --size=3072
repo --name="CentOS" --baseurl=http://192.168.32.128/centos/6 --cost=100
%packages
@core
@server-policy
@workstation-policy
autofs
vim-enhanced
%end
#创建用户,设置密码,设置yum仓库,创建基于key验证
%post
useradd yuan
echo centos123456 |passwd --stdin yuan &>/dev/null
mkdir /etc/yum.repos.d/bak
mv /etc/yum.repos.d/* /etc/yum.repos.d/bak
cat > /etc/yum.repos.d/centos.repo <<EOF
[yum]
name=yum for centos6
base=file:///misc/cd
gpgcheck=0
EOF
mkdir /root/.ssh
cat > /root/.ssh/authorized_keys <<EOF
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCdKS4PXLhlUtAxc2SwsCOHihpBCSy5bBBl2t0K+Dh5RrUJ46OpP4ODlx3TsCQoOzew6gFwVj97j7MnxTqsgcUJKDoxIOB8ObUtldYj2+jnR8qiBBM+1Fhuqagu3vYWyxvQF83YThQZh0q9KQ3yAr+ke8sktLhJmucPDpgOC3TaJfg0BYl0D1tjhVh0CbSpryjtx26zcAevQr7ishkyy4UWf1kff9AU66iSQQQyzPuXWXDQoPCXsnrjbSdYjLjBmiOrkoqj9f3N4wyqMNx+V1248BVDgyzvSRt0DCoc34au9iQlN/ddkp6IayysrmuA8Zmr8V9LqXaxKekfDtQP35mV root@centos7-1.magedu.com
EOF
chmod 600 /root/.ssh/authorized_keys
chmod 700 /root/.ssh
%end
(2)可使用创建工具:system-config-kickstart
依据某模板修改并生成新配置(该内容会在后续有详细讲解)
参考/root/anaconda-ks.cfg文件制作kickstart文件
注意:使用图形工具system-config-kickstart制作kickstart文件,centos6和centos7系统选项大致相同,但是在package selection选项,centos7系统中无法显示可选的软件包
解决方法:
只需对本地yum源稍作更改即可:把yum源中[]内的内容更改为development,然后重新打开该工具即可
示例:
Vim /etc/yum.repos.d/base.repo
[devplopment]
name=yum-bendi
baseurl=file:///mnt/cdrom
gpgcheck=1
- 检查ks文件的语法错误:ksvalidator
ksvalidator /PATH/TO/KICKSTART_FILE
[root@centos6 ~]#ksvalidator /root/ks6.cfg
系统光盘中isolinux目录列表
- isolinux.bin:光盘引导程序,在mkisofs的选项中需要明确给出文件路径,这个文件属于SYSLINUX项目
- isolinux.cfg:isolinux.bin的配置文件,当光盘启动后(即运行isolinux.bin),会自动去找isolinux.cfg文件
- vesamenu.c32:是光盘启动后的安装图形界面,也属于SYSLINUX项目,menu.c32版本是纯文本的菜单
- Memtest:内存检测,这是一个独立的程序
- splash.jgp:光盘启动界面的背景图
- vmlinuz是内核映像
- initrd.img是ramfs (先cpio,再gzip压缩)
示例:
[root@centos6 ~]#ls /mnt/cdrom/isolinux/
boot.cat grub.conf isolinux.bin memtest TRANS.TBL vmlinuz
boot.msg initrd.img isolinux.cfg splash.jpg vesamenu.c32
使用system-config-kickstart工具制作kickstart应答文件
1、system-config-kickstart是一款制作kickstart文件的图形化工具,使用十分方便,该工具需要通过yum安装才能使用
2、安装
yum -y install system-config-kickstart
在命令行输入system-config-kickstart命令打开该工具
3、制作kickstart文件过程如下:
(1)点击左上角file,选择模板文件
(2)打开/root/anaconda-ks.cfg文件制作kickstart文件
(3)Basic Configuration
设置语言、键盘布局、时区、密码
(4)Installtion Method
安装方式选择http,填写http服务器地址以及yum仓库路径:192.168.32.128/centos/6
注意:http服务地址与yum仓库文件路径要分开来写
(5)Boot Loader Options
选择默认即可
(6)Partition Infotmation
第一项:清除主分区记录
第二项:移除所有存在的分区
第三项:初始化分区
第四项:根据需求自定义分区表(类似于装系统时创建分区)
(7)Network Configuration
只需要一个网卡即可,如果已存在无需创建
(8)Authentication
加密方式选择默认sha512加密
(9)Firewall Configuration
关闭防火墙和selinux,选择disabled
(10)Display Configuration
是否安装图形环境,根据个人需求选择,这里不安装图形环境,去掉选项前的对勾
(11)Package Selection
选择安装软件包,根据需求进行勾选
(12)Pre-Installation Script
安装前脚本,根据需求在右边白框内编写脚本
(13)Post-Installation Script
安装后脚本:添加用户,设置密码,创建yum仓库,创建基于key的验证
至此,kickstart文件创建完毕。
4、centos7系统kickstart文件的创建步骤与centos6系统的大致相同。但是centos7系统中,在Package selection选项时无法显示可选的安装包
解决方法:
只需对本地yum源稍作更改即可:
把yum源中[ ]内的内容更改为development,然后重新打开system-config-kickstart即可
Vim /etc/yum.repos.d/base.repo
[development]
name=yum-bendi
baseurl=file:///mnt/cdrom
gpgcheck=1
2、制作引导光盘和U盘
- 创建引导光盘:
示例:
mkdir –pv /data/boot 创建存放光盘文件的临时目录
cp -r /misc/cd/isolinux/ /data/boot 把制作光盘所需的文件复制到临时目录中
vim /mnt/cdrom/isolinux/isolinux.cfg 修改启动文件,自定义启动菜单
default vesamenu.c32
#prompt 1
timeout 600 超时时长,为600的十分之一秒,即60秒
display boot.msg
label mini 制作迷你最小化系统安装菜单项
menu label Auto Install an ^Mini system ^是指快捷键,该符号放在哪个字母前,该字母就是该项系统菜单的选择快捷键,如按m键是指选择最小化安装
kernel vmlinuz
append initrd=initrd.img ks=cdrom:/ksdir/ks_centos6.cfg 指定kickstart应答文件路径
label desktop 制作带有桌面的系统按菜单项
menu label Auto Install an ^Desktop system ^是指快捷键,该符号放在哪个字母前,该字母就是该项系统菜单的选择快捷键,如按d键是指选择带有桌面的系统安装
kernel vmlinuz
append initrd=initrd.img ks=cdrom:/ksdir/ks_centos_desktop.cfg 指定kickstart应答文件路径
label local
menu default 系统菜单默认启动项为本地启动,如果放在其他两项后,如果系统已经安装完毕,则会把系统重装,这样是不安全的
menu label Boot from ^local drive ^是指快捷键,该符号放在哪个字母前,该字母就是该项系统菜单的选择快捷键,如按l键是指选择从本地启动安装
localboot 0xffff
mkisofs -R -J -T -v --no-emul-boot --boot-load-size 4 --boot-info-table -V "CentOS 6.10 x86_64 boot" -b isolinux/isolinux.bin -c isolinux/boot.cat -o /root/boot.iso /data/boot/
注意:使用该命令,要写对制作光盘的目录,另外,以上相对路径都是相对于光盘的根,和工作目录无关
-
创建U盘启动盘,使用dd命令把准备好的文件写入u盘即可
dd if=/dev/sr0 of=/dev/sdb
-
mkisofs选项
-o 指定映像文件的名称。
-b 指定在制作可开机光盘时所需的开机映像文件。
-c 制作可开机光盘时,会将开机映像文件中的 no-eltorito-catalog 全部内容作成一个文件。
-no-emul-boot 非模拟模式启动。
-boot-load-size 4 设置载入部分的数量
-boot-info-table 在启动的图像中现实信息
-R 或 -rock 使用 Rock RidgeExtensions
-J 或 -joliet 使用 Joliet 格式的目录与文件名称
-v 或 -verbose 执行时显示详细的信息
-T 或 -translation-table 建立文件名的转换表,适用于不支持 Rock Ridge Extensions 的系统上
3、DHCP服务
- 网络配置
静态指定
动态获取: bootp:boot protocol MAC与IP一一静态对应
dhcp:增强的bootp,动态 - 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报文向服务器进行请求,极少用到
DHCP工作原理
- DHCP工作原理四步骤:
discover:主机启动时,向网络中发送请求报文,寻找网络中是否存在DHCP服务器,如果存在,请求获取ip地址
offer:dhcp服务器提供ip地址给客户端,同时把该地址打上标签:该地址已被占用
request:客户端根据先到先得的规则,获取ip地址;并发送报文通知所有网络自己所获取的地址
ack:确认客户端获取的ip地址,并把该ip地址的相关信息(掩码,网关,租期等)发送给客户端 - 续租
50% :租赁时间达到50%时来续租,刚向DHCP服务器发向新的DHCPREQUEST请求。如果dhcp服务没有拒绝的理由,则回应DHCPACK信息。当DHCP客户端收到该应答信息后,就重新开始新的租用周期
87.5%:如果之前DHCP Server没有回应续租请求,等到租约期的7/8时,主机会再发送一次广播请求
如果网络中没有DHCP服务器,获取不到地址时,windows系统将会给自己分配一个地址:169.254.x.x
dhcp工作原理是基于广播实现的,如果client和server之间存在路由器(即跨网段),可以利用中继代理dhcrelay agent实现
DHCP服务简介
- 同网段多DHCP服务
DHCP服务必须基于本地
先到先得的原则 - 跨网段
RFC 1542 Compliant Routers
dhcrelay: 中继 - 相关协议
Arp
rarp
DHCP实现
- Linux DHCP协议的实现程序:dhcp, dnsmasq(dhcp,dns)
- Dhcp Server
/usr/sbin/dhcpd
/etc/dhcp/dhcpd.conf --> /etc/rc.d/init.d/dhcpd
/etc/dhcp/dhcpd6.conf--> /etc/rc.d/init.d/dhcpd6
/usr/sbin/dhcrelay
/etc/rc.d/init.d/dhcrelay
dhcp server:67/udp
dhcp client: 68/udp
dhcpv6 client:546/udp - Dhcp client
dhclient
自动获取的IP信息: /var/lib/dhclient
DHCP配置文件
- dhcpd.conf:
帮助参考:man 5 dhcpd.conf
全局配置
subnet {
...
}
host {
} - 地址分配记录
/var/lib/dhcpd/dhcpd.leases
注意:该服务配置文件/etc/dhcp/dhcpd.conf默认为空,无法启动,需要根据范例文件/usr/share/doc/dhcp-4.2.5/dhcpd.conf.example手动创建配置文件
示例:
vim /etc/dhcp/dhcpd.conf
option domain-name "magedu.com"; 指定域名
option domain-name-servers 192.168.0.1,8.8.8.8; 指定dns地址
default-lease-time 86400;
max-lease-time 86400;
subnet 192.168.32.0 netmask 255.255.255.0 { 指定分配的子网网段
range 192.168.32.10 192.168.32.100; 指定dhcp地址池
option routers 192.168.32.100; 制定网管
}
- 其它配置选项:
filename: 指明引导文件名称
next-server:提供引导文件的服务器IP地址
示例:
filename "pxelinux.0";
next-server 192.168.100.100;
- 检查语法
service dhcpd configtest
知识扩展1:搭建dhcp服务
如何配置DHCP服务器
注意:实验时不要使用桥接模式,使用仅主机模式,停用vmware中DHCP服务器即可
dhcp服务器地址必须是静态地址
使用yum安装dhcp
yum install dhcp
做实验时,配置一个网卡即可
/etc/dhcp/dhcpd.conf dhcp主配置文件,默认为空,参考范例文件
/usr/share/doc/dhcp-4.2.5/dhcpd.conf.example dhcp范例文件
/usr/sbin/dhcpd dhcp主程序
/usr/sbin/dhcrelay dhcp代理
/var/lib/dhcpd dhcp数据库文件
搭建dhcp服务
必须要先给本网卡所在网络分配地址,再给远程网络分配地址
配置/etc/dhcp/dhcpd.conf文件
7 option domain-name "magedu.org"; 配置域名
8 option domain-name-servers 114.114.114.114,1.1.1.1; dns地址,一般情况下为ip地址,而不是域名;配置该项使客户端获取ip地址的同时,能够获取dns地址
9
10 default-lease-time 86400; 默认租期为600秒,根据使用场景更改租期时间
11 max-lease-time 86400; 最大租期时间,默认要大于等于默认租期;一般情况下最大租期时间是无效的,只有在特殊情况下才会生效
27 subnet 192.168.32.0 netmask 255.255.255.0 {
28 range 192.168.32.10 192.168.32.100;
29 option routers 192.168.32.100;
30 }
如果这一项没有更改,dhcp服务无法启动;因为没有为主机网卡所在网段提供服务,系统认为这样是不合理的,因此要对该项进行更改。
只需添加本地网卡所在网段即可,无需添加任何定义。
另外要在该网段内添加分配的地址池范围,否则,仍然无法提供dhcp服务
配置完毕,重启dhcp服务
systemctl restart dhcpd
用同一网段的主机设置为dhcp获取地址进行测试
知识扩展2:可以把dns写入到subnet里,而且优先级高于option domain-name-servers设置的dns
vim /etc/dhcp/dhcpd.conf
27 subnet 192.168.32.0 netmask 255.255.255.0 {
28 range 192.168.32.10 192.168.32.100;
29 option routers 192.168.32.100;
30 option domain-name-servers 8.8.8.8;
31 }
option domain-name-servers 114.114.114.114,1.1.1.1
[root@centos6 ~]#cat /etc/resolv.conf 查看获取的dns地址;
generated by /sbin/dhclient-script
search magedu.org
nameserver 8.8.8.8
如果其他主机不是从192.168.32.0网段获取ip地址,则option domain-name-servers 114.114.114.114,1.1.1.1会生效
知识扩展3:获取固定的ip地址:ip地址绑定mac地址
vim /etc/dhcp/dhcpd.conf
78 host fantasia {
79 hardware ethernet 00:0c:29:ca:4f:3d;
80 fixed-address 192.168.32.20;
81 }
把拥有00:0c:29:ca:4f:3d该mac地址的主机设置为dhcp自动获取地址,查看是否获取的地址为设置的ip地址
4、PXE安装系统
PXE介绍
- PXE
Preboot Excution Environment 预启动执行环境
Intel公司研发
基于Client/Server的网络模式,支持远程主机通过网络从远端服务器下载映像,并由此支持通过网络启动操作系统
PXE可以引导和安装Windows,linux等多种操作系统
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目录下),TFTP将配置文件发回Client,继而Client根据配置文件执行后续操作。
- Client向TFTP发送Linux内核请求信息,TFTP接收到消息之后将内核文件发送给Client
- Client向TFTP发送根文件请求信息,TFTP接收到消息之后返回Linux根文件系统
- Client启动Linux内核
- Client下载安装源文件,读取自动化安装脚本
PXE自动化安装CentOS7
- 安装前准备:关闭防火墙和SELINUX,DHCP服务器静态IP
- 安装软件包
yum -y install httpd tftp-server dhcp syslinux system-config-kickstart
- 配置文件共享服务,配置基于http服务的yum仓库:
示例:
systemctl enable httpd 把http服务设置为开机自启动
systemctl start httpd 启动http服务
mkdir -p /var/www/html/centos/{7,ks} 创建挂载光盘以及存放kickstart的目录
mount /dev/sr0 /var/www/html/centos/7 挂载光盘
登录http服务进行测试,是否搭建成功
- 准备kickstart文件
使用系统自带的模板,推荐使用图形界面制作。
注意:在centos7系统选择安装包时无法选择,需要把本地yum仓库名更改[development]
把kickstart文件ks7.cfg复制到/var/www/html/ksdir目录下
cp ks7.cfg /var/www/html/ksdir
注意:要根据情况更改应答文件中指向yum仓库的路径
注意更改文件权限:
chmod 644 /var/www/html/ksdir/ks7.cfg
- 配置DHCP服务
示例:
dhcp配置文件默认为空,使用模板文件进行修改
cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
更改内容:域名、dns、subnet本地网卡所在网段,dhcp分配地址池范围、网关
最重要的是:filename "pxelinux.0"
next-server 192.168.32.129 指向本机(本机作为tftp服务器)
vim /etc/dhcp/dhcpd.conf
27 subnet 192.168.32.0 netmask 255.255.255.0 {
28 range 192.168.32.10 192.168.32.100;
29 filename "pexlinux.0";
30 next-server 192.168.32.129;
31 }
systemctl enable dhcpd
systemctl start dhcpd
- 配置tftp服务
示例:
systemctl enable tftp.socket 把tftp服务设置为开机自启动
systemctl start tftp.socket 开启tftp服务
- 准备相关文件
示例:
mkdir /var/lib/tftpboot/pxelinux.cfg/
cp /usr/share/syslinux/{pxelinux.0,menu.c32} /var/lib/tftpboot/
cp /misc/cd/isolinux/{vmlinuz,initrd.img} /var/lib/tftpboot/
cp /misc/cd/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
/var/lib/tftpboot目录下文件列表如下:
tree /var/lib/tftpboot/
├── initrd.img
├── menu.c32
├── pxelinux.0
├── pxelinux.cfg
│ └── default
└── vmlinuz
- 自定义启动菜单
示例:
vim /var/lib/tftpboot/pxelinux.cfg/default
1 default menu.c32
2 timeout 60
3
4 menu title PXE CentOS 7
5
6 label linux
7 menu label Auto Install ^Mini CentOS 7
8 kernel vmlinuz
9 append initrd=initrd.img ks=http://192.168.32.129/ksdir/ks7.cfg
10
11 label local
12 menu default
13 menu label Boot from ^local drive
14 localboot 0xffff
重启tftp服务
systemctl restart tftp
查看三个服务端口68,67,80是否启动
测试是否能够通过网络启动
PXE自动化安装CentOS6
- 安装前准备:关闭防火墙和SELINUX,DHCP服务器静态IP
配置过程如下:
1.安装相应软件包,开启服务,设置为开机自启动
yum install dhcp httpd tftp-server syslinux
chkconfig tftp on
chkconfig xinetd on
chkconfig httpd on
chkconfig dhcpd on
service httpd start
service xneted start
2.准备Yum源和相关目录
mkdir -pv /var/www/html/centos/{6,ks}
mount /dev/sr0 /var/www/html/centos/6
把光盘挂载到/var/www/html/centos/6
mkdir /var/www/html/centos/6
mount /dev/sr0 /var/www/html/centos/6
3.准备kickstart文件
使用系统自带的模板,推荐使用图形界面制作。
把kickstart文件ks6.cfg复制到/var/www/html/ksdir目录下
cp ks6.cfg /var/www/html/ksdir
注意:要根据情况更改应答文件中指向yum仓库的路径
注意权限:
chmod 644 /var/www/html/centos/ks/ks6.cfg
4.准备相关的启动文件
配置tftp服务,复制文件到/var/lib/tftpboot
复制pxelinux.0文件到/var/lib/tftpboot
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
不使用自定义菜单,使用系统默认菜单
复制/mnt/cdrom/isolinux/下启动菜单用到的文件到/var/lib/tftpboot目录下
mkdir /var/lib/tftpboot/pxelinux.cfg
cp /mnt/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
其他文件:
cp /mnt/cdrom/isolinux/{boot.msg,initrd.img,splash.jpg,vesamenu.c32,vmlinuz} /var/lib/tftpboot
5.准备启动菜单文件
cp /misc/cd/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
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 wang CentOS 6
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 linux
menu label ^Auto Install an Mini system
menu default
kernel vmlinuz
append initrd=initrd.img ks=http://192.168.32.128/ksdir/ks6.cfg
最小化安装系统指定应答文件路径ks=http://192.168.32.128/ksdir/ks6.cfg
label vesa
menu label ^Manual Install an system
kernel vmlinuz
append initrd=initrd.img repo=http://192.168.32.128/centos/6
手动安装,类似于救援模式,只需去掉rescue单词即可
label rescue
menu label ^Rescue installed system
kernel vmlinuz
append initrd=initrd.img rescue repo=http://192.168.32.128/centos/6
救援模式要使用救援模式,需要指定仓库路径repo=http://192.168.32.128/centos/6
label local
menu default
menu label Boot from ^local drive
localboot 0xffff
本地安装 更改系统默认启动项为本地启动
/var/www/tftpboot目录结构如下:
tree /var/lib/tftpboot/
/var/lib/tftpboot/
├── boot.msg
├── initrd.img
├── pxelinux.0
├── pxelinux.cfg
│ └── default
├── splash.jpg
├── vesamenu.c32
└── vmlinuz
1 directory, 7 files
6.配置dhcp服务
cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample /etc/dhcp/dhcpd.conf
vim /etc/dhcp/dhcpd.conf
subnet 192.168.32.0 netmask 255.255.255.0 {
range 192.168.32.10 192.168.32.100
next-server 192.168.32.128
filename "pxelinux.0"
}
service dhcpd start
5、cobbler企业级应用
cobbler介绍
- Cobbler:
快速网络安装linux操作系统的服务,支持众多的Linux发行版:Red Hat、Fedora、CentOS、Debian、Ubuntu和SuSE,也可以支持网络安装windows
PXE的二次封装,将多种安装参数封装到一个菜单
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相关介绍
- 安装包
cobbler 基于EPEL源 - cobbler 服务集成
PXE
DHCP
rsync
Http
DNS
Kickstart
IPMI 电源管理 - 检查cobbler环境
cobbler check
cobbler相关术语
- 发行版:
表示一个操作系统版本,它承载了内核和 initrd 的信息,以及内核参数等其他数据 - 配置文件:
包含一个发行版、一个 kickstart 文件以及可能的存储库,还包含更多特定的内核参数等其他数据 - 系统:
表示要配置的主机,它包含一个配置文件或一个镜像,还包含 IP 和 MAC 地址、电源管理(地址、凭据、类型)以及更为专业的数据等信息 - 存储库:
保存一个 yum 或 rsync 存储库的镜像信息 - 镜像:
可替换一个包含不属于此类别的文件的发行版对象(例如,无法分为内核和 initrd 的对象)
cobbler各种配置目录说明
- 安装:yum install cobbler dhcp
- 配置文件目录 /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 commands介绍
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 check命令会报异常
异常如下:
1 : The ‘server’ field in /etc/cobbler/settings must be set to something other than localhost, or kickstarting features will not work. This should be a resolvable hostname or IP for the boot server as reachable by all machines that will use it.
2 : For PXE to be functional, the ‘next_server’ field in /etc/cobbler/settings must be set to something other than 127.0.0.1, and should match the IP of the boot server on the PXE network.
3 : some network boot-loaders are missing from /var/lib/cobbler/loaders, you may run ‘cobbler get-loaders’ to download them, or, if you only want to handle x86/x86_64 netbooting, you may ensure that you have installed a recent version of the syslinux package installed and can ignore this message entirely. Files in this directory, should you want to support all architectures, should include pxelinux.0, menu.c32, elilo.efi, and yaboot. The ‘cobbler get-loaders’ command is the easiest way to resolve these requirements.
4 : change ‘disable’ to ‘no’ in /etc/xinetd.d/rsync
5 : comment ‘dists’ on /etc/debmirror.conf for proper debian support
6 : comment ‘arches’ on /etc/debmirror.conf for proper debian support
7 : The default password used by the sample templates for newly installed machines (default_password_crypted in /etc/cobbler/settings) is still set to ‘cobbler’ and should be changed, try: “openssl passwd -1 -salt ‘random-phrase-here’ ‘your-password-here’” to generate new one
8 : fencing tools were not found, and are required to use the (optional) power management features. install cman or fence-agents to use them
- 执行Cobbler check报错解决方式
修改/etc/cobbler/settings文件中的server参数的值为提供cobbler服务的主机相应的IP地址或主机名
修改/etc/cobbler/settings文件中的next_server参数的值为提供PXE服务的主机相应的IP地址
如果当前节点可以访问互联网,执行“cobbler get-loaders”命令即可;否则,需要安装syslinux程序包,而后复制/usr/share/syslinux/{pxelinux.0,memu.c32}等文件至/var/lib/cobbler/loaders/目录中
执行“chkconfig rsync on”命令即可
执行"openssl passwd -1"生成密码,并用其替换/etc/cobbler/settings文件中default_password_crypted参数的值
另外:建议修改的配置:
vim /etc/cobbler/setting
242 manage_dhcp: 1
dhcp配置文件默认为空,把该项0改为1,由cobbler管理dhcp自动生成dhcp配置文件,无需手动创建
更改后,重启cobbler服务
此时还需更改由cobbler自动生成的dhcp配置文件
vim /etc/cobbler/dhcp.template
21 subnet 192.168.32.0 netmask 255.255.255.0 {
22 option routers 192.168.32.5;
23 option domain-name-servers 192.168.1.1;
24 option subnet-mask 255.255.255.0;
25 range dynamic-bootp 192.168.32.100 192.168.32.254;
把默认网段,更改为dhcp分配的地址网段即可,如:地址池范围,网关等,其他项无需更改
更改后进行同步:cobbler sync
cobbler相关管理
- 下载启动菜单:
联网:cobbler get-loaders
不联网:cp /usr/share/syslinux/{pxelinux.0,menu.c32} /var/lib/tftpboot - 管理distro
cobbler import --name=centos-6.9-x86_64 --path=/media/cdrom --arch=x86_64 - 管理profile
cobbler profile add --name=centos-6.9-x86_64-basic
--distro=centos-6.9-x86_64 --kickstart= /var/lib/cobbler/kickstarts/centos-6.9-x86_64.cfg
cobbler命令
- 查看profiles
cobbler profile list - 查看引导文件
cat /var/lib/tftpboot/pxelinux.cfg/default - 同步cobbler配置
cobbler sync - 多系统引导方案
cobbler import --name=CentOS-7-x86_64 --path=/media/cdrom cobbler distro list
cobbler profile list
cobbler sync
知识扩展:
以上实现的是系统自动生成的应答文件引导,是最小化安装系统,如果要自定义系统,需要自定义制作应答文件,制作完成以后,需要对该文件进行更改:
vim ks_centos7.cfg
14 url --url=$tree
此时不知道yum仓库路径,把url路径指定为$tree变量,该变量为cobbler变量,它能够自动添加cobbler自己生成的仓库路径
把应答文件与发行版本centos7.5-x8_64进行关联,需要把应答文件复制到cobbler准们存放应答文件的目录下
/var/lib/cobbler/kickstarts/是cobbler专门用于存放应答文件的目录
cp ks_centos7.cfg /var/lib/cobbler/kickstarts/ks7.cfg
把应答文件复制到对应目录下并改名为ks7.cfg
手动关联应答文件与发行版本
cobbler profile add --name=centos7.5-x8_64-x86_64_desktop --distro=centos7.5-x8_64-x86_64 --kickstart=/var/lib/cobbler/kickstarts/ks7.cfg
add 新增应答文件
可以把原来系统默认生成的应答文件删除
cobbler profile remove --name=centos7.5-x86_64
--name 指定系统启动菜单项的名称
--distro 指定系统发行版本
--kickstart 指定应答文件名,该文件路径必须为绝对路径
查看生成的菜单项:
cat /var/lib/tftpboot/pxelinux.cfg/default
cobbler实现步骤
1、安装包,并设置服务
2、检查配置
3、根据上面提示修改配置
4、下载启动相关文件菜单
5、配置DHCP服务
6、分别导入centos的安装源,并查看
7、准备kickstart文件并导入cobbler
8、测试
cobbler的web管理实现
- cobbler-web
提供cobbler的基于web管理界面,epel源
yum install cobbler-web - 认证方式
认证方法配置文件:/etc/cobbler/modules.conf
支持多种认证方法:
authn_configfile
authn_pam - 使用authn_configfile模块认证cobbler_web用户
示例:
vim /etc/cobbler/modules.conf
[authentication]
module=authn_configfile
创建其认证文件/etc/cobbler/users.digest,并添加所需的用户
htdigest -c /etc/cobbler/users.digest Cobbler admin
注意:添加第一个用户时,使用“-c”选项,后续添加其他用户时不要再使用,cobbler_web的realm只能为Cobbler
- 使用authn_pam模块认证cobbler_web用户
示例:
vim /etc/cobbler/modules.conf
[authentication]
module = authn_pam
创建cobbler用户
useradd cobbler
vim /etc/cobbler/users.conf
[admins]
admin = "cobbler“
- Web访问cobbler
重启cobblerd服务
通过https://cobblerserver/cobbler_web访问 - 注意:配置完成后可能会存在以下问题:
查看ssl日志发现提示:cannot import name TEMPLATE_CONTEXT_PROCESSORS
初步判断应该是pythone-django版本问题
解决方法:
#下载pip.py
wget https://bootstrap.pypa.io/get-pip.py
#调用本地python运行pip.py脚本
python get-pip.py
#安装pip
pip install Django==1.8.9
#查看pip版本号
python -c "import django; print(django.get_version())"
#重启httpd
systemctl restart httpd
再次访问cobbler web页面,问题解决
文章评论