QEMU로 PXE 부트 테스트하기

feanor의 이미지

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 홈페이지로 갑니다.

http://rom-o-matic.net/

최신 버전을 선택하고, 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로 테스트해보거나 하시면 됩니다.

댓글

feanor의 이미지

데비안 사지의 부트 이미지는 아래 주소나, 다른 데비안 미러의 같은 장소에서 받을 수 있습니다.
http://ftp.kaist.ac.kr/pub/debian/dists/sarge/main/installer-i386/current/images/netboot/

Hyun의 이미지

노트북에 cd랑 usb가 안되어 오늘 PXE를 써 보았는데... 재미있더군요.. :)

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.