4.5. TFTP 네트워크 부팅에 필요한 파일 준비하기

LAN에 연결되어 있다면, 네트워크를 통해 TFTP를 사용해서 다른 컴퓨터에서 부팅할 수도 있습니다. 다른 컴퓨터에서 설치 시스템을 부팅하려고 한다면, 부팅 파일을 특정 위치에 복사해 놓고, 해당 컴퓨터의 부팅을 지원하도록 설정해 놓아야 합니다.

TFTP 서버를 설정해야 합니다. 그리고 많은 컴퓨터에서 DHCP 서버, 아니면 BOOTP 서버를 설정해야 합니다.

BOOTP는 컴퓨터에게 그 IP 주소 및 네트워크의 어디에서 부팅 이미지를 가져와야 하는지 알려주는 IP 프로토콜입니다. DHCP(Dynamic Host Configuration Protocol)는 더 유연하며, BOOTP와 호환되는 확장 기능입니다. 일부 시스템은 DHCP를 이용해야만 설정할 수 있습니다.

Trivial File Transfer Protocol은(TFTP) 부팅 이미지를 클라이언트에게 넘겨줄 때 사용합니다. 이론상 이 프로토콜을 사용한다면 어떤 플랫폼의 어떤 서버라도 사용할 수 있습니다. 여기서는 SunOS 4.x, SunOS 5.x(Solaris), 그리고 GNU/리눅스에서 사용하는 명령을 예로 듭니다.

[참고] 참고

데비안 GNU/리눅스 서버에서는 tftpd-hpa를 추천합니다. 이 프로그램은 syslinux 부트로더와 같은 개발자가 개발했으므로 문제를 일으킬 가능성이 적습니다. 좋은 대안으로는 atftpd가 있습니다.

4.5.1. DHCP 서버 준비하기

자유 소프트웨어 DHCP 서버의 하나로 ISC dhcpd가 있습니다. 데비안 GNU/리눅스에서는 isc-dhcp-server 패키지를 권장합니다. 다음은 간단한 설정 파일 예제입니다 (/etc/dhcp/dhcpd.conf 파일을 보십시오):

option domain-name "example.com";
option domain-name-servers ns1.example.com;
option subnet-mask 255.255.255.0;
default-lease-time 600;
max-lease-time 7200;
server-name "servername";

subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.200 192.168.1.253;
  option routers 192.168.1.1;
}

host clientname {
  filename "/tftpboot.img";
  server-name "servername";
  next-server servername;
  hardware ethernet 01:23:45:67:89:AB;
  fixed-address 192.168.1.90;
}

이 예제에서는, DHCP 서버, TFTP 서버, 네트워크 게이트웨이 역할을 모두 하는 servername이라는 서버가 있다고 가정합니다. domain-name 옵션도 바꾸고, 서버 이름과 클라이언트 하드웨어 주소도 바꿔야 합니다. filename 옵션은 TFTP로 가져오려는 파일의 이름입니다.

dhcpd 설정 파일을 편집한 다음에, /etc/init.d/isc-dhcp-server restart 명령으로 dhcpd를 다시 시작하십시오.

4.5.1.1. DHCP 설정에서 PXE 부팅하게 만들기

다음은 TFTP의 Pre-boot Execution Environment (PXE) 방식을 이용한 dhcp.conf의 예입니다.

option domain-name "example.com";

default-lease-time 600;
max-lease-time 7200;

allow booting;
allow bootp;

# 다음 부분은 여러분 경우에 맞춰 바꿔야 합니다
subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.200 192.168.1.253;
  option broadcast-address 192.168.1.255;
# 게이트웨이 주소입니다.
# (예를 들어 인터넷에 접근하는 방법에 따라 다를 수도 있습니다)
  option routers 192.168.1.1;
# 사용하려는 DNS
  option domain-name-servers 192.168.1.3;
}

group {
 next-server 192.168.1.3;
 host tftpclient {
# TFTP 클라이언트 하드웨어 주소
  hardware ethernet  00:10:DC:27:6C:15;
  filename "pxelinux.0";
 }
}

PXE 부팅의 경우, 커널 이미지가 아니라 클라이언트 파일 이름 pxelinux.0이 부트로더입니다. (아래의 4.5.4절. “TFTP 이미지를 적당한 위치에 놓기” 부분 참고)

컴퓨터가 부팅할 때 UEFI를 사용하는 경우, UEFI 컴퓨터에 적합한 부트로더를 지정해야 합니다. 예를 들어:

group {
  next-server 192.168.1.3;
  host tftpclient {
# tftp 클라이언트 하드웨어 주소
  hardware ethernet  00:10:DC:27:6C:15;
  filename "debian-installer/amd64/bootnetx64.efi";
 }
}

4.5.2. BOOTP 서버 준비하기

GNU/리눅스용 BOOTP 서버는 두 가지가 있습니다. 하나는 CMU bootpd이고,다른 프로그램은 실제로 DHCP서버인, ISC dhcpd가 있습니다. 이 프로그램은 bootpisc-dhcp-server라는 패키지로 포함되어 있습니다.

CMU bootpd를 사용하려면 먼저 /etc/inetd.conf 파일의 해당 라인의 주석을 제거(또는 추가)해야 합니다. 데비안 GNU/리눅스에서는 update-inetd --enable bootps 명령을 실행하고 이어 /etc/init.d/inetd reload 명령을 실행합니다. BOOTP 서버가 데비안을 실행하지 않는 경우, 문제의 줄은 다음과 같이 합니다:

 bootps  dgram  udp  wait  root  /usr/sbin/bootpd  bootpd -i -t 120

여기서 /etc/bootptab 파일을 만듭니다. 이 파일 형식은 오래전 BSD 방식의 printcap, termcap, disktab 파일처럼 친숙하면서도 알기 어려운 형식으로 되어 있습니다. 자세한 내용은 bootptab 메뉴얼 페이지를 보십시오. CMU bootpd 명령은 클라이언트의 하드웨어 (MAC) 주소를 미리 알아둬야 합니다. 다음은 /etc/bootptab의 예입니다:

client:\
  hd=/tftpboot:\
  bf=tftpboot.img:\
  ip=192.168.1.90:\
  sm=255.255.255.0:\
  sa=192.168.1.1:\
  ha=0123456789AB:

적어도 클라이언트의 하드웨어 주소를 지정하는 ha 옵션은 변경해야 합니다. bf 옵션은 TFTP로 클라이언트가 받게 될 파일을 지정합니다. 자세한 내용은 4.5.4절. “TFTP 이미지를 적당한 위치에 놓기” 부분을 참조하십시오.

반대로, ISC dhcpd 설정은 정말 쉽습니다. BOOTP 클라이언트를 DHCP 클라이언트의 일종의 특별한 케이스로 취급하기 때문입니다. 일부 아키텍쳐에서는 BOOTP로 부팅하게 하려면 복잡한 설정이 필요합니다. 그러한 아키텍처의 경우는 4.5.1절. “DHCP 서버 준비하기” 부분을 참고하십시오. 그러한 경우가 아니라면, /etc/dhcp/dhcpd.conf 파일에서 allow bootp를 클라이언트가 들어 있는 서브넷의 설정 부분에 집어 넣고, /etc/init.d/isc-dhcp-server restart 명령으로 dhcpd를 다시 시작하면 됩니다.

4.5.3. TFTP 서버 사용하기

이동 TFTP 서버를 준비하려면, 먼저 tftpd이 활성화되어 있는지 확인해야 합니다.

tftpd-hpa의 경우에 서비스가 실행 될 수 있는 2가지 방법이 있습니다. 그것은 시스템의 inetd 데몬에서 요구에 따라 시작하거나 독립 데몬으로 실행되도록 설정할 수 있습니다. 이러한 방법 중에 어떤 패키지를 다시 구성하여 설치할 때 사용되며 변경할 수 있습니다.

[참고] 참고

전통적으로 부팅 이미지를 저장하는 위치로 TFTP 서버는 /tftpboot 디렉터리를 사용합니다. 하지만, 데비안 GNU/리눅스 패키지는 Filesystem Hierarchy Standard에 맞추려고 다른 디렉터리를 사용합니다. 예를 들어, tftpd-hpa는 기본값으로 /srv/tftp를 사용합니다. 여기서 설명하는 설정 파일 예제에서는 이 점을 고려해서 적용하십시오.

데비안에서 사용할 수 있는 모든 in.tftpd 대체품은 기본적으로 시스템 로그에 TFTP 요청을 기록해야 합니다. 그 중에서는 -v 옵션을 사용하면 더 많이 기록합니다. 부팅 문제가 발생한 경우 이 로그 메시지를 확인해 보십시오. 오류의 원인을 파악하는데 좋은 출발점입니다.

4.5.4. TFTP 이미지를 적당한 위치에 놓기

그 다음에, 필요한 TFTP 부팅 이미지를 4.2.1절. “설치 파일을 찾을 위치”에 쓰여 있는 것처럼 tftpd 부팅 이미지 디렉터리에 복사해 놓으십시오. 이 파일에서, tftpd가 특정 클라이언트를 부팅할 때 사용하는 특정 파일로 링크를 만들어야 할 것입니다. 불행히도 그 파일의 이름은 TFTP 클라이언트가 결정하고, 어떤 표준도 없습니다.

PXE 부팅의 경우, 필요한 모든 것이 netboot/netboot.tar.gz 압축 안에 준비되어 있습니다. 이 압축을 tftpd 부팅 이미지 디렉터리에서 풀기만 하십시오. tftpd에 부팅할 파일 이름으로 pxelinux.0을 넘기도록 DHCP 서버에 설정하십시오. UEFI 컴퓨터의 경우, 적절한 EFI 부팅 이미지 이름을 (예를 들어 /debian-installer/amd64/bootnetx64.efi) 넘겨야 합니다.