iPXE ��Ƴ��������ǰ�� blog ��񤤤Ƥߤ����ɡ������ȥ뤬Ǻ�ޤ����Τǡ����ε����Υ����ȥ��罸�桪
(��ʬ�ν񤤤������ȥ�ϥ���Ф����줿�Τǡ��罸���뤳�Ȥˤ��Ƥߤޤ���(^^;;�������ɤ�Ǥ��������ơ��⤷���褤�����ȥ��פ��Ĥ����顢���ҡ������ȤˤǤ⤪�ꤤ���ޤ�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�Ȥʤ�ޤ���
- iPXE: http://ipxe.org/
- gPXE: http://etherboot.org/wiki/start
����ϡ�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��ͳ��ɽ�������ꤹ�����Ҳ�Ǥ�����ȻפäƤ��ޤ���