一、背景介紹
? 作為運維,在公司經常遇到一些機械性重復作業要做,例如:為新機器裝系統,一臺兩臺機器裝系統,可以用光碟、U盤等介質安裝,1小時也完成了,但是如果有成百臺的服務器還要用光碟、U盤去安裝,就顯得有些力不從心了,PXE技術就能很好的解決這個問題,本文將會對PXE的作業原理有所介紹,而cobbler則是基于PXE技術的作業原理的二次封裝,通過命令的方式簡化了PXE配置程序,
二、 安裝系統的方法
光碟(ISO檔案,光碟的鏡像檔案)===>>每一臺物理機都得給一個光驅,如果用外置光驅的話,是不是每臺機器都需要插一下
U盤:ISO鏡像刻錄到U盤==>>需要每臺機器都需要插一下
并行安裝==>>網路安裝
自動化安裝
三、PXE說明
說明
PXE,全名Pre-boot Execution Environment,預啟動執行環境;
通過網路介面啟動計算機,不依賴本地存盤設備(如硬碟)或本地已安裝的作業系統;
由Intel和Systemsoft公司于1999年9月20日公布的技術;
客戶端/Server的作業模式;
PXE客戶端會呼叫網際協議(IP)、用戶資料報協議(UDP)、動態主機設定協議(DHCP)、小型檔案傳輸協議(TFTP)等網路協議;
PXE客戶端(客戶端)這個術語是指機器在PXE啟動程序中的角色,一個PXE客戶端可以是一臺服務器、筆記本電腦或者其他裝有PXE啟動代碼的機器(我們電腦的網卡)
PXE+cobbler作業步驟圖

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介紹
cobbler概念
? Cobbler是一個Linux服務器快速網路安裝的服務,由python開發,小巧輕便(15k行python代碼),可以通過PXE的方式來快速安裝、重裝物理服務器和虛擬機,同時還可以管理DHCP,DNS,TFTP、RSYNC以及yum倉庫、構造系統ISO鏡像,
? Cobbler可以使用命令列方式管理,也提供了基于Web的界面管理工具(cobbler-web),還提供了API介面,可以方便二次開發使用,
Cobbler集成的服務
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 #查看配置資訊
五、cobbler安裝系統實踐
環境準備
[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
安裝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軟體web頁面配置
加載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地址怎樣統計呢?


轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/63745.html
標籤:其他
上一篇:求大神引路
