歡迎您光臨本站 註冊首頁

無人值守安裝CentOS5.8

←手機掃碼閱讀     火星人 @ 2014-03-12 , reply:0
  
因為之前的工作需要搭建紅帽實驗室環境,由於機器數量比較多,所以需要批量自動化無人值守安裝系統,所以我嘗試使用RHEL5+PXE+DHCP+Apache+Kickstart安裝了RHCE5.1 i386實驗室環境,並取得了成功,不過過程比較漫長,所以我特地記錄下PXE+DHCP+Apache+Kickstart無人值守安裝的過程。另外,我在博客發表了相應的文章,很多熱心的讀者根據文章內容已成功批量安裝了紅帽RHEL系統或CentOS5.x,並提出了許多寶貴的意見,在這裡表示感謝。現階段,由於需要大規模應用CentOS5.8 x86_64系統用於集群環境,所以將此方法主要用於在公司內網批量安裝新伺服器系統,這極大地簡化了用光碟重複安裝CentOS5.8 x86_64的過程,再加上分散式自動化運維工具puppet進行批量部署,達到了自動化運維的目的,避免了重複性勞動,極大的提高了工作效率。

首先,我們來介紹一下與之相關的原理和概念。

1. 什麼是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,那麼它就可以通過 TFTP 協議到 TFTP Server 上下載所需的文件了。

2. 什麼是Kickstart

Kickstart是一種無人值守的安裝方式。它的工作原理是在安裝過程中記錄典型的需要人工干預填寫的各種參數,並生成一個名為 ks.cfg的文件。如果在安裝過程中(不只局限於生成Kickstart安裝文件的機器)出現要填寫參數的情況,安裝程序首先會去查找 Kickstart生成的文件,如果找到合適的參數,就採用所找到的參數;如果沒有找到合適的參數,便需要安裝者手工干預了。所以,如果Kickstart文件涵蓋了安裝過程中可能出現的所有需要填寫的參數,那麼安裝者完全可以只告訴安裝程序從何處取ks.cfg文件,然後就去忙自己的事情。等安裝完畢,安裝程序會根據ks.cfg中的設置重啟系統,並結束安裝。

3. PXE + Kickstart的安裝條件和詳細步驟

執行 PXE + Kickstart安裝需要的設備為:

  • DHCP 伺服器。
  • TFTP 伺服器。
  • Kickstart所生成的ks.cfg配置文件。
  • 一台存放系統安裝文件的伺服器,如 NFS、HTTP 或 FTP 伺服器。
  • 一個帶有 PXE 支持網卡的主機。

系統環境介紹如下:

伺服器系統為CentOS5.6 x86_64,IP為192.168.11.29(此伺服器並非一定要限定為CentOS5.8 x86_64系統),由於是最小化安裝的,我們在後面要用到system-config-kickstart工具,它必須依賴於X windows,所以我們要提前安裝好X windows及gnome並重啟系統,步驟如下所示:

先裝X windows和GNOME桌面環境,命令如下所示:

  yum -y groupinstall 'X Window System'  yum -y groupinstall 'GNOME Desktop Environment'

然後修改/etc/inittab文件並重啟伺服器,使其運行在圖形模式下,主要修改文件內容如下所示:

  id:5:initdefault:

重啟伺服器命令如下:

  reboot

 

 

完成上述的準備工作后,PXE+DHCP+Apache+Kickstart無人值守安裝CentOS5.8安裝的步驟如下:

(1)我們先下載CentOS5.8 x86_64光碟至/usr/local/src下,並掛載至/mnt/cdrom目錄下,並確認系統已安裝好httpd服務,如下:

  cd /usr/local/src  wget http://mirror.neu.edu.cn/CentOS/5.8/isos/x86_64/CentOS-5.8-x86_64-bin-DVD-1of2.iso  mkdir -p /mnt/cdrom

接下來我們掛載光碟ISO文件至/mnt/cdrom目錄下,如下命令:

  mount -o loop CentOS-5.8-x86_64-bin-DVD-1of2.iso /mnt/cdrom

CetnOS5.x x86_64系列已默認安裝Apache,我們可以用命令看下其版本號,如下所示:

  rpm -q httpd

命令顯示結果如下所示:

  httpd-2.2.3-65.el5.CentOS

(2)接下來我們複製光碟下的所有內容(文件和文件夾)到/var/html/www(此目錄為Apache默認DocumentRoot目錄)下,無論是紅帽系統還是CentOS 5.x系統,如果是最小化安裝,基本上第一張DVD光碟文件就夠了,複製命令如下所示:

  cp -rf   /mnt/cdrom  /var/html/www

(3)安裝 tftp-server,並啟用tftp服務,同時啟動xinetd進程,步驟如下所示。

1.我們用命令安裝tftp-server,命令如下:

  yum -y install tftp-server

2.接著修改/etc/xinetd.d/tftp文件,將disable的值由yes變為no,內容如下所示:

  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

3.接著重啟xinetd進程,命令如下所示:

  service xinetd restart

(4)配置支持PXE的啟動程序(注意:前面已經將CentOS5.8 x86_64第一張光碟的內容複製到/var/www/html目錄中了,所以需要的文件只需要從/var/www/html目錄中複製就行了)。

a) 建立tftpboot文件夾,如下所示,若該文件夾已經存在則不用建立。

  mkdir -p /tftpboot

b) 複製pxelinux.0文件至tftpboot文件夾中,如下所示。

  cp /usr/lib/syslinux/pxelinux.0 /tftpboot

c) 把DVD光碟上的/image/pxeboot/initrd.img和vmlinux複製到/tftpboot/中,如下所示。

  cp /var/www/html/images/pxeboot/initrd.img   /tftpboot  cp /var/www/html/images/pxeboot/vmlinuz /tftpboot

d) 複製DVD光碟上的isolinux/*.msg到/tftpboot目錄下,如下所示。

  cp /var/www/html/isolinux/*.msg /tftpboot/

e) 在tftpboot中新建一個pxelinux.cfg目錄:

  mkdir pxelinux.cfg

f) 將isolinux目錄中的isolinux.cfg複製到pxelinux.cfg目錄中,同時更改文件名稱為default,命令如下所示:

  cd pxelinux.cfg  cp /var/www/html/isolinux/isolinux.cfg   /tftpboot/pxelinux.cfg/default

g) 在上一個步驟,即第6點中,暫時不要修改default文件,進行到這一步時,雖然已經可以通過網路來引導並手動安裝Kickstart了,但是由於這裡討論的是無人值守安裝,所以先不修改這個default文件。

 

(5)安裝dhcp服務,同時修改如下配置:

  yum -y install dhcp

然後複製配置模板文件到指定的目錄中,並重新命名。

  cp /usr/share/doc/dhcp-3.0.5/dhcpd.conf.sample /etc/dhcpd.conf

接著修改/etc/dhcpd.conf配置文件,文件最後修改內容如下所示:

  ddns-update-style interim;  ignore client-updates;  next-server 192.168.11.29;  filename "/pxelinux.0";  subnet 192.168.11.0 netmask 255.255.255.0 {  option routers   192.168.11.1;   option subnet-mask  255.255.255.0;   option nis-domain  "cn7788.com";   option domain-name  "cn7788.com";   option domain-name-servers 192.168.11.252;   option time-offset  -18000; # Eastern Standard Time   range dynamic-bootp 192.168.11.34 192.168.11.159;   default-lease-time 21600;   max-lease-time 43200;  }

最後啟動dhcp服務:

  service dhcpd start

註:如果機器數量過多的話,注意dhcp伺服器的地址池,不要因為耗盡IP而導致dhcpd伺服器沒有IP地址release情況。

(6)用yum工具自動安裝Kickstart,同時配置system-config-kickstart。

a) 首先我們需要安裝Kickstart這個工具包,在CentOS最小化安裝系統時,此軟體包並沒有默認安裝,yum安裝命令如下所示:

  yum -y install system-config-kickstart

b) 在gnome環境下配置Kickstart,命令如下所示:

  system-config-Kickstart

運行上面的命令后可以對系統的一些基本配置進行設置,例如選擇時區、設置root的密碼等。

c) 接下來便要進行安裝了,建議選擇httpd安裝,切記不要輸入任何賬號,而是採用匿名安裝。

在安裝過程中,根據引導選擇安裝選項,不需要做更改。

d) Kickstart會讓我們選擇需要批量安裝的CentOS5.8分區信息,按照上一節所介紹的CentOS5.5 x86_64的安裝方法,我們創建四個分區,即/、/boot、/data和swap分區。

e) 在進行網路配置時,我使用的靜態分配地址(動態同樣如此),這裡跟前面進行光碟安裝是一樣的。

f) 設置顯示配置時可以按照我們的習慣選擇。

g) 關於軟體包的選擇,大家可以根據實際的工作需求來選擇自己需要的軟體包,由於伺服器安裝後用途都是不一樣的,建議大家這裡選擇最小化安裝。

h) 其他都選擇默認設置,不需要修改。

i) 最後將生成的文件ks.cfg保存到/var/www/html下,此為自動化無人值守安裝的重難點,此文件稍有配置不當的話就會需要人為干預了,如果大家遇到問題,建議參考我下面的ks.cfg配置文件。

(7)修改/tftpboot/pxelinux.cfg/default文件,指定讀取ks.cfg的方法,即修改文件第一行內容,改動後文件第一行內容如下所示:

  default text ks=http://192.168.11.29/ks.cfg

另外,也建議將timeout時間由原先的600改為1,timeout時間是引導時等待用戶手動選擇的時間,設為"1"可直接引導。

(8)/var/www/html/ks.cfg文件內容如下所示(此內容是整個實驗過程的重難點,請關注):

#platform=x86, AMD64, or Intel EM64T
# System authorization information
auth  --useshadow  --enablemd5
# System bootloader configuration
key --skip
bootloader --location=mbr
# Partition clearing information
clearpart --none 
# Use graphical install
graphical
# Firewall configuration
firewall --disabled
# 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 network installation
url --url=http://192.168.11.29/
# Network information
network --bootproto=dhcp --device=eth0 --onboot=on
reboot
#Root password
rootpw --iscrypted $1$biw2UUzu$/ZrtUhG9gGGGJn6edgUIQ1

# SELinux configuration
selinux --disabled
# System timezone
timezone --isUtc Asia/Shanghai
# Install OS instead of upgrade
install
# X Window System configuration information
xconfig  --defaultdesktop=GNOME --depth=8 --resolution=640x480
# Disk partitioning information
bootloader --location=mbr --driveorder=sda
clearpart --all --initlabel
part / --bytes-per-inode=4096 --fstype="ext3" --size=5120
part /boot --bytes-per-inode=4096 --fstype="ext3" --size=128
part swap --bytes-per-inode=4096 --fstype="swap" --size=500
part /data --bytes-per-inode=4096 --fstype="ext3" --grow --size=1

%packages
@base
@development-libs
@development-tools

此配置過程中的重難點我這裡說明下:

分區操作按照目前線上分區來操作,即分成/、/boot、/data及swap四個分區,其中/data分區是存放數據的,我們這裡用--grow --size=1參數來將其餘的剩餘空間全部分配給/data分區。

key --skip如果是紅帽系統,此選項可以跳過輸入序列號過程;如果是CentOS 5.x系列,則可以不保留此項內容;

reboot 此選項必須存在,也必須文中設定位置,不然kickstart顯示一條消息,並等待用戶按任意鍵后才重新引導,此問題是很多朋友在論壇上發言提問的,我在實驗過程中也遇到此問題,建議多做幾次實驗;

clearpart --all --initlabel此條命令必須添加,不然系統會讓用戶手動選擇是否清除所有數據,這就需要人為干預了,從而導致自動化過程失敗;

其它方面選項較容易看懂,我這裡就不再重複了。

(9)將Kickstart需要的伺服器均啟動后,此自動化安裝系統的過程就完成了,我們就可以在內網機櫃中全自動同時安裝CentOS5.8 x86_64系統了,伺服器端啟動相應命令如下:

  Service httpd start  chkconfig httpd on  service dhcpd start  chkconfig dhcpd on  service xinetd restart

 

 

系統完成最小化后安裝后,大家可以根據自己公司的實際情況來進行系統的優化,此最小化優化腳本init.sh還可以讓puppet伺服器進行推送,此腳本內容如下所示:

  1. #/bin/bash  
  2. #add the epel repo  
  3. cd /usr/local/src  
  4. wget http://mirrors.ustc.edu.cn/fedora/epel//5/x86_64/epel-release-5-4.noarch.rpm   
  5. rpm -ivh epel-release-5-4.noarch.rpm   
  6. #add the rpmforge repo  
  7. cd /usr/local/src  
  8. wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm  
  9. rpm -ivh rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm 
  10.  
  11. #yum install sysstat   
  12. yum -y install gcc gcc-c++ vim-enhanced unzip unrar sysstat   
  13.  
  14. #set the ntp  
  15. yum -y install ntp  
  16. echo "01 01 * * * /usr/sbin/ntpdate ntp.api.bz  >> /dev/null 2>&1" >> /etc/crontab  
  17. ntpdate ntp.api.bz  
  18. service crond restart  
  19.  
  20. #set the file limit   
  21. ulimit -SHn 65535   
  22. echo "ulimit -SHn 65535" >> /etc/rc.local  
  23. cat >> /etc/security/limits.conf << EOF 
  24. *           soft   nofile       60000  
  25. *           hard   nofile       65535  
  26. EOF  
  27.  
  28. #tune kernel parametres  
  29. cat >> /etc/sysctl.conf << EOF 
  30. net.ipv4.tcp_syncookies = 1 
  31. net.ipv4.tcp_syn_retries = 1 
  32. net.ipv4.tcp_tw_recycle = 1 
  33. net.ipv4.tcp_tw_reuse = 1 
  34. net.ipv4.tcp_fin_timeout = 1 
  35. net.ipv4.tcp_keepalive_time = 1200 
  36. net.ipv4.ip_local_port_range = 1024 65535  
  37. EOF  
  38. /sbin/sysctl -p  
  39.  
  40. #set the control-alt-delete to guard against the misuse  
  41. sed -i '[email protected]::ctrlaltdel:/sbin/shutdown -t3 -r [email protected]#ca::ctrlaltdel:/sbin/shutdown -t3 -r [email protected]' /etc/inittab   
  42.  
  43. #disable selinux  
  44. sed -i '[email protected]SELINUX=enforcing@SELINUX=disabled@' /etc/selinux/config  
  45.  
  46. #ssh setting   
  47. sed -i -e '74 s/^/#/' -i -e '76 s/^/#/' /etc/ssh/sshd_config   
  48. sed -i '[email protected]#UseDNS [email protected] [email protected]' /etc/ssh/sshd_config  
  49. service sshd restart  
  50.  
  51. #disable ipv6  
  52. echo "alias net-pf-10 off" >> /etc/modprobe.conf  
  53. echo "alias ipv6 off" >> /etc/modprobe.conf  
  54. echo "install ipv6 /bin/true" >> /etc/modprobe.conf   
  55. echo "IPV6INIT=no>> /etc/sysconfig/network  
  56. sed -i '[email protected]NETWORKING_IPV6=yes@NETWORKING_IPV6=no@'  /etc/sysconfig/network   
  57. chkconfig ip6tables off   
  58.  
  59. #vim setting   
  60. echo "syntax on" >> /root/.vimrc   
  61. echo "set nohlsearch" >> /root/.vimrc   
  62.  
  63. #chkconfig off services  
  64. chkconfig bluetooth off   
  65. chkconfig sendmail off   
  66. chkconfig kudzu off   
  67. chkconfig nfslock off   
  68. chkconfig portmap off   
  69. chkconfig iptables off   
  70. chkconfig autofs off   
  71. chkconfig yum-updatesd off   
  72.  
  73. #reboot system   
  74. Reboot 

注意:

#tune kernel parametres為內核優化部分,在這裡我只做了基礎處理,大家有需求可以自行修改,記住:一切以系統穩定為原則。

#vim setting選項為vim的個性化配置,如果想vim語法高亮,則必須安裝vim-enhanced包,另外,vim在使用搜索功能,搜索選中內容為高亮,感覺不是特別舒服,所以我這裡用了set nohlsearch選項,如果大家不介意此項功能,則不需要添加此語句;

#disable ipv6選項我在測試時發現,在CentOS5.8 x86_64系統下,如果不添加install ipv6 /bin/true此語句到/etc/modprobe.conf文件里,是關閉不了ipv6選項的,而測試的CentOS5.5 | 5.6不添加此句均可以順利關閉ipv6,這點請大家注意,當然了,最後要reboot系統讓此配置生效。

引申:相信大家的開發環境應該有不少Xen虛擬機,雖然Xen有自身的模板文件操作,但我們也可以利用Kickstart的方式快速無人值守安裝Xen虛擬機系統,命令如下所示:

  virt-install  -n vm4  -r 300  -f /data/vm/vm4.img -s 8 -p -l  http://192.168.11.29 -x ks=http://192.168.11.29/ks.cfg

由於Xen結合Kickstart並不是本文檔的重點內容,有興趣的朋友可以可以自行研究;另外有一點請大家一定要注意:

由於此安裝方法太智能化,在網路引導成功以後會自動清除硬碟數據並重新安裝新的系統,所以建議大家將此工作區域和網段獨立出來,或者在進行完安裝工作以後就停用Kickstart伺服器,以免對正常工作的伺服器造成不必要的麻煩。

由於個人能力有限,鑒於工作環境的嚴謹性,歡迎大家我上述文檔中一切錯誤和不合理之處,歡迎來信與我交流,個人郵箱[email protected]

作者簡介:

余洪春(撫琴煮酒),英文名Andrew.Yu。

 個人博客地址:http://andrewyu.blog.51cto.com/,

 Sina微博地址:http://weibo.com/yuhongchun027。

 



[火星人 ] 無人值守安裝CentOS5.8已經有511次圍觀

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