cobbler無人值守

1、背景介紹

​ 做爲運維,在公司常常遇到一些機械性重複工做要作,例如:爲新機器裝系統,一臺兩臺機器裝系統,能夠用光盤、U盤等介質安裝,1小時也完成了,可是若是有成百臺的服務器還要用光盤、U盤去安裝,就顯得有些力不從心了。PXE技術就能很好的解決這個問題,本文將會對PXE的工做原理有所介紹,而cobbler則是基於PXE技術的工做原理的二次封裝,經過命令的方式簡化了PXE配置過程。python

2、 安裝系統的方法

   光盤(ISO文件,光盤的鏡像文件)===>>每一臺物理機都得給一個光驅,若是用外置光驅的話,是否是每臺機器都須要插一下linux

  U盤:ISO鏡像刻錄到U盤==>>須要每臺機器都須要插一下ios

  並行安裝==>>網絡安裝web

   自動化安裝shell

3、PXE說明

說明

  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啓動代碼的機器(咱們電腦的網卡)

PXE+cobbler工做步驟圖

img

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鏡像和客戶端創建鏈接後,將開始傳輸軟件包,客戶端將開始安裝操做系統。

  安裝完成後,將提示從新引導計算機。

4、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     #查看配置信息

5、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

img

檢查提示了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/

img

在這一步的過程當中,確定是有同窗會報錯這個錯誤的

img

解決方法:

[root@cobbler ~]# tailf /var/log/httpd/ssl_error_log #查看日誌

img

初步判斷應該是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

img

將光盤導入到系統當中

將光盤插入到服務器中(注意:是服務端)

img

進行掛載光盤鏡像

[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同步

img

已經同步成功了

[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

img

Add Interface eth1
edit Interface eth1
MAC Address 對應的網卡生成生成
IP Address
Static
Subnet Mask
save 保存

**配置完成

配置完成

img

使之全部配置信息生效

img

img

配置完成以後就能夠建立一個虛擬主機了,注意網卡是要有兩塊的,一塊是LAN區段的,內存是大於2G的。

img

img

安裝成功

img

批量化進行安裝系統

[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地址怎樣統計呢?

img

img

相關文章
相關標籤/搜索