1. DHCP上的一些PXE的配置
1.1 dhcp配置文件中的參數
- filename:指明引導文件名稱,類似於一種基於網絡引導時使用的bootloader文件
- next-server:指明引導文件所在的服務主機的IP地址
1.2 配置示例
- filename "pxelinux.0";
- 一般都會提供這個文件,這個文件是pxe自己提供的
- next-server 172.18.100.6;
- next-server指向的就是tftp服務器的地址
- 注意:文件是相對於tftp服務器的根路徑的
1.3 關於tftp
- next-server所在的文件服務器一般是tftp服務器
- tftp:trivial ftp,通過udp協議提供服務
- 監聽端口:69/udp
2. PXE詳解
2.1 PXE簡介
PXE:preboot excution environment(與啟動執行環境),是Intel公司研發的一種技術
讓任何一台沒有安裝操作系統的主機,能夠完成基於網絡引導的安裝及啟動操作
2.2 PXE的工作流程
1)前提:
- 客戶端主機啟動時,網卡必須支持網絡引導機制
- 要將網卡調整為第一引導啟動設備
- 客戶機內存要大於或等於2G
2)工作流程
主機被喚醒后,開始加載網絡引導應用時,此網卡會通過在本地局域網中廣播一條rarp協議從dhcp服務器那里獲得一個IP地址;
獲得IP地址后,還會從DHCP那里獲得一個文件名和一個文件服務器地址,隨后,它會去找那個tftp文件服務器,去加載那個對應的文件;
等所需要的文件加載完成后,其會被在內存中展開,而后基於此文件可以去加載一個內核文件,此內核文件也一樣會通過這個tftp文件服務器獲取;加載內核通常還需要initrd虛根來完成對真實根所在的設備的驅動的加載,這一切操作都要通過這個tftp文件服務器來實現;
等加載完成后,這個內核文件通常是專用於為系統安裝所設定的,因此,這個內核文件還需要去基於網絡(通過配置在內核上的IP地址)把自己扮演成某種協議的客戶端去加載一個能夠啟動安裝程序的程序包(之前獲得的IP地址是網卡上的IP地址,而不是內核上的IP地址);
而后在本地完成安裝並啟動那個應用程序,而此程序已經不在這個tftp服務器上了;通常是一個基於tfp或者http獲取nfs等服務所提供的一個yum倉庫,通過這個yum倉庫來加載安裝程序,以及這個這個安裝程序啟動以后,很可能要讀取kickstart文件,並根據kickstart文件的內容解決依賴關系后,基於這個yum倉庫完成后續的所有安裝過程。
3. PXE在CentOS7上的配置
3.1 PXE大概的工作過程
- dhcp:獲取ip/netmask、gw、dns;filename、next-server
- tftp server:獲取bootloader、kernel、initrd等信息
- yum repository:獲取與加載的內核所匹配的發行版的yum倉庫(可以通過ftp、http、nfs來提供)
- 最好還要提供一個kickstart文件,以完成全自動化的安裝;若不需要全自動化安裝,則可以不提供kictstart文件
3.2 在tftp server上安裝tftp-server
1)安裝軟件包
yum install tftp-server -y
2)啟動tftp
# CentOS6上: chkconfig tftp on service xinetd restart # CentOS7上 systemctl start tftp.socket
3)占用端口
- 69/udp
4)默認的文件根目錄
/var/lib/tftpboot/
3.3 在dhcp server上配置dhcp
option domain-name "hgzero.com"; # 搜索域 option routes 192.168.10.9; # 指明默認網關 option domain-name-server 172.18.0.1; # 指明nds服務器地址 default-lease-time 43200; # 默認的租約時間 max-leaase-time 86400; # 最大租約時間 log-facility local7; # 日志保存的設備 subnet 192.168.10.0 netmask 255.255.255.0 { # 定義子網和地址池 range 192.168.10.101 192.168.10.120; # 指明地址池范圍 filename "pxelinux.0"; # 指明在tftp server上加載文件的名稱 next-server 192.168.10.9; # 指明tftp server的地址 }
3.4 提供一個yum倉庫
可以用httpd提供一個目錄,然后直接將光盤掛載到這個目錄,以直接將光盤當做yum倉庫
然后可以將本地的kickstart文件復制到這個httpd提供的目錄中,或者存儲為 /var/www/html/kickstarts/centos7.cfg
要將kickstart文件中url指向修改為: url --url="http://192.168.10.9/centos/7/x86_64/"
3.5 配置PXE(CentOS7上)
1)安裝syslinux
# pxelinux.0 這個文件是由syslinux這個程序包所提供的,所以需要安裝syslinux包 yum install syslinux
2)復制一些文件到tftp的根目錄下
# 或者可以直接將 /usr/share/syslinux/ 目錄下的所有內容都復制到 /var/lib/tftpboot/ 下 # 然后再把對應的vmlinuz及initrd.img文件復制過來 cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/ cp /usr/share/syslinux/{chain.c32,mboot.c32,menu.c32,memdisk} /var/lib/tftpboot/
3)創建pxelinux.cfg的目錄
# 在tftp server的默認目錄下常見pxelinux.cfg目錄 mkdir /var/lib/tftpboot/pxelinux.cfg/
4)創建default文件並寫入內容
- 在 /var/lib/tftpboot/pxelinux.cfg 目錄下創建 default 文件並寫入以下內容
- 這個文件是用於顯示一個安裝界面
vim /var/lib/tftpboot/pxelinux.cfg/default default menu.c32 prompt 5 # 選擇時間為5秒鍾 timeout 30 # 超時時間為30秒鍾 MENU TITLE CentOS 7 PXE Menu # 菜單項的名稱,這是整個上面的大標題(只有MENU TITLE是固定的) LABEL linux # 每一個LABEL表示一個啟動條目,不同的啟動條目就是通過LABEL來區分 MENU LABEL Install CentOS 7 x86_64 # 某一個可選擇的條目的標題,顯示的內容 KERNEL vmlinuz # 使用的內核文件的名稱 # 指定initrd文件、yum倉庫的地址,kickstart文件的地址 APPEND initrd=initrd.img inst.repo=http://172.16.100.67/centos7 ks=http://172.16.100.67/centos7.cfg
- 注意:如果想讓安裝的過程自動進行,就要在default文件中加入 inst.repo選項
vim /var/lib/tftpboot/pxelinux.cfg/default # 在APPEND中添加上: initrd.img inst.repo=http://192.168.10.9/centos/7/x86_64 # 也可以在PXE界面鍵入tab鍵后手動修改 vmlinuz initrd=initrd.img ip=192.168.10.11 netmask=255.255.255.0 inst.repo=http://192.168.10.9/centos/7/x86_64/
3.6 多系統選擇安裝
1)分別掛載CentOS6和CentOS7的光盤鏡像
# 為CentOS6和CentOS7分別創建掛載目錄 mkdir /mnt/{centos6,centos7} -pv # 分別掛載鏡像 mount -r /dev/sr0 /mnt/centos6 mount -r /dev/sr1 /mnt/centos7
2)為每個系統創建不同的目錄
# 在 /var/lib/tftpboot/ 下為每個系統創建單獨的目錄 mkdir /var/lib/tftpboot/{centos6, centos7}
3)將對應操作系統類型的vmlinux和initrd.img復制到對應的目錄中
# 復制centos6的vmlinuz和initrd.img cp /mnt/centos6/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/centos6/ # 復制centos7的vmlinuz和initrd.img cp /mnt/centos7/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/centos7/
4)復制 /usr/share/syslinux/ 中的所有內容到 /var/lib/tftpboot/ 中
cp -r /usr/share/syslinux/* /var/lib/tftpboot/
5)創建pxelinux.cfg目錄並寫入配置文件
# 創建pxelinux.cfg目錄 mkdir pxelinux.cfg # 創建default配置文件,並寫入配置 vim pxelinux.cfg/default default menu.c32 prompt 60 timeout 120 MENU TITLE Linux PXE Menu LABEL linux 1 MENU LABEL Install CentOS7 x86_64 KERNEL centos7/vmlinuz APPEND initrd=centos7/initrd.img inst.repo=http://172.16.0.201/centos7 ks=http://172.16.0.201:81/centos7.cfg LABEL Linux 2 MENU LABEL Install CentOS6 x86_64 KERNEL centos6/vmlinuz APPEND initrd=centos6/initrd.img inst.repo=http://172.16.0.201/centos6 ks=http://172.16.0.201:81/centos6.cfg
3.7 分享兩個kickstart文件
- 以下文件都經過測試並能成功安裝系統,使用時要按需對文件內容進行修改
1)能成功安裝CentOS7的kickstart文件
#platform=x86, AMD64, or Intel EM64T #version=DEVEL # Install OS instead of upgrade install # Keyboard layouts keyboard 'us' # Root password rootpw --iscrypted $1$HBfE.Z/Q$KMBdtT8gpSKcO3moDhGAv0 # System language lang en_US # System authorization information auth --useshadow --passalgo=sha512 # Use graphical install graphical # SELinux configuration selinux --disabled # Do not configure the X Window System skipx # Firewall configuration firewall --disabled # Network information network --bootproto=dhcp --device=ens33 # Reboot after installation reboot # System timezone timezone Asia/Shanghai --isUtc # Use network installation url --url="http://172.16.0.201/centos7" # System bootloader configuration bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda autopart --type=lvm # Partition clearing information clearpart --none --initlabel %packages @^minimal @core @debugging @development chrony vim
%end
2)能成功安裝CentOS6的kickstart文件
#platform=x86, AMD64, or Intel EM64T #version=DEVEL # Install OS instead of upgrade install # Keyboard layouts keyboard 'us' # Root password rootpw --iscrypted $1$HBfE.Z/Q$KMBdtT8gpSKcO3moDhGAv0 # System language lang en_US.UTF-8 # System authorization information auth --useshadow --passalgo=sha512 # Use graphical install graphical # SELinux configuration selinux --disabled # Do not configure the X Window System skipx # Firewall configuration firewall --disabled # Network information network --bootproto=dhcp --device=eth0 # Reboot after installation reboot # System timezone timezone Asia/Shanghai --isUtc # Use network installation url --url="http://172.16.0.201/centos6" # System bootloader configuration bootloader --location=partition --driveorder=sda --append="rhgb quite" # Partition clearing information zerombr clearpart --all --initlabel autopart text %packages @base vim %end
4. Cobbler概述
Cobbler是多安裝樹的PXE環境,它是PXE的高級封裝
4.1 Cobbler核心術語
1)Distribution發行版
- CentOS6.7,CentOS7.1(vmlinuz+initrd.img)
- distro:表示一個發行版(標記一個發行版的最關鍵資源是kernel和ramdisk)
- 單個系統安裝:
- 特定系統:(pxeboot)vmlinuz,initrd.img
- 特定系統安裝源:yum repository
2)Profile:distor+kickstart(Profile還有subprofile)
- CentOS6 web
- CentOS6 pxeboot + CentOS6 yum repo + kickstart_WEB
- CentOS6 database
- CentOS6 pxeboot + CentOS6 yum repo + kickstart_DB
- CentOS5:
- CentOS5 pxeboot + CentOS5 yum repo
3)System
- 為特定主機指派特有的配置信息
4.2 三個核心組件
- repository
- mirror
- import
- distribution
- prifile
4.3 Cobbler依賴的服務
- tftp
- rsync
- DHCP
- DNS
5. Cobbler的安裝啟動與配置
5.1 Cobbler的安裝
1)組件
- cobbler
- cobbler-web:WEB GUI接口
2)安裝所依賴的服務
# epel源中有安裝包,直接yum安裝即可 yum install cobbler cobbler-web -y yum install pykickstart debmirror httpd syslinux -y # 還要手動裝上DHCP和tftp服務,配置好並啟動 # 要注意指定好DHCP配置文件中的filename和next-server
5.2 Cobbler的啟動
1)啟動cobbler
# 先要將httpd、dhcp、tftp全啟動,httpd必須要啟動 service cobblerd start
2)啟動后進行語法檢查
# 語法檢查是為了查看還有哪些選項需要解決 cobbler check # 檢查配置文件
3)安裝cobbler check顯示的內容進行配置
# 1. 配置文件: /etc/cobbler/settions server: 指定cobbler主機的IP地址(本機的可被人訪問的IP地址) next_server:指定tftp服務器IP地址(本地主機) # 2. 關閉SELinux # 3. 啟動tftp,並設置開機自啟動 chkconfig tftp on # 修改 /etc/xinetd.d/tftp,將其中的disable的值改為no,使其開機自啟動 # 重啟超級守護進程 systemctl restart xinetd.service # 4. 啟動rsync systemctl start xinetd.service # 5. 復制 /usr/share/syslinux/{pxelinux.0, menu.c32} 文件至 /var/lib/cobbler/loaders/目錄中 ###也可以將syslinux目錄中的內容全部復制過去 # 6. 設置默認密碼 openssl passwd -1 salt $(openssl rand -hex 4) vim /etc/cobbler/settings default_password_crypted: "自己設置的密碼" # 7. 配置並啟動dhcp服務器
5.3 Cobbler的配置
- 注意:每一次修改之后都要做 cobbler sync
1)將安裝光盤掛載到本地
2)配置kickstart文件
- 將kickstart文件放置在 /var/lib/cobbler/kickstarts/ 目錄下
- 修改kickstart文件中的url項,使其指向cobbler主機
3)導入系統
cobbler import --path=/mnt --name="CentOS-6.7-x86_64" --kickstart=/var/lib/cobbler/kickstarts/centos6.x86_64.cfg # 參數說明: --path=指明導入的位置 --name=指明顯示的系統名 --kickstart=指明kickstart文件的路徑(這個文件一般放置在/var/lib/cobbler/kickstart/ 目錄中) # 說明:這時所創建的系統在 /var/www/cobbler/ks_mirror/ 目錄下
4)查看
# 查看所有已經創建好的distro cobbler distro list # 查看所有已經創建好的profile cobbler profile list # 同步 cobbler sync # 同步所做的事就是在/var/lib/tftpboot/pxelinux.cfg/下創建了一個default文件,並且每次同步自動更新
5)創建profile文件
# 查看自動生成的profile文件 cobbler profile list # 刪除指定的的profile cobbler profile remove --name=CentOS-6.7-x86_64 cobbler profile add --name=CentOS-6.7-x86_64 --distro=CentOS-6.7-x86_64 --kickstart=/var/lib/cobbler/kickstarts/centos6.x86_64.cfg # 參數: --name= 創建的profile的名字 --distro= 基於哪個distro來創建 --kickstart= 使用哪個kickstart文件 # 同步 cobbler sync
6. cobbler-web的安裝和使用
6.1 安裝cobbler-web
cobber-web是基於Django框架所研發
yum install cobbler-web -y
6.2 認證cobbler_web用戶
1)使用authn_configfile模塊認證cobbler_web用戶
# 1. 配置加載authn_configfile模塊 vim /etc/cobbler/modules.conf [authentication] module = authn_configfile # 2. 創建認證文件/etc/cobbler/user.digest,並添加所需用戶 htdigest -c /etc/cobbler/user.digest Cobbler hgzerowzh Cobbler表示是realm,注意cobbler_web的realm只能為Cobbler hgzerowzh是添加的用戶 # 注意:添加第一個用戶時,需要為htdigest命令使用 -c 選項,后續添加其他用戶時不能再次使用 # 3. 重啟cobbler服務 systemctl restart cobblerd # 4. 通過 http://IP地址/cobbler_web 來進行訪問
2)使用auth_pam模塊認證cobbler_web用戶
# 1. 配置使用authn_pam模塊 vim /etc/cobbler/modules.conf [authentication] module = authn_pam # 2. 添加系統用戶,用戶名和密碼按需設定 useradd cobadmin echo "shitshit" | passwd --stdin cobadmin # 3. 將cobadmin用戶添加至cobbler_web的admin組中 # 修改/etc/cobbler/user.conf文件,將cobadmin用戶名添加為admin參數的值即可 [admins] admin = "cobadmin" # 4. 重啟cobbler服務 systemctl restart cobblerd # 5. 通過 http://IP地址/cobbler_web 來訪問
6.3 訪問失敗解決
1)關閉SSL選項
- 現象:訪問報403,錯誤日志顯示如下
[ssl:error] [pid 3987] [client 172.16.0.204:35592] AH02219: access to /usr/share/cobbler/web/cobbler.wsgi failed, reason: SSL connection required
- 解決:關閉httpd 關於cobbler-web配置文件 /etc/httpd/conf.d/cobbler_web.conf 中的SSL選項
vim /etc/httpd/conf.d/cobbler_web.conf # 注釋的部分 <Directory "/usr/share/cobbler/web/"> #<IfModule mod_ssl.c> # SSLRequireSSL #</IfModule> #<IfModule mod_nss.c> # NSSRequireSSL #</IfModule> SetEnv VIRTUALENV Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all </Directory> <Directory "/var/www/cobbler_webui_content/"> #<IfModule mod_ssl.c> # SSLRequireSSL #</IfModule> #<IfModule mod_nss.c> # NSSRequireSSL #</IfModule> Options +Indexes +FollowSymLinks AllowOverride None Order allow,deny Allow from all </Directory>