QEMU로 PXE 부트 테스트하기
QEMU로 PXE 부트를 테스트하는 과정을 적어보았습니다. 인터넷에 여기저기 문서가 있는데, 무슨 소린지 잘 모르겠어서 시행착오를 거쳐 가며 했습니다. 하고 나니 별로 복잡하지 않습니다.
2007-02-05: QEMU 0.9 버전부터 Etherboot 부트 롬이 내장되어 -boot n 옵션만 주어 PXE 부팅을 할 수 있게 되었습니다.
데비안 unstable입니다.
1. 필요한 패키지를 설치합니다. DHCP 서버는 dnsmasq, TFTP 서버는 atftpd를 사용하겠습니다. 이 둘을 선택한 이유는 환경 설정의 간편함 때문인데, 다른 서버가 익숙하시면 그 서버로 하시면 됩니다.
apt-get install qemu dnsmasq atftpd
syslinux에는 PXE 부트 로더가 들어 있고, uml-utilities에는 TUN/TAP 네트워크 장치를 만드는 데 사용할 tunctl 유틸리티가 들어 있습니다.
apt-get install syslinux uml-utilities
2. QEMU는 NE2000, Realtek 8139 등의 네트워크 카드를 에뮬레이트하는데, 이들 카드에는 부트 롬이 내장되어 있지 않습니다. 그래서 Etherboot를 사용합니다.
ROM-o-matic 홈페이지로 갑니다.
최신 버전을 선택하고, NIC는 rtl8139:rtl8139, ROM 포맷은 ISO bootable image without legacy floppy emulation으로 합니다. Get ROM을 누르면 128 KB밖에 안 하는 ISO 파일이 다운로드되는데, 파일 이름은 eb-5.4.2-rtl8139.iso 등으로 되어 있습니다.
Realtek이 아닌 QEMU의 다른 네트워크 카드 에뮬레이션을 사용할 수도 있겠습니다. 테스트해보지는 않았습니다. (테스트하셨으면 답글 부탁드립니다.)
3. TFTP 루트 디렉토리를 구성합니다. 데비안의 atftpd 패키지는 기본값으로 inetd로 동작하고, 루트 디렉토리는 /tftpboot를 사용하게 되어 있습니다. 대몬으로 동작하게 하려면 /etc/default/atftpd에서, 루트 디렉토리를 바꾸려면 같은 장소나 inetd.conf에서 바꿀 수 있습니다.
루트 디렉토리를 만들고, PXE 부트 로더를 복사합니다.
mkdir /tftpboot
cp /usr/lib/syslinux/pxelinux.0 /tftpboot
PXE용 부트 이미지를 다운받습니다. 저는 페도라 코어 6를 사용했습니다. KAIST FTP에서 페도라 미러를 하고 있으므로, 아래 주소에서 다운받을 수 있습니다.
http://ftp.kaist.ac.kr/pub/fedora/linux/core/6/i386/os/images/pxeboot/
cd /tftpboot
mkdir fedora
cd fedora
wget .../vmlinuz
wget .../initrd.img
PXELINUX를 설정합니다. 설정 파일의 형식은 LILO와 비슷합니다.
cd /tftpboot
mkdir pxelinux.cfg
cd pxelinux.cfg
vi default
PROMPT 1 LABEL fedora KERNEL fedora/vmlinuz APPEND initrd=fedora/initrd.img
4. PXE를 위해 DHCP를 구성합니다. dnsmasq의 각종 설정은 man 페이지에 자세하게 설명되어 있지만, PXE를 위해 필요한 것은 많지 않습니다.
설정하기 전에, QEMU 게스트들이 사용할 네트워크를 결정해야 합니다. RFC에서 예약된 10.x, 172.x, 192.x 대역 중 하나를 선택하면 됩니다. 여기서는 10.0.0.1을 사용하겠습니다.
listen-address=10.0.0.1 dhcp-range=10.0.0.51,10.0.0.100,1h dhcp-boot=/tftpboot/pxelinux.0
DHCP 주소 범위를 51번부터 100번까지로 하고, 리즈 시간은 1시간, 부트 이미지는 PXELINUX를 가리키게 합니다. 이것이 전부입니다.
5. TUN/TAP 네트워크 장치를 설정합니다. 일단 모듈을 올려야 합니다. 그리고 나서 tunctl로 네트워크 인터페이스를 만듭니다. 그리고 네트워크 주소를 설정합니다.
modprobe tun
tunctl -u tinuviel -t tap0
ifconfig tap0 10.0.0.1
6. 이제 거의 다 되었습니다. DHCP 서버를 동작시키고, 로그 파일을 tail로 엽니다. syslog 설정을 변경한 경우에는 daemon facility의 로그가 가는 곳을 보면 됩니다.
tail -f /var/log/daemon.log
/etc/init.d/dnsmasq start
dnsmasq를 시작하면 다음과 같은 로그 메시지를 볼 수 있습니다.
dnsmasq[1613]: started, version 2.35 cachesize 150 dnsmasq[1613]: compile time options: IPv6 GNU-getopt no-ISC-leasefile DBus I18N dnsmasq[1613]: DHCP, IP range 10.0.0.51 -- 10.0.0.100, lease time 1h dnsmasq[1613]: reading /etc/resolv.conf dnsmasq[1613]: using nameserver 211.104.100.5#53 dnsmasq[1613]: read /etc/hosts - 9 addresses
QEMU 게스트를 위한 디스크를 만들고 QEMU PXE 부트를 시작합니다.
qemu-img create -f vmdk fedora.vmdk 2G
qemu -boot d -cdrom eb-5.4.2-rtl8139.iso -net nic,model=rtl8139 -net tap,ifname=tap0 -hda fedora.vmdk
dnsmasq[1613]: DHCPDISCOVER(tap0) 52:54:00:12:34:56 dnsmasq[1613]: DHCPOFFER(tap0) 10.0.0.97 52:54:00:12:34:56 dnsmasq[1613]: DHCPREQUEST(tap0) 10.0.0.97 52:54:00:12:34:56 dnsmasq[1613]: DHCPACK(tap0) 10.0.0.97 52:54:00:12:34:56 in.tftpd[1646]: connect from 10.0.0.97 (10.0.0.97) atftpd[1646]: Advanced Trivial FTP server started (0.7) atftpd[1646]: Serving /tftpboot/pxelinux.cfg/default to 10.0.0.97:57098
모든 것이 잘 되었다면 QEMU 스크린에 boot: 프롬프트가 보입니다. fedora를 입력합니다.
atftpd[1646]: Serving /tftpboot/fedora/vmlinuz to 10.0.0.97:57099 atftpd[1646]: Serving /tftpboot/fedora/initrd.img to 10.0.0.97:57100
조금 기다리면 아나콘다 인스톨러가 시작됩니다. 이제 PXELINUX 설정파일을 수정해서 Kickstart를 하거나, 페도라가 아닌 다른 리눅스 배포판을 PXE로 테스트해보거나 하시면 됩니다.
댓글
데비안 부트 이미지
데비안 사지의 부트 이미지는 아래 주소나, 다른 데비안 미러의 같은 장소에서 받을 수 있습니다.
http://ftp.kaist.ac.kr/pub/debian/dists/sarge/main/installer-i386/current/images/netboot/
노트북에 cd랑 usb가
노트북에 cd랑 usb가 안되어 오늘 PXE를 써 보았는데... 재미있더군요.. :)
댓글 달기