2012ǯ06��06��

iPXE ��Ƴ��������ǰ�� blog ��񤤤Ƥߤ����ɡ������ȥ뤬Ǻ�ޤ����Τǡ����ε����Υ����ȥ��罸�桪

¤Ï¤Æ¤Ê¥Ö¥Ã¥¯¥Þ¡¼¥¯¤ËÅÐÏ¿

PXE��Ʊ���ͥåȥ���֡��ȥե����०�����ΰ�ĤǤ���iPXE(gPXE)��±��Ѥ˼������Ƥߤ��Τǡ������iPXE(gPXE)��Ҳ𤷤Ƥ��������Ȼפ��ޤ���

(��ʬ�ν񤤤������ȥ�ϥ���Ф����줿�Τǡ��罸���뤳�Ȥˤ��Ƥߤޤ���(^^;;�������ɤ�Ǥ��������ơ��⤷���褤�����ȥ��פ��Ĥ����顢���ҡ������ȤˤǤ⤪�ꤤ���ޤ�m(_ _)m������Υ����ȥ�˻Ȥ碌�Ƥ�����������(^^)

  • PXE�Ȥϡ��ͥåȥ���֡��ȤΤ���λ��Ȥߤ�1�ġ�NIC��Υե�å���ROM �˽ñ¤­¹ï¿½ï¿½Þ¤ï¿½Æ¤ï¿½ï¿½ë¡£ï¿½Í¥Ã¥È¥ï¡¼ï¿½ï¿½ï¿½Ö¡ï¿½ï¿½È¤ï¿½É¬ï¿½×¤Ê¥Õ¥ï¿½ï¿½ï¿½ï¿½ï¿½Î¼ï¿½ï¿½ï¿½ï¿½Ë¤Ï¡ï¿½DHCP��TFTP ���Ѥ���
  • iPXE(gPXE)�Ȥϡ�PXE���ĥ���������ץ󥽡����ʥͥåȥ���֡��ȥե����०����/������

iPXE(gPXE)�ˤϡ������Τ褦����ħ������ޤ���

  • MAC���ɥ쥹��¾�ˤ⥵���Ф�DMI���������Ǥ���
  • ���ޥ�ɤ��Ѱդ���Ƥ��Ƥ��Υ��ޥ�ɤ��Ȥ��������ץȤ����Ѳ�ǽ
  • http�ǤΥꥯ�����Ȥò¥µ¥Ý¡ï¿½ï¿½È¤ï¿½ï¿½Æ¤ï¿½ï¿½ï¿½

�Ĥޤꡦ����

  • DMI���������Ǥ���Ȥ������Ȥϡ����Υ����Ф��ɤ�ʵ���ʤΤ�ʬ����
  • ������ץȤ������������������Ȥä��ꥯ�����Ȥò¤¹¤ë¤³ï¿½È¤ï¿½ï¿½Ç¤ï¿½ï¿½ï¿½ï¿½ï¿½
  • http+cgi�ǡ��ꥯ�����Ȥ˱�����ưŪ�˥쥹�ݥ󥹤��֤����Ȥ��Ǥ�����

�ɤ��Ǥ��礦����Ƥߤ����ʤ�ޤ��󤫡�
�ǤϤǤϡ����줫�顢�ºݤ�iPXE�򿨤äƤ����Ȥ��ޤ��礦��

iPXE(gPXE)�ξҲ�

gPXE�Τۤ����褯�Τ��Ƥ��뤫�⤷��ޤ��󤬡�gPXE�γ�ȯ���ߤޤꡢ���θ���Ȥ��ƻϤޤä��ץ��������Ȥ�iPXE�Ȥʤ�ޤ���

����ϡ�PXE��Ʊ����NIC��ROM�˾Ƥ��ƻ��Ѥ���褦�Ǥ�������������ȡ������餢��PXE�������ä��Ƥ��ޤ��ޤ����������桢��ɴ��Υ����Ф��Ѥ��Ƥ�����ˡ����٤Ƥ�NIC��Ŭ�Ѥ���Ȥ����顢�����󤯤ʤꤽ���Ǥ����������ʤ��顢�褯�ߤƤߤ�ȡ�PXE����iPXE�������������ɤǤ���Ȥ���ޤ���������ˡ��Ȥ��С�NIC��ROM�˼��ä��뤳�Ȥʤ���iPXE�����Ѥ��뤳�Ȥ��Ǥ������Ǥ���

iPXE��ºݤ˵�ư���Ƥߤơ����äƤߤ褦

PXE���������������ɤ�����ˡ��iPXE���˵�ư�����Ƥߤޤ���
�����Ǥϡ�isc-dhcpd,tftpd,thttpd(cgi�ϡ�bash������ץ�)����Ѥ�������ϡ��ʲ��Τ褦�ˤʤäƤ���Ȥ��ޤ���
(�����Ǥϡ�iPXE�ʳ��κ٤�������˴ؤ��Ƥϡ��䰦���ޤ�)

��tftpd,thttpd�����Ф�IP���ɥ쥹
192.168.0.1

��tftpd,thttpd�롼�ȥǥ��쥯�ȥ�
/tftp/

��thttpd��cgi�ǥ��쥯�ȥ�
/tftp/cgi-bin/

��iPXE��Ϣ�ե�����γ�Ǽ�ǥ��쥯�ȥ�
/tftp/iPXE/

�ޤ��ϡ�PXE��������������ѤΥХ��ʥ�Ǥ���undionly.kpxe��ʲ��Υڡ�����Υ�󥯤���DL����/tftp/iPXE/undionly.kpxe����¸���ޤ���

http://ipxe.org/howto/chainloading

�嵭�ڡ����Υ����˾Ҳ𤵤�Ƥ���褦�ˡ�DHCP������ե�����˰ʲ��Τ褦�˵��Ҥ��ɲä��ޤ���

  if exists user-class and option user-class = "iPXE" {
    filename "http://192.168.0.1/iPXE/boot.ipxe";
  } else {
    filename "iPXE/undionly.kpxe";
  }
  next-server 192.168.0.1;

filename���ͤ�iPXE����Υꥯ�����Ȥˤ�iPXE�ε�ư�ѥ�����ץ�(boot.ipxe)���֤���iPXE�ʳ��Υꥯ�����Ȥˤ�iPXE������ɤ��뤿���undionly.kpxe���֤��褦�ˤ��Ƥ��ޤ���
����ˤ�ꡢ�ʲ��Τ褦��ή��Ȥʤ�ޤ���
PXE��ư
��
iPXE(undionly.kpxe)��������ƥ�����
��
iPXE��ư
��
��ư�ѥ�����ץ�(boot.ipxe)��������ƥ�����
��
boot.ipxe�����Ƥ�¹�

/tftp/iPXE/boot.ipxe�ϡ��ʲ��Τ褦�˵��Ҥ��Ƥ����ޤ���

#!ipxe
imgfree
chain http://${next-server}/cgi-bin/boot_ipxe.cgi?type=${product:uristring}&mac=${mac}

boot.ipxe����Ȥ������ϤȤꤢ������ö�����Ȥ��ơ��ºݤ˥ޥ����PXE�֡��Ȥ��Ƥߤ�ȡ��ʲ��Τ褦�ˤʤ�ޤ���

Intel(R) Boot Agent GE v1.2.40                                                  
Copyright (C) 1997-2006, Intel Corporation                                      
                                                                                
CLIENT MAC ADDR: XX XX XX XX XX XX  GUID: xxxxxxxxxxxxxxxxxxxxxxxxxxx  
CLIENT IP: 192.168.0.xx  MASK: 255.255.255.0  DHCP IP: 192.168.0.1             
GATEWAY IP: 192.168.0.xx                                                       
PXE->EB: !PXE at 97CA:0070, entry point at 97CA:0106                            
         UNDI code segment 97CA:3F20, data segment 919C:62E0 (582-623kB)        
         UNDI device is PCI 07:00.0, type DIX+802.3                             
         582kB free base memory after PXE unload                                
iPXE initialising devices...ok                                                  

                                                                                
iPXE 1.0.0+ -- Open Source Network Boot Firmware -- http://ipxe.org             
Features: HTTP iSCSI DNS TFTP AoE bzImage ELF MBOOT PXE PXEXT Menu      
                                                                                
Press Ctrl-B for the iPXE command line...

iPXE��������������ɵ�ư�����ȡ���ưŪ��boot.ipxe��������Ƽ¹ԤȤʤ�ΤǤ��������󥿥饯�ƥ��֥⡼�ɤ�����ȡ���ư�¹ԤϹԤ鷺����ư�ǥ��ޥ�����Ϥ򤹤뤳�Ȥ��Ф���褦�ˤʤ�ޤ���"Press Ctrl-B for the iPXE command line..."��ɽ�������줿�顢����������Ctrl+B�����Ϥ��Ƥߤޤ��礦������ȡ������Υץ���ץȤ�ɽ�����졢���ޥ�ɤ����Ϥ��Ǥ���褦�ˤʤ�ޤ����Ǥϡ���ˡ������Ĥ����ޥ�ɤ����Ϥ��Ƥߤޤ��礦��

iPXE> 
# �ޥå����ɥ쥹��ɽ��
iPXE> show mac
net0/mac:hex = xx:xx:xx:xx:xx:xx
# DHCP�ˤ�IP���ɥ쥹�����
iPXE> dhcp
DHCP (net0 xx:xx:xx:xx:xx:xx)... ok
# IP���ɥ쥹��ɽ��
iPXE> show ip
net0.dhcp/ip:ipv4 = 192.168.0.xx
# DHCP�����ꤵ�줿filename��ɽ��
iPXE> show filename
net0.dhcp/filename:string = http://192.168.0.1/iPXE/boot.ipxe
# DHCP�����ꤵ�줿next-server��ɽ��
iPXE> show next-server                                                          
net0.dhcp/next-server:ipv4 = 192.168.0.1
# �����Фε�������ɽ��
iPXE> show product
smbios/product:string = Express5800/i120Ra-e1 [N8100-1482Y]
# url���󥳡��ɤ���ɽ��
iPXE> show product:uristring
smbios/product:uristring = Express5800%2Fi120Ra-e1%20%5BN8100-1482Y%5D

�����Фε�������̵�������Ǥ��Ƥ���褦�Ǥ������ϡ�boot.ipxe��http��ͳ�Ǽ����Ǥ��뤫�ɤ�����Ƥߤޤ���

iPXE> imgfetch ${filename}
http://192.168.0.1/iPXE/boot.ipxe.... ok
iPXE> imgstat
boot.ipxe : 102 bytes

̵���������Ǥ��Ƥ���褦�Ǥ��Τǡ�boot.ipxe�����Ƥ��ư�ǻ�Ƥߤޤ��礦�������Ǥϡ��ޤ���cgi��������Ƥ��ʤ��Τǡ����顼�Ȥʤ�ޤ������ɤΤ褦�˥�����������뤫�γ�ǧ���Ǥ��ޤ���

iPXE> imgfetch http://${next-server}/cgi-bin/boot_ipxe.cgi?type=${product:uristring}&mac=${mac}
http://192.168.0.1/cgi-bin/boo_ipxe.cgi?type=Express5800%2Fi120Ra-e1%20%5BN8100-1482Y%5D&mac=xx%3Axx%3Axx%3Axx%3Axx%3Axx... No such file or directory (http://ipxe.org/2d0c613b)

��������MAC���ɥ쥹�����������http�ꥯ�����Ȥ򤷤Ƥ��뤳�Ȥ���ǧ�Ǥ��ޤ�����
�⤦��ʬ����Τ褦��boot.ipxe�ϡ���������MAC���ɥ쥹��������������boot_ipxe.cgi�˥�����ʸ����Ȥ�����Ϳ����á�������Υ쥹�ݥ󥹤����Ƥ�¹Ԥ��륹����ץȤȤ������Ȥˤʤ�ޤ���(${product}�Ǥ⡢��ưŪ��url���󥳡��ɤ����褦�Ǥ�����ǰ�Τ��ᡢuristring�Ǥν��ϻ���򤷤Ƥ��ޤ���)
�Ǥϡ������е�ư�Ѥδ�ñ��iPXE������ץȤ򡢵�������MAC���ɥ쥹�򸵤�boot_ipxe.cgi��ưŪ���������ơ��ºݤ˥����Ф�ư�����Ƥߤޤ��礦��

Linux��ư���Ƥߤ�

MAC���ɥ쥹�ȵ������ˤ������äơ�initrd��kernel����ꤷ�Ƶ�ư��������δ�ñ��boot_ipxe.cgi���Ѱդ��Ƥߤޤ���
���ʤߤˡ�iPXE�Ǥϳ�ǧ���Ƥ��ޤ��󤬡�gPXE�Ǥϡ�Content-Length����ꤷ�ʤ��Ȥ��ޤ�ư��ʤ��ä����ᡢ���ꤹ��褦�ˤ��Ƥ��ޤ���

#!/bin/bash

# ������ʸ����ϡ�$QUERY_STRING�˳�Ǽ����Ƥ���
# �ѿ�type,mac�򥯥���ʸ���󤫤���������
for q in $(echo ${QUERY_STRING} | tr "&" " "); do
  eval $q
done

case $type in
  *Express*)
    initrd_file=initrd.gz
    ;;
esac

case $mac in
  *xx%3Axx%3Axx%3Axx%3Axx%3Axx*)
    kernel_file=vmlinuz
    ;;
esac

body=$(#!ipxe
initrd http://\${next-server}/${initrd_file}
kernel http://\${next-server}/${kernel_file}
boot
)

echo "Content-type: text/plain"
echo "Connection: close"
echo "Content-Length: $(echo -e "${body}" | wc -c)"
echo ""
echo -e "${body}"

wget�ʤɤǡ���ۤɤ�iPXE�����Ϥ����ѥ���á���Ƴ�ǧ���Ƥߤ�ȡ��ʲ��Τ褦�ʽ��ϤȤʤ�ޤ���

$ wget -q -O - "http://192.168.0.1/cgi-bin/boo_ipxe.cgi?type=Express5800%2Fi120Ra-e1%20%5BN8100-1482Y%5D&mac=xx%3Axx%3Axx%3Axx%3Axx%3Axx"
#!ipxe
initrd http://${next-server}/initrd.gz
kernel http://${next-server}/vmlinuz
boot

�Ǥϡ�/tftp/�ʲ���Ŭ����vmlinuz��initrd.gz��������ơ��ޥ����Ƶ�ư�����Ƥߤޤ���

Intel(R) Boot Agent GE v1.2.40                                                  
Copyright (C) 1997-2006, Intel Corporation                                      
                                                                                
CLIENT MAC ADDR: XX XX XX XX XX XX  GUID: xxxxxxxxxxxxxxxxxxxxxxxxxxx  
CLIENT IP: 192.168.0.xx  MASK: 255.255.255.0  DHCP IP: 192.168.0.1             
GATEWAY IP: 192.168.0.xx                                                       
PXE->EB: !PXE at 97CA:0070, entry point at 97CA:0106                            
         UNDI code segment 97CA:3F20, data segment 919C:62E0 (582-623kB)        
         UNDI device is PCI 07:00.0, type DIX+802.3                             
         582kB free base memory after PXE unload                                
iPXE initialising devices...ok                                                  

                                                                                
iPXE 1.0.0+ -- Open Source Network Boot Firmware -- http://ipxe.org             
Features: HTTP iSCSI DNS TFTP AoE bzImage ELF MBOOT PXE PXEXT Menu 

net0: xx:xx:xx:xx:xx:xx using undionly on UNDI-PCI07:00.0 (open)                
DHCP (net0 xx:xx:xx:xx:xx:xx)... ok                                             
net0: 192.168.0.xx/255.255.255.0 gw 192.168.0.xx                            
Next server: 192.168.0.1                                                     
Filename: http://192.168.0.1/iPXE/boot.ipxe                         
http://192.168.0.1/iPXE/boot.ipxe... ok                             
http://192.168.0.1/cgi-bin/boot_ipxe.cgi?type=type=Express5800%2Fi120Ra-e1%20%5BN8100-1482Y%5D&mac=xx%3Axx%3Axx%3Axx%3Axx%3Axx...ok
http://192.168.0.1/initrd.gz... ok
http://192.168.0.1/vmlinuz... ok
[    0.000000] Initializing cgroup subsys cpuset                                                    
[    0.000000] Initializing cgroup subsys cpu                                  
[    0.000000] Linux version 3.0.21 .....
....
....
....

�����ͥ뤬�����ɤ��졢̵����ư�Ǥ����褦�Ǥ���

�ºݤα��ѤǻȤäƤߤ�Ȥ���ȡ�����

DSAS�Ǥϡ��ۤȤ�ɤΥ����Ф�PXE�֡���+PXELINUX�����Ѥ��ƥǥ������쥹�����ФȤ��Ƶ�ư�����褦�ˤʤäƤ��ޤ���
�ޤ�����⡼�Ȥ���Υ����д�����IPMI�����Ѥ��Ƥ��ꡢSOL(Serial over Lan)�б����ꥢ��ݡ��Ȥ�PXELINUX�ε�ư����ե�����ˤƵ��Ҥ��뤳�Ȥˤ�ꡢIPMI��SOL��ͳ�ˤ�PXELINUX�ε�ư��˥塼��ɽ��/�Խ���Linux�ε�ư��å�������ɽ�����Ǥ���褦�ˤ��Ƥ��ޤ���

iPXE�ϡ��ȼ���˥塼�������ǽ�ʤΤǤ�������ǰ�ʤ��顢PXELINUX��GRUB�Τ褦�ˡ���ư���˥��󥿥饯�ƥ��֤��Խ����뤳�ȤϽ���ʤ��褦�Ǥ���
�Ǥ�����PXELINUX��pxelinux.0��SYSLINUX��com32������ɤ��Ƽ¹Ԥ��뤳�Ȥ��Ǥ��ޤ�(com32�˴ؤ��Ƥϡ�SYSLINUX��ver4.xx��com32�ե������ľ�ܼ¹ԤϤǤ�����ver3.86�ʲ��Τ�Τ���Ѥ���ɬ�פ�����ޤ�)��
�����ǡ�pxelinux.0��menu.c32(com32�ե�������Ѱդ���Ƥ����˥塼�ѥե�����)�����Ѥ������Υ�˥塼�����iPXE�Ǽ����Ǥ�����󤫤�ưŪ����������С������е���ˤ�ä�Ŭ�ڤʵ�ư�����ͥ�ѥ�᡼������ꤹ�뤳�Ȥ��Ǥ������Ǥ����ޤ�����ư���˥��󥿥饯�ƥ��֤˥ѥ�᡼�����Խ�����Ȥ��ä����Ȥ⤤�������Ǥ���

���ơ�����ϡ������ޤǤȤ��ơ�����Ǥ�menu.c32�Υ�˥塼��ǽ��iPXE�������Ѥ����ꡢIPMI SOL��ͳ��ɽ�������ꤹ�����Ҳ�Ǥ�����ȻפäƤ��ޤ���

klab_gijutsu2 at 17:45��Comments(0)��TrackBack(0)������ | tool

�ȥ�å��Хå�URL

���ε����˥����Ȥ���

̾��:
URL:
  ����òµ­²ï¿½: ɾ��: ��    ��
 
 
 
Blog�⸡��
�ǿ�����
Archives
���Υ֥����ˤĤ���
DSAS�Ȥϡ�KLab �����ۤ����Ѥ��Ƥ��륳��ƥ�ĥ����ӥ��Ѥ�Linux�١����Υ���ե�Ǥ�������5����Υǡ������󥿤ˤƹ��ۤ������Ѥ��Ƥ��ޤ������桹��DSAS����Ȥ��䤹�����������ˡ������Ƥ����ϤDZ��ѤǤ��뤳�Ȥ��ܻؤ��ơ��������ɤ˶Ф���Ǥ��ޤ���
���Υ֥����Ǥϡ������ DSAS �ǻȤäƤ��뵻�ѤξҲ�䡢�¸����Ƥߤ���̤���𡢥ȥ�֥�˴������ޤ줿���ηи��̤ʤɡ���������������������򿥤�ޤ��ƾҲ𤷤Ƥ��������Ȼפ��ޤ���
�ǿ�������
<%==comments[n].author%>
<% } %>