PXE 소개
Preboot execution environment 의 약자로써, 원격 네트워크 연결을 통한
OS 부팅을 가능하게 하는 표준
PXE 서버 사전 준비
Virtualbox 에서 테스트하며, Host-only Adapter 를 사용한다.
Virtualbox 실행 - File - Host Network Manager
IPv4 Address: 10.0.0.254/24
DHCP Server: None
CentOS 07 VM PXE:
NIC 2EA 할당 (각 공인망/사설망)
CentOS 07 VM Client:
NIC 1EA 할당 (사설망)
PXE 서버 네트워크 설정
# Public
cat << EOF | sudo tee /etc/sysconfig/network-scripts/ifcfg-enp0s3
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
NAME=enp0s3
DEVICE=enp0s3
ONBOOT=yes
EOF
# Private
cat << EOF | sudo tee /etc/sysconfig/network-scripts/ifcfg-enp0s8
TYPE=Ethernet
BOOTPROTO=none
DEFROUTE=no
NAME=enp0s8
DEVICE=enp0s8
ONBOOT=yes
IPADDR=10.0.0.11
PREFIX=24
EOF
sudo systemctl restart network
sudo systemctl status network
PXE 서버 DHCP 설치
sudo yum install -y dhcp
sudo mkdir /etc/dhcp/dhcpd.d/
cat << EOF | sudo tee /etc/dhcp/dhcpd.conf
option domain-name-servers 10.0.0.11;
## 10.0.0.11 -> PXE 서버 사설 IP
default-lease-time 600;
max-lease-time 7200;
authoritative;
## DHCPNAK send enable
filename "pxelinux.0";
next-server 10.0.0.11;
## tftp 서버 IP
subnet 10.0.0.0 netmask 255.255.255.0 {
range dynamic-bootp 10.0.0.200 10.0.0.253;
option broadcast-address 10.0.0.255;
# option routers 10.0.0.11;
## Client 가 자동 할당받는 Gateway IP
## 해당 예제에서는 사설망이므로 주석 처리
}
EOF
sudo systemctl enable --now dhcpd
sudo systemctl status dhcpd
PXE 서버 TFTP 설치
리눅스 부팅에 필요한 파일을 전송하기 위한 tftp 설치
sudo yum install -y syslinux tftp tftp-server
sudo cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
sudo systemctl enable --now tftp
sudo systemctl status tftp
tftp
(to) 10.0.0.11
tftp> verbose
tftp> trace
tftp> get pxelinux.0
PXE 서버 ISO 부팅 설정
wget http://mirror.navercorp.com/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-2009.iso
sudo mkdir /var/lib/tftpboot/centos7
sudo mount CentOS-7-x86_64-Minimal-2009.iso /mnt
## sudo mount -t iso9660 -o loop CentOS-7-x86_64-Minimal-2009.iso /mnt
sudo cp /mnt/images/pxeboot/vmlinuz /var/lib/tftpboot/centos7/
sudo cp /mnt/images/pxeboot/initrd.img /var/lib/tftpboot/centos7/
sudo cp /usr/share/syslinux/menu.c32 /var/lib/tftpboot/
sudo mkdir /var/lib/tftpboot/pxelinux.cfg/
cat << EOF | sudo tee /var/lib/tftpboot/pxelinux.cfg/default
timeout 100
default menu.c32
menu title ######### PXE Boot Menu #########
label 1
menu label ^1) Install CentOS 7
kernel centos7/vmlinuz
append initrd=centos7/initrd.img method=http://10.0.0.11/iso devfs=nomount
label 2
menu label ^2) Boot from local drive
localboot
EOF
sudo yum install -y httpd
cat << EOF | sudo tee /etc/httpd/conf.d/pxeboot.conf
Alias /iso /mnt
<Directory /mnt>
Require ip 127.0.0.1 10.0.0.0/24
</Directory>
EOF
sudo systemctl enable --now httpd
sudo systemctl disable --now firewalld
PXE 서버 ISO 부팅 테스트
Virtualbox - VM - Settings
첫번째 NIC 은 dhcpd 서버에서 사용하는 NIC 과 동일한 대역의 장비로 설정한다. (첫번째 NIC 이 다른 대역의 장비인 경우 미동작한다.)
VM Start - 단축키 F12 - Boot Manager - l) LAN (단축키 L 입력)
CentOS 설치화면을 확인할 수 있다.
PXE 서버 결론
PXE 서버와 다른 PC 의 네트워크 부팅을 통해 CentOS 설치를 가능하게
해보았다. 이외에도 initrd(=램디스크) 의 옵션에 따라 CentOS 자동
설치(kickstart)도 가능하고 nfs 에서 가져온 PXE 서버의 루트 파일시스템을
통해 원격 부팅도 가능하다.