獨闢蹊徑網路安裝Debian/Ubuntu

←手機掃碼閱讀     火星人 @ 2014-03-09 , reply:0

此文章是Linux部署方式系列文章中的第三部分,回歸到主流的Redhat衍生版體系以及描述對比PXE安裝服務的實現及使用Kickstart在部署主機系統是的妙用.本文涉及的內容是對現有Redhat體系的網路安裝方式的一個總結,重點是在講述PXE安裝伺服器的核心內容實現方式並不限於Linux環境;結合Kickstart如何快速的實現安裝主機的基本信息的配置,以及如何定製主要軟體包,同樣靈活應用Kickstart和tftp可以具體指定那台主機安裝那些配置好的參數,節省管理員的時間和精力,自動安裝減少了人為出錯的幾率.好處自然是很多,這裡就不過多描述了,下面開始本文的內容.主要針對目前的RHEL5.3版本以及Centos5.2版本為例.

首先熟悉一下PXE網路安裝伺服器的架構.PXE安裝分為兩個階段,第一個階段是BOOTP階段,此階段完全由網卡自帶的PXEROM晶元所決定,Linux主機將從tftpserver上獲得PXELinux啟動內核和initrd.img文件;第二個階段是在PXELinux內核啟動Linux主機網路安裝進程階段,Linux主機需要和安裝伺服器進行網路通信,需要通過DHCP服務獲得IP地址,以便獲得安裝腳本和獲得安裝文件.從下圖可以看到PXE網路安裝伺服器包含一個DHCP和TFTP主要解決主機沒有操作系統的BOOTP階段獲取必要的安裝信息,就是通過載入vmlinuz和initrd.img進入Linux安裝的引導過程.其次就是要準備一個安裝的鏡像伺服器並通過nfs、ftp、http等協議將Redhat&Centos的安裝源(安裝目錄樹)發布供安裝使用,同時簡單的變動一下這個安裝目錄樹同樣可以成為一個本地的yum源.重要的一點就是要提通過KickstartScript配置文件實現安裝的自動化.

圖:PXE網路安裝服務架構

實際上為了保持這個架構的通用性,將分別講述在Redhat&Centos中的實現方式以及在Windows環境中的實現方式.實際上藉助一些簡單的工具PXE網路安裝往往可以成為一個便攜的方式存在.

在Redhat&Centos中安裝tftp和dhcp,通過yum完成,這個對與Centos5.2非常的便利,至於在redhat中的操作,可以看後文中描述的建議的yum源的實現.

yum -y install tftp-server #完成tftp server的安裝
yum -y install dhcp* #完成dhcp server的安裝

實際上PXE安裝中有疑問的部分就是配置一個tftp的目錄、設置dhcp的tftp啟動參數、建立Redhat&Centos的安裝目錄樹.要清楚這些問題先要從tftp主目錄/tftpboot下的目錄和文件用途說起.

/tftpboot/pxelinux.0 #文件
/tftpboot/*.msg #文件
/tftpboot/vmlinuz #文件
/tftpboot/initrd.img #文件
/tftpboot/pxelinux.cfg #目錄

Redhat&Centos安裝程序的內核vmlinuz/根文件系統文件initrd.img是PXE安裝過程的第一步,正確引導后將看到boot.msg(*.msg中的一個)提示信息,用戶選擇安裝方式,pxelinux.0啟動鏡像文件在執行過程中,會讀取配置文件以確定它應該載入什麼Linux內核文件來運行.所有的配置文件都放在啟動伺服器的/tftpboot/pxelinux.cfg/目錄下.

明白了tftpboot目錄下的文件和目錄的作用就要弄清楚這些文件是從那裡獲取的,這些文件就在已經安裝好的Redhat&Centos系統和安裝光碟中.為了便於獲取這些文件需要建立一個安裝的目錄樹,具體操作也是很簡單的mount上DVD鏡像,建議使用DVD鏡像當然CD鏡像也是可以的,然後可以通過如下的命令複製DVD鏡像上的全部的內容到安裝目錄樹中

mkdir /InstallOs #建立安裝目錄樹文件夾 InstallOs
mount -o loop /home/CentOS-5.2-i386-bin-DVD.iso /mnt #centosDVD鏡像mount
cd /mnt #進入鏡像載入目錄
tar cf - . |(cd /InstallOs;tar xfp -) #

將DVD鏡像文件全部複製到安裝目錄樹文件夾InstallOs

下面就從安裝目錄樹文件夾和當前的系統中獲取tftpboot目錄中的文件和文件夾

cp /usr/lib/syslinux/pxelinux.0 /tftpboot/ #獲取 pxelinux.0文件
cp /InstallOs/isolinux/initrd.img /tftpboot
cp /InstallOs/isolinux/vmlinuz /tftpboot
cp /InstallOs/isolinux/*.Msg /tftpboot

mkdir /tftpboot/pxelinux.cfg #
建立pxelinux.cfg目錄
cp /InstallOs/isolinux/isolinux.cfg /tftpboot/pxelinux.cfg/
mv /tftpboot/pxelinux.cfg/isolinux.cfg /tftpboot/pxelinux.cfg/default

到此已經建立了一個基礎的tftpboot目錄機構和一個安裝目錄樹.基礎工作結束下面進入到tftp和dhcp的服務參數設置過程.具體設置參考下列配置文件:

1、dhcp配置文件cat/etc/dhcpd.conf中的藍色部分是設置支持BOOTP的參數,注意其中的filename"pxelinux.0";如果缺少這個信息邏輯將無法獲取到安裝程序的內核vmlinuz/根文件系統文件initrd.img;紅色的部分是dhcp客戶端獲取的ip子網的信息,注意保持設置的subnet信息的一致性.

#cat /etc/dhcpd.conf
ddns-update-style none;
ddns-updates off;
deny client-updates;
one-lease-per-client false;
allow bootp;
option T150 code 150 = string;
allow booting;
class "pxeclients"{
match if substring(option vendor-class-identifier,0,9) = "PXEClient";
filename "pxelinux.0";
next-server 172.16.1.9;
}
subnet 172.16.0.0 netmask 255.255.0.0 {
option routers 172.16.1.9;
option subnet-mask 255.255.0.0;
option nis-domain "telecarenet.cn";
option domain-name "lvs.local";
option domain-name-servers 172.16.1.9;
option time-offset -18000; # Eastern Standard Time
range dynamic-bootp 172.16.1.160 172.16.1.230;
default-lease-time 21600;
max-lease-time 43200;
# we want the nameserver to appear at a fixed address
host diskless {
next-server 172.16.1.9;
hardware ethernet 00:02:b3:ee:7b:74;
fixed-address 172.16.1.210;
filename "pxelinux.0";
}
}

2、tftp配置文件cat/etc/xinetd.d/tftp中的藍色部分是需要注意的,實際上tftp是一個xinetd的超級守護進程.

#cat /etc/xinetd.d/tftp
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
}
啟動tftpdhcp服務
/etc/init.d/xinetd restart #啟動tftp服務
/etc/init.d/dhcpd restart #啟動dhcp服務

下面要實現的是針對安裝目錄樹的網路發布,簡單的是使用nfs配置文件只有一行就可以了,在/etc/exports文件中增加/InstallOs *(ro)這麼一行就可以了.但為了這個安裝目錄樹的通用性,要同時將/InstallOs文件夾作為httpd和ftp站點發布出去,方法是在默認安裝的apache和vsftp的根目錄中建立一個軟連接.

ln -s /InstallOs /var/www/html/InstallOS #建立apache的軟連接
ln -s /InstallOs /var/ftp/InstallOS #建立vsftp 的軟連接
  這樣就可以提供nfs/ftp/http三種網路安裝協議的選擇.
附上一個安裝目錄樹的擴展價值,使其成為yum
cd /InstallOS
rpm -ivh ./Server/createrepo-0.4.11-3.el5.noarch.rpm
createrepo . #創建yum倉庫
在主機/etc/yum.repos.d/目中刪除現有的文件建立一個新的yum配置文件如下
[InstallOs]
name=InstallOs
baseurl=http://
安裝伺服器的ip地址/InstallOS/
enabled=1
gpgcheck=0

執行 yum clean all然後就可以使用安裝目錄樹的yum源進行軟體包的管理了

上述在Linux中的實現同樣可以在Windows主機中通過3com的tftpd32工具和Server-u工具實現,重點是要構將tftpboot和安裝目錄樹在Windows主機中構建一份,可以將上面已經構建的文件夾複製到Windows主機中.參見下圖中的設置部分要將pxelinux.0填寫到Boot File中.將Server-U建立的ftp通過Kickstart整合起來,或者通過linuxaskmethod安裝參數選擇.

圖:tftpd32設置

ok,現在就可以進行pxe的網路引導安裝,前提要設置主機使用網卡的pxe進行引導.不過現在的pxe安裝伺服器還不是很智能,與使用光碟手動安裝一步一步的操作是一樣的,創新之處就是不用更換光碟.

Kickstart的功能,其主要目的是為了減少安裝過程中的人機交互,提高安裝效率.使用這種方法,只需事先定義好一個配置文件(通常存放在安裝伺服器上),並讓安裝程序知道該配置文件的位置,在安裝過程中安裝程序就可以自己從該文件中讀取安裝配置,這樣就避免了繁瑣的人機交互,實現無人值守的自動化安裝.

在Redhat&Centos的系統中提供了system-config-kickstart工具進行腳本文件的配置,如果能夠有一個已經設置好的網路、磁碟分區、安裝那些軟體包的Kickstart腳本文件該多好.實際上在root目錄下有一個anaconda-ks.cfg文件就是當前系統安裝的Kickstart文件.一般用戶可以通過修改這個文件,實現多個相同配置的主機腳本化安裝.對於一個Kickstart文件分為命令部分、軟體包選擇部分%packages、腳本部分(%pre預安裝腳本和%post安裝後腳本),對於Kickstart文件,命令部分的語言、安裝方式、設備規格、鍵盤設置、引導裝載程序配置這些是不能缺少的.anaconda-ks.cfg中藍顏色不會是磁碟分區信息,此文件顯示的是從CD介質進行安裝,並在安裝過程中設置了網路參數信息,並可以看到安裝后的軟體包組信息,具體是那裝了那些rpm文件需要看root帳戶的根文件夾下的install.log文件.

cat anaconda-ks.cfg
# Kickstart file automatically generated by anaconda.
#以下的內容是kickstart文件的命令部分主要設置安裝方式、語言、鍵盤、 引導裝載程#序配置等不可缺少的信息
install
cdrom
lang en_US.UTF-8
keyboard us
xconfig --startxonboot
network --device eth0 --bootproto static --ip 192.168.1.59 --netmask 255.255.255.0 --gateway 192.168.1.1 --nameserver 221.11.12.14 --hostname tes
rootpw --iscrypted $1$aKhtFLuj$gn/LxPNxVXUekzLcgAnJz1
firewall --enabled --port=22:tcp
authconfig --enableshadow --enablemd5
selinux --enforcing
timezone --utc Asia/Shanghai
bootloader --location=mbr --driveorder=sda --append="rhgb quiet"
# 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 --linux --drives=sda
#part /boot --fstype ext3 --size=100 --ondisk=sda
#part pv.2 --size=0 --grow --ondisk=sda
#volgroup VolGroup00 --pesize=32768 pv.2
#logvol swap --fstype swap --name=LogVol01 --vgname=VolGroup00 --size=512 --grow --maxsize=1024
#logvol / --fstype ext3 --name=LogVol00 --vgname=VolGroup00 --size=1024 --grow

%packages#此部分開始是系統安裝的軟體包的選擇部分
@editors
@text-internet
@gnome-desktop
@dialup
@core
@base
@base-x
@graphics
@printing
@graphical-internet
device-mapper-multipath
xorg-x11-server-Xnest
libsane-hpaio
-sysreport

關於Kickstart配置的具體選項可以參考Redhat提供的Installation_Guide文檔,其中有詳細的描述和介紹.

文檔Redhat網站下載地址如下:

http://www.redhat.com/docs/manuals/enterprise/RHEL-5-manual/zh-CN/pdfs/Installation_Guide.pdf

文檔Centos網站下載地址如下:

http://www.centos.org/docs/5/html/5.2/pdf/Installation_Guide.pdf

上述事例中的anaconda-ks.cfg文件中沒有使用%post部分腳本,故此在安裝完成的系統上出IP地址信息設置完成,任何伺服器上的配置都需要一步一步的操作完成,這個方式對於一個群集站點的部署來說是很不理想的.通過使用%post安裝后的腳本,可以通過默認的shell腳本語法實現文件的下載、軟體包的編譯等工作,從而是安裝后的主機可以直接投入到使用中,減少準備時間.以下是一個%post腳本事例,通過此段代碼可以完成在PXE安裝階段安裝heartbeat-2.1.4,當然也可以從ftp上將heartbeat-2.1.4需要的配置文件下載到指定的目錄下,以節省配置時間.只要有了腳本可以完成很多想象的的事情!至於能夠作什麼只有管理員們自己在工作中慢慢體會了.

%post
cd /usr/src/
wget ftp://172.16.1.19/libnet.tar.gz
wget ftp://172.16.1.19/heartbeat-2.1.4.tar.gz
tar -xvf libnet.tar.gz
cd libnet
./configure;make;make install;cd ..
tar -xvf heartbeat-2.1.4.tar.gz
cd heartbeat-2.1.4
./ConfigureMe configure;make;make install;

安裝過程究竟要安裝那些軟體包合適,不能完全通過已安裝系統的anaconda-ks.cfg文件獲得,Redhat&Centos提供的system-config-kickstart配置工具提供了一個便捷的選擇選擇方式,不過限於Redhat目前的商業的授權問題,可以通過Centos對應的版本進行軟體包的選擇,具體如下圖所示:

圖:system-config-kickstart載入

圖:system-config-kickstart配置軟體包

以下是一個RHEL5.3&Centos5.2的可用的軟體包組的清單,可以工具自己的需要選擇.其中藍色部分為當前版本能夠提供的全部的軟體包組名稱.

#platform=x86, AMD64, or Intel EM64T
# System authorization information
auth --useshadow --enablemd5
# System bootloader configuration
bootloader --location=mbr
# Partition clearing information
clearpart --none
# Use graphical install
graphical
# Firewall configuration
firewall --enabled
# Run the Setup Agent on first boot
firstboot --disable
# System keyboard
keyboard us
# System language
lang en_US
# Installation logging level
logging --level=info
# Use CDROM installation media
cdrom
# SELinux configuration
selinux --enforcing
# System timezone
timezone America/New_York
# Install OS instead of upgrade
install
# X Window System configuration information
xconfig --defaultdesktop=GNOME --depth=8 --resolution=640x480

%packages
@server-cfg
@base-x
@gnome-desktop
@ftp-server
@legacy-software-development
@development-libs
@base
@x-software-development
@sound-and-video
@mail-server
@network-server
@gnome-software-development
@admin-tools
@kde-software-development
@printing
@web-server
@mysql
@openfabrics-enterprise-distribution
@development-tools
@chinese-support
@java-development
@legacy-network-server
@system-tools
@kde-desktop
@legacy-software-support
@sql-server
@virtualization
@graphical-internet
@cluster-storage
@text-internet
@ruby
@office
@games
@dialup
@smb-server
@authoring-and-publishing
@graphics
@clustering
@emacs
@java
@dns-server
@engineering-and-scientific
@editors
@news-server

當然這個system-config-kickstart配置工具並不局限於軟體包的選擇,可以設置一個Kickstart文件的命令、軟體包選擇、腳本等全部的信息.

結合anaconda-ks.cfg安裝配置文件和system-config-kickstart配置工具可以定製出特定伺服器的安裝ks文件,不過不同功能的伺服器眾多的ks配置文件該如何對用起來呢?是特定的主機可以識別相應的ks配置文件而不出現錯誤呢?這個就要說說位於tftpboot文件夾下的pxelinux.cfg的作用,這個pxelinux.cfg文件夾就是根據主機的MAC地址對用的配置文件名稱識別具體的主機,從而實現特定主機使用相應的ks配置文件完成PXE的安裝及系統的配置.

默認PXE配置寫入/tftpboot/pxelinux.cfg/default中.當計算機在PXE期間接收到DHCP地址時,就用特定順序搜索/tftpboot/pxelinux.cfg下的配置文件,第一個找到的文件被用作請求計算機的啟動配置.搜索順序的確定方法是:優先搜索以客戶端機器的網卡地址命名配置文件(以'01'開頭,用'-'(dash)分隔,用小寫字母表示 MAC地址),並把請求DHCP地址轉換成8個16進位數字,通過擴展子網對配置目錄搜索第一個匹配的文件名(每一次搜索后從右到左刪除一位數字),使用default這個默認的配置文件.這個是標準的解釋不過是不是很麻煩還要進行一個進位轉換的操作,不過計算機底層只是別這個沒有辦法的呀.

例如,網卡的MAC地址是88:99:AA:BB:CC:DD而IP地址是192.0.2.91,客戶會按照如下順序嘗試配置文件名,其中IP地址為192.0.2.91,轉換為十六進位數是C000025B

/ftfpboot/pxelinux.cfg/01-88-99-aa-bb-cc-dd
/ftfpboot/pxelinux.cfg/C000025B
/ftfpboot/pxelinux.cfg/C000025
/ftfpboot/pxelinux.cfg/C00002
/ftfpboot/pxelinux.cfg/C0000
/ftfpboot/pxelinux.cfg/C000
/ftfpboot/pxelinux.cfg/C00
/ftfpboot/pxelinux.cfg/C0
/ftfpboot/pxelinux.cfg/C
/ftfpboot/pxelinux.cfg/default

為了優先使每台安裝的主機都匹配上ks文件就需要獲取主機的MAC地址並定義好網卡地址命名配置文件.

網卡的MAC地址是88:99:AA:BB:CC:DD的網卡地址命名配置文件01-88-99-aa-bb-cc-dd

cat 01-88-99-aa-bb-cc-dd
default linux
label linux
kernel vmlinuz
append ip=192.168.1.214 netmask=255.255.255.0 gateway=192.168.1.100 ks=http://192.168.1.100:/InstallOs/webserver1.cfg initrd=initrd.img

其中紅色部分的作用對於一些較新型號的兼容網卡是很有意義的可以避免無法獲取IP地址而終止安裝過程的問題.

這樣的主機安裝和配置過程只需要一台PXElinux安裝伺服器就可以解決問題,安裝之前需要獲知的即使主機的MAC地址,這個應該很簡單,商業的伺服器的說明書中都是帶有網卡MAC地址說明的,當然也是可以通過其他途徑獲得.這個PXE安裝伺服器可以便攜使用到筆記本電腦的windows環境中,之需要將配置好的ks配置文件放置在使用Serve-U的ftp的目錄下就可以修改pxelinux.cfg中的文件配置完成定製操作.

本文作為系列獨闢蹊徑網路安裝的系列文章的第三篇,希望對Linux用戶能夠有所提示和啟發,歡迎就相關問題進行交流.

作者簡介:CU網友kns1024wh,目前從事Linux群集方面的具體工作,之前做過多年的IT技術支持、MCT講師、及REDFLAG的技術合作,技術專長群集、unix主機、AD部署等,您可以通過電子郵件lvsheat@qq.com或者Chinaunix社區與他取得聯繫.





[火星人 ] 獨闢蹊徑網路安裝Debian/Ubuntu已經有792次圍觀

http://coctec.com/docs/linux/show-post-56837.html