1. 程式人生 > >生產大規模部署之PXE自動安裝linux系統

生產大規模部署之PXE自動安裝linux系統

1.                   PXE安裝原理和流程介紹
在安裝RedHat Linux的過程中,允許通過NFS、HTTP或FTP協議來進行網路安裝。但是在一般情況下我們需要有一個安裝引導介質(引導光碟、引導軟盤、U盤等),有沒有一種方法不通過引導光碟方式來安裝呢,而直接通過網路來進行安裝?答案是有,即通過kickstart + pxe技術來實現。

1.1      什麼是Kickstart

KickStart是一種無人職守安裝方式。KickStart的工作原理是通過記錄典型的安裝過程中所需人工干預填寫的各種引數,並生成一個名為ks.cfg的檔案;在其後的安裝過程中(不只侷限於生成KickStart安裝檔案的機器)當出現要求填寫引數的情況時,安裝程式會首先去查詢KickStart生成的檔案,當找到合適的引數時,就採用找到的引數,當沒有找到合適的引數時,才需要安裝者手工干預。這樣,如果KickStart檔案涵蓋了安裝過程中出現的所有需要填寫的引數時,安裝者完全可以只告訴安裝程式從何處取ks.cfg檔案,然後去忙自己的事情。等安裝完畢,安裝程式會根據ks.cfg中設定的重啟選項來重啟系統,並結束安裝。

1      

1.1      

1.2      什麼是PXE

嚴格來說,PXE 並不是一種安裝方式,而是一種引導的方式。進行 PXE 安裝的必要條件是要安裝的計算機中包含一個 PXE 支援的網絡卡(NIC),即網絡卡中必須要有 PXE Client。PXE (Pre-boot Execution Environment)協議使計算機可以通過網路啟動。協議分為 client 和 server 端,PXE client 在網絡卡的 ROM 中,當計算機引導時,BIOS 把 PXE client 調入記憶體執行,由 PXE client 將放置在遠端的檔案通過網路下載到本地執行。執行 PXE 協議需要設定 DHCP 伺服器和 TFTP 伺服器。DHCP 伺服器用來給 PXE client(將要安裝系統的主機)分配一個 IP 地址,由於是給 PXE client 分配 IP 地址,所以在配置 DHCP 伺服器時需要增加相應的 PXE 設定。此外,在 PXE client 的 ROM 中,已經存在了 TFTP Client。PXE Client 通過 TFTP 協議到 TFTP Server 上下載所需的檔案。

1.3      kickstart+pxe網路安裝OS流程


 

第一步:PXE Client向DHCP傳送請求

首先,將支援PXE的網路介面卡(NIC)的客戶端的BIOS設定成為網路啟動,通過PXE BootROM(自啟動晶片)會以UDP(簡單使用者資料報協議)傳送一個廣播請求,向網路中的DHCP伺服器索取IP地址等資訊。

第二步:DHCP伺服器提供資訊

DHCP伺服器收到客戶端的請求,驗證是否來至合法的PXE Client的請求,驗證通過它將給客戶端一個“提供”響應,這個“提供”響應中包含了為客戶端分配的IP地址、pxelinux啟動程式(TFTP)位置,以及配置檔案所在位置。

第三步:PXE客戶端請求下載啟動檔案

客戶端收到伺服器的“迴應”後,會迴應一個幀,以請求傳送啟動所需檔案。這些啟動檔案包括:pxelinux.0、pxelinux.cfg/default、vmlinuz、initrd.img等檔案。

第四步:Boot Server響應客戶端請求並傳送檔案

當伺服器收到客戶端的請求後,他們之間之後將有更多的資訊在客戶端與伺服器之間作應答, 用以決定啟動引數。BootROM 由 TFTP 通訊協議從Boot Server下載啟動安裝程式所必須的檔案(pxelinux.0、pxelinux.cfg/default)。default檔案下載完成後,會根據該檔案中定義的引導順序,啟動Linux安裝程式的引導核心。

第五步:請求下載自動應答檔案

客戶端通過pxelinux.cfg/default檔案成功的引導Linux安裝核心後,安裝程式首先必須確定你通過什麼安裝介質來安裝linux,如果是通過網路安裝(NFS, FTP, HTTP),則會在這個時候初始化網路,並定位安裝源位置。或許你會說,剛才PXE不是已經獲取過IP地址了嗎?為什麼現在還需要一次?這是由於PXE獲取的是安裝用的核心以及安裝程式等,而安裝程式要獲取的是安裝系統所需的二進位制包以及配置檔案。由於它們需要的內容不同造成PXE模組和安裝程式是相對獨立的,PXE的網路配置並不能傳遞給安裝程式。從而進行兩次獲取IP地址過程。

接著會讀取該檔案中指定的自動應答檔案ks.cfg所在位置,根據該位置請求下載該檔案。

第六步:客戶端安裝作業系統

將ks.cfg檔案下載回來後,通過該檔案找到OS Server,並按照該檔案的配置請求下載安裝過程需要的軟體包。

OS Server和客戶端建立連線後,將開始傳輸軟體包,客戶端將開始安裝作業系統。安裝完成後,將提示重新引導計算機。這個時候注意,在重新引導的過程中一定要將BIOS修改回從硬碟啟動,不然的話又會重複的自動安裝作業系統。

在上面介紹中PXE client是需要安裝Linux的計算機,TFTP Server、DHCP Server和NFS Server執行在另外一臺Linux Server上。Bootstrap檔案、配置檔案、Linux核心都放置在Linux Server上TFTP伺服器的根目錄下。而Linux根檔案系統存放於NFS Server的共享目錄中。

PXE client在工作過程中,需要三個二進位制檔案:bootstrap、Linux 核心和Linux根檔案系統。Bootstrap檔案是可執行程式,它向用戶提供簡單的控制介面,並根據使用者的選擇,下載合適的Linux核心以及Linux根檔案系統。

1.4      kickstart優勢

l  標準化自動化的安裝

l  快速大量的裸機部署

l  強制建立的一致性(軟體包,分割槽,配置,監控,安全性)

l  減少人為的部署失誤

2.                   安裝要求l  網路安裝伺服器:需關閉iptables 和Selinux

l  網路安裝伺服器:需安裝Dhcp TFTPNFS VSFTPD服務

l  客戶機:網絡卡需要有pxe功能,現在pc server都會有這個功能

3.                   配置過程 配置PXE安裝,要進行如下步驟:

l  配置DHCP,用於給客戶端提供IP地址及其它資訊

l  配置TFTP伺服器,用於提供客戶端PXE引導所必須的檔案

l  配置NFS伺服器,用於存放安裝樹

l  配置VSFTPD伺服器,用於存放kickstart檔案(使用NFS的話此步可跳過)

l  配置Kickstart,用於自動應答安裝

l  使用PXE功能引導客戶機

2      

3      

3.1      DHCP和TFTP的安裝與配置

在PXE引導安裝過程中,PXE客戶端通過DHCP獲取PXE伺服器地址,PXE引導檔名稱;然後客戶機在使用TFTP協議從TFTP伺服器下載引導檔案並執行,從而啟動計算機安裝程式。引導檔案執行後,接著下載安裝程式啟動安裝。

安裝DHCP軟體包

[[email protected] PXE-TEST Packages]# rpm -ivh dhcp-4.1.1-38.P1.el6.x86_64.rpm

Preparing...                ########################################### [100%]

   1:dhcp                 ########################################### [100%]

配置DHCP

接下來我們需要配置相關資訊。為了滿足我們的安裝需求,假設PXE伺服器、DHCP伺服器、TFTP伺服器全部安裝在一臺為192.168.6.1的計算機上。我們需要進行如下操作:

(1)修改/etc/dhcpd/dhcpd.conf'檔案,指定 IP 地址等資訊。

(2)在 '''/etc/dhcpd/dhcpd.conf''' 中增加 tftp-server 需要推送給客戶端的啟動檔案(bootstrap):filename "pxelinux.0";因為 tftp 的預設目錄是 /tftpboot,所以檔案的絕對路徑就是: /tftpboot/pxelinux.0";當然也可以指定為其它的路徑。

(3)range dynamic-bootp指定客戶端自動獲取ip的範圍

(4)另外需要指定 next-server 引數,告訴客戶端在獲取到 pxelinux.0 檔案之後去哪裡獲取其餘的啟動檔案: next-server 192.168.6.1;

最終的配置檔案結果如下所示:

ddns-update-style interim;

#dhcpd服務的全域性設定,缺少此項服務無法啟動。

ignore client-updates;

# ignore client-updates為忽略客戶端更新

subnet 192.168.6.0 netmask 255.255.255.0 {

       range dynamic-bootp 192.168.6.180 192.168.6.195;

       default-lease-time 21600;

       max-lease-time     43200;

       filename  "pxelinux.0";

       next-server 192.168.6.1;

}

#subnet宣告一個dhcp地址範圍,ip為網路地址,子網掩碼必須寫成255.255.255.0

#range dynamic-bootp 設定客戶機獲取IP地址的範圍

#default-lease-time為客戶機獲取網路引數的預設租約時間

#max-lease-time 為客戶機獲取網路引數之後的最大租約時

#filename需要推送給客戶端的啟動檔案pxelinux.0

#next-server 引數,告訴客戶端在獲取到 pxelinux.0 檔案之後去哪裡獲取其餘的啟動檔案

配置完成後,重啟DHCP服務,並將它設為開機自啟動。

[[email protected] PXE-TEST Packages]# /etc/init.d/dhcpd start

啟動 dhcpd:                                               [確定]

[[email protected] PXE-TEST Packages]# chkconfig --level 35 dhcpd on 

3.2      安裝配置TFTP伺服器

在PXE安裝過程中,客戶機在使用TFTP協議從TFTP伺服器下載引導檔案並執行。我們主要通過配置TFTP伺服器和PXE的引導配置完成這個過程。

(1)安裝配置TFTP伺服器

首先,安裝TFTP伺服器軟體包:

[[email protected] PXE-TEST Packages]# rpm -ivh tftp-server-0.49-7.el6.x86_64.rpm

Preparing...                ########################################### [100%]

   1:tftp-server            ########################################### [100%]

(2)配置tftp服務

tftp 服務由xinetd服務管理。編輯 '''/etc/xinetd.d/tftp''' 檔案,將 '''disable = yes''' 改為:disable = no,server_args改為相應的目錄。

[[email protected] PXE-TEST Packages]# vi /etc/xinetd.d/tftp

# default: off

# description: The tftp server serves files using the trivial file transfer \

#       protocol.  The tftp protocol is often used to boot diskless \

#       workstations, download configuration files to network-aware printers, \

#       and to start the installation process for some operating systems.

service tftp

 {

        socket_type             = dgram

        protocol                = udp

        wait                    = yes

        user                    = root

        server                  = /usr/sbin/in.tftpd

        server_args             = -s /tftpboot

        disable                 = no

        per_source              = 11

        cps                     = 100 2

        flags                   = IPv4

 }

從這裡看出,預設選擇/tftpboot為TFTP伺服器的根目錄位置,配置完成後重啟xinetd服務,使TFTP伺服器生效。

[[email protected] PXE-TEST Packages]# /etc/init.d/xinetd restart

可以通過下面命名檢視tftp埠是否開啟:

[root()@PXE-TEST ftp]# lsof -i:69

COMMAND  PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

xinetd  3139 root    5u  IPv4  30170      0t0  UDP *:tftp

3.3      PXE引導配置(bootstrap)

PXE啟動映像檔案由syslinux軟體包提供,RedHat Enterprise Linux光碟中已提供。

syslinux是一個功能強大的引導載入程式,而且相容各種介質。更加確切地說:SYSLINUX是一個小型的Linux作業系統,它的目的是簡化首次安裝Linux的時間,並建立修護或其它特殊用途的啟動盤。我們只要安裝了syslinux,就會生成一個pxelinux.0,將 pxelinux.0 這個檔案複製到 '''/tftpboot''' 目錄即可:

[[email protected] PXE-TEST Packages]# rpm -ql syslinux |grep "pxelinux.0"

/usr/lib/syslinux/pxelinux.0

[[email protected] PXE-TEST Packages]# cp /usr/lib/syslinux/pxelinux.0 /tftpboot/

如果沒有安裝syslinux,掛載光碟映象也可以從isolinux目錄中找到該檔案。

3.4      用於網路啟動的核心檔案
將 RedHat 安裝光碟目錄中的 '''images/pxeboot/{vmlinuz,initrd.img}''' 啟動檔案複製到某個安裝目錄/tftpboot。如果使用圖形介面引導安裝(目前使用此種辦法),還需要將splash.jpg和vesamenu.c32也一起復制到/tftpboot/。

由於多個客戶端可以從一個PXE伺服器引導,PXE引導映像使用了一個複雜的配置檔案搜尋方式來查詢針對客戶機的配置檔案。如果客戶機的網絡卡的MAC地址為'''88:99:AA:BB:CC:DD''',對應的IP地址為192.168.1.195,那麼客戶機首先嚐試以MAC地址為檔名匹配的配置檔案,如果不存在就以IP地址來查詢。根據上述環境針對這臺主機要查詢的以一個配置檔案就是 /tftpboot/pxelinux.cfg/01-88-99-aa-bb-cc-dd。如果該檔案不存在,就會根據IP地址來查詢配置檔案了,這個演算法更復雜些,PXE映像查詢會根據IP地址16進制命名的客戶機配置檔案。例如:192.168.1.195對應的16進位制的形式為C0A801C3。(可以通過syslinux軟體包提供的gethostip命令將10進位制的IP轉換為16進位制)

如果C0A801C3檔案不存在,就嘗試查詢C0A801C檔案,如果C0A801C也不存在,那麼就嘗試C0A801檔案,依次類推,直到查詢C檔案,如果C也不存在的話,那麼最後嘗試default檔案。

總體來說,pxelinux 搜尋的檔案的順序是:

/tftpboot/pxelinux.cfg/01-88-99-aa-bb-cc-dd

/tftpboot/pxelinux.cfg/ C0A801C3

/tftpboot/pxelinux.cfg/ C0A801C

/tftpboot/pxelinux.cfg/ C0A801

/tftpboot/pxelinux.cfg/ C0A80

/tftpboot/pxelinux.cfg/ C0A8

/tftpboot/pxelinux.cfg/ C0A

/tftpboot/pxelinux.cfg/ C0

/tftpboot/pxelinux.cfg/C

/tftpboot/pxelinux.cfg/default

對於一臺需要支援很多安裝機器的安裝伺服器來說,將配置寫在與IP地址對應的檔案裡很不靈活。把所有配置都集中在default檔案中是個不錯的主意,可以減輕配置檔案維護負擔。接下來建立/tftpboot/pxelinux.cfg/ 目錄,該目錄用於存放客戶端的配置檔案。

[[email protected] PXE-TEST Packages]# mkdir /tftpboot/pxelinux.cfg

將光碟中的isolinux/isolinux.cfg檔案複製為/tftpboot/pxelinux.cfg/default

[[email protected] PXE-TEST Packages]# cp /media/isolinux/isolinux.cfg /tftpboot/pxelinux.cfg/default

檢視default檔案內容:

以下內容根據原檔案略加修改並做了註釋(注:該檔案中的空行和以 '''#''' 開頭的行都將被忽略)

#設定所要載入的選單模組default vesamenu.c32

default vesamenu.c32

# 顯示 'boot: ' 提示符。為 '0' 時則不提示,將會直接啟動 'default' 引數中指定的內容。

prompt 1    

# 在使用者輸入之前的超時時間,單位為 1/10 秒。

timeout 60        

#顯示某個檔案的內容,注意檔案的路徑。預設是在 /tftpboot 目錄下。也可以指定路徑+檔名。

display boot.msg 

#menu可以設定背景、標題、歡迎畫面等

# 'label' 指定你在 'boot:' 提示符下輸入的關鍵字。

# 比如:

# boot: linux[ENTER]

# 這個會啟動 'label linux' 下標記的 kernel 和 initrd.img 檔案。

# 這裡還定義了其它幾個關鍵字:

#  boot: text

#  boot: ks

# kernel 引數指定要啟動的核心。同樣要注意路徑,預設是 /tftpboot 目錄。

# append 指定追加給核心的引數,能夠在 gurb 裡使用的追加給核心的引數,在這裡也都可以使用。

# 使用 kickstart 安裝:可以在 ks 引數後直接指定 kickstart 檔案的位置。

下面是具體的配置範例,指定了多個label可供選擇,如果有多個版本或者多個定製化的ks指令碼,可以按需配置。

default vesamenu.c32

#prompt 1

timeout 6000

display boot.msg

menu background splash.jpg

menu title Welcome to redhat6.5 !

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 redhat6.5 for Oracle

  menu label ^Redhat6.5 for Oracle

  menu default

  kernel vmlinuz

  append initrd=initrd.img ksdevice=em1 ks=ftp://192.168.6.1/redhat6_5.cfg

#此處ksdevice指定從哪個網絡卡獲取配置檔案進行安裝,由於伺服器一般是兩個以上的網絡卡,#不配置此項會在安裝時讓你指定網絡卡,不夠自動化。

#ks檔案此處我使用FTP方式獲取,也可以使用nfs

label VMWARE redhat6.5 for Oracle

  menu label ^VMWARE Redhat6.5 for Oracle

  menu default

  kernel vmlinuz

  append initrd=initrd.img ksdevice=eth0 ks=ftp://192.168.6.1/redhat6_5_VM.cfg

label vesa

  menu label Install system with ^basic video driver

  kernel vmlinuz

  append initrd=initrd.img xdriver=vesa nomodeset

label rescue

  menu label ^Rescue installed system

  kernel vmlinuz

  append initrd=initrd.img rescue

label local

  menu label Boot from ^local drive

  localboot 0xffff

label memtest86

  menu label ^Memory test

  kernel memtest

  append –

3.5      安裝配置NFS伺服器

安裝介質儲存在伺服器上的一個目錄中,可以使用各種網路協議訪問它,比如 HTTP,FTP,和NFS。也就是我們前面提到的OS Server。這裡使用 NFS 服務來提供安裝介質,只需要將系統光碟內容拷貝放到共享目錄下即可。

建立共享目錄,並將光碟內容拷貝到共享目錄中:

[[email protected] PXE-TEST Packages]#mkdir /home/redhat6.5

[[email protected] PXE-TEST Packages]#cp–a /media/* /home/redhat6.5

安裝NFS並將共享目錄釋出出去

[[email protected] PXE-TEST Packages]# vi /etc/exports

/home/redhat6.5 *(ro,sync)

重啟服務使配置生效。

[[email protected] PXE-TEST Packages]# service portmap restart

停止 portmap:                                             [確定]

啟動 portmap:                                             [確定]

[[email protected] PXE-TEST Packages]# service nfs start

啟動 NFS 服務:                                            [確定]

關掉 NFS 配額:                                            [確定]

啟動 NFS 守護程序:  [確定]

啟動 NFS mountd:  [確定]

檢查是否被正確共享:

[[email protected] PXE-TEST Packages]# shoumount –e locahost

Export list for localhost:

/home/redhat6.5 *

[[email protected] PXE-TEST Packages]# chkconfig --level 35 nfs on

3.6      配置VSFTPD

(1)       安裝VSFTPD軟體包

[[email protected] PXE-TEST Packages]# rpm -ivh vsftpd-2.2.2-11.el6_4.1.x86_64.rpm

Preparing...                ########################################### [100%]

   1:vsftpd                 ########################################### [100%]

(2)       配置VSFTPD服務

需要將/etc/vsftpd/user_list和/etc/vsftpd/ftpusers檔案中的root的註釋掉,即允許root使用ftp服務:

cat >> /etc/vsftpd/user_list << END

#root

bin

daemon

adm

lp

sync

shutdown

halt

mail

news

uucp

operator

games

nobody

END

cat >> /etc/vsftpd/ftpusers << END

#root

bin

daemon

adm

lp

sync

shutdown

halt

mail

news

uucp

operator

games

nobody

END

重啟服務使配置生效。

service vsftpd restart

3.7      配置Kickstart安裝

通常,我們在安裝作業系統的過程需要大量的人機互動過程,減少互動過程,為了提高安裝效率Red Hat Linux 開始支援一個稱為 kickstart 的功能。使用這種方法,只需事先定義好一個Kickstart自動應答配置檔案(通常存放在安裝伺服器上),並讓安裝程式知道該配置檔案的位置,在安裝過程中安裝程式就可以自己從該檔案中讀取安裝配置,這樣就避免了繁瑣的人機互動,實現無人值守的自動化安裝。

建立kickstart配置檔案有兩種方式:

(一)  文字編輯器編輯生成

(二)  用圖形化介面配置:system-config-kickstat(需要安裝相應的rpm包)
 

無論使用哪種方法無非就是建立一個應答檔案,當你安裝好一臺Red Hat Linux機器,Red Hat Linux 安裝程式都會建立一個 kickstart 配置檔案,記錄你的真實安裝配置。如果你希望實現和某系統類似的安裝,可以基於該系統的kickstart配置檔案來生成你自己的kickstart配置檔案。該檔案位於/root/anaconda-ks.cfg。

這裡我直接使用該檔案,拷貝本檔案到/mnt/install下。

[[email protected] PXE-TEST Packages]# cp /root/anaconda-ks.cfg /var/ftp/redhat6_5.cfg

下面以配置檔案為例,

# Kickstart file automatically generated by anaconda.

#version=DEVEL

install

nfs --server=192.168.6.1 --dir=/home/redhat6.5

#配置安裝方式,這裡是使用nfs,目錄是之前在nfs配置的共享

lang en_US.UTF-8

keyboard us

#選擇安裝時的語言和鍵盤語言

network --onboot yes --device em1 --mtu=1500 --bootproto dhcp

network --onboot no --device em2 --noipv4 --noipv6

#network --onboot no --device eth2 --noipv4 --noipv6

#network --onboot no --device eth3 --noipv4 --noipv6

#設定網絡卡的引數,目前只將前兩個網口設定為開機啟動

rootpw  --iscrypted $6$8jLMp4aLQTmSrt9.$CWm0edJcHknIboEz2mjNJr6397zsZ4CCzqDJVH3JIwQJvjHsPNo8cvFEr76X6ah2Zx1xT1l01D1470rQ58gp7.

#設定root密碼,這個是加密過的,明文為111111

# Reboot after installation

reboot

#安裝完自動重啟

firewall –disabled

#關閉防火牆

authconfig --useshadow  --passalgo=sha512

#設定密碼認證的加密方式

selinux –disabled

#關閉selinux

timezone Asia/Shanghai

#選擇時區

bootloader --location=mbr --driveorder=sda --append=" rhgb crashkernel=auto quiet"

#選擇bootloader程式的存放位置

zerombr yes

#清除mbr

# The following is the partition information you requested

# Note that any partitions you deleted are not expressed

# here so unless you clear all partitions first, this is

# not guaranteed to work

clearpart --all –initlabel

#清除所有分割槽

part /boot --fstype=ext4 --size=103

part / --fstype=ext4 --size=30000

part /u01 --fstype=ext4 --size=30000

part swap --size=20000

part /home --fstype=ext4 --size=10000

part /u02 --fstype=ext4 --grow --size=1

#分割槽方式寫死,boot 103M,根分割槽30G,u01 30G,swap 16G,home 10G,u02使用剩#餘#空間

repo --name="Red Hat Enterprise Linux"  --baseurl=nfs:192.168.6.1:/home/redhat6.5 --cost=100

#設定軟體包安裝源

%packages

@additional-devel

@base

@client-mgmt-tools

@compat-libraries

@console-internet

@core

@debugging

@basic-desktop

@desktop-platform-devel

@development

@hardware-monitoring

@large-systems

@legacy-x

@network-file-system-client

@network-tools

@performance

@perl-runtime

@server-policy

@system-admin-tools

@x11

httpd-devel

pcre-devel

libcap-devel

libXinerama-devel

openmotif-devel

net-snmp-devel

libgudev1-devel

kdelibs-apidocs

xz-devel

libtopology-devel

freeglut-devel

kdegraphics-devel

libibverbs-devel

libuuid-devel

kdepimlibs-devel

libblkid-devel

papi-devel

libXmu-devel

unique-devel

xorg-x11-proto-devel

gmp-devel

kdepim-devel

sane-backends-devel

perl-Test-Pod

kdemultimedia-devel

startup-notification-devel

libudev-devel

cups-devel

gstreamer-plugins-base-devel

unixODBC-devel

tcl-devel

numactl-devel

libgnomeui-devel

libbonobo-devel

perl-Test-Pod-Coverage

libtiff-devel

junit

SDL-devel

libXau-devel

tcp_wrappers-devel

PyQt4-devel

kdenetwork-devel

kdelibs-devel

libgcrypt-devel

popt-devel

gnome-python2-desktop

hunspell-devel

iptables-devel

libdrm-devel

libXrandr-devel

snappy-devel

libxslt-devel

kdebase-devel

tk-devel

libnl-devel

libXpm-devel

mpfr-devel

expat-devel

e2fsprogs-devel

kdebase-workspace-devel

libglade2-devel

libaio-devel

libusb-devel

gnutls-devel

kdesdk-devel

fuse-devel

libXaw-devel

libhugetlbfs-devel

mtools

pax

python-dmidecode

sgpio

device-mapper-persistent-data

systemtap-client

tigervnc-server

desktop-file-utils

systemtap-sdt-devel

dejagnu

ElectricFence

ant

libstdc++-docs

gcc-gnat

expect

mod_dav_svn

perltidy

cmake

imake

babel

ksc

kdewebdev

rpmdevtools

compat-gcc-34

systemtap-server

cvs-inetd

gcc-java

compat-gcc-34-g77

jpackage-utils

bzr

mercurial

chrpath

gcc-objc

rpmlint

gcc-objc++

compat-gcc-34-c++

python-docs

nasm

xorg-x11-twm

openmotif

xorg-x11-fonts-ISO8859-1-75dpi

xterm

xorg-x11-fonts-cyrillic

xorg-x11-xdm

xorg-x11-fonts-ISO8859-9-100dpi

xorg-x11-fonts-ISO8859-14-100dpi

xorg-x11-fonts-75dpi

xorg-x11-fonts-ISO8859-9-75dpi

libXmu

xorg-x11-fonts-ISO8859-15-75dpi

libXp

openmotif22

xorg-x11-fonts-ISO8859-14-75dpi

xorg-x11-fonts-ISO8859-2-75dpi

xorg-x11-fonts-ethiopic

xorg-x11-fonts-ISO8859-2-100dpi

iptraf

papi

perl-DBD-SQLite

screen

expect

lsscsi

-mcelog

%end

#從%post到%end之間的部分是定製的軟體包

%post --interpreter=/bin/bash

#開始安裝後腳本,使用bash shell

#1.configure network bonding

#首先設定網絡卡bonding

/bin/cat > /etc/sysconfig/network-scripts/ifcfg-bond0 <<EOF

DEVICE=bond0

IPADDR=`ifconfig em1 | sed -e 's/^.*addr:\([^ ]*\).*/\1/p' -e d`

NETMASK=`ifconfig em1|sed -e 's/^.*Mask:\([^ ]*\)$/\1/p' -e d`

GATEWAY=`netstat -rn|grep em1|awk '{print $2}' | grep -v 0.0.0.0`

ONBOOT=yes

BOOTPROTO=none

USERCTL=no

EOF

#Modify the /etc/sysconfig/networ-scripts/ifcfg-em1

/bin/cat > /etc/sysconfig/network-scripts/ifcfg-em1 <<EOF

DEVICE=em1

BOOTPROTO=none

ONBOOT=yes

MASTER=bond0

SLAVE=yes

USERCTL=no

EOF

#Modify the /etc/sysconfig/networ-scripts/ifcfg-em2

/bin/cat > /etc/sysconfig/network-scripts/ifcfg-em2 <<EOF

DEVICE=em2

BOOTPROTO=none

ONBOOT=yes

MASTER=bond0

SLAVE=yes

USERCTL=no

EOF

echo "alias bond0 bonding" > /etc/modprobe.d/bond0.conf

echo "options bond0 miimon=100 mode=1" >> /etc/modprobe.d/bond0.conf

ifconfig bond0 down

ifconfig bond0 up

#2.stop NetWorkManager service

/etc/init.d/NetworkManager  stop

chkconfig NetworkManager off

/etc/init.d/network restart

#3.configure DNS

#Modify the /etc/resolv.conf

#修改dns配置

> /etc/resolv.conf

#4.Modify swap config file

#修改swap配置

echo "vm.swappiness=0" >> /etc/sysctl.conf

#5.add ntp params

#配置時間同步引數

> /etc/sysconfig/ntpd

cat >> /etc/sysconfig/ntpd << END

OPTIONS="-x -u ntp:ntp -p /var/run/ntpd.pid"

END

#配置ntpd服務(以橫浜機房為例)

/bin/cat > /etc/ntp.conf <<EOF

restrict default nomodify notrap noquery

restrict 127.0.0.1

server ntp-hb1.99bill.com iburst prefer

server ntp-hb2.99bill.com iburst

server ntp-idx1.99bill.com iburst

server ntp-idx2.99bill.com iburst

server  127.127.1.0     # local clock

fudge   127.127.1.0 stratum 10

driftfile /var/lib/ntp/drift

broadcastdelay  0.008

keys            /etc/ntp/keys

logconfig =all

EOF

#增加開機自動同步時間(以橫浜機房為例)

/bin/cat >> /etc/rc.local <<EOF

ntpdate  172.16.50.181

EOF

#6.enable sar for per minutes record

#sar記錄頻率設定為分鐘級

> /etc/cron.d/sysstat

cat >> /etc/cron.d/sysstat << END

# run system activity accounting tool every 10 minutes

*/1 * * * * root /usr/lib64/sa/sa1 1 1

# generate a daily summary of process accounting at 23:53

53 23 * * * root /usr/lib64/sa/sa2 -A

END

#將sar記錄保留時間修改為1個月

#keep sar record for 1 month

sed -i 's/HISTORY=7/HISTORY=30/g'  /etc/sysconfig/sysstat

#7.create oracle users and groups

#建立oracle使用者及相關組

groupadd oinstall

groupadd dba

groupadd oper

groupadd asmadmin

useradd -g oinstall -G dba,oper,asmadmin oracle

passwd oracle << EOF

oracle

oracle

EOF

#8.configure oracle entervironment

#修改oracle安裝的核心限制

#--8.1 modify sysctl.conf

cat >> /etc/sysctl.conf << END

kernel.shmmni = 4096

kernel.sem = 2048 65536 1024 256

fs.file-max = 6815744

fs.aio-max-nr = 1048576

net.ipv4.ip_local_port_range = 9000 65500

net.core.rmem_default = 262144

net.core.rmem_max = 4194304

net.core.wmem_default = 262144

net.core.wmem_max = 1048576

END

sysctl -p

#--8.2 modify linux shell limit

#修改shell限制

>/etc/security/limits.conf

cat >> /etc/security/limits.conf << END

oracle soft nproc 65536

oracle hard nproc 65536

oracle soft nofile 65536

oracle hard nofile 65536

oracle - memlock unlimited

END

#--8.3 modify login pam

#增加pam模組

cat >> /etc/pam.d/login << END

session  required  pam_limits.so

END

#--8.4 create soft directory

#建立軟體安裝目錄

mkdir -p /u01/app/oracle

mkdir -p /u01/tmp

mkdir -p /u02/archive

mkdir -p /u02/oradata

mkdir -p /u01/app/oracle/product/11.2.0/db

mkdir -p /u01/app/11.2.0/grid

mkdir -p /home/oracle/sqlpath

chown -R oracle:oinstall /u01 /u02 /home/oracle/sqlpath

#--8.5

#建立環境變數,sid需要另行設定

cat >> /home/oracle/.bash_profile << END

export ORACLE_BASE=/u01/app/oracle

#export GG_HOME=/u02/ogg/ggs

export ORACLE_HOME=\$ORACLE_BASE/product/11.2.0/db

export PATH=\$PATH:\$HOME/bin:\$ORACLE_HOME/bin

export TMP=/u01/tmp

export TMPDIR=/u01/tmp

export LD_LIBRARY_PATH=\$ORACLE_BASE/product/11.2.0/db/lib:/usr/lib

export LC_TYPE=en_US.UTF-8

export NLS_LANG=AMERICAN_AMERICA.UTF8

export SQLPATH=/home/oracle/sqlpath

#alias jdb='export ORACLE_HOME=\$ORACLE_BASE/product/11.2.0/db;export ORACLE_SID=storedb1'

#alias jgrid='export ORACLE_HOME=/u01/app/11.2.0/grid;export ORACLE_SID=+ASM1'

alias sql='sqlplus / as sysdba'

alias dbs='cd /u01/app/oracle/product/11.2.0/db'

#alias jggsci='OLD_PWD=\$pwd;cd \$GG_HOME;./ggsci;cd \$OLD_PWD'

alias jlsnrctl='ORACLE_OLD=\$ORACLE_HOME; export ORACLE_HOME=/u01/app/11.2.0/grid;lsnrctl status;ORACLE_HOME=\$ORACLE_OLD;ORACLE_OLD='

END

#--8.6 configure sqlplus hint

#配置sqlplus環境

cat > /home/oracle/sqlpath/login.sql << END

set TERM OFF

define loginname=idle

column global_name new_value loginname

                  ||substr(global_name,1,decode(dot,0,length(global_name),dot-1))) global_name

from

                  (select global_name, instr(global_name,'.') dot

                    from global_name);

set sqlprompt '&loginname> '

alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';

SET TIMING ON

SET TIME ON

SET SERVEROUTPUT ON

SET LINESIZE 130

SET TERM ON

SET NUMWIDTH 13

SET PAGESIZE 1000

SET ECHO ON

END

#9.modify snmp params

#修改snmp引數

sed -e 's/\(^com2sec.*\)public/\199billsnmp/'  \

    -e 's/\(^access.*\)systemview\([^ ]*\)/\1all\2/'    \

    -e 's/^#\(view all.*\)/\1/'         \

    -e 's/^#\(view mib2.*\)/\1/' /etc/snmp/snmpd.conf > ./snmpdtmp && mv -f ./snmpdtmp /etc/snmp/snmpd.conf

service snmpd start

chkconfig --level 12345 snmpd on

#10.modify root profile

#配置登入提示符

echo "export PS1='[\t \u(\${ORACLE_HOME##*/})@\h \W]\\$ '" >> /etc/profile

#modify init level

#修改啟動的level級別

sed -i 's/id:5/id:3/g' /etc/inittab

%end

4.  網路安裝測試要求客戶端伺服器和pxe伺服器在同一個網段,插上網線加電後,會出現下面的介面:


 

選擇合適的版本回車後既可以實現自動化安裝。