'pxelinux'에 해당되는 글 2건

  1. 2009.02.25 A TFTPD32 server as RIS Server
  2. 2009.02.25 PXE 네트워크 부팅을 통한 OS 설치 자동화 (3)
2009. 2. 25. 13:33

A TFTPD32 server as RIS Server


This page was last updated on September 21, 2006
Written by R.Collewijn
German version written by MAK


In this short manual I descript a way to use the tftpd32 server option to create a RIS server and PXE (Preboot eXecution Environment) network boot options. I use for this PXE solution a notebook (I’m not always in the some network environment) with a GB network interface card (NIC). I use GB switch for multi cast ghosting.

With this configuration and an ISO of 322MB it’s possible to load/start a Windows XP Preinstalled Environment within 2:15 minutes flat (this include the ISO copy over the network 1:10 minutes). Because everything is running from memory the whole configuration (starting/loading programs) extremely fast

I use the following boot loader configurations;

  • MS-DOS loader for a Symantic Ghost Cast server.
  • Windows XPE Preinstalled Environment loader.
  • Windows XP Unattended installation.
  • Windows XP Lite Unattended Installation.
  • Windows 2003 Unattended installation.

In this short manual I describe only the “Windows XPE Preinstalled Environment loader” option. I have write for the other option only a Dutch version.


  • TFTPD32 This is also a DHCP server and you get it for free from tftpd32
  • PXELINUX boot loader from SYSLINUX by H. Peter Anvin
  • PE-Builder ISO build based on Windows 2003 with Service Pack 1 (SP1).

I use for this example an ISO file of 322MB. Majority of the hardware that we are using has a memory of 512MB. If I using the following calculation you can determine the amount of your ISO file.

Internal memory – memory required by AutoRamResizer – space for self-extracting (RAR) plugins.

So in my case 512MB – 128MB – 64MB = 320MB

NOTE insurer your self that the configuration file of AutoRamResizer is proper configured with the MB after the amount of memory (see example).

AutoRamResizer.exe -l 64mb -h 128mb -f 32mb

The following programs are included in this ISO;

  • BgInfo
  • Bios View
  • Boson Tools (IP Calc, Cisco Password Descrypter, Super Ping...)
  • DirSize
  • EasyRecovery (runs from ram as self-extracting (RAR) plugin)
  • ERD Commander 2003
  • FolderSize
  • FreshDiagnose
  • HD_Speed
  • IP-Tools
  • Mass Storage Drivers
  • NirSoft - Asterisk Logger v1.00
  • Office PE - XPE
  • Passware Kit Enterprise 6.1
  • Partition Magic v8.01 (runs from ram as self-extracting (RAR) plugin)
  • Sysinternals PsTools v2.1
  • Registry Editor PE v0.9c
  • Sala's Password Renew 1.1 Beta
  • XP Support Tools
  • Sysinternals Utilities v2.0
  • Total Commander (include following totalcmd plugins)
    • Environment Variables 
    • Events NT
    • Registry
    • Services
    • Startup Guard
    • TConsole
    • Imagine Image/Animation Viewer for Windows
    • LinkInfo
    • MEDIA Show`
    • NFO View
    • xBaseView Universal Database Viewer (and Editor)

Installation en configuration TFTPD32

Copy the file from the “tftpd32.xxx.zip” file into a directory/folder (in this case i use the C:\Project\TFTP folder) and start the program. Configured the DHCP server and TFTP server as follow.


Installation en configuration PXELINUX

Create in the root the TFTPD32 a new folder with the name “pxelinux.cfg” and create in this new directory a PXELINUX configuration "default" file with the following lines.

default example

DEFAULT      menu.c32
PROMPT       0
TIMEOUT      60

MENU TITLE PXE Boot menu by R.Collewijn

# Windows XPE Loader
  MENU       LABEL Windows XP^E Preinstalled Environment
  KERNEL     startrom.0

# MS-DOS Loader for GHOST Cast Server
  MENU       LABEL ^Ghost Cast (Image) server
  KERNEL     ghost/MEMDISK
  APPEND     initrd=ghost/floppy.img vga=1

# Windows XP Lite Loader
  MENU       LABEL Windows ^XP Lite Unattended Installation


Copy the following file from your “syslinux-x.xx.zip” into the root of your TFTPD32 server.

  • syslinux-3.11.zip\com32\modules\menu.c32
  • syslinux-3.11.zip\pxelinux.0

Installation en configuration PE-Builder

Copy the following file from your Windows 2003 SP1 source into the root (C:\Projects\TFTP) of the TFTP server

  • Ntdetect.com
  • Setupldr.ex_
  • Startrom.n1_

Expand the files with the underscore in the extension as follow;

Expand –r Setupldr.ex_
Expand –r Startrom.n1_

After you expand the underscore files you can delete the original ones. Rename also the Setupldr.exe into ntldr (without extension) and Startrom.n12 into Startrom.0. Create also a new file with the name winnt.sif in the root of the TFTP server folder. This new file has the following lines in it

winnt.sif example

BootDevice = "ramdisk(0)"
BootPath = "\i386\System32\"
OsLoadOptions = "/noguiboot /fastdetect /minint /rdexportascd /rdpath=<file name>.iso"

And at least, but the most imported one; copy your PE-Builder ISO file into the root of the FTFP server. Keeps the file name length (ISO) max 11 = 8+3 chars (level 1) a longer ISO filename can cause some problems.

Create Ghost boot floppy image

On many request, I have added a short manual how to “Create a Ghost boot floppy image” that you can also run from the TFTPD/RIS configuration. You can build a base floppy image on almost every version of Ghost, but on this moment I use the following version and settings (very straight forward)

After you have created the two boot floppies, you create an image file with the following modifications.

  • Create with WINImage (or other image program, but I preference and use in this short manual WINImage) an empty image file.

  • Copy the following Windows System files from a boot floppy (I have used a Windows XP boot floppy) into the root of this empty WINImage file.
  • Copy the following Ghost file en folders from the created Ghost Boot Disk Wizard into the WINImage file
GHOST\                Folder inclusive sub folders
NET\                  Folder inclusive sub folders
  • Change the following files and copy this files into the WINImage file


@echo off
Path A:\;A:\Ghost;A:\Net;
Prompt $p$g

Set TZ=GHO-01:00
Set DirCmd=/a/o:gn

call \net\doit.bat
Lh Mouse.Com
Echo Loading...
Ghost.Exe -fni -sure



Device=Himem.Sys /NumHandles=128 /TestMem:Off
Device=Emm386.Exe Noems

Device=\net\protman.dos /I:\net
LastDrive = Z
  • Update the NDIS drivers within the NET folder (A Broadcom NIC is very critical with new hardware).
  • If you have changed the NDIS driver you must also update the following rules from the comp.dat file.


0003             Number of supported NICs 
0003             Number of devices
14E4 1644 0001 : Broadcom NetXtreme B57XX Chipset                   $
14E4 1645 0001 : Broadcom NetXtreme B57XX Chipset                   $
14E4 1646 0001 : Broadcom NetXtreme B57XX Chipset                   $ 

First segment (14E4)        Vendor information
Second segment (1644)    Device information
Third  segment (0001)      Folder where the driver is stored.

See also the following short manual from me textmode drivers

  • Ensure your self the the boot sector of the WinImage file has the following properties en save the file.


Trackback 1 Comment 0
2009. 2. 25. 11:52

PXE 네트워크 부팅을 통한 OS 설치 자동화


PXE(Preboot Execution Environment)란 운영체제가 설치되어 있지 않는 원격지의 컴퓨터를 네트워크 도메인에 참가시키는 것만으로도 부팅을 시킬 수 있는 환경을 말한다. 말은 되게 어려워 보이는데 실제로는 아주 간단한 기능으로 동작을 한다. 

요즘에 출시되는 대부분의 메인보드들은 PXE를 지원한다. BIOS설정에서 찾아보면 PXE라 든지 Network on boot rom과 같은 옵션들이 보이는 보드들은 PXE를 지원하는 보드들이다. 이 기능을 활성화 한 다음 부트 오더에 가장 첫번째에 LAN을 두면 활성화 된다. 보드 별로 설정하는 방법이 상이 할 수 있으니 보드 메뉴얼을 참조 하여 PXE를 활성화 하도록 하자

PXE의 기본 동작을 보면 위와 같은 구성으로 되어있다. PXE는 기본적으로 클라이언트이기 때문에 서버가 필요하다. 서버에는 DHCP 서버와 tftp서버 그리고 초기 램디스크 이미지(initrd.img)와 커널 이미지(vmlinuz)가 있으면 모든 준비가 된다.

일단 서버의 설치는 나중에 보도록 하고 먼저 PXE의 코드에서 가장 먼저 실행되는 것은 DHCP 클라이언트이다. 서버로 부터 IP를 가져오기 위해 DHCP 리퀘스트를 전송하면 서버에서는 적당한 IP를 하나 던져 주는데 일반적인 DHCP 응답 메시지가 아니라 PXE를 위한 부가적인 옵션을 전송하도록 설정을 해야한다. 이렇게 DHCP 서버로 부터 IP를 할당 받은 후에는 tftp 프로토콜을 이용하여 초기 램디스크 이미지와 커널이미지를 서버로부터 다운로드 받게 된다.

tftp는 이름에서도 알 수 있듯이 ftp와 비슷하지만 전혀 다른 프로토콜이다. udp를 사용하는 파일전송 프로토콜로 파일전송과정이 아주 단순하고 데이터의 완전한 전송을 보장하지는 못한다. 하지만 아주 가볍고 프로토콜이 간단하기 때문에 커널이미지의 전송과 같은 업로드에 많이 사용된다. 이렇게 전송받은 초기 램디스크 이미지와 커널 이미지로 부팅을 하게 되는 것이다. 

글이 복잡해 보이지만 간단하게 IP 할당 받고 커널 이미지 전송받고 부팅한다. 라고 생각하면 된다.

1. 네트워크 구성
서버에는을 할당하고 L2 스위치(또는 허브)에는 리눅스를 설치할 클라이언트를 연결하였다. 이제 서버에 dhcpd와 tftp 서버를 올려서 PXE부팅이 가능하도록 설정하면 된다.

2. DHCPD 설정
linux에서의 DHCP 서버의 지원은 dhcpd가 하고 있다. dhcpd를 yum이나 rpm 또는 소스로 설치를 한다음 /etc/dhcpd.conf 파일을 수정한다.

ddns-update-style ad-hoc;

ignore client-updates;
default-lease-time 600;
max-lease-time 7200;
option routers;
option subnet-mask;

subnet netmask {

option root-path "/tftpboot";
filename "pxelinux.0";

설정을 잠깐 살펴보면 ~ 254 까지의 IP를 클라이언트에 할당하게 하고 디폴트 라우팅은로 주도록하였다. option root-path "/tftpboot 는 나중에 tftp 설치때 지정할 루트 디렉토리로 설정하였다. filename "pxelinux.0"은 SYSLINUX를 설치하면 볼 수 있는 파일로 네트워크 서버를 통한 부팅을 사용할 때 필수적인 파일으로 Intel PXE의 스펙에 맞는 네트워크 ROM이다.

# service dhcpd start

3. tftpd 설치
tftpd는 위에서도 잠깐 설명했듯이 ftp와는 전혀 다른 프로토콜이지만 하는 기능은 비슷하다. ftp에 비해 프로토콜이 단순하며 전송된 파일의 유효성을 검증하지는 못한다. udp 프로토콜을 사용하므로 실제로 전달 받은 파일에 에러가 있더라도 검출해내지 못한다는 뜻이다. 하지만 커널이미지와 같은 아주 작은 파일을 전송할 경우에 에러가 나는 경우는 거의 없다고 해도 무방할정도로 신뢰성이 보장되는 프로토콜이며 단순하고 가벼워서 임베디드 시스템에서 많이 사용되는 프로토콜이다.

배포판 리눅스에서는 보통 xinetd라는 인터넷 접속 관리 서비스와 많이 연계되어서 사용되어진다. xinetd는 접속 포트에 대해 접속 권한 제어와 같은 역할을 하는데 자세한 사항은 따로 찾아보도록 하자. 물론 tftpd를 standalone 방식으로 사용할 수 있기도 하지만 여기서는 xinetd에 연계하여 사용하는 방식으로 설명하겠다.

tftp를 설치한 후 /etc/xinetd.d 에 들어가면 xinetd가 관리하는 여러 접속 프로그램에 대한 설정 들이 있다. echo, time 서비스 등등 여러 포트에 대한 접속 제어 파일을 볼 수 있는데 여기에다 tftp에 대한 설정을 추가 하도록 하자.
service tftp
        socket_type             = dgram
        protocol                = udp
        wait                    = yes
        user                    = root
        server                  = /usr/sbin/in.tftpd
        server_args             = -s /tftpboot
        disable                 = no
        per_source              = 11
        cps                     = 100 2
        flags                   = IPv4

tftp라는 이름으로 파일을 생성하고 위와 같이 타이핑을 하도록 한다. in.tftpd는 xinetd를 사용하여 서비스를 시작할 때 사용되는 명령어이며 -s /tftpboot는 /tftpboot를 루트 디렉토리로 사용하겠다는 의미이다. disable 항목을 no로 넣으면 xinetd가 실행할 때 tftp 서비스를 실행시켜 준다.

# service xinetd start

NFS(Network File System) 서비스는 원격지의 PC가 지정한 디렉토리를 마운트하여 사용할 수 있도록 해주는 서비스입니다.

/etc/exports 파일을 수정합니다.

/nfs/fedora5 *(ro)

/nfs/fedora5 디렉토리를 *(모든 IP)에 대해서 ro(읽기 전용)으로 허용한다는 의미입니다.
/nfs/fedora5 디렉토리를 생성하고 fedora 미러 사이트에서 FC5 ISO 이미지를 다운로드 받아 복사합니다.

# service nfs start

4. pxelinux.0 및 램 디스크 이미지, 커널 이미지의 설정

위와 같이 파일들을 배치하도록한다.

pxelinux.0는 syslinux를 설치하면 /usr/lib/syslinux 디렉토리 및에서 찾아 볼 수 있다. 이 파일을 복사하여 /tftpboot/에 집어 넣도록한다.

# cp /usr/lib/syslinux/pxelinux.0 /tftpboot

램 디스크 이미지와 커널 이미지는 배포판 시디에 보면 /images/pxeboot/ 디렉토리에 initrd.img와 vmlinuz라는 파일이 있다 이 파일들이 각각 램 디스크 이미지와 커널 이미지이다. 이 파일을 복사하여 /tftpboot/배포판이름/ 에 집어 넣도록 하자.

그런 다음 pxelinux.cfg 디렉토리(파일이 아니다)를 생성하고 그 디렉토리에서 default라는 파일을 생성하도록 한다. PXE에서는 pxelinux.cfg에 있는 설정파일을 읽게 되는데 일치하는 설정이 없을 경우 마지막으로 default를 읽게 된다.

# mkdir /tftpboot/pxelinux.cfg

/tftpboot/pxelinux.cfg/default 파일을 생성한다.

default install
prompt 1
timeout 300

label install
        kernel vmlinuz
        append initrd=initrd.img

LABEL fedora5
        MENU LABEL fedora5
        kernel fedora5/vmlinuz
        append ksdevice=link load_ramdisk=1 initrd=fedora5/initrd.img network ks=nfs:
menu.c32를 이용하여 메뉴를 만들어 설치할 os나 설정등을 선택하도록 만들 수도 있지만 설명이 길어지므로 생략하도록 한다. 위의 append 옵션을보면 nfs를 사용하여 서버IP에 있는 kickstart 파일을 읽어오도록 설정하였다.

이렇게 설정을 완료하면된다. 마지막으로 nfs를 사용하여 OS 배포판의 이미지를 올리고 kickstart파일을 작성하여 자동으로 설치되도록 할 수 있다.

# cp /media/cdrom/images/pxeboot/vmlinuz /tftpboot
# cp /media/cdrom/images/pxeboot/initrd.img /tftpboot

- PXE Booting in Debian : http://wiki.kldp.org/wiki.php/PXEBootingInDebian/
- TFTP + PXE + syslinux + Fedora install

Trackback 0 Comment 3
  1. 구경꾼 2009.10.29 13:17 address edit & del reply

    프로젝트로 관련 과제를 하고 있는데, 기본 이해에 많은 도움이 되었습니다.
    웹에 자료는 영어투성이라-_- 보다가 질리겠더군요.

  2. 개태짱 2015.09.10 14:30 address edit & del reply

    pxelinux.0 부분 경로 맞나요?
    cp /usr/lib/syslinux/ -> lib이 아니라 /usr/share아닌지;