2021-05-12 14:32:11
基於PXE 和 Cobbler 自動安裝Linux系統
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 Hat、Fedora、CentOS、Debian、Ubuntu和SUSE,也可以支援網路安裝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 "$
passwd
r"; }
"
yes
/no
" { send "
yes
r"; 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
相關文章