본문 바로가기
컴퓨터 & IT (Computer & IT)/Beowulf Cluster (Diskless Cluster)

[Diskless Cluster] 1.2 마스터 서버 -TFTP 서버/부트로더 설정

by Physics 2020. 6. 2.
728x90

1.2. 마스터 서버 – TFTP 서버/부트로더 설정

    마스터 서버는 PXE로 부팅을 하는 계산노드들이 필요로 하는 부트로더파일들을 TFTP서버를 통해서 계산노드들에게 전달한다. 이때 부트로더 파일들은 vmlinuz와 imifram.img 파일이다. 여기에서는 마스터 서버의 TFTP서버를 설정하는 것과 부트로더 파일들을 만드는 방법들을 다룬다.

 

1.2.1 TFTP 서버 설치

$sudo apt-get install tftpd-hpa tftp-hpa

- 다음 명령어를 통해 tftp서버가 잘 작동하는지 확인하자.

그림 1. tftp 서버 작동 확인

1.2.2 /etc/default/tftpd-hpa 수정

$ vim /etc/default/tftpd-hpa
RUN_DAEMON="yes"
OPTIONS="-l -s /var/lib/tftpboot"
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure"

- RUN_DAEMON 부분과 OPTIONS 부분을 첨가하자

 

1.2.3. openbsd-inetd과 xinetd 설치 [1]
 우분투에서는 inetd과 xinetd 파일이 기본적으로 설치되어있지 않으므로, apt-get install을 통해서 설치해주어야 한다.

$ apt-get install openbsd-inetd -y
$ apt-get install xinetd -y

 

1.2.4. inetd와 xinetd파일 tftp에 대한 설정하기 
/etc/xinet.d/tftp 파일 생성 및 편집

$ vim /etc/xinet.d/tftp 
service tftp
{
	disable=no
	socket_type=dgram
	protocol=udp
	wait=yes
	user=root 
	server=/usr/sbin/in.tftpd
	server_args=-s /var/lib/tftpboot/
}

 

- /etc/inetd.conf 파일 편집

$ vim /etc/inetd.conf 
tftp   dgram   udp   wait   root  /usr/sbin/in.tftpd   /usr/sbin/in.tftpd -s /var/lib/tftpboot

 

1.2.5. tftp 서버 재시작:

$systemctl restart tftpd-hpa 


여기까지 설정을 완료하게 되면, PXE부팅시 tftp호출을 정상적으로 받지만, 아래의 그림 2와 같이 vmlinuz와 같은 부트로더들이 없어 부팅을 할 수 없다는 메시지를 받게 된다. 

그림 2. PXE 부팅 에러

 

1.2.6. 계산노드가 사용할 부트로더와 관련된 설정

1) syslinux, pxelinux, initramfs-tools 설치

$sudo apt-get install syslinux
$sudo apt-get install pxelinux
$sudo apt-get install initramfs-tools

 

2) 부르로더와 관련된 파일 복사: 우리가 사용할 부트로더들은 /var/lib/tftpboot에 존재한다. 
  - 아래처럼 부트로더에 필요한 파일들을 /var/lib/tftpboot* 디렉토리에 복사하자
  * ubuntu 20.04 LTS의 경우, /var/lib/tftpboot 디렉토리가 없으므로, mkdir 을 통해서 해당 디렉토리를 만들자 

$ cp /usr/lib/PXELINUX/pxelinux.0 /var/lib/tftpboot/
$ cp /usr/lib/syslinux/modules/bios/* /var/lib/tftpboot/

 

 - 계산노드들이 부팅을 하기위해선 두 개의 부트로더들 (vmlinuz와 imitramfs.img)이 필요하다. 계산노드들에게 필요한 vmlinuz와 
   imitramfs.img 두 파일 모두 마스터 서버의 것으로 사용한다. 다만, imitramfs.img의 경우, 다음 아래와 같이 /etc/initramfs-
   tools/initramfs.conf 파일을 수정 함으로써, 계산노드들이 네트워크로 부팅하도록 해야한다

  ※ /etc/initramfs-tools/initramfs.conf 파일에서 BOOT=nfs와MODULES=netboot로 다음과 같이 아래같이 수정한다. 
     (만일 BOOT가 없으면 추가하도록 하자) 

  ※ 앞에서 디렉토리 구조와 2.1장에서 언급한 것처럼, 우리의 계산노드들이 사용할 루트디렉토리 및 커널 구조는 마스터서버의 것과 
     동일하게 사용한다는 점을 잊지말자.
   
 

$ vim /etc/initramfs-tools/initramfs.conf 
…
BOOT=nfs 
…
MODULES=netboot

 

 - 그 후, mkinitramfs 명령어를 사용하여, 변경사항이 적용된 imitramfs 파일을 만든다.

$ mkinitramfs -o ~/initrd.img-`uname -r` 

 

 - 마스터 서버의 vmlinuz 파일을 루트 홈디렉토리로 복사하자

$ cp /boot/vmlinuz-`uname -r` ~ 

 

 - 마스터 서버의 루트 홈디렉토리에 있는 vmlinuz 파일과 imitrd.img 파일을 /var/lib/tftpboot 디렉토리로 복사하자

$ cp /root/{vmlinuz,imitramfs.img}-* /var/lib/tftpboot/ 

 

3)  /var/lib/tftpboot/pxelinux.cfg[2] 디렉토리 
계산노드들은 PXE 부팅을 하면서 필요한 커널의 정보들을 pxelinux.0에서부터 얻는다. 이때, 계산노드들이 부팅에 필요한 설정파일들은 pxelinux.cfg 디렉토리 내의 파일들로부터 얻게된다. 현재 우리의 diskless Cluster의 경우, 모든 계산노드들이 동일한 설정파일들을 이용하지만, 각각의 계산노드들마다 다른 설정을 요구할 경우, 5.3장을 참고하도록 하자

-  /var/lib/tftpboot/pxelinux.cfg/default를 아래와 같이 생성한다

$vim /tftpboot/pxelinux.cfg/default
DEFAULT	linux
LABEL	linux
KERNEL	vmlinuz-4.13.0-36-generic
APPEND	root=/dev/nfs initrd=initrd.img-4.13.0-36-generic nfsroot=192.168.0.1:/computation_root/nfsroot ip=dhcp rw

 

    ※ 현재 마스터 서버의 커널버전은 4.13.0-36-generic이다. (버전확인은 명령어 uname -r을 통해서 알 수 있다)
    ※ /dev/nfs의 의미는 실제 파일이 아니며, 단지 커널에게 NFS를 사용한다는 것을 알려주는 용도이다.

    ※ nfsroot에는 계산노드들이 PXE부팅 후, 자신들의 루트디렉토리로 삼을 디렉토리를 알려줘야한다. 계산서버의 
       루트디렉토리는 마스터 서버(192.168.0.1) 내의 /computation_node/nfsroot이다.  

 

1.2.7. tftp 서버 재시작 및 /var/lib/tftpboot 권한 수정 

$chmod -R 777 /tftpboot 
$/etc/init.d/tftpd-hpa start

※ 이 후에 할 일은 계산노드들이 자신의 루트 디렉토리로 삼을 리눅스 이미지를 만드는 것이다. 이것은 2.1장에서 다룰 것이다. 또한 리눅스 이미지를 만들게 되면, NFS를 통해서 해당 이미지들을 마운트 시켜야만 한다. 이것은 다음 장에서 다뤄진다.



[1] xinet에 대한 간략한 설명은 다음 링크를 통해 참조: m31phy.tistory.com/71
[2] pxelinux.cfg에 대한 설명은 다음 링크를 통해 참조: m31phy.tistory.com/70

 

728x90

댓글