[PXE] PXE란?

Preboot eXcution Enviroment라고 하는 환경이다.

아직은 연구중이라 글이 완벽하지 않을 수 도 있다.

데이터센터 같은데서 여러서버에 OS 를 배포할 때 사용하거나 기업에서 OS를 배포할 때 사용하기도 하며, 기본적으로 Network로 부팅을 진행할 때 사용한다.

여러분들이 PXE를 어딘가에서 봤다면 PC방에서 노하드 시스템을 사용하는곳을 보면 PXE로 부팅 하는 것을 볼 수있다.

Screen-Shot-2022-07-28-at-9.06.14-PM

PXE는 dhcp와 tftp 그리고 OS를 뿌려줄 NFS or web서버가 필요로한다.

기본적으로 네트워크인터페이스카드(이하 NIC)를 사용하여 부팅을 진행한다.

NIC에 있는 펌웨어가 dhcp에다 IP를 요청하여, 해당 IP를 할당 받은 후 tftp로 syslinux를 불러와, 기본적인 리눅스 커널 위에서 OS 설치 파일들을 요청하여 설치를 하게 된다.

여기서도 두가지가 나눠지는데 kickstart를 사용하여 자동으로 패키지 등을 설치하여 바로 사용할 수 있게 하는 방법과, Live OS 를 불러와서 사용하는 방법이 있다.

먼저 디렉터리들을 살펴보면

/tftpboot아래는 syslinux + pxeboot.cfg 디렉터리가 있다.
syslinux와 부팅파일을 살펴보면

libcom32.c32
ldlinux.c32
pxelinux.0
vesamenu.c32
menu.c32
memdisk
libutil.c32
linux.c32
vmlinuz
initrd

등이 있다.

실제로 부팅할때는 vmlinuz와 initrd를 불러오는 것을 확인할 수 있다.
Screen-Shot-2022-07-28-at-9.07.29-PM
이런식으로 불러와서 부팅을 진행한다.

그리고 함께
pxelinux.cfg 디렉터리 아래 default파일이 있는데, 이 default파일이 어떤 OS 를 설치 할 지 선택하는 메뉴를 표출해주는 파일이다.

해당파일을 보면

default menu.c32
prompt 0
timeout 100

menu title Select an option to boot

menu label Boot from local drive
	localboot 0xffff

label ubuntu-desktop-2004-live
    menu label Install Ubuntu Desktop 20.04 LTS
	kernel pxe/casper/vmlinuz
    append boot=casper maybe-ubiquity netboot=nfs ip=dhcp nfsroot=IP:/volume1/ISO/pxe initrd=pxe/casper/initrd
label ubuntu-server-2004-netboot
    menu label Install Ubuntu Server 20.04 LTS (netboot)

lable test_ubuntu_liveCD
	menu label TEST LIVE
	kernel memdisk
	initrd ubuntu-20.04.3-live-server-amd64.iso
	APPEND iso raw

lable VMWARE
    menu label ESXI 7.0
    kernel memdisk
    initrd VMware-VMvisor-Installer-7.0U3f-20036589.x86_64.iso
    APPEND iso raw

이런 형태로 되어있다. 일부만 살펴보면

menu label로 실제 PXE부팅때 확인 할 수 있는 메뉴이며,
kernel은 부팅시 사용할 커널을 불러오며 append 부분은 어떻게 부팅을 할 것인지 정해주는 부분이다.

ubuntu-desktop-2004-live를 보면
ip는 dhcp로 할당을 받으며, nfs를 사용하여 파일들을 설치할 때 넘겨준다.

크게 어려운건 없다

/tftpboot아래 vmlinuz와 initrd파일이 있어야 tftp로 불러 올 수 있다.
절대 경로로 다른 디렉터리에 있는 vmlinuz,initrd파일을 불러오려고 하니 진행이 안되서 tftpboot디렉터리에 같이 넣어주니 잘 동작한다.

그 다음 nfsroot=IP:/foobar 이부분은 OS의 ISO가 들어가면 되는 부분이다.

mount -o loop foobar.iso /mnt/iso
cp -r /mnt/iso /foobar

로 파일들을 옮겨준다.
이후 nfsroot를

nfsroot=example.com:/foobar

로 설정하게 되면 부팅시 해당 foobar디렉터리에서 파일들을 불러와서 설치를 할 수 있게 된다.

Show Comments