관리 메뉴

IT창고

리눅스 PXE 본문

서버운영/Linux

리눅스 PXE

방구석여포 2017. 9. 25. 22:43

리눅스의 PXE(Pre-boot eXecution Environment)는 사전 부팅 실행환경으로 네트워크 인터페이스(NIC)를 통해서 부팅을 하는 환경인데(메인보드내에 내장되어있는기능) 설치CD나 이미지파일(ISO) 없이 네트워크를 통해서 운영체제를 설치하거나 부팅할때 사용됩니다.


실습을 위해서 VMware가상머신을 사용하겠습니다. OS가 설치되지 않은 가상머신을 하나 만들어둡니다. 실습에 사용하는 OS는 CentOS 6.9입니다. 


서버구축전에 알아야할 패키지가 몇 가지있는데 TFTP (Trivial File Transfer Protocol)는 FTP와 동일한 파일전송 프로토콜이지만 매우 간단한 형식으로 구성되어 있어 부트로더와 같은 작은 크기의 파일을 전송할때 사용되는 프로그램(UDP통신)입니다. SYSLINUX는 Linux운영체제용 부트로더를 제공하고 설치과정을 단순화하여 부팅디스크 등에 사용되는 패키지입니다.


1. 패키지를 설치합니다.

yum -y install syslinux tftp-server vsftpd dhcp 명령어를 입력해서 설치합니다.

syslinux는 부팅 메뉴 구성을 위한 파일과 부트로더 파일을 제공합니다.

tftp-server는 PXE 부팅 직후, OS를 설치할 시스템의 커널 이미지 파일과 syslinux패키지에 제공된 부팅 관련 파일을 전송합니다.

vsftpd는 운영체제 설치시 필요한 파일 전송합니다.

dhcp는 PXE 부팅시 IP를 할당하여 원격지에 있는 데이터를 다룬받기 위한 환경 제공합니다.


2. tftp서버를 설정합니다.

vi /etc/xinetd.d/tftp 를 입력해서 파일을수정합니다 /etc/xinetd.d/tftp파일은 tftp서버용 주 설정 파일입니다. tftp는 xinetd데몬에 의해서 동작하는 데몬입니다. tftp파일에 vi편집기로 14번 줄에 disable  = yes  -> no로 바꿔줍니다.


3. CD이미지를 마운트합니다.

가상환경이라면 지금 사용하는 A리눅스에 settings를 눌러 CD/DVD ROM에 Browse해서 CentOS 64bit DVD.iso를 넣어줍니다. 프롬프트창에가서 mount -t iso9660 /dev/cdrom /mnt 를 입력하여 마운트를 하고 CD이미지파일을 복사하기위해 mkdir -p /var/ftp/centos6.9 를 입력해서 디렉토리를 만들어줍니다. cp -r /mnt/* /var/ftp/centos6.9 &를 입력해서 mnt(시디마운트포인트) 디렉토리안에 있는 모든 파일을 복사합니다 복사하는데 오래걸릴수있으니 &로 백드라운드에서 작업합니다. 이 작업은 로컬저장소를 만드는 과정으로 네트워크를 통해 부팅을 한 시스템(PXE)는 운영체제 설치에 필요한 파일을 vsftp를 통해 다운받습니다.


4. syslinux 패키지 파일을 복사합니다.

cd /usr/share/syslinux 입력해서 syslinux패키지 파일이 위치한 디렉토리로 가서 cp menu.c32 /var/lib/tftpboot  ,  cp pxelinux.0 /var/lib/tftpboot 를 입력합니다. menu.c32는 부팅메뉴 구성파일이고 pxelinux.0 부트로더 파일입니다.


5. 커널이미지 파일을 복사합니다.

mkdir -p /var/lib/tftpboot/centos6.9 를 입력해서 커널 이미지 파일이 위치할 디렉토리를 생성하고 cp /var/ftp/centos6.9/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/centos6.9 를 입력해서 파일을 복사합니다. vmlinux는 리눅스 커널을 컴파일한 결과를 gzip으로 압축한 파일로 부팅시 해당 파일이 압축해제가 되어 메모리에 로딩되어서 리눅스가 시작합니다. initrd.img파일은 커널이 사용하는 모듈을 모아놓은 이미지 파일로 커널이미지보다 먼저 메모리에 로딩이 됩니다. 파일이 제대로 복사가 되었는지 ls /var/lib/tftpboot/centos6.9 로 확인합니다.

Tip. 리눅스 booting process과정 

Computer Power On -> CPU가 ROM에 위치한 BIOS를 실행 -> POST과정을 진행 -> HDD를 찾아, 해당 HDD의 첫 번째 Sector을 읽어(MBR) 부트로더 실행 -> /boot/grub/grub.conf-> 해당 파일에 명시된 옵션을 보고 실행할 파일을 결정 -> vmlinuz 파일을 메모리로딩 하여(압축해제) 메모리에 디렉토리구조 생성, initrd.img 파일이 압축해제가되어 커널이 동작하기 위한 파일을 제공 -> 커널이 동작하면 하드디스크에 디렉토리 구조를 생성


6. 부팅 메뉴를 구성합니다.

mkdir /var/lib/tftpboot/pxelinux.cfg 로 디렉토리를 만들고 vi /var/lib/tftpboot/pxelinux.cfg/default로 파일을 아래와 같이 수정합니다.

0번 메뉴 -> localboot 0 하드디스크부팅 1번 메뉴-> 커널이미지 파일(vmlinux,initrd.img)을 실행후 설치에 데이터를 A리눅스의 FTP서버에서 다운로드합니다.


7. DHCP서버를 구성합니다.

vi /etc/dhcp/dhcpd.conf 파일에 들어가서 아래와 같이 수정합니다.

서브넷 구성은 각 실습 환경마다 다를 수있습니다.


8. 서비스를 스타트합니다.

service xinetd restart -> service vsftpd restart 

혹시 모를 보안설정으로 service iptables stop 와 setenforce 0를 입력해줍니다.


9. 동작과정을 알아봅니다.

PXE가 동작하는 과정은 먼저 컴퓨터(서버)에 전원을 키면 PXE환경이 실행되어 DHCP서버를 찾고 DHCP로 IP를 할당 받은 후 tftp로 부터 pxelinux.0 menu.c32 파일을 다운받아 실행합니다. 그리고 default (메뉴구성파일)에 설정에 따라 메뉴가 실행되고 설치 메뉴 선택시 실행할 내용 (KERNEL, APPEND)에 따라 커널이미지 파일을 다운받아 실행하고 운영체제 설치에 필요한 파일을 VSFTP로 부터 다운받습니다. VSFTP경로는 /var/lib/tftpboot/pxelinux.cfg/default파일의 repo=ftp://경로입니다. 


10. 설치테스트를 합니다.

이미지 파일을 넣지 않은 상태로 시작하겠습니다.

DHCP로 IP를 할당받으려는 모습입니다.

위와 같이 CD, 이미지파일(ISO)이 없음에도 불구하고 OS를 설치하는 모습을 확인할수있었습니다. 이미지파일이 아닌 네트워크를 통해 다운받아 정상적으로 OS를 설치하였습니다.

'서버운영 > Linux' 카테고리의 다른 글

리눅스 WEB 설정  (0) 2017.09.28
리눅스 Kickstart  (0) 2017.09.28
리눅스 Samba(삼바) 서버 설정  (0) 2017.09.23
리눅스 NFS 설정  (0) 2017.09.21
리눅스 FTP 설정  (0) 2017.09.21
Comments