前言:
pxe和cobbler自動化安裝系統(tǒng),都要依賴于dhcp、tftp妹笆、httpd服務(wù)的開啟所以首先我們要了解這些服務(wù)。
一 娜氏、dhcp服務(wù)
1拳缠、dhcp協(xié)議
- 動態(tài)主機配置協(xié)議是一個局域網(wǎng)的網(wǎng)絡(luò)協(xié)議控制一段IP地址范圍,客戶機登錄服務(wù)器時就可以自動獲得服務(wù)器分配的IP地址和子網(wǎng)掩碼贸弥。
- 與dhcp功能相同是dnsmasq
2窟坐、續(xù)租請求:
通常主機會在50%時候續(xù)租一次時長
在找不到server時候,時間到75%時候續(xù)租一次時長
在找不到server時候,時間到87.5%時候續(xù)租一次時長
續(xù)租時長:單播給服務(wù)器
情況一: dhcp request 告訴服務(wù)器再租一次
dhcp ack 服務(wù)器返回同意續(xù)租
情況二: dhcp request 告訴服務(wù)器再租一次
dhcp nak 服務(wù)器拒絕續(xù)租
3哲鸳、dhcp服務(wù)
- dhcpd可以提供dhcp服務(wù)和(dhcrelay)dhcp中繼服務(wù)
4臣疑、dhcp的安裝
[root@vs ~]# yum -y -install dhcp安裝
[root@vs ~]# cd /etc/dhcp/
[root@vs dhcp]# ls
dhclient.d dhclient-exit-hooks.d dhcpd6.conf dhcpd.conf scripts
[root@vs dhcp]# cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example ./dhcpd.conf -f
cp:是否覆蓋"./dhcpd.conf"? y
[root@vs dhcp]# vim dhcpd.conf
# dhcpd.conf
#
# Sample configuration file for ISC dhcpd
#
# option definitions common to all supported networks...
option domain-name "hehe.com";#定義選項
option domain-name-servers 192.1681.6;#dhcp服務(wù)器地址
default-lease-time 3600;#默認租約期限
max-lease-time 7200;#最長租約期限
..................
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.8.8 192.168.8.50 #起始地址
}
}定義子網(wǎng)和作用域
................
host passacaglia {
hardware ethernet 0:0:c0:5d:bd:95;#根據(jù)主機名那臺主機綁定分配ip地址
filename "vmunix.passacaglia";
server-name "toccata.fugue.com";
}
host fantasia {
hardware ethernet 08:00:07:26:c0:a5;#根據(jù)名mac主機綁定分配ip地址
option roulers 192.168.1.1 #指定網(wǎng)關(guān)
fixed-address 192.168.1.6;
}
其他不用的配置行注釋掉徙菠,用.,$s/^[^#]/#/g行首非#號添加#
[root@vs ~]systemctl start dhcpd.service#啟動服務(wù)
[root@vs ~]# less /var/lib/dhcpd/dhcpd.leases#查看分發(fā)出去的客戶機租約
其他配置:
filename:指明引導(dǎo)文件名稱
例如: filename"pxelinux.0";
next-server:指明引導(dǎo)所在的服務(wù)器主機的ip地址
例如: next-server 192.168.1.6;
- 客戶端命令:dhclient
-d 運行在前臺
二讯沈、tftp服務(wù)
1、tftp定義
TFTP(Trivial File Transfer Protocol)簡單文件傳輸協(xié)議是TCP/IP協(xié)議族中的一個用來在客戶機與服務(wù)器之間進行簡單文件傳輸?shù)膮f(xié)議婿奔,提供不復(fù)雜缺狠、開銷不大的文件傳輸服務(wù)端口號為utp協(xié)議的69。
2脸秽、tftp作用
通過tfrp server加載 (bootloader,kernel,initrd)
3儒老、安裝
[root@vs ~]# yum -y install tftp-server tftp#安裝tftp和tftp服務(wù)
三蝴乔、httpd服務(wù)和syslinux
1记餐、httpd服務(wù)提供yum repository下載路徑和kickstart文件提供安裝配置
2、syslinux是一個的引導(dǎo)加載程序薇正,需要他的pxelinux.0文件片酝。
3、PXE安裝
* PXE: preboot excution environment
* 首先 由dhcp分配給主機ip挖腰,netmask雕沿,gw,dns,通過tfrp server加載(bootloader,kernel,initrd)猴仑,然后到y(tǒng)um repository可以通過 (ftp,http,nfs)审轮,由kickstart自動應(yīng)答文件提供安裝配置,完成自動化安裝辽俗。
四疾渣、CentOS6的pxe自動化安裝示例:
[root@bogon ~]# yum install dhcp tftp-server tftp syslinux vsftpd -y#安裝pex所需的程序包
[root@bogon ~]# cd /etc/dhcp #切換目錄
[root@bogon dhcp]# ls
dhclient.d dhclient-exit-hooks.d dhcpd6.conf dhcpd.conf
[root@bogon dhcp]# cp /usr/share/doc/dhcp-4.1.1/dhcpd.conf.sample ./dhcpd.conf
#拷貝配置文件
cp: overwrite `./dhcpd.conf'? y
[root@bogon dhcp]# vim dhcpd.conf#編輯dhcp配置文件
.........
# option definitions common to all supported networks...
option domain-name "hehe.com";
option domain-name-servers 192.168.3.133; #dhcp服務(wù)器地址
default-lease-time 600; #默認租期
max-lease-time 7200;
..........
log-facility local7;
..............
subnet 192.168.3.0 netmask 255.255.255.0 { #定義子網(wǎng)
range 192.168.3.3 192.168.3.20; #地址范圍
filename "pxelinux.0"; #引導(dǎo)文件
next-server 192.168.3.133;
}
[root@bogon dhcp]# service dhcpd configtest #語法檢查
Syntax: OK
[root@bogon dhcp]# service dhcpd start #啟動dhcp服務(wù)
Starting dhcpd: [ OK ]
[root@bogon dhcp]# vim /etc/xinetd.d/tftp #編輯超級守護進程里面的tftp設(shè)置
[root@bogon dhcp]# chkconfig dhcpd on #開機自動啟動dhcp服務(wù)
[root@bogon dhcp]# service xinetd restart #重啟超級守護進程
Stopping xinetd: [FAILED]
Starting xinetd: [ OK ]
[root@bogon dhcp]# chkconfig xinetd on #開機自動啟動超級守護進程
[root@bogon dhcp]# ss -unl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
UNCONN 0 0 *:67 *:* #dhcp服務(wù)已經(jīng)啟動
UNCONN 0 0 *:68 *:*
UNCONN 0 0 *:69 *:* #超級守護進程已啟動
[root@bogon ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ #拷貝pxelinux文件
[root@bogon ~]# tftp 192.168.3.133 #測試tftp下載服務(wù)
tftp> get pxelinux.0
tftp> quit
[root@bogon ~]# ls
anaconda-ks.cfg install.log meun pxelinux.0
[root@bogon ~]# mkdir /media/cdrom #創(chuàng)建光盤掛載目錄
[root@bogon ~]# mount -r /dev/cdrom /media/cdrom #掛載光盤
[root@bogon ~]# ls /media/cdrom #查詢光盤內(nèi)容
[root@bogon ~]# cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/#拷貝光盤文件
[root@bogon ~]# cp /media/cdrom/isolinux/{boot.msg,vesamenu.c32,splash.jpg} /var/lib/tftpboot/#拷貝光盤文件
[root@bogon ~]# mkdir /var/lib/tftpboot/pxelinux.cfg/#創(chuàng)建目錄
[root@bogon ~]# cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default#拷貝啟動引導(dǎo)文件
[root@bogon ~]# chmod +w /var/lib/tftpboot/pxelinux.cfg/default #修改寫入權(quán)限
[root@bogon ~]# 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 CentOS 6.9!
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 autoinst
menu label ^Auto Install CentOS #新建自動安裝項
menu default
kernel vmlinuz
append initrd=initrd.img ks=ftp://192.168.3.133/pub/centos6.cfg #指明ks地址
............
[root@bogon ~]# mkdir /var/ftp/pub/centos #創(chuàng)建倉庫存放目錄
[root@bogon ~]# mount --bind /media/cdrom/ /var/ftp/pub/centos #綁定掛載cdrom到新創(chuàng)建倉庫目錄
[root@bogon ~]# ls /var/ftp/pub/centos/ #測試
[root@bogon ~]# vim anaconda-ks.cfg #編輯ks
#platform=x86, AMD64, 或 Intel EM64T
#version=DEVEL
# Firewall configuration
firewall --disabled
# Install OS instead of upgrade
install
url --url = "ftp://192.168.3.133/pub/centos"
lang en_US.UTF-8
keyboard us
# Root password
rootpw 123456
# System authorization information
auth --useshadow --passalgo=sha512
# Use text mode install
text
# System keyboard
keyboard us
# System language
lang en_US
# SELinux configuration
selinux --disabled
# Do not configure the X Window System
skipx
# Installation logging level
logging --level=info
key --skip
# Reboot after installation
reboot
# System timezone
timezone Asia/Shanghai
# Network information
network --bootproto=dhcp --device=eth0 --onboot=on
# System bootloader configuration
bootloader --location=mbr
# Clear the Master Boot Record
zerombr
# Partition clearing information
clearpart --all --initlabel
# Disk partitioning information
part swap --fstype="swap" --size=1024
part / --fstype="ext4" --grow --size=1
%packages
@base
@compat-libraries
@core
@debugging
@development
@server-policy
@workstation-policy
python-dmidecode
sgpio
device-mapper-persistent-data
systemtap-client
%end
[root@bogon ~]# cp anaconda-ks.cfg /var/ftp/pub/centos6.cfg
[root@bogon ~]# service vsftpd start#啟動vsftpd服務(wù)
Starting vsftpd for vsftpd: [ OK ]
[root@bogon ~]# ss -unl #查看tftp啟動在69號端口
客戶端啟動安裝測試:
五、CentOS7的pxe自動化安裝示例:
第一步準備tftp server:
[root@vs ~]# yum -y install tftp-server tftp安裝tftp和tftp服務(wù)
[root@vs ~]# systemctl start tftp #啟動
[root@vs ~]# tftp 192.168.1.6 #登錄tftp測試
tftp> status#查詢信息
Connected to 192.168.1.6.
Mode: netascii Verbose: off Tracing: off Literal: off
Rexmt-interval: 5 seconds, Max-timeout: 25 seconds
tftp> quit#退出
默認的文件目錄:/var/lib/tftpboop/把文件放在這里
第二步準備dhcp服務(wù)器:
安裝dhcpd服務(wù)
[root@vs dhcp]# vim dhcpd.conf#編輯dhcpd配置文件
option domain-name "hehe.com";
option domain-name-servers 192.168.1.6;#dhcp服務(wù)器地址
option routers 192.168.1.6;#默認路由
default-lease-time 600;
max-lease-time 7200;
..................
log-facility local7;
.......................
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.80 192.168.1.90;#地址池
filename "pxelinux.0";#配置文件名稱
next-server 192.168.1.6; #tftp服務(wù)器地址
}
[root@vs ~]# systemctl start dhcpd #啟動dhcp服務(wù)
[root@vs ~]# ss -unl
State Recv-Q Send-Q Local Address:Port Peer Address:Port
UNCONN 0 0 *:67 *:* #端口已啟動
第三步準備yum倉庫
安裝httpd服務(wù)
[root@samba-105 ~]# yum -y install httpd #安裝httpd
[root@samba-105 ~]# mkdir /var/www/html/centos/7/x86_64 -pv創(chuàng)建目錄
[root@samba-105 ~]# mount -r /dev/cdrom /var/www/html/centos/7/x86_64 #掛載光盤上的文件
[root@samba-105 ~]# systemctl start httpd.service啟動httpd
[root@samba-105 ~]# mkdir /var/www/html/kickstarts/ #創(chuàng)建ks目錄
[root@samba-105 ~]# cp anaconda-ks.cfg /var/www/html/kickstarts/centos7.cfg
[root@samba-105 ~]# vim /var/www/html/kickstarts/centos7.cfg #編輯ks應(yīng)答文件
#platform=x86, AMD64, or Intel EM64T
#version=DEVEL
# Firewall configuration
firewall --disabled
# Install OS instead of upgrade
install
#Use network installation
url --url="http://http://172.16.15.105/centos/7/x86_64/"
# Root password
rootpw --iscrypted $1$lgzpzCCE$Y6xpvPBLom/J4zAipUjfr. ##此密碼為123.com
# System authorization information
auth useshadow passalgo=sha512
# Use graphical install
graphical
firstboot disable
# System keyboard
keyboard us
# System language
lang en_US
# SELinux configuration
selinux disabled
# Installation logging level
logging level=info
# System timezone
timezone Europe/Amsterdam
# System bootloader configuration
# Reboot afer installing
reboot ##一定要有此 選項否則操作系統(tǒng)安裝完后不會自動重啟崖飘。
######
bootloader location=mbr
clearpart --all --initlabel
part swap --asprimary --fstype="swap" --size=1024
part /boot --fstype xfs --size=300
part pv.01 --size=1 --grow
volgroup root_vg01 pv.01
logvol / --fstype xfs --name=lv_01 --vgname=root_vg01 --size=1 --grow
%packages ###要安裝的包
@^minimal
@core
acpid
iputils
man
net-tools
ntp
ntpdate
parted
vim-enhanced
wget
%end ###以%end結(jié)尾
#%addon com_redhat_kdump --disable --reserve-mb='auto'
#%end
%post #--nochroot --log=/mnt/sysimage/var/log/ks.post01.log
mkdir /root/test
%end
[root@samba-105 ~]# yum -y install syslinux #安裝syslinux
[root@samba-105 ~]# cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ #拷貝文件
[root@samba-105 ~]# cp /var/www/html/centos/7/x86_64/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/ #拷貝文件
[root@samba-105 ~]# cp /usr/share/syslinux/{chain.c32,menu.c32,memdisk,mboot.c32} /var/lib/tftpboot/ #拷貝文件
[root@samba-105 ~]# cd /var/lib/tftpboot/
[root@samba-105 tftpboot]# mkdir pxelinux.cfg #創(chuàng)建引導(dǎo)配置文件
[root@samba-105 tftpboot]# cd pxelinux.cfg
[root@samba-105 pxelinux.cfg]# vim default #創(chuàng)建啟動時候菜單
LABEL linux
MENU LABEL Install CentOS 7 x86_64
KERNEL vmlinuz
APPEND initrd=initrd.img inst.repo=http://172.16.15.105/centos/7/x86_64
LABEL linux_autoinst #自動安裝選項
MENU LABEL Install CentOS 7 x86_64
KERNEL vmlinuz
APPEND initrd=initrd.img inst.repo=http://172.16.15.105/centos/7/x86_64 #安裝時候使用的yum倉庫ks=http://172.16.15.105/kickstarts/centos7.cfg #ks文件位置
客戶端測試安裝:
六榴捡、cobbler自動化裝機
1、cobbler
Cobbler是一個Linux服務(wù)器安裝的服務(wù)朱浴,可以通過網(wǎng)絡(luò)啟動(PXE)的方式來快速安裝吊圾、重裝物理服務(wù)器和虛擬機,同時還可以管理DHCP翰蠢,DNS等项乒。
Cobbler可以使用命令行方式管理,也提供了基于Web的界面管理工具(cobbler-web)梁沧,還提供了API接口檀何,可以方便二次開發(fā)使用。
-
cobbler集成的服務(wù)有;
PXE服務(wù)支持
DHCP服務(wù)管理
DNS服務(wù)管理(可選bind,dnsmasq)
電源管理
Kickstart服務(wù)支持
YUM倉庫管理
TFTP(PXE啟動時需要)
Apache(提供kickstart的安裝源,并提供定制化的kickstart配置)
2埃碱、cobbler的三個層次:
distro:不同的發(fā)行版系統(tǒng)
profile:不同配置的同一發(fā)行版系統(tǒng)
system:不同ip地址同一配置的同一發(fā)行版系統(tǒng)
3猖辫、安裝配置
安裝:cobbler安裝yum倉庫是epel源
[root@vs ~]#yum -y install cobbler dhcp tftp-server tftp httpd #安裝服務(wù)
[root@vs ~]# useradd user1#創(chuàng)建用戶
[root@vs ~]# echo "123" | passwd --stdin user1#添加密碼
[root@vs ~]# tail -1 /etc/shadow#查詢密碼
user1:$6$tFcPsnxL$zoUdRFzeBCSbAgIOfFepsR4UI2uyUJCfoSe9cWCttpbGiHHWZI5sASzfrDf.y0wn.UhXMmN76t1GaGkc4uESu0:17754:0:99999:7:::
[root@vs ~]# cp /usr/share/syslinux/{pxelinux.0,menu.c32} /var/lib/cobbler/loaders/ #復(fù)制文件到cobbler目錄
[root@vs ~]# vim /etc/cobbler/settings
server: 192.168.1.6 #修改成可以訪問外網(wǎng)的ip地址
next_server: 192.168.1.6 #修改成可以訪問外網(wǎng)的ip地址
default_password_crypted: "$6$tFcPsnxL$zoUdRFzeBCSbAgIOfFepsR4UI2uyUJCfoSe9cWCttpbGiHHWZI5sASzfrDf.y0wn.UhXMmN76t1GaGkc4uESu0"#修改用戶密碼
[root@vs ~]# systemctl start dhcpd#啟動dhcp服務(wù)
[root@vs ~]# systemctl start tftp#啟動tftp服務(wù)
[root@vs ~]# systemctl start rsyncd#同步啟動
[root@vs ~]# systemctl start httpd#啟動httpd服務(wù)
[root@vs ~]# systemctl start cobblerd#cobbler啟動
[root@vs ~]# cobblerd check#配置檢查
[root@vs ~]# cobblerd sync
[root@vs ~]# vim /etc/cobbler/settings#編輯配置文件
使用cobbler管理dhcp、dns砚殿、tftp啃憎、rsync啟用或停止,這里我們都是默認為0似炎,不使用cobbler管理這些服務(wù)辛萍,我們自己手動管理。
cobbler使用格式
[root@vs ~]# cobbler #cobbler使用格式
usage
=====
cobbler <distro|profile|system|repo|image|mgmtclass|package|file> ...
[add|edit|copy|getks*|list|remove|rename|report] [options|--help]
cobbler <aclsetup|buildiso|import|list|replicate|report|reposync|sync|validateks|version|signature|get-loaders|hardlink> [options|--help]
[root@vs ~]# cobbler distro add --help#添加一個發(fā)行版系統(tǒng)
--name=NAME Name (Ex: Fedora-11-i386) #指明發(fā)行版名字
--kernel=KERNEL Kernel (Absolute path to kernel on filesystem)發(fā)行版特定的內(nèi)核
--initrd=INITRD Initrd (Absolute path to kernel on filesystem)特定的inittrd
--arch=ARCH Architecture (valid options:
i386,x86_64,ia64,ppc,ppc64,ppc64le,s390,arm)指明此發(fā)行版的平臺架構(gòu)
[root@vs ~]# cobbler import --help #導(dǎo)入光盤鏡像方式羡藐,自動生成一個distro
Usage: cobbler import [options]
Options:
-h, --help show this help message and exit
--arch=ARCH OS architecture being imported平臺架構(gòu)
--breed=BREED the breed being imported
--os-version=OS_VERSION
the version being imported
--path=PATH local path or rsync location
--name=NAME name, ex 'RHEL-5'對應(yīng)的導(dǎo)入的名字
--available-as=AVAILABLE_AS
tree is here, don't mirror
--kickstart=KICKSTART_FILE
assign this kickstart file
--rsync-flags=RSYNC_FLAGS
pass additional flags to rsync
- 當使用命令時候贩毕,cobbler將把掛載的光盤內(nèi)容自動復(fù)制到/var/www/html/目錄下,因此要確保磁盤空間充足
[root@vs ~]# cobbler import --name="CentOS-7.0_x86_64" --path=/media/cdrom
task started: 2018-08-12_150622_import
task started (id=Media import, time=Sun Aug 12 15:06:22 2018)
.................
*** TASK COMPLETE ***
[root@vs ~]# cobbler distro list#查詢已生成的distro
CentOS-7.0-x86_64
[root@vs ~]# cobbler profile list#查詢已生成的profile仆嗦,但此時沒有kiskstart
[root@vs ~]# cobbler sync#同步配置
[root@vs ~]# systemctl restart cobblerd
CentOS-7.0-x86_64
- 測試安裝辉阶,此時profile并沒有kiskstart文件,但cobbler會自動提供一個最小化安裝的kiskstart文件瘩扼,并完成安裝
-
注意:
安裝過程中碰到的內(nèi)存小問題谆甜,安裝過程會卡主,最后超時失敗測試安裝系統(tǒng)主機必須要配置大于等于2G的內(nèi)存集绰,官方文檔這么說的巡通,否則會導(dǎo)致安裝失敗埃叭,這個坑我掉進去很久才爬出來魄宏。
安裝cobbler錯誤:
查看導(dǎo)入列表,如果報如下內(nèi)容潮模,需要重啟cobbler,并執(zhí)行cobbler get-loaders.
xmlrpclib.Fault: <Fault 1: "cobbler.cexceptions.CX:'login failed'">
~]# systemctl restart cobblerd
~]# cobbler get-loaders