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

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

TFTP 서버를 설정해야 합니다. 그리고 많은 기계에서 BOOTP 서버 아니면 RARP 서버, 아니면 DHCP 서버를 설정해야 합니다.

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

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

4.4.1. RARP 서버 준비하기

RARP를 설정하려면, 설치하려는 클라언트 컴퓨터의 이더넷 주소를 (다른 말로 MAC 주소) 알아야 합니다. 이 정보를 모른다면, OpenPROM 부팅 메세지에서 보고 알아낼 수도 있고, OpenBoot .enet-addr 명령을 사용할 수도 있고, 아니면 응급 복구” 모드로 부팅해서 (예를 들어 응급 복구 플로피로) /sbin/ifconfig eth0 명령을 이용할 수 있습니다.

리눅스 2.2.x 커널을 사용하는 RARP 서버 시스템에서는, 커널의 RARP 테이블을 조정해야 합니다. 그렇게 하려면 다음 명령을 실행하십시오:

# /sbin/rarp -s 
client-hostname
client-enet-addr

# /usr/sbin/arp -s 
client-ip
client-enet-addr

만약 다음과 같은 에러가 발생하면:

SIOCSRARP: Invalid argument

그러면 RARP 커널 모듈을 읽어들이거나 RARP를 지원하도록 커널을 다시 컴파일해야 할 겁니다. modprobe rarp 명령을 실행하고 rarp 명령을 실행해 보십시오.

리눅스 2.4.x 커널을 사용하는 RARP 서버 시스템에서는, RARP 모듈이 없는 대신 rarpd 프로그램을 사용해야 합니다. 그 다음 과정은 SunOS에서 사용하는 방법과 비슷합니다.

SunOS에서는, 클라이언트의 이더넷 하드웨어 주소가 “ethers” 데이터베이스 (/etc/ethers 파일이나 NIS/NIS+를 통해) 및 “hosts” 데이터베이스에 들어 있어야 합니다. 그 다음에 RARP 데몬을 시작합니다. SunOS 4에서는, 다음 명령을 (루트로) 실행하십시오: /usr/etc/rarpd -a. SunOS 5에서는 /usr/sbin/rarpd -a 명령을 사용하십시오.

4.4.2. BOOTP 서버 준비하기

GNU/Linux용 BOOTP 서버는 두 가지가 있습니다. CMU bootpd가 있고, 그 외의 프로그램은 실제로 DHCP서버인, ISC dhcpd가 있습니다. ISC dhcpd는 Debian GNU/Linux의 bootpdhcp 꾸러미에 들어 있습니다.

CMU bootpd를 사용하려면, /etc/inetd.conf에서 관련된 줄의 코멘트를 없애거나 한 줄을 추가해야 합니다. Debian GNU/Linux에선 update-inetd --enable bootps를 실행한 다음 적용하려면 /etc/init.d/inetd reload 명령을 실행합니다. 그 줄은 다음과 같은 모양입니다:

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

이제 /etc/bootptab 파일을 만들어야 합니다. 이 파일은 과거의 BSD printcap, termcap, disktab 파일과 같이 익숙하면서도 의미를 알기 어려운 형식으로 되어 있습니다. 더 자세한 정보는 bootptab 매뉴얼 페이지를 참고하십시오. CMU bootpd에서는, 클라이언트의 하드웨어 (MAC) 주소를 알아야 합니다. 다음은 /etc/bootptab의 예입니다:

클라이언트:\
  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.4.5절. “TFTP 이미지를 적당한 위치에 옮기기” 부분을 참고하십시오.

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

4.4.3. DHCP 서버 설정하기

자유 소프트웨어 DHCP 서버로 ISC dhcpd가 있습니다. Debian GNU/Linux에서 ISC dhcpddhcp 꾸러미 안에 들어 있습니다. 다음은 간단한 설정 파일 예제입니다 (/etc/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/tftpboot.img";
  server-name "servername";
  next-server servername;
  hardware ethernet 01:23:45:67:89:AB;
  fixed-address 192.168.1.90;
}

주의: 최근의 (권장) dhcp3 꾸러미는 /etc/dhcp3/dhcpd.conf 파일을 사용합니다.

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

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

4.4.4. TFTP Server 사용하기

TFTP 서버를 준비하려면, 먼저 tftpd 서버를 사용도록 해야 합니다. 보통 다음과 같은 줄을 /etc/inetd.conf에 넣으면 됩니다:

tftp dgram udp wait nobody /usr/sbin/tcpd in.tftpd /tftpboot

데비안 꾸러미의 경우에는 설치만 하면 기본적으로 이런 설정이 들어갑니다.

이 파일을 보고 in.tftpd의 인자로 사용하는 디렉토리를 기억해 두십시오. 아래에서 이 디렉토리 이름이 필요합니다. in.tftpd 일부 버전에서는, -l 옵션을 쓰면 모든 요청을 시스템 로그에 기록합니다. 이 옵션은 부팅 오류의 원인을 파악하는 데 유용합니다. /etc/inetd.conf 파일을 고쳤다면, 고쳤다는 사실을 inetd 프로세스에 알려야 합니다. 데비안 기계에서는 /etc/init.d/inetd reload 명령을 실행하고, 다른 곳에서는 inetd의 프로세스 ID를 찾아서 kill -HUP inetd-pid 명령을 실행합니다.

4.4.5. TFTP 이미지를 적당한 위치에 옮기기

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

4.4.5.1. SPARC TFTP 부팅

예를 들어 sparc 아키텍처에서는 서브 아키텍처 이름을 사용합니다. “SUN4M”, “SUN4C”과 같이 씁니다. 만약 아키텍처를 비워두면, 클라이언트에서 16진수-클라이언트-IP를 파일 이름으로 사용합니다. 시스템의 서브 아키텍처가 SUN4C이고 IP가 192.168.1.3이라면, 파일 이름은 C0A80103.SUN4C입니다. 이름을 알아내기 쉬운 방법은 쉘에서 다음 명령을 실행하는 것입니다: (기계의 IP가 10.0.0.4라고 가정)

$ printf '%.2x%.2x%.2x%.2x\n' 10 0 0 4

이렇게 하면 IP를 16진수로 표시합니다. 파일 이름은 모든 글자를 대문자로 바꿔야 하고 필요하다면 서브 아키텍처 이름을 뒤에 붙입니다.

일부 sparc 시스템은 OpenPROM 부팅 명령 뒤에 특정 파일이름을 붙여서 이 파일을 찾도록 만들 수 있습니다. 예를 들어 boot net my-sparc.image. 파일은 TFTP 서버가 찾는 디렉토리 안에 들어 있어야 합니다.