做爲運維,在公司常常遇到一些機械性重複工做要作,例如:爲新機器裝系統,一臺兩臺機器裝系統,能夠用光盤、U盤等介質安裝,1小時也完成了,可是若是有成百臺的服務器還要用光盤、U盤去安裝,就顯得有些力不從心了。PXE技術就能很好的解決這個問題,本文將會對PXE的工做原理有所介紹,而cobbler則是基於PXE技術的工做原理的二次封裝,經過命令的方式簡化了PXE配置過程。python
光盤(ISO文件,光盤的鏡像文件)===>>每一臺物理機都得給一個光驅,若是用外置光驅的話,是否是每臺機器都須要插一下linux
U盤:ISO鏡像刻錄到U盤==>>須要每臺機器都須要插一下ios
並行安裝==>>網絡安裝web
自動化安裝shell
PXE,全名Pre-boot Execution Environment,預啓動執行環境;django
經過網絡接口啓動計算機,不依賴本地存儲設備(如硬盤)或本地已安裝的操做系統;bootstrap
由Intel和Systemsoft公司於1999年9月20日公佈的技術;vim
客戶端/Server的工做模式;centos
PXE客戶端會調用網際協議(IP)、用戶數據報協議(UDP)、動態主機設定協議(DHCP)、小型文件傳輸協議(TFTP)等網絡協議;bash
PXE客戶端(客戶端)這個術語是指機器在PXE啓動過程當中的角色。一個PXE客戶端能夠是一臺服務器、筆記本電腦或者其餘裝有PXE啓動代碼的機器(咱們電腦的網卡)
1.PXE客戶端發送UDP廣播請求
PXE 客戶端從本身的PXE網卡啓動,經過PXE BootROM(自啓動芯片)會以UDP(簡單用戶數據報協議)發送一個廣播請求,向本網絡中的DHCP服務器索取IP。
2.DHCP服務器提供信息
DHCP服務器收到客戶端的請求,驗證是否來至合法的PXE 客戶端的請求,驗證經過它將給客戶端一個"提供"響應,這個"提供"響應中包含了爲客戶端分配的IP地址、pxelinux啓動程序(TFTP)位置,以及配置文件所在位置。
3.PXE客戶端請求下載啓動文件
客戶端收到服務器的"迴應"後,會迴應一個幀,以請求傳送啓動所需文件。這些啓動文件包括:pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img等文件。
4.TETP服務器響應客戶端請求並傳送文件
當服務器收到客戶端的請求後,他們之間以後將有更多的信息在客戶端與服務器之間做應答, 用以決定啓動參數。BootROM由TFTP通信協議從tftp服務器
下載啓動安裝程序所必須的文件(pxelinux.0、pxelinux.cfg/default)。default文件下載完成後,會根據該文件中定義的引導順序,啓動Linux安裝程序的引導內核。
5.請求下載自動應答文件
客戶端經過pxelinux.cfg/default文件成功的引導Linux安裝內核後,安裝程序首先必須肯定你經過什麼安裝介質來安裝linux,若是是經過網絡安裝(NFS, FTP, HTTP),則會在這個時候初始化網絡,並定位安裝源位置。接着會讀取default文件中指定的自動應答文件ks.cfg所在位置,根據該位置請求下載該文件。
6.客戶端安裝操做系統
將ks.cfg文件下載回來後,經過該文件找到http鏡像,並按照該文件的配置請求下載安裝過程須要的軟件包。
http鏡像和客戶端創建鏈接後,將開始傳輸軟件包,客戶端將開始安裝操做系統。
安裝完成後,將提示從新引導計算機。
Cobbler是一個Linux服務器快速網絡安裝的服務,由python開發,小巧輕便(15k行python代碼),能夠經過PXE的方式來快速安裝、重裝物理服務器和虛擬機,同時還能夠管理DHCP,DNS,TFTP、RSYNC以及yum倉庫、構造系統ISO鏡像。
Cobbler可使用命令行方式管理,也提供了基於Web的界面管理工具(cobbler-web),還提供了API接口,能夠方便二次開發使用。
PXE服務支持
DHCP服務管理
DNS服務管理(可選bind,dnsmasq)
電源管理
Kickstart服務支持
YUM倉庫管理
TFTP(PXE啓動時須要)
Apache(提供kickstart的安裝源,並提供定製化的kickstart配置)
配置文件目錄: /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 : #模塊的配置文件 數據目錄: /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 commands介紹 cobbler check #覈對當前設置是否有問題 cobbler list #列出全部的cobbler元素 cobbler report #列出元素的詳細信息 cobbler sync #同步配置到數據目錄,更改配置最好都要執行下 cobbler reposync #同步yum倉庫 cobbler distro #查看導入的發行版系統信息 cobbler system #查看添加的系統信息 cobbler profile #查看配置信息
[root@cobbler ~]# cat /etc/redhat-release CentOS Linux release 7.5.1804 (Core) [root@cobbler ~]# uname -r 3.10.0-862.el7.x86_64 [root@cobbler ~]# hostname cobbler [root@cobbler ~]# systemctl status firewalld.service ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead) Docs: man:firewalld(1) [root@cobbler ~]# getenforce Disabled [root@cobbler ~]# hostname -I 10.0.0.202 172.16.1.202
安裝cobbler相關服務軟件信息(前提必須部署好epel源)
[root@cobbler ~]# yum install -y cobbler cobbler-web dhcp tftp-server pykickstart httpd python-django
啓動服務
[root@cobbler ~]# systemctl start httpd.service cobblerd.service [root@cobbler ~]# systemctl start cobblerd
對cobbler默認配置進行檢查測試
[root@cobbler ~]# cobbler check
檢查提示了8個信息,須要修改
解釋
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. \#cobbler配置文件中server參數信息要改成相應的指定信息,不能使用默認localhosts 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. \#cobbler配置文件中next_server參數信息要改成相應指定的tftp服務器地址信息,不能使用默認的127.0.0.1 3 : change 'disable' to 'no' in /etc/xinetd.d/tftp \#讓tftp服務能夠被xinetd服務管理 4 : 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. \#須要進行下載系統啓動時所需使用的啓動引導文件信息,使用'cobbler get-loaders'命令 5 : enable and start rsyncd.service with systemctl \#須要啓動rsync服務,而且設置開機自啓動 6 : debmirror package is not installed, it will be required to manage debian deployments and repositories \#debian系統的一個管理軟件包須要安裝 debmirror 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 \#cobbler配置文件中default_password_crypted參數信息要改成相應指定的密碼信息,不能使用默認 8 : fencing tools were not found, and are required to use the (optional) power management features. install cman or fence-agents to use them \#智能電源管理工具沒有找到
解決相關檢查問題
\01. 解決問題一 [root@cobbler ~]# cp /etc/cobbler/settings{,.ori} #備份配置文件 [root@cobbler ~]# vim +384 /etc/cobbler/settings [root@cobbler ~]# sed -i 's/server: 127.0.0.1/server: 172.16.1.202/' /etc/cobbler/settings \02. 解決問題二 [root@cobbler ~]# sed -i 's/next_server: 127.0.0.1/next_server: 172.16.1.202/' /etc/cobbler/settings \03. 解決問題三 [root@cobbler ~]# sed -i '/disabled/s#yes#no#' /etc/xinetd.d/tftp \04. 解決問題四 [root@cobbler ~]# cobbler get-loaders [root@cobbler ~]# tree /var/lib/cobbler/loaders/ \05. 解決問題五 [root@cobbler ~]# systemctl start rsyncd [root@cobbler ~]# systemctl enable rsyncd [root@cobbler ~]# systemctl status rsyncd \06. 解決問題六 debian系統才須要安裝相應軟件包, 課程使用centos系統無需安裝 \07. 解決問題七 [root@cobbler ~]# sed -ri "/default_password_crypted/s#(.*: ).*#\1\"`openssl passwd -1 -salt 'oldboy' '123456'`\"#" /etc/cobbler/settings [root@cobbler ~]# openssl passwd -1 -salt 'oldboy' '123456' \08. 解決問題八 須要解決一些腦裂問題,須要安裝智能電源軟件(暫時無需處理) 解決完成後,再次的進行配置檢查 [root@cobbler ~]# systemctl restart cobblerd [root@cobbler ~]# cobbler sync [root@cobbler ~]# cobbler check The following are potential configuration items that you may want to fix: 1 : debmirror package is not installed, it will be required to manage debian deployments and repositories 2 : fencing tools were not found, and are required to use the (optional) power management features. install cman or fence-agents to use them Restart cobblerd and then run 'cobbler sync' to apply changes.
修改dhcp服務配置文件信息
1. 修改配置文件信息 [root@cobbler ~]# vim /etc/cobbler/dhcp.template 22 # option routers 172.16.1.5; 23 # option domain-name-servers 172.16.1.1; :%s#192.168.1#172.16.1#g #說明: 修改模板配置文件的時候,便可把/etc/dhcp/dhcpd.conf文件進行修改 [root@cobbler ~]#grep 172.16.1 /etc/cobbler/dhcp.template subnet 172.16.1.0 netmask 255.255.255.0 { # option routers 172.16.1.5; # option domain-name-servers 172.16.1.1; range dynamic-bootp 172.16.1.100 172.16.1.254; \02. 使用cobbler服務管理dhcp服務 [root@cobbler ~]# sed -i 's/manage_dhcp: 0/manage_dhcp: 1/' /etc/cobbler/settings [root@cobbler ~]# vim /etc/cobbler/settings 242 manage_dhcp: 1 #將默認數值0改成1,即表示使用cobbler服務管理dhcp服務
啓動cobbler相關服務程序
[root@cobbler ~]# systemctl restart httpd.service rsyncd.service tftp.socket cobblerd.service
應用cobbler相關的全部服務
[root@cobbler ~]# cobbler sync task started: 2019-04-01_123634_sync task started (id=Sync, time=Mon Apr 1 12:36:34 2019) running pre-sync triggers cleaning trees removing: /var/lib/tftpboot/pxelinux.cfg/default removing: /var/lib/tftpboot/grub/images removing: /var/lib/tftpboot/grub/grub-x86.efi removing: /var/lib/tftpboot/grub/grub-x86_64.efi removing: /var/lib/tftpboot/grub/efidefault removing: /var/lib/tftpboot/s390x/profile_list copying bootloaders trying hardlink /var/lib/cobbler/loaders/grub-x86.efi -> /var/lib/tftpboot/grub/grub-x86.efi trying hardlink /var/lib/cobbler/loaders/grub-x86_64.efi -> /var/lib/tftpboot/grub/grub-x86_64.efi copying distros to tftpboot copying images generating PXE configuration files generating PXE menu structure rendering DHCP files generating /etc/dhcp/dhcpd.conf rendering TFTPD files generating /etc/xinetd.d/tftp cleaning link caches running post-sync triggers running python triggers from /var/lib/cobbler/triggers/sync/post/* running python trigger cobbler.modules.sync_post_restart_services running: dhcpd -t -q received on stdout: received on stderr: running: service dhcpd restart received on stdout: received on stderr: Redirecting to /bin/systemctl restart dhcpd.service running shell triggers from /var/lib/cobbler/triggers/sync/post/* running python triggers from /var/lib/cobbler/triggers/change/* running python trigger cobbler.modules.manage_genders running python trigger cobbler.modules.scm_track running shell triggers from /var/lib/cobbler/triggers/change/* *** TASK COMPLETE *** \#至此cobbler服務端命令行配置完成
加載cobbler網頁頁面信息
https://10.0.0.202/cobbler_web/
在這一步的過程當中,確定是有同窗會報錯這個錯誤的
解決方法:
[root@cobbler ~]# tailf /var/log/httpd/ssl_error_log #查看日誌
初步判斷應該是pythone-django版本問題 \#下載pip.py [root@cobbler ~]# wget https://bootstrap.pypa.io/get-pip.py \#安裝pip [root@cobbler ~]# yum install python-pip -y \#調用本地python運行pip.py腳本 [root@cobbler ~]# python get-pip.py \#安裝Django [root@cobbler ~]# pip install Django==1.8.9 \#查看Django版本號 [root@cobbler ~]# python -c "import django; print(django.get_version())" \#重啓httpd [root@cobbler ~]# systemctl restart httpd web界面再從新加載 **登陸cobbler** 默認用戶名:cobbler 默認密碼 :cobbler
將光盤插入到服務器中(注意:是服務端)
進行掛載光盤鏡像
[root@cobbler ~]# mount /dev/cdrom /mnt mount: /dev/sr0 is write-protected, mounting read-only [root@cobbler ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda3 19G 1.7G 18G 9% / devtmpfs 477M 0 477M 0% /dev tmpfs 488M 0 488M 0% /dev/shm tmpfs 488M 7.7M 480M 2% /run tmpfs 488M 0 488M 0% /sys/fs/cgroup /dev/sda1 197M 102M 95M 52% /boot tmpfs 98M 0 98M 0% /run/user/0 /dev/sr0 4.2G 4.2G 0 100% /mnt
web界面進行導入
Actions --- DVD Importer --- 進行如下配置 --- run
Prefix --- 定義導入鏡像的名稱(注意:中間不能有空格)
Arch --- 定義系統鏡像的架構
Breed --- 指定使用系統發現版本
Path --- 指定本地掛載光驅鏡像的掛載點路徑
檢查方法:
web頁面檢查: cobbler -- events -- 顯示鏡像正在導入事件信息 命令查看: [root@cobbler ~]# ps -ef|grep rsync
正在進行rsync同步
已經同步成功了
[root@cobbler ~]# du -sh /var/www/cobbler/ks_mirror/centos7.5_x86_64bit-x86_64/ 4.2G /var/www/cobbler/ks_mirror/centos7.5_x86_64bit-x86_64/
修改網絡安裝系統後主機網卡名稱信息
confi[1572754726198]
guration -- Distros -- 編輯指定系統鏡像 -- save
Kernel Options: net.ifnames=0 biosdevname=0
編寫網絡安裝系統時的自動應答文件信息
# Cobbler for Kickstart Configurator for CentOS 7 by yao zhang install url --url=$tree text lang en_US.UTF-8 keyboard us zerombr bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" \#Network information $SNIPPET('network_config') \#network --bootproto=dhcp --device=eth0 --onboot=yes --noipv6 --hostname=CentOS7 timezone --utc Asia/Shanghai authconfig --enableshadow --passalgo=sha512 rootpw --iscrypted $default_password_crypted clearpart --all --initlabel part /boot --fstype xfs --size 1024 part swap --size 1024 part / --fstype xfs --size 1 --grow firstboot --disable selinux --disabled firewall --disabled logging --level=info reboot %pre $SNIPPET('log_ks_pre') $SNIPPET('kickstart_start') $SNIPPET('pre_install_network_config') \# Enable installation monitoring $SNIPPET('pre_anamon') %end %packages @^minimal @compat-libraries @core @debugging @development bash-completion chrony net-tools lrzsz nmap sysstat telnet tree vim wget %end %post systemctl disable postfix.service %end configuration -- kickstart Templates -- save Create New Kickstart File 說明: 將以前編寫好的自動應答文件信息進行復制進去,並定義一個名稱
cfg文件說明信息
install #告知安裝程序,這是一次全新安裝,而不是升級 url --url="http://172.16.1.201/Centos-7/" #經過http下載安裝鏡像 text #以文本格式安裝 lang en_US.UTF-8 #設置字符集格式 keyboard us #設置鍵盤類型 zerombr #清除mbr引導 bootloader --location=mbr --driveorder=sda --append="crashkernel=auto rhgb quiet" #指定引導記錄被寫入的位置 \#Network information $SNIPPET('network_config') #配置網卡 \#network --bootproto=dhcp --device=eth1 --onboot=yes --noipv6 --hostname=CentOS7 timezone --utc Asia/Shanghai #可使用dhcp方式設置網絡 authconfig --enableshadow --passalgo=sha512 #設置密碼格式 rootpw --iscrypted $default_password_crypted #密文密碼 clearpart --all --initlabel #清空分區 part /boot --fstype xfs --size 1024 #/boot分區 part swap --size 1024 #swap分區 part / --fstype xfs --size 1 --grow #/分區 firstboot --disable #負責協助配置redhat一些重要的信息 selinux --disabled #關閉selinux firewall --disabled #關閉防火牆 logging --level=info #設置日誌級別 reboot #安裝完成重啓 %packages #包組段 @表示包組 @^minimal @compat-libraries @debugging @development tree bash-completion %end %post #腳本段,能夠放腳本或命令 %end
加載配置完成的自動應答配置文件
configuration -- Profiles -- 編輯相應的鏡像系統 -- save
Kickstart : 指定使用以前編輯好的應答文件
配置主機安裝系統完成後獲取的IP地址信息
configuration -- Systems -- Create New System -- General Name centos7.5_x86_64bit #鏡像名稱 Profile centos7.5-x86_64 Status production Kickstart 選擇你的應答文件
配置主機名
configuration -- Systems -- Create New System -- Networking(Global)
Hostname oldboy
Name Servers 114.114.114.114
配置網卡eth0
configuration -- Systems -- Create New System -- Networking Add Interface eth0 edit Interface eth0 MAC Address 對應的網卡生成生成 IP Address Static Subnet Mask Per-Interface Gateway
配置網卡eth1
Add Interface eth1 edit Interface eth1 MAC Address 對應的網卡生成生成 IP Address Static Subnet Mask save 保存 **配置完成
配置完成
使之全部配置信息生效
配置完成以後就能夠建立一個虛擬主機了,注意網卡是要有兩塊的,一塊是LAN區段的,內存是大於2G的。
安裝成功
[root@cobbler ~]# cobbler system add --name=cobbler01 --mac=00:50:56:34:79:DD --profile=centos7.5-x86_64 --kickstart=/var/lib/cobbler/kickstarts/centos7.5.cfg --ip-address=10.0.0.111 --subnet=255.255.255.0 --gateway=10.0.0.254 --interface=eth0 --static=1 --hostname=cobbler01 --name-servers="114.114.114.114" [root@cobbler ~]# cobbler system edit --name=cobbler01 --mac=00:50:56:29:E2:E1 --profile=centos7.5-x86_64 --kickstart=/var/lib/cobbler/kickstarts/centos7.5.cfg --ip-address=172.16.1.111 --subnet=255.255.255.0 --interface=eth1 --static=1 [root@cobbler ~]# cobbler sync 把這些命令寫成一個腳本,定義變量。 比較麻煩的問題是若是服務器有不少,Mac地址怎樣統計呢?