首頁 > 軟體

基於PXE 和 Cobbler 自動安裝Linux系統

2020-06-16 17:06:21

1 概述

本文中將介紹基於PXE和cobbler兩種方式的自動化安裝。兩種方式實現的效果是一樣的,但是cobbler是PXE的二次封裝,在使用上更加方便,整合多個軟體進行實現。關於自動化安裝中的相關概念和ks檔案等的介紹,詳見部落格:http://www.linuxidc.com/Linux/2017-10/147225.htm

本文是對本地自動化安裝系統的擴充套件。同時,本文在文件後部附上了關於自動化安裝PXE系統環境的指令碼。

2 基於PXE 自動化安裝

PXE(PrebootExcutionEnvironment)預啟動執行環境,Intel公司研發基於Client/Server的網路模式,支援遠端主機通過網路從遠端伺服器下載映像,並由此支援通過網路啟動作業系統PXE可以引導和安裝Windows,linux等多種作業系統

PXE網路自動化安裝:通過搭建網路yum源(http,ftp,nfs三者選一),tftp伺服器,dhcp伺服器,原理是,通過dhcp伺服器,使得機器啟動的時候,獲取到相關的ip,在dhcp裡指定了next-server,該next-server就是tftp伺服器的ip,這樣,機器獲取到ip後,會到指定的tftp伺服器的預設路徑/var/lib/tftpboot下去下載相關的檔案,首先是載入pxelinux.cfg目錄下的default檔案,該default檔案就是安裝機器的選單選項,在這選單裡,指定kickstart檔案路徑和/var/lib/tftpboot下的initrd.img和vmlinuz的路徑,使得需要安裝的對應系統能夠啟動並載入kickstart檔案進行安裝。在kickstart檔案裡我們將指定了安裝包的路徑。

PXE工作原理

如下圖

原理介紹

.Client向PXE Server上的DHCP傳送IP地址請求訊息,DHCP檢測Client是否合法(主要是檢測Client的網絡卡MAC地址),如果合法則返回Client的IP地址,同時將啟動檔案pxelinux.0的位置資訊一併傳送給Client

.Client向PXE Server上的TFTP傳送獲取pxelinux.0請求訊息,TFTP接收到訊息之後再向Client傳送pxelinux.0大小資訊,試探Client是否滿意,當TFTP收到Client發回的同意大小資訊之後,正式向Client傳送pxelinux.0

.Client執行接收到的pxelinux.0檔案

.Client向TFTP Server傳送針對本機的設定資訊檔案(在TFTP服務的pxelinux.cfg目錄下,這是系統選單檔案,格式和isolinux.cfg格式一樣,功能也是類似),TFTP將組態檔發回Client,繼而Client根據組態檔執行後續操作。

.Client向TFTP傳送Linux核心請求資訊,TFTP接收到訊息之後將核心檔案傳送給Client

.Client向TFTP傳送根檔案請求資訊,TFTP接收到訊息之後返回Linux根檔案系統

.Client啟動Linux核心

.Client下載安裝原始檔,讀取自動化安裝指令碼

這裡用PXE自動化安裝CentOS7為例說明

.安裝前準備:關閉防火牆和SELINUX,DHCP伺服器靜態IP

.安裝軟體包

環境準備,搭建以下三個服務

httpd/nfs/ftp(三選一,用於搭建yum源)tftp-server dhcp

檔案準備

通過以下兩個工具生成相關檔案

syslinux  : 生成menu.c32 和 pxelinux.0

system-config-kickstart:生成 kickstart檔案

.組態檔共用服務:

systemctl enable httpd
systemctl start httpd
mkdir /var/www/html  /centos/7
mount   /dev/sr0/  var/www/html/centos/7
 

.準備kickstart檔案

/var/www/html/ks/centos7.cfg#注意:許可權,其他人要分配可讀許可權

安裝路徑,這次是用http伺服器作為yum源,ks檔案中url --url=http:/192.168.32.72/os/7

開機時載入網絡卡,onboot選項

.設定tftp服務

systemctl enable tftp.socket(centos6:chkconfig tftp on)
systemctl start tftp.socket(centos6:service xinetd restart)
 

.設定DHCP服務

可以直接拷貝組態檔進行修改,主要該要使用的網段range和指定tftp伺服器next-server和tftp伺服器上的預設的檔案filename

systemctl enable dhcpd
vim /etc/dhcp/dhcpd.conf
option domain-name "sunny.com";
option domain-name-servers 192.168.32.61;
default-lease-time 86400;
max-lease-time 86400;
subnet 192.168.32.0 netmask 255.255.255.0 {
range 192.168.32.100 192.168.32.200;
option routers 192.168.32.1;
next-server 192.168.32.72;
filename "pxelinux.0";
}
 
 
systemctl start dhcpd

設定tftp服務

.準備相關檔案

tftp路徑是

#pxelinux.0等檔案來自syslinux這個軟體包,要先進行安裝
yum install syslinux
mkdir/var/lib/tftpboot/pxelinux.cfg/
#pxelinux.cfg把必要的檔案複製到這個路徑下
cp/usr/share/syslinux/{pxelinux.0,menu.c32}/var/lib/tftpboot/
#pxelinux.0啟動選單,啟動作業系統的檔案
#menu.c32這個是選單風格
cp/misc/cd/isolinux/{vmlinuz,initrd.img}/var/lib/tftpboot/
#計算機啟動所需的核心檔案和虛擬根檔案
cp/misc/cd/isolinux/isolinux.cfg/var/lib/tftpboot/pxelinux.cfg/default
#isolinux.cfg選單檔案,需要改名為default

當前檔案列表如下:

 /var/lib/tftpboot/
├──initrd.img
├──menu.c32
├──pxelinux.0
├──pxelinux.cfg
│└──default
└──vmlinuz
 

.準備啟動選單

修改啟動選單

vim  /var/lib/tftpboot/pxelinux.cfg/default
default menu.c32
#這是啟動選單的風格,需要根據實際情況進行修改,原來是vesamenu.c32
timeout 600
menu title PXE INSTALL MENU
label autoa
menu label Auto Install CentOS 7
kernel vmlinuz
append initrd=initrd.img  ks=http://192.168.32.72/ks/centos7.cfg
#這裡的應答檔案是基於網路的,根據實際情況修改
label manual
menu label Manual Install CentOS 7
kernel vmlinuz
append initrd=initrd.img  inst.repo=http://192.168.32.72/centos/7
#手動安裝應答檔案不寫,但是手動安裝要找yum源安裝,所以要指定yum源路徑
label local
menu default
#如果不選擇,預設就是menu  default所在的行
menu label ^Boot from local drive
localboot 0xffff
menu end

到這裡,pxe安裝centos7的環境已經準備完成了,這樣子,當有機器需要安裝系統的時候,開機,選擇網路啟動就會按照PXE的設定進行安裝

3 基於cobbler自動化安裝系統

 

cobbler 介紹

cobbler快速網路安裝linux作業系統的服務,支援眾多的Linux發行版:Red HatFedora、CentOS、Debian、UbuntuSUSE,也可以支援網路安裝windows,是PXE的二次封裝,將多種安裝引數封裝到一個選單,基於Python編寫,提供了CLI和Web的管理形式 

 

cobbler 工作流程

 以下圖形是cobbler和PXE工作的對比圖形

cobbler 工作流程解釋如下

.client裸機設定了從網路啟動後,開機後會廣播包請求DHCP伺服器(cobbler server)傳送其分配好的一個IP

.DHCP伺服器(cobbler server)收到請求後傳送responese,包括其ip地址

.client裸機拿到ip後再向cobbler server傳送請求OS引導檔案的請求

.cobbler server告訴裸機OS引導檔案的名字和TFTP server的ip和port

.client裸機通過上面告知的TFTP server地址通訊,下載引導檔案

.client裸機執行執行該引導檔案,確定載入資訊,選擇要安裝的os,期間會再向cobbler server請求kickstart檔案和os image

.cobbler server傳送請求的kickstart和os iamge

.client裸機載入kickstart檔案

.client裸機接收os image,安裝該os image

cobbler 實現步驟

.安裝包,並設定服務

.檢查設定

.根據上面提示修改設定

.下載啟動相關檔案選單

.設定DHCP服務

.分別匯入centos的安裝源,並檢視

.準備kickstart檔案並匯入cobbler

.設定web管理介面

.測試

cobbler 相關術語

.發行版:表示一個作業系統版本,它承載了核心和initrd 的資訊,以及核心引數等其他資料

.組態檔:包含一個發行版、一個kickstart 檔案以及可能的儲存庫,還包含更多特定的核心引數等其他資料

.系統:表示要設定的主機,它包含一個組態檔或一個映象,還包含IP 和MAC 地址、電源管理(地址、憑據、型別)以及更為專業的資料等資訊

.儲存庫:儲存一個yum 或rsync 儲存庫的映象資訊

.映象:可替換一個包含不屬於此類別的檔案的發行版物件(例如,無法分為核心和initrd 的物件)

cobbler 各種設定目錄說明

cobbler 依賴epel 源安裝

yum -y install cobbler

一般是會自動安裝相關的包的,如http,dns等,安裝完成後,如果還有沒有安裝的服務,要手動安裝,如dhcp。

yum -y install dhcp

.組態檔目錄/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: 模組的組態檔

cobbler 目錄介紹

.資料目錄
/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 命令介紹

cobbler check 核對當前設定是否有問題
cobbler list 列出所有的cobbler元素
cobbler report 列出元素的詳細資訊
cobbler sync 同步設定到資料目錄,更改設定最好都要執行下
cobbler reposync 同步yum倉庫
cobbler distro 檢視匯入的發行版系統資訊
cobbler system 檢視新增的系統資訊
cobbler profile 檢視設定資訊

cobbler 重要的引數

./etc/cobbler/settings中重要的引數設定

.default_password_crypted: "$1$gEc7ilpP$pg5iSOj/mlxTxEslhRvyp/" 
#這裡是設定新安裝機器的root密碼,用openssl passwd -1 生成加密密碼
.manage_dhcp:1
.manage_tftpd:1
.pxe_just_once:1
#以上調整為1,表示對相關服務進行控制
.next_server:< tftp伺服器的IP 地址>
.server:<cobbler伺服器的IP 地址>

cobbler 環境檢查

.執行Cobbler check命令常見如下異常,一般是組態檔沒更改導致

.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.
.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.
.3 : 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 recentversion 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.
.4 : change ‘disable’ to ‘no’ in /etc/xinetd.d/rsync
.5 : comment ‘dists’ on /etc/debmirror.conf for proper debian support
.6 : comment ‘arches’ on /etc/debmirror.conf for proper debian support
.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
.8 : fencing tools were not found, and are required to use the (optional) power management features. install cman or fence-agents to use them

Cobbler check常見報錯解決辦法如下

.修改/etc/cobbler/settings檔案中的server引數的值為提供cobbler服務的主機相應的IP地址或主機名

.修改/etc/cobbler/settings檔案中的next_server引數的值為提供PXE服務的主機相應的IP地址

.如果當前節點可以存取網際網路,執行“cobbler get-loaders”命令即可;否則,需要安裝syslinux程式包,而後製/usr/share/syslinux/{pxelinux.0,memu.c32}等檔案至/var/lib/cobbler/loaders/目錄中

.執行“chkconfig rsync on”命令即可

.執行“openssl passwd -1 生成密碼,並用其替換/etc/cobbler/settings檔案中

default_password_crypted引數的值

cobbler 相關管理

.下載啟動選單:cobbler get-loaders

.管理distro ,這一步是匯入光碟的所有檔案,時間會比較長,根據光碟的大小決定時間長短

cobbler import --name=centos-6.9-x86_64 --path=/media/cdrom

.管理profile ,即啟動選單

cobbler profile add --name=centos-6.9-x86_64-basic --distro=centos-6.9-x86_64 --kickstart=/tmp/centos-6.9-x86_64.cfg

.檢視profiles

cobbler profile list

.檢視引導檔案

cat /var/lib/tftpboot/pxelinux.cfg/default

.同步cobbler設定

.cobbler sync

多系統引導方案

匯入多個ks檔案,並將ks檔案和yum源做管理

cobbler import --name=CentOS-7-x86_64 --path=/media/cdrom

cobbler的web管理實現

.cobbler-web提供cobbler的基於web管理介面,服務包來自epel源

yum install cobbler-web

組態檔在/etc/httpd/conf.d/cobbler_web.conf,在httpd的設定目錄下,所以要使得cobbler生效,必須重新啟動httpd服務

.認證方式

.定義認證方法:/etc/cobbler/modules.conf,這裡介紹兩種驗證方法認證cobbler_web使用者, authn_configfile和authn_pam

基於authn_configfile模組認證

.[authentication]塊中module = authn_configfile,系統預設就是authn_configfile這個驗證方法

.建立其認證檔案/etc/cobbler/users.digest,並新增所需的使用者

htdigest  -c /etc/cobbler/users.digest  Cobbler admin

#以上語句中Cobbler是必須要有的,而且第一個字母C大寫

#admin是新增加的檔案,可以自己隨意命名

.注意:新增第一個使用者時,使用“-c”選項,後續新增其他用??時不要再使用,cobbler_web的realm只能為Cobbler

重新啟動cobbler服務

基於authn_pam模組認證

.更改組態檔/etc/cobbler/modules.conf裡的 [authentication]塊中指定module = authn_pam

.建立cobbler使用者:useraddcobbler

useradd cobbleruser  -s  /sbin/nologin
echo Pass1234 |  passwd --stdin cobbleruser

.修改檔案/etc/cobbler/users.conf,將自己建立的使用者設定為管理員

[admins]

admin = "cobbleruser"其他不用更改

重新啟動cobbler服務

測試

A.安裝新的linux系統

B. 通過瀏覽器https://cobblerserver/cobbler_web 輸入使用者名稱和密碼就可以存取

安裝cobbler步驟如下

1 安裝包

yum -y  install cobbler  dhcp
systemctl  enable  cobblerd
systemctl  start  cobblerd
systemctl enable  tftp
systemctl start  tftp
systemctl enable httpd
systemctl start httpd

2 根據cobbler check 提示進行修改

vim /etc/cobbler/settings 
default_password_crypted: "$1$8ckh4FrM$ayLsgQi85bi8Nt5Gj4Drj/" 
#openssl passwd -1 生成口令,設定新機器root的初始密碼
next_server: 192.168.32.73
manage_dhcp: 1 
server: 192.168.32.73

重新啟動服務並同步檔案

systemctl restart cobblerd
cobbler sync

2)生成dhcp模版檔案

vi /etc/cobbler/dhcp.template
subnet 192.168.32.0 netmask 255.255.255.0 {
   range dynamic-bootp        192.168.32.100 192.168.32.254;
#變更上面這行,其他行只要變更相關網路行設定就可以
}
同步檔案  cobbler sync

3) 準備啟動檔案和和選單風格檔案

複製選單風格檔案

 /var/lib/cobbler/loaders中如果缺少一些網路啟動載入程式,可以執行'cobbler get-loaders'來下載它們,或者,如果您只想處理x86 / x86_64 netbooting,則可以確保已安裝 安裝

了syslinux軟體包的一個新版本,可以完全忽略這個訊息。 該目錄中的檔案,如果要支援所有架構,應包括pxelinux.0,menu.c32,elilo.efi和yaboot。 “cobbler get-loaders”

命令是解決這些要求的最簡單方法。

連線internet

cobbler get-loaders

不連internet,只複製menu.c32,pxelinux.0兩個檔案的話,只支援安裝x86/x86_64架構的系統,所以建議還是執行cobbler get-loaders,將所需的檔案都下載到 /var/lib/cobbler/loaders來。

cp /var/lib/tftpboot/{menu.c32,pxelinux.0} /var/lib/cobbler/loaders

檢視啟動選單的選單選項,命令如下

cobbler profile list

如果不需要相關選單,可以用以下命令移除,

cobbler profile remove --name=centos7.3_desk

3 匯入yum源

cobbler import --path=/misc/cd --name=centos7.3 --arch=x86_64
#斷開光碟連線,重新換張6.9的盤,進行安裝
cobbler import --path=/misc/cd --name=centos6.9 --arch=x86_64
cobbler distro list
cobbler profile list

這一步執行完成後,會將當前的光碟檔案全部拷貝到/var/www/cobbler/ks_mirror這個目錄下,並且生成新的目錄,目錄名稱自己指定,如centos7.3,這裡這個目錄的名字一旦設定好了之後,

後續就不要繼續更改目錄名,否則生成選單檔案會異常,因為名字不匹配

4 生成ks

#注意,這裡的應答檔案是根據yum源自動生成的,我們也可以自己生成生成ks檔案,然後在做管理,把應答檔案裡的安裝方式改成 url  --url=$tree,就會

自動去找到對應的目錄,當然這裡也可以直接指定對應的路徑

這裡的$tree 的路徑可以通過以下命令檢視,

cobbler  distro list 找到源組態檔,如centos73-x86_64

cobbler distro tree centos73-x86_64 就可以看到tree這個變數具體指哪個,如下

Kickstart Metadata             : {'tree': 'http://@@http_server@@/cblr/links/centos73-x86_64'}

注意,cobbler專門放應答檔案的目錄是/var/lib/cobbler/kickstarts,將新生成的ks檔案拷貝到這裡/var/lib/cobbler/kickstarts即可,如

cp  ks73min.cfg /var/lib/cobbler/kickstarts/

然後再將應答檔案和yum源做關聯

cp  centos6.cfg centos7.cfg /var/lib/cobbler/kickstarts/
cobbler profile remove --name=centos6.9-x86_64
cobbler profile remove --name=centos7.3-x86_64
cobbler profile add --name=centos6.9_desktop --distro=centos6.9-x86_64  --kickstart=/var/lib/cobbler/kickstarts/centos6.cfg
cobbler profile add --name=centos7.3_mini --distro=centos7.3-x86_64  --kickstart=/var/lib/cobbler/kickstarts/centos7.cfg

#以上命令將安裝的新生成的ks檔案和要對應的安裝的yum源關聯起來,--name要新生成的選單項的名字,--distro指定yum源(cobbler distro list

這個命令檢視當前有多少個yum源,及其名稱),--kickstart指定ks檔案的路徑

cobbler sync

5 啟用網頁管理

htdigest  -c /etc/cobbler/users.digest  Cobbler sunny
service httpd restart
service cobblerd restart

到這裡cobbler安裝完成了

6 測試

A安裝虛擬機器

B開啟cobbler管理頁面

https://172.18.50.73/cobbler_web

4 半自動化安裝pxe環境指令碼實現

這裡附上自動化安裝PXE環境的半自動化指令碼

將選單組態檔,dhcp組態檔,ks檔案打包放在附件中,有需要可以下載檢視

這些配中,需要注意的是ks的檔案中,對包源路徑指定,如

url --url="http://192.168.32.72/os/6i386/"

還有選單檔案中,ks路徑的指定

 append initrd=6i386/initrd.img ks=http://192.168.32.72/ksdir/ks65desk.cfg

還有,dhcp分配的網路段的分配,和當前的網路是可通的

在指令碼中,有幾個地方需要注意

共準備了三個版本的光碟,32位元的6.5版本,64位元的6.9版本,和64位元的7版本

掛載:/var/www/html/os/{6i386  6x86_64  7 }三個資料夾分別掛載對應的光碟,這裡建議手動掛載

啟動引導檔案:建議手動核心和虛擬根檔案到/var/lib/tftpboot{ 6i386  6x86_64  7}這三個資料夾下

ks檔案,建議提前準備好,也是手動複製到/var/www/html/ksdir下

雖然指令碼實現了自動化的複製,但是前提是/dev/sr0 ---> 6x86_64 ,/dev/sr1 ---> 6i386 ,/dev/sr2 ---> 7

指令碼內容如下

#!/bin/bash
#
#******************************************************************************
#Author:               Sunny
#Date:                 2017-09-27
#FileName:             install_pxe_env.sh
#version:              1.0
#Your change info:     
#Description:          For install PXE_environment auto
#DOC URL:               
#Copyright(C):         2017  All rihts reserved
#*****************************************************************************
restart_dhcpd() { 
service dhcpd restart &>/dev/null;
chkconfig dhcpd on &>/dev/null;
}
restart_tftp () {
sed -i 's/disable.*/disble = no/g' /etc/xinetd.d/tftp &>/dev/null;
chkconfig tftp on &>/dev/null;
service xinetd restart &>/dev/null;
}
restart_httpd(){
service httpd restart &>/dev/null;
chkconfig httpd on &>/dev/null;
}
min_time () {
    time=`date +%Y%m%d%H%M`
}
ip=$(ifconfig  awk '/inet /{print $2}'awk -F : '{print $NF}'head -1)
min_time;
#install server
echo "Now install dhcp,http,tftp server and tftp client,it might take few minites"
rpm -q httpd &>/dev/null && restart_httpd || { yum -y install httpd &>/dev/null;restart_httpd; }
rpm -q dhcp &>/dev/null && restart_dhcpd ||  { yum -y install dhcp&>/dev/null;restart_dhcpd; }
rpm -q tftp-server &>/dev/null && restart_tftp  || { yum -y install tftp-server &>/dev/null;restart_tftp; }
rpm -q tftp &>/dev/null || yum -y install tftp &>/dev/null;
#For centos 6.9,file pxelinux.0 comes from packges syslinux-nonlinux,other version is from syslinux,but if you install packge syslinux,it will also install syslinux-nonlinux packge,so just install syslinux packge is OK to get file syslinux-nonlinux.
rpm -q syslinux &>/dev/null || yum -y install syslinux &>/dev/null;
  
#set http for yum server
#mount yum source
echo "Now you need to config  yum server in http server"
echo "Since I do not know which different disc your disc will be displayed,such as,centos7 display as /dev/sr0,or display as/dev/sr1 or other device "
echo "This time,I have three disks,6i386 means 386 arch for ceentos6.5,6x86_64 means 64bit for centos6.9,7 means centos7.3"
echo "the relation of my disk  dislay in the centos as below"
echo -e "/dev/sr0 ---> 6x86_64 n/dev/sr1 ---> 6i386 n/dev/sr2 ---> 7"
mkdir -p /var/www/html/os/{6i386,6x86_64,7}
read -p "Would you want to mount disk auto:(eg:y/n): " automount
case $automount in
y)
echo -e "/dev/sr0 ---> 6x86_64 n/dev/sr1 ---> 6i386 n/dev/sr2 ---> 7"
mount /dev/sr0   /var/www/html/os/6x86_64
mount /dev/sr1   /var/www/html/os/6i386
mount /dev/sr2   /var/www/html/os/7
;;
*)
echo "Since your answer is no or other,please mount disk after the script end"
echo "eg: run    mount /dev/sr0   /var/www/html/os/6x86_64  "
echo "eg: if your want to mount the disk fixed,please write to /etc/fstab,eg: /dev/sr0        /var/www/html/os/6x86_64      iso9660    defaults        0 0 "
;;
esac
  
#prepare ks file in /var/www/html/ksdir
echo "If your have put ks file in other hosts,your should input remote ,and input the remote file full path,and it will use scp cmd to copy the ks file directory to /var/www/html/ksdir"
echo "If you put dir in local host,input local,it will will cp cmd to  copy the ks file directory to /var/www/html/ksdir"
echo "if you input any other,you should cp ksdir to /var/www/html/ksdir"
read -p "Do you want to copy remote ks dir( r (remote) or l (local) or any other input ): " ifcopy
mkdir -p /var/www/html/ksdir/
case $ifcopy in 
r|remote)
read -p "input the remote ksdir directory(defaults:root@172.18.50.75:/var/www/html/ksdir/*): " ksdir 
if [ -z ${ksdir:-} ];then
ksdir="root@172.18.50.75:/var/www/html/ksdir/*"
fi
read -p "input host user's password you have put: " passwd
    expect -c "
    spawn  scp  $ksdir /var/www/html/ksdir/
    expect {
           "*assword" {set timeout 300; send "$passwdr"; }
           "yes/no" { send "yesr"; exp_continue; }
    }
    expect eof"
      
    ls /var/www/html/ksdir while read ksfile; do
    sed -i "s@url --url="http://.*/os/@url --url="http://$ip/os/@g"  /var/www/html/ksdir/$ksfile
    done
  
;;
l|local )
read -p "Please input your local ks directory(eg:/root/ksdir/*): " ksdir
cp $ksdir /var/www/html/ksdir/
;;
*)
echo "your input is wrong,please manual copy ksdir to /var/www/html/ksdir/"
;;
esac
  
#config dhcp
echo "Now config dhcp server..."
read -p "Input your next-server ip(default is your host ip): " nextip
if [ -z ${nextip:-} ];then
nextip="$ip"
fi
echo nextip is "$nextip"
mv /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf."$time".bak
cat >/etc/dhcp/dhcpd.conf<<eof
option domain-name "sunny.com";
option domain-name-servers 192.168.32.61;
default-lease-time 86400;
max-lease-time 86400;
subnet 192.168.32.0 netmask 255.255.255.0 {
range 192.168.32.100 192.168.32.200;
option routers 192.168.32.1;
next-server $nextip;
filename "pxelinux.0";
}
log-facility local7;
eof
  
echo "As default,the dhcp server will alocate ip 192.168.32.100--192.168.32.200,dns server is 192.168.32.61,router is 192.168.32.1,if you want to change these config ,please run 'vim /etc/dhcp/dhcpd.conf' to change /etc/dhcp/dhcpd.conf"
  
echo "dhcp is complete config now"
  
#config tltp 
echo "If you want to copy linux kernel file to /var/lib/tftpboot/{6i386,6x86_64,7}"
read -p "Please input m(means manual) or a (means auto): " copyfile
case $copyfile in
a)
mkdir -p /var/lib/tftpboot/{6i386,6x86_64,7}
cp /var/www/html/os/6i386/isolinux/{initrd.img,vmlinuz} /var/lib/tftpboot/6i386
cp /var/www/html/os/6x86_64/isolinux/{initrd.img,vmlinuz} /var/lib/tftpboot/6x86_64
cp /var/www/html/os/7/isolinux/{initrd.img,vmlinuz}   /var/lib/tftpboot/7
;;
*)
echo "Your input is m or other things"
echo "you should do two things after the scripts"
echo "create directory under /var/lib/tftpboot/,such as mkdir /var/lib/tftpboot/6i386"
echo "copy the kernel file to the relative dir,such as cp /var/www/html/os/6i386/isolinux/{initrd.img,vmlinuz} /var/lib/tftpboot/6i386"
echo "If you have many other yum source,please create relative dir under /var/lib/tftpboot/6i386"
;;
esac
  
cp /usr/share/syslinux/{pxelinux.0,menu.c32} /var/lib/tftpboot/
  
echo "Now config defaults file ,you can copy the host relative disk file ,/media/isolinux/isolinux.cfg to /var/lib/tftpboot/pxelinux.cfg,and rename it to defaults,and the modify the config,run cmd 'cp /media/isolinux/isolinux.cfg /var/lib/tftpboot/    pxelinux.cfg/default' "
echo "Now I will config /var/lib/tftpboot/pxelinux.cfg/default"
mkdir  /var/lib/tftpboot/pxelinux.cfg
cat /var/lib/tftpboot/pxelinux.cfg/default<<eof
  
default menu.c32
#prompt 1
timeout 80
  
display boot.msg
  
menu background splash.jpg
menu title Welcome to Sunny diy install Linux!
menu color border 0 #ffffffff #00000000
menu color sel 7 #ffffffff #ff000000
menu color title 0 #ffffffff #00000000
menu color tabmsg 0 #ffffffff #00000000
menu color unsel 0 #ffffffff #00000000
menu color hotsel 0 #ff000000 #ffffffff
menu color hotkey 7 #ffffffff #ff000000
menu color scrollbar 0 #ffffffff #00000000
  
label desktop73
  menu label Install diy ^desktop centos 7
  menu default
  kernel 7/vmlinuz
  append initrd=7/initrd.img ks=http://$ip/ksdir/ks73desk.cfg
label mini73
  menu label Install diy ^mini centos 7
  menu default
  kernel 7/vmlinuz
  append initrd=7/initrd.img ks=http://$ip/ksdir/ks73min.cfg
label desktop6.5
  menu label Installed d^esktop centos 6.5 i386
  kernel 6i386/vmlinuz
  append initrd=6i386/initrd.img ks=http://$ip/ksdir/ks65desk.cfg
label mini6.5
  menu label Install m^ini centos 6.5 i386 
  kernel 6i386/vmlinuz
  append initrd=6i386/initrd.img ks=http://$ip/ksdir/ks65min.cfg
label desktop6.9
  menu label Installed de^sktop centos 6.9 
  kernel 6x86_64/vmlinuz
  append initrd=6x86_64/initrd.img ks=http://$ip/ksdir/ks69desk.cfg
label mini6.9
  menu label Install mi^ni centos 6.9 
  kernel 6x86_64/vmlinuz
  append initrd=6x86_64/initrd.img ks=http://$ip/ksdir/ks69min.cfg
eof
  
echo "tftp is config OK"
  
#restart server
echo "now restart server"
restart_httpd;
restart_tftp;
restart_dhcpd;
netstat -ntulp | grep dhcpd | grep :67 &>/dev/null && echo "dhcp is running..." || echo "dhcp is not run,please check"
netstat -ntulp | grep httpd | grep :80 &>/dev/null && echo "http is running..." || echo "http is not run,please check"
netstat -ntulp | grep xinetd | grep 69 &>/dev/null && echo "tftp is running..." || echo "tftp is not run,please check"

5 小結

關於PXE和cobbler安裝,兩個實現的效果一樣,都是自動化安裝系統,而且實現原理上也基本一致,但是,由於cobbler是PXE的改良版,所有個人感覺,cobbler的安裝更加方便。

文章末尾,附上的PXE安裝環境,也類似實現了自動化安裝PXE,自動拷貝了指令碼,當使用者同樣是掛載三個光碟,而且掛載的路徑和文章中介紹的一樣,就可以實現自動化掛載,同時,需要準備了相關的ks檔案,放到指定目錄下時,根據指令碼的提示也可以實現自動化拷貝到相關目錄下。文末附件將附上指令碼中的6個ks檔案,dhcp設定和選單檔案的設定。

可以到Linux公社資源站下載:

------------------------------------------分割線------------------------------------------

免費下載地址在 http://linux.linuxidc.com/

使用者名稱與密碼都是www.linuxidc.com

具體下載目錄在 /2017年資料/10月/1日/基於PXE 和 Cobbler 自動安裝Linux系統/

下載方法見 http://www.linuxidc.com/Linux/2013-07/87684.htm

------------------------------------------分割線------------------------------------------

本文永久更新連結地址http://www.linuxidc.com/Linux/2017-10/147226.htm


IT145.com E-mail:sddin#qq.com