PXEスクリプト


コメントがない部分は正常に使用できますが、コメント部分は新しく追加されたもので、まだテストされていません.
スクリプトを実行した後、出力プロンプトに従って、dhcp構成:セグメント、ゲートウェイ、マスク、IPアドレスプールを入力します.
最新の変更でコピーを忘れてしまったので、スクリプトに注釈を付ける場所があるかもしれません.
家ではテストできないので印象だけで一部変更しました
スクリプト情報
 

  
  
  
  
  1. #!/bin/bash  
  2. #  
  3. #    SCRIPT: pxe.sh  
  4. #    DATE: 01-01-2011  
  5. #    REV: 1.0  
  6. #    AUTHOR: SongKnight  
  7. #    E-Mail: [email protected]  

変数の定義
 

  
  
  
  
  1. echo "-----------------------------------------------------------------------" 
  2. echo "-                           SETTING                                   -" 
  3. echo "-----------------------------------------------------------------------" 
  4. #read -p "input your want use Disk or ISO:[D/I]:" use  
  5. #if [ ! $use=D ] -a [ ! $use=I ]  
  6. #then   
  7. #    echo "You enter is error!" 
  8. #    exit   
  9. #fi  
  10. #if [ $use=I ]  
  11. #then 
  12. #    sed '34,38 s/#//g' pxe.sh  
  13.  
  14. #    There are parameter to setting DHCP Service.  
  15. read -p "input your's net:" net  
  16. read -p "input your's netmask:" netmask  
  17. read -p "input routers's ip address:" route_ip  
  18. #    If you want to setting DNS's information in DHCP, please remove under line's #.  
  19. #read -p "input nameserver's ip address:" name_ip  
  20. #read -p "input domain-name:" domain  
  21. read -p "input tftp's ip address:" tftp_ip  
  22. read -p "input range ip address(e.g.192.168.0.1 192.168.0.255):" range_ip  
  23. clear  
  24. echo "Please confirm your's setting:  
  25. network = "$net" 
  26. netmask = "$netmask" 
  27. routers ip = "$route_ip" 
  28. tftp ip = "$tftp_ip" 
  29. range ip = "$range_ip""  
  30. #read -p "Do you confirm this setting:[yes/no]" confirm  
  31. #if [ $confirm=no ]  
  32. #do   
  33. #    echo "Please run this script again to reset!!!!" 
  34. #    exit  
  35. #fi 

準備作業:yumプロファイルの変更、CDに掛けるなどを含む.
 

  
  
  
  
  1. #mkdir -p /pxe/linux  
  2. #read -p "input OS's iso path:" iso  
  3. #test -e ${iso}  
  4. #if $? -eq 1  
  5. #else exit 10 ; sh $0  
  6. #mount ${iso} /pxe/linux  
  7. #    This is setting yum.   
  8. cat > /etc/yum.repos.d/rhel-debuginfo.repo << EOF  
  9. [Server]  
  10. name=Server  
  11. baseurl=file:///mnt/Server  
  12. enable=1  
  13. gpgcheck=0  
  14.  
  15. #[Server]  
  16. #name=Server  
  17. #baseurl=file:///pxe/linux/Server  
  18. #enable=1  
  19. #gpgcheck=0  
  20. EOF  
  21. #    Some OS is made alias cp='cp -i', so in here have change this alias.  
  22. alias cp=cp  
  23. cd /mnt/Server 

DHCPサービスのインストール

  
  
  
  
  1. yum install dhcp -y || rpm -ivh dhcp-3*  
  2. #    Setting DHCP Service's configuration file. And save this file in /etc/dhcpd.conf  
  3. cat > /etc/dhcpd.conf << EOF  
  4. ddns-update-style interim;  
  5. ignore client-updates;  
  6. next-server ${tftp_ip};  
  7. filename "/tftpboot/linux-install/pxelinux.0";  
  8. subnet ${net} netmask ${netmask} {   
  9.         option routers          ${route_ip};  
  10.         option subnet-mask      ${netmask};  
  11.         option time-offset      -18000;  
  12. #       option domain-name-servers      ${name_ip};  
  13. #       option domain-name      "${domain}";  
  14.         range dynamic-bootp ${range_ip};  
  15.         default-lease-time 21600;  
  16.         max-lease-time 43200;  
  17. }  
  18. EOF  
  19. service dhcpd restart  
  20. chkconfig --level 345 dhcpd on 

tftpサービスの構成
 

  
  
  
  
  1. cat > /etc/xinetd.d/tftp << EOF  
  2. service tftp  
  3. {  
  4. disable = no 
  5. socket_type = dgram  
  6. protocol = udp  
  7. wait = yes  
  8. user = root  
  9. server = /usr/sbin/in.tftpd  
  10. server_args = /tftpboot/linux-install/  
  11. per_source = 11  
  12. cps = 100 2  
  13. flags = IPv4  
  14. }  
  15. EOF  
  16. service xinetd restart  
  17. chkconfig --level 345 xinetd on  
  18. chkconfig --level 345 tftp on 

nfs共有ディレクトリの構成

  
  
  
  
  1. cat > /etc/exports << EOF  
  2. /mnt    *(ro)  
  3. #/pxe/linux     ${net}(ro)  
  4. EOF 

必要なファイルをtftp共有ディレクトリにコピーし、最後に自分で変更した偽の起動スクリプトは純粋に面白いためです.

  
  
  
  
  1. cd /tftpboot  
  2. cp /mnt/images/pxeboot/initrd.img ./linux-install/  
  3. #cp /pxe/linux/images/pxeboot/initrd.img ./linux-install/  
  4. cp /mnt/images/pxeboot/vmlinuz ./linux-install/  
  5. #cp /pxe/linux/images/pxeboot/vmlinuz ./linux-install/  
  6. #cp /usr/lib/syslinux/pxelinux.0 ./linux-install/  
  7. cd /tftpboot/linux-install/  
  8. mkdir pxelinux.cfg  
  9. cd pxelinux.cfg  
  10. cat > default << EOF 
  11. default linux  
  12. prompt 1  
  13. timeout 30  
  14. label linux  
  15.         kernel vmlinuz  
  16.         append initrdinitrd=initrd.img  
  17. EOF  
  18. service nfs restart  
  19. chkconfig --level 345 nfs on  
  20. #    This is simply pxe start script.  
  21. #cat > pxe << EOF 
  22. ##!/bin/bash  
  23. #case "$1" in  
  24. #    start)  
  25. #    sed '3,6 s/#//g' /etc/dhcpd.conf >&/dev/null  
  26. #    service dhcpd restart >&/dev/null  
  27. #    echo "pxe has start [successful]"  
  28. #    ;;  
  29. #    stop)  
  30. #    sed '3,6 s/^/#/g' /etc/dhcpd.conf >&/dev/null  
  31. #    service dhcpd restart >&/dev/null  
  32. #    echo "pxe has stop [unsuccessful]"  
  33. #    exit  
  34. #esac  
  35. #EOF  
  36. #chmod 755 pxe   
  37. #mv pxe /etc/init.d/