Diskless nodes/ko

이 설명서는 젠투 리눅스에 무(無) 디스크 노드 설정을 만드는 방법을 도와줍니다.

이 설명서 정보
이 설명서는 젠투 리눅스 배포판을 기반으로 무(無) 디스크 워크스테이션 설정을 도와줍니다. 경험자는 무(無) 디스크 노드 및 네트워크와 관련된 여러 설명서에 쉽게 적응할 수 있지만, 우리 모두는 각각의 입장에 있는 편이기에, 리눅스 초짜들에게 가능한한 친숙하게 작성하여 제공하려 하며, 이 안내서가 흥미있는 사람이든, 덕후든 아니든간에 쉽게 설치할 수 있도록 도움이 되길 바랍니다.

무(無) 디스크 머신이란게 뭔가요?
무디스크 머신은 하드 디스크, 플로피 드라이브, CD-ROM 같은 보통 사용하는 부팅 장치가 없는 PC입니다. 무티스크 노드는 네트워크를 통해 부팅하며, 저장공간을 로컬 하드 디스크처럼 제공하는 서버가 필요합니다. 이제 우리는 이 서버를 마스터라 하고, 무디스크 머신을 슬레이브라 하겠습니다(이름으로 둡니다). 슬레이브 노드는 PXE 부팅 또는 이더부트 기능을 제공하는 네트워크 어댑터가 필요합니다. 지원 목록은 Etherboot.org를 확인하세요. 대부분 최신 카드에서는 PXE를 지원하며, 수많은 마더보드 내장 어댑터에서도 동작합니다.

시작하기 전에
마스터 노드에 젠투를 설치해야 하고, 슬레이브 노드의 파일 시스템을 저장할 충분한 용량을 마스터 노드에 확보해야 합니다. 또한 로컬 영역 연결에서 한 인터페이스는 인터넷에 연결했는지 확인해야 합니다.

커널 설명
커널은 하드웨어와 머신에 불러온 모든 다른 소프트웨어 사이에 놓인 프로그램이며, 커널 기반 운영체제의 핵심입니다. 컴퓨터를 시작하면 BIOS는 하드 드라이브의 예약 부팅영역의 기계어 명령을 실행합니다. 이 기계어 명령은 커널을 불러드리는 부트로더 입니다. 커널을 불러오고 나면 모든 프로세스를 커널이 처리합니다.

커널과 커널 설정에 대한 더 많은 내용은 커널 HOWTO를 보시는 것이 좋습니다.

마스터 커널 설정
마스터 커널은 원하는대로 사용자 설정을 한 만큼 커닐 수 있지만 선택해야 할 커널 옵션은 극히 일부입니다. 다음을 입력하여 커널 설정 화면으로 이동하십시오:

파일을 직접 설정하는 안전한 대안책으로 회색에 시퍼런 색이 곁들인 화면이 떠야합니다. 커널이 잘 동작한다면 GUI를 빠져나가서 다음을 입력하여 현재 설정 파일을 저장하시는 것이 좋습니다:

하위 메뉴를 따라가서 아래 항목을 내장 항목(그리고 모듈 아님)으로 표시했는지 확인하십시오. 아래 옵션은 2.6.10 버전의 커널부터 볼 수 있습니다. 다른 버전을 사용한다면 나타난 글씨나 순서가 다를 수도 있습니다. 최소한 아래 나타난 항목만 선택했는지 확인하십시오.

마스터 노드 또는 보안 방화벽을 통해 인터넷망을 쓰려면 iptables 지원을 추가했는지 확인하십시오:

패킷 차단 기능을 활용하려면, 다음에 나머지 부분을 모듈로 추가할 수 있습니다. 젠투 보안 핸드북 방화벽 정보에서 어떻게 방화벽을 제대로 설정할 수 있는지 읽어보십시오.

마스터 커널을 재설정한 후, 다음과 같이 다시 빌드하십시오:

어떤 부트로더를 사용하느냐에 따라 또는 에 새 커널 설정 항목을 추가하시고, 새 커널을 기본 항목으로 지정하십시오. 이제 새 bzImage 파일을 boot 디렉터리에 복사했으며, 여러분이 앞으로 해야 할 모든 일은 시스템을 재부팅하여 새 옵션을 불러오는 것입니다.

슬레이브 커널 알아보기
슬레이브 커널을 어떤 모듈도 포함하지 않고 컴파일 하는 것을 추천하지만, 원격 부팅을 통해 불러오고 설정하는 과정을 어렵고 필요하지 않은 과정입니다. 게다가, 슬레이브 커널은 작아야 하며, 네트워크로부터 효율적으로 부팅 과정을 수행하기 위해 가능한한 최소화해야 합니다. 이제, 마스터에서 설정한 동일한 위치에 슬레이브의 커널을 컴파일하겠습니다.

혼동을 막고 시간을 절약하기 위해 마스터의 설정 파일을 다음 명령을 입력하여 백업하시는게 좋습니다:

이제 마스터 커널을 설정한 동일한 방식으로 슬레이브 커널을 설정하겠습니다. 새 설정 파일로 시작하려 한다면, 다음 명령을 입력하여 기본 파일로 언제든 되돌릴 수 있습니다.

이제 다음 명령을 입력하여 설정 화면으로 이동하십시오:

다음 옵션을 커널 모듈이 아닌 내장 항목으로 선택했는지 확인하십시오:

이제 슬레이브 커널을 컴파일해야 합니다. (어쩌다가) 마스터 커널을 빌드하여 모듈을 꼬이게 하고 싶진 않기에 여기서는 매우 조심해야 합니다:

이제 마스터에 슬레이브의 파일과 필요한 시스템 파일을 저장할 디렉터리를 만드십시오. 여기선 를 사용하겠지만, 어디든 원하는 디렉터리를 사용해도 됩니다. 이제 슬레이브의 bzImage 파일을 디렉터리에 복사하십시오:

슬레이브 파일 시스템 기반 설정
마스터 파일 시스템과 슬레이브 파일 시스템은 상당 부분을 주물러 바꿀 수 있습니다. 바로 지금 우리는 적당한 설정 파일의 기반 파일 시스템을 설정하고 마운트 지점을 지정하는 것입니다. 먼저 우리가 해야 할 일은 첫 슬레이브 머신에 대한 디렉터리에 디렉터리를 만드는 것입니다. 각각의 슬레이브에서는 자신의 루트 파일 시스템이 필요한데 각각의 시스템 파일을 공유하면 권한 문제가 생길 수 있으며, 최악의 경우는 복구하기 어렵게 깨질 수도 있습니다. 이 디렉터리를 원하는대로 불러올 수 있지만 슬레이브의 유일하며 혼동되지 않는 IP 주소를 사용하시는것이 좋겠습니다. 첫번째 슬레이브에 할당할 정적 IP는 예를 들어 과 같다면:

의 다양한 설정 파일은 슬레이브에서 작업하도록 바꿔야 합니다. 마스터의 디렉터리를 새로운 슬레이브 루트에 다음 명령을 입력하여 복사하십시오:

이 파일시스템은 더 많은 마운트 지점과 디렉터리가 필요하기 때문에 아직 준비되지 않았습니다. 이들을 만들려면 다음 명령을 입력하십시오:

대부분의 이 "내용"은 여러분이 알아볼 수 있어야 합니다. ,, 같은 것들을 슬레이브 장치가 시작할 때 실려갑니다. 다른 디렉터리는 그 다음에 마운트합니다. 또한 파일의 내용을 바꿔 슬레이브 호스트 이름을 반영해야 합니다. 바이너리, 라이브러리, 기타 파일은 슬레이브 부팅을 시도하기 전에 이 설명서에서 이 과정 다음에 언급하겠습니다.

를 에서 실어가겠지만,  항목을 만들어야 합니다. 그렇지 않으면 "unable to open initial console(초기 콘솔을 열 수 없습니다)"라는 오류를 만납니다.

DHCP 서버 알아보기
DHCP는 동적 호스트 설정 프로토콜(Dynamic Host Configuration Protocol)의 약자입니다. DHCP 서버는 PXE 부팅을 시작할 때 가장 먼저 통신할 컴퓨터입니다. DHCP 서버의 주된목적은 IP 주소 할당입니다. DHCP 서버는 호스트의 이더넷 MAC 주소를 기반으로 IP 주소를 할당할 수 있습니다. 슬레이브에서 IP 주소를 받으면, DHCP 서버는 초기 파일 시스템과 커널이 어디있는지 슬레이브에게 알려줍니다.

시작하기 전에
시작하기 전에 동작하는지 확인해야 할 몇가지가 있습니다. 먼저 네트워크 연결을 확인하십시오:

"eth0" 장치가 실행중임을 확인할 것입니다. 결과는 다음과 같이 나와야합니다:

eth0 장치가 올바르게 동작하는 모습

MULTICAST라는 메시지가 나와야 합니다. 안나오면 multicast support를 포함하도록 커널을 다시 컴파일해야 합니다.

DHCP 서버 설치
네트워크에 DHCP 서버가 없다면 이걸 설치해야합니다:

네트워크에 DHCP 서버가 있다면, PXE 부팅 기능이 제대로 동작하도록 설정 파일을 편집해야 합니다.

DHCP 서버 설정
DHCP 서버를 시작하기 전에 여러분이 설정해야 할 설정 파일은 하나밖에 없습니다. 제공해드린 예제 파일을 복사하고 편집하십시오:

의도한 방식 대로의 파일의 일반 구성은 다음과 같습니다:

예제 dhcpd.conf 구성

블록은 추가적인 항목이며, 동일한 네트워크 구성에 따라 여러분이 원하는대로 할당하려는 IP에 대해 사용해야합니다. 최소한  을 선언해야 하며, 선택적인   블록에서는 이들 항목간의 옵션을 묶을 수 있습니다. 의 바람직한 예제는 다음과 같습니다:

dhcpd.conf 예제

The IP address after  will be asked for the specified. This IP address should be the IP of the tftp server, usually the same as the master's IP address. The  is relative to the  directory (this is due to the tftp server specific options which will be covered later). Inside the  block, the   option specifies a MAC address, and   assigns a fixed IP address to that particular MAC address. There is a pretty good man page on with options that are beyond the scope of this HOWTO. You can read it by typing:

DHCP 서버 시작하기
dhcp 초기화 스크립트를 시작하기 전에 파일을 편집하여 다음과 같은 모양새가 되도록 하십시오:

/etc/conf.d/dhcp 예제

The  variable is the device you wish to run your DHCP server on, in our case. Adding more arguments to the  variable can be useful for a complex network topology with multiple Ethernet cards. To start the dhcp server type:

dhcp 서버를 시작 스크립트로 추가하려면 다음 명령을 입력하십시오:

Troubleshooting the DHCP server
To see if a node boots you can take a look at. If the node successfully boots, the file should have some lines at the bottom looking like this:

Sample log file entries created by dhcp

If you get the following message it probably means there is something wrong in the configuration file but that the DHCP server is broadcasting correctly.

Sample dhpc server error

Every time you change the configuration file you must restart the DHCP server. To restart the server type:

About the TFTP server
TFTP stands for Trivial File Transfer Protocol. The TFTP server is going to supply the slaves with a kernel and an initial filesystem. All of the slave kernels and filesystems will be stored on the TFTP server, so it's probably a good idea to make the master the TFTP server.

Installing the TFTP server
A highly recommended tftp server is available as the tftp-hpa package. This tftp server happens to be written by the author of SYSLINUX and it works very well with pxelinux. To install simply type:

Configuring the TFTP server
Edit. You need to specify the tftproot directory with  and any command line options with. It should look something like this:

Sample /etc/conf.d/in.tftpd

The  option indicates that this server listens in stand alone mode so you don't have to run inetd. The  indicates that log/error messages should be verbose. The  specifies the root of your tftp server.

Starting the TFTP Server
To start the tftp server type:

This should start the tftp server with the options you specified in the. If you want this server to be automatically started at boot type:

About PXELINUX
This section is not required if you are only using Etherboot. PXELINUX is the network bootloader equivalent to LILO or GRUB and will be served via TFTP. It is essentially a tiny set of instructions that tells the client where to locate its kernel and initial filesystem and allows for various kernel options.

Before you get started
You will need to get the pxelinux.0 file which comes in the SYSLINUX package by H. Peter Anvin. You can install this package by typing:

Setting up PXELINUX
Before you start your tftp server you need to setup pxelinux. First copy the pxelinux binary into your directory:

This will create a default bootloader configuration file. The binary will look in the  directory for a file whose name is the client's IP address in hexadecimal. If it does not find that file it will remove the rightmost digit from the file name and try again until it runs out of digits. Versions 2.05 and later of syslinux first perform a search for a file named after the MAC address. If no file is found, it starts the previously mentioned discovery routine. If none is found, the file is used.

Files that PXE looks for in pxelinux.cfg/ in sequence

Let's start with the file:

Sample pxelinux.cfg/default

The  tag directs pxelinux to the kernel bzImage that we compiled earlier. The  tag appends kernel initialisation options. Since we compiled the slave kernel with , we will specify the nfsroot here. The first IP is the master's IP and the second IP is the directory that was created in to store the slave's initial filesystem.

About Etherboot
Etherboot boots network boot images from a TFTP server. As the PXE this is equivalent to LILO or GRUB. The  utility enables you to create different images using different options.

Before you get started
You will need to get the  (utility for making tagged kernel images useful for netbooting) package to create your Etherboot images. This tool will create a preconfigured kernel image from your original kernel. This contains the boot options as shown further down.

Setting up Etherboot
In this section we will create a simple etherboot image. As the dhcp server gives out the clients root-path in the "option root-path" dhcp.conf, we do not have to include this here. More details can be found in the mknbi manual.

Making the boot images. This will create a ELF bootable image capable of passing dhcp and the rootpath to the kernel. Also forcing the kernel to browse the network for a dhcp server.

Troubleshooting the network boot process
There are a few things you can do to debug the network boot process. Primarily you can use a tool called. To install  type:

Now you can listen to various network traffic and make sure your client/server interactions are functioning. If something isn't working there are a few things you might want to check. First make sure that the client/server is physically connected properly and that the networking cables are not damaged. If your client/server is not receiving requests on a particular port make sure that there is no firewall interference. To listen to interaction between two computers type:

You can also use  to listen on particular port such as the tftp port by typing:

A common error you might receive is: "PXE-E32: TFTP open time-out". This is probably due to firewall issues. If you are using, you might want to check  and  and make sure that they are configured properly. The client should be allowed to connect to the server.

About the NFS server
NFS stands for Network File System. The NFS server will be used to serve directories to the slave. This part can be somewhat personalized later, but right now all we want is a preliminary slave node to boot diskless.

About Portmapper
Various client/server services do not listen on a particular port, but instead rely on RPCs (Remote Procedure Calls). When the service is initialised it listens on a random port and then registers this port with the Portmapper utility. NFS relies on RPCs and thus requires Portmapper to be running before it is started.

Before you start
The NFS Server needs kernel level support so if you don't have this you should recompile your master's kernel. To double check your master's kernel configuration type:

You should see output that looks something like this if your kernel has been properly configured:

Installing the NFS server
The NFS package that can be acquired through portage by typing:

This package will emerge a portmapping utility, nfs server, and nfs client utilities and will automatically handle initialisation dependencies.

Configuring the NFS server
There are three major configuration files you will have to edit:

Nfs configuration files

The file specifies how, to who and what to export through NFS. The slave's fstab will be altered so that it can mount the NFS filesystems that the master is exporting.

A typical for the master should look something like this:

Sample master /etc/exports

The first field indicates the directory to be exported and the next field indicates to who and how. This field can be divided in two parts: who should be allowed to mount that particular directory, and what the mounting client can do to the filesystem:  for read only,   for read/write;   and   are important for diskless clients that are writing to the disk, so that they don't get "squashed" when making I/O requests. The slave's fstab file,, should look like this:

Sample slave fstab

In this example, master is just the hostname of the master but it could easily be the IP of the master. The first field indicates the directory to be mounted and the second field indicates where. The third field describes the filesystem and should be NFS for any NFS mounted directory. The fourth field indicates various options that will be used in the mounting process (see mount(1) for info on mount options). Some people have had difficulties with soft mount points so we made them all hard, but you should look into various options to make your cluster more efficient.

The last file you should edit is which describes a few options for nfs when it is initialised and looks like this:

Sample master /etc/conf.d/nfs

You should change  to the number of diskless nodes on the network.

Starting the NFS server
You should start the nfs server with its init script located in by typing:

If you want to this script to start when the system boots simply type:

Copy the missing files
We will now make the slave's file system in sync with the master's and provide the necessary binaries while still preserving slave specific files.

Configure diskless networking
In order to prevent the networking initscript from killing the connection to your NFS server, you will need to add an option to on your diskless client's filesystem.

Editing /etc/conf.d/net

Initialisation scripts
You need as many init scripts under as you need services on your diskless nodes. It all depends on what you want your slaves to do.

Typical slave runlevels

Now is a good time to boot your slave and cross your fingers. It works? Congratulations, you are now the proud owner of (a) diskless node(s) :)

Acknowledgements
We would like to thank the following authors and editors for their contributions to this guide:


 * Michael Andrews
 * Kristian Jerpetjoen
 * Sven Vermeulen
 * Xavier Neys