1、簡介html
一、PXE
python
PXE稱做是一種引導方式而不是安裝方式彷佛更加準確,PXE(Pre-boot Execution Environment)是由Intel設計的協議,它可使計算機經過網絡啓動,可是有一個前提條件是計算機的網卡必須具備引導功能,這個網卡中要有一個PXE客戶端。當計算機POST自檢成功之後,BIOS把網卡中ROM的PXE客戶端調入內存執行,PXE客戶端經過網絡中的DHCP服務器獲取一個IP地址,拿到IP地址之後PXE繼續引導計算機與網絡中的TFTP客戶端創建鏈接,從而從TFTP服務器中獲取開機引導文件以後請求並下載安裝須要的文件。在這個過程當中須要一臺服務器來提供啓動文件、安裝文件、以及安裝過程當中的自動應答文件等。linux
PXE工做步驟:
web
原理分析:
ubuntu
Client向PXE Server上的DHCP發送IP地址請求消息,DHCP檢測Client是否合法(主要是檢測Client的網卡MAC地址),若是合法則返回Client的IP地址,同時將啓動文件pxelinux.0的位置信息一併傳送給Clientvim
Client向PXE Server上的TFTP發送獲取pxelinux.0請求消息,TFTP接收到消息以後再向Client發送pxelinux.0大小信息,試探Client是否滿意,當TFTP收到Client發回的贊成大小信息以後,正式向Client發送pxelinux.0centos
Client執行接收到的pxelinux.0文件服務器
Client向TFTP Server發送針對本機的配置信息文件(在TFTP服務的pxelinux.cfg目錄下,這是系統菜單文件,格式和isolinux.cfg格式同樣,功能也是相似),TFTP將配置文件發回Client,繼而Client根據配置文件執行後續操做。網絡
Client向TFTP發送Linux內核請求信息,TFTP接收到消息以後將內核文件發送給Clientapp
Client向TFTP發送根文件請求信息,TFTP接收到消息以後返回Linux根文件系統
Client啓動Linux內核
Client下載安裝源文件,讀取自動化安裝腳本
二、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文件 第八步,傳輸系統安裝的其它文件 第九步,進行安裝系統
三、kickstart
kickstart是一個定義了Linux安裝過程的配置文件,好比要在系統中使用的時區、如何對驅動器進行分區、或者應該安裝哪些軟件包。有了這個文件能夠解放雙手,讓Linux安裝過程按照咱們預先定義的要求進行自動化安裝,同時部署大量主機時十分有用。通常centos系統安裝後,會在root目錄下生成一個名爲anaconda-ks.cfg的kickstart配置文件。Kickstart 是紅帽開發的一種工具,咱們能夠簡單理解爲一個自動安裝應答配置管理程序。經過讀取這個配置文件,系統知道怎麼去分區,要安裝什麼包,配什麼IP,優化什麼內核參數等等。其主要有如下部分組成:
Kickstart 安裝選項,包含語言的選擇,防火牆,密碼,網絡,分區的設置等;
%Pre 部分,安裝前解析的腳本,一般用來生成特殊的ks配置,好比由一段程序決定磁盤分區等;
%Package 部分,安裝包的選擇,能夠是 @core 這樣的group的形式,也能夠是這樣 vim-* 包的形式;
%Post 部分,安裝後執行的腳本,一般用來作系統的初始化設置。好比啓動的服務,相關的設定等。
2、操做系統及軟件版本
操做系統:Centos 7:CentOS Linux release 7.5.1804 (Core)
Cobbler:Cobbler 2.8.5
網絡: enp4s0: 172.16.30.3
3、部署搭建步驟
一、操做系統準備:
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
二、更新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
三、安裝依賴包:
安裝httpd 服務:yum install -y httpd
安裝dhcp服務:yum install -y dhcp
安裝tftp服務:yum install -y tftp-server
四、安裝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
五、安裝pykicksstart:
安裝pykickstart服務:yum install -y pykickstart
六、查看cobbler安裝的部分文件
rpm -ql cobbler # 查看安裝cobbler 生成的文件夾,主要分析以下:
七、重啓相關服務:
重啓cobbler服務:systemctl start cobblerd
systemctl restart cobblerd
重啓http服務:systemctl restart httpd
添加開機自啓動:systemctl enable httpd
systemctl enable cobblerd
八、檢查cobbler
檢查cobbler: cobbler check
九、根據上面檢查的結果,進行逐一的配置:
(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";
十、配置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
十一、設置開機自啓:
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
4、掛載光盤鏡像
因爲安裝的文件只能識別iso掛載後的文件,不能直接識別iso鏡像文件,因此須要將iso鏡像掛載到服務器上,而後將掛載後的系統文件複製到其餘目錄以備後用。(備註:也能夠根據本身的實際狀況建立目錄)。具體操做以下:
一、建立存放系統鏡像文件的目錄 (能夠根據本身的需求進行建立)
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系統掛載後的文件所有複製到此目錄
二、建立用戶臨時掛載鏡像的目錄:
mkdir /data1/oscahe/ #用於將系統鏡像iso文件掛載到此目錄下
三、將系統iso鏡像文件上傳到服務器中(能夠經過xftp工具進行上傳,能夠用U盤上傳等方式)
cd /data1
ls
四、掛載系統iso鏡像
mount -t iso9660 -o loop /data1/CentOS-7-x86_64-DVD-1804.iso /data1/oscahe/ #將Centos7系統掛載到/data1/oscahe目錄下
ls /data1/oscahe
五、將/data1/oscahe中的系統文件所有複製到鏡像文件目錄 /data1/os/centos7.5
cp -rf /data1/oscahe/* /data1/os/centos7.5/
六、卸載系統iso鏡像文件
umount /data1/CentOS-7-x86_64-DVD-1804.iso
ls /data1/oscahe/
(備註:若是想要掛載其餘系統的iso鏡像文件,重複上面的4 5 6 三個步驟)
七、查詢系統掛載了幾個系統鏡像文件
ls /data1/os/centos7.5/
ls /data1/os/ubuntu16.04.04
ls /data1/os/ubuntu16.04.06
5、導入鏡像
一、 使用如下的方法導入鏡像:
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系統鏡像
二、查看鏡像列表:
cobbler distro list
三、查看鏡像存放目錄
cd /var/www/cobbler/ks_mirror/
ls
6、配置ks文件
一、查看ks文件位置:
cd /var/lib/cobbler/kickstarts/
ls
二、配置自定義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
三、查看自動生成的自動安裝文件
第一次導入系統鏡像後,cobbler會給鏡像指定一個默認的kickstart自動安裝文件
(/var/lib/cobbler/kickstarts/sample_end.ks)
cobbler list
四、查看安裝鏡像文件信息
cobbler distro report --name=Centos7.5-x86_64
五、查看鏡像的profile 設置
cobbler profile report --name=Centos7.5-x86_64
六、編輯profile,修改關聯的ks文件(指定自定義的ks文件)
cobbler profile edit --name=Centos7.5-x86_64 --kickstart=/var/lib/cobbler/kickstarts/Centos7.5-x86_64.ks
七、查看profile,確認kickstart 關聯文件是否被修改:
cobbler profile report --name=Centos7.5-x86_64
八、同步數據
cobbler sync
systemctl restart cobblerd.service
九、修改PXEE默認啓動項
默認狀況下PXE啓動的是Local(啓動後會出現local和自定義CentOS7.5-x86_64兩個選項,需手動,要無人工干涉,就須要修改)
修改前:
cd /var/lib/tftpboot/pxelinux.cfg/
cat default
能夠修改裏面的啓動順序,也能夠不修改。
7、測試自動安裝:
一、將要安裝系統的設備,接入到網絡中,從網絡啓動:(不通的設備,網卡名字不一樣)
進入網絡啓動界面:
獲取到DHCP服務器的地址,設備獲取到IP地址:
獲取到可安裝的系統鏡像:
拉取安裝系統的文件:
開始自動安裝操做系統:
以上步驟均不需手動操做,自動安裝(備註:若是被安裝的設備有兩個網卡,須要手動選擇正確的網卡。若是有多塊硬盤,須要手動選擇安裝的盤,無親自測試,建議安裝對的時候安裝一塊盤,待系統安裝完成後,用腳本進行掛載和格式化。)。
此教程比較適用於自動化安裝centos系統,兼容性較高。對於安裝Ubuntu系統,ks文件兼容性不是很好。
參考文獻以下:
https://blog.csdn.net/yuanfangPOET/article/details/89279733