반응형
우분투 22.04에서 PXE 네트워크 부팅 서버를 구성하는 방법
테스트 환경
- 운영체제 : Ubuntu 22.04.5
- DHCP : isc-dhcp-server(DHCP 서비스)
- TFTP : tftpd-hpa(PXE 클라이언트에 부트로더/커널/인트림 제공)
- HTTP : nginx(ISO, 커널/인트림, autoinstall 파일 제공)
- PXE 부트로더 : syslinux/pxelinux(BIOS + PXELINUX)
- 자동 설치 : cloud-init (NoCloud)
1. DHCP 서버 구성(isc-dhcp-server)
설치 및 서비스 활성화
sudo apt install -y isc-dhcp-server
sudo systemctl enable --now isc-dhcp-server
설정 파일 구성
sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf_$(date '+%Y%m%d_%H%M%S')
sudo vim /etc/dhcp/dhcpd.conf
sudo tee /etc/dhcp/dhcpd.conf > /dev/null << 'EOF'
default-lease-time 600;
max-lease-time 7200;
authoritative;
# PXE 아키텍처 식별을 위한 옵션 정의
option arch code 93 = unsigned integer 16;
subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.106 192.168.10.110;
option routers 192.168.10.1;
option domain-name-servers 8.8.8.8, 8.8.4.4;
next-server 192.168.10.201; # TFTP 서버 IP
if option arch = 00:07 or option arch = 00:09 {
filename "uefi/syslinux.efi"; # UEFI 모드
} else {
filename "pxelinux.0"; # Legacy(BIOS) 모드
}
}
EOF
- next-server : TFTP 서버 IP 주소(PXE 서버)
- filename : PXE 부트로더 이름
설정 파일 검증
sudo dhcpd -t -cf /etc/dhcp/dhcpd.conf
서비스 재시작
sudo systemctl restart isc-dhcp-server
서비스 상태 확인
sudo systemctl status isc-dhcp-server
2. TFTP 서버 구성(tftpd-hpa)
설치 및 서비스 활성화
sudo apt install -y tftpd-hpa
sudo systemctl enable --now tftpd-hpa
설정 파일 구성
sudo cp /etc/default/tftpd-hpa /etc/default/tftpd-hpa_$(date '+%Y%m%d_%H%M%S')
sudo vim /etc/default/tftpd-hpa
sudo tee /etc/default/tftpd-hpa << 'EOF'
# /etc/default/tftpd-hpa
TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS="0.0.0.0:69"
TFTP_OPTIONS="--secure --create"
EOF
TFTP 루트 디렉토리 생성
sudo mkdir -p /var/lib/tftpboot
sudo chown -R tftp:tftp /var/lib/tftpboot
sudo chmod -R 755 /var/lib/tftpboot
서비스 재시작
sudo systemctl restart tftpd-hpa
서비스 상태 확인
sudo systemctl status tftpd-hpa
3. Nginx 설치
sudo apt install -y curl gnupg2 ca-certificates lsb-release ubuntu-keyring
curl -fsSL https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
sudo apt update
sudo apt install -y nginx
sudo systemctl enable --now nginx
PXE용 HTTP 설정
default.conf 설정 파일 백업
sudo cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf_$(date '+%Y%m%d_%H%M%S')
default.conf 설정 파일 수정
sudo vim /etc/nginx/conf.d/default.conf
sudo tee /etc/nginx/conf.d/default.conf << 'EOF'
server {
listen 80;
server_name _;
access_log /var/log/nginx/host-access.log main;
error_log /var/log/nginx/host-error.log;
client_max_body_size 0;
location / {
root /usr/share/nginx/html;
autoindex on;
}
location /iso/ {
alias /usr/share/nginx/html/iso/;
autoindex on;
}
location /ubuntu/ {
alias /usr/share/nginx/html/ubuntu/;
autoindex on;
}
location /autoinstall/ {
alias /usr/share/nginx/html/autoinstall/;
autoindex on;
default_type text/plain;
}
}
EOF
sudo nginx -t
sudo systemctl restart nginx
4. PXE 부트로더 설치 (PXELINUX)
PXE 부팅에서 부트로더로 pxelinux.0를 사용합니다.
설치
sudo apt install -y pxelinux syslinux-common
부트로더 및 모듈 복사
sudo cp /usr/lib/PXELINUX/pxelinux.0 /var/lib/tftpboot/
sudo cp /usr/lib/syslinux/modules/bios/{ldlinux.c32,libcom32.c32,libutil.c32,menu.c32,vesamenu.c32} \
/var/lib/tftpboot/
UEFI 모드
더보기
---
sudo apt install -y syslinux-efi
sudo mkdir -p /var/lib/tftpboot/uefi
sudo cp /usr/lib/SYSLINUX.EFI/efi64/syslinux.efi /var/lib/tftpboot/uefi/
sudo cp /usr/lib/syslinux/modules/efi64/{ldlinux.e64,libcom32.c32,libutil.c32,vesamenu.c32} \
/var/lib/tftpboot/uefi/
ln -s /var/lib/tftpboot/pxelinux.cfg /var/lib/tftpboot/uefi/pxelinux.cfg
---
728x90
우분투 ISO 준비 및 커널/Initrd 추출
ISO 다운로드 및 HTTP 제공
sudo mkdir -p /usr/share/nginx/html/{iso,ubuntu/22.04}
cd /usr/share/nginx/html/iso
wget https://releases.ubuntu.com/22.04/ubuntu-22.04.5-live-server-amd64.iso
ISO 마운트 및 파일 복사
sudo mount -o loop,ro ubuntu-22.04.5-live-server-amd64.iso /mnt
sudo cp -r /mnt/* /usr/share/nginx/html/ubuntu/22.04/
sudo cp -r /mnt/.disk /usr/share/nginx/html/ubuntu/22.04/
sudo umount /mnt
squashfs 링크 생성
cd /usr/share/nginx/html/ubuntu/22.04/casper
ln -s ubuntu-server-minimal.ubuntu-server.installer.squashfs filesystem.squashfs
Ubuntu 24.04
더보기
---
sudo mkdir -p /usr/share/nginx/html/ubuntu/24.04
cd /usr/share/nginx/html/iso
wget https://releases.ubuntu.com/24.04/ubuntu-24.04.3-live-server-amd64.iso
sudo mount -o loop,ro ubuntu-24.04.3-live-server-amd64.iso /mnt
sudo cp -r /mnt/* /usr/share/nginx/html/ubuntu/24.04/
sudo umount /mnt
---
커널(vmlinuz) 및 initrd 파일 복사
sudo cp /usr/share/nginx/html/ubuntu/22.04/casper/{vmlinuz,initrd} \
/var/lib/tftpboot/
sudo cp /usr/share/nginx/html/ubuntu/22.04/casper/{vmlinuz,initrd} \
/usr/share/nginx/html/ubuntu/22.04/
PXE 메뉴 구성(pxelinux.cfg)
/srv/tftp/pxelinux.cfg/default 파일을 생성하고 PXE 부팅 메뉴를 구성
sudo mkdir -p /var/lib/tftpboot/pxelinux.cfg
sudo vim /var/lib/tftpboot/pxelinux.cfg/default
sudo tee /var/lib/tftpboot/pxelinux.cfg/default << 'EOF'
DEFAULT menu.c32
PROMPT 0
TIMEOUT 300
MENU TITLE Ubuntu 22.04 PXE Boot Menu
LABEL ubuntu-2204-autoinstall
MENU LABEL Install Ubuntu 22.04 (Auto)
KERNEL vmlinuz
INITRD initrd
APPEND ip=dhcp \
boot=casper \
netboot=http \
casper-path=casper \
autoinstall \
ds=nocloud-net;s=http://192.168.10.100/autoinstall/ \
url=http://192.168.10.100/ubuntu/22.04/ \
fsck.mode=skip
LABEL ubuntu-2204-manual
MENU LABEL Install Ubuntu 22.04 (Manual)
KERNEL vmlinuz
INITRD initrd
APPEND ip=dhcp \
boot=casper \
netboot=http \
casper-path=casper \
url=http://192.168.10.100/ubuntu/22.04/
LABEL local
MENU LABEL Boot Local Disk
LOCALBOOT 0
EOF
cloud-init(NoCloud) 자동 설치 파일 구성
디렉터리 생성
sudo mkdir -p /usr/share/nginx/html/autoinstall
Vendor-Date 파일 생성
sudo touch /usr/share/nginx/html/autoinstall/vendor-data
Meta-Data 파일 생성
sudo vim /usr/share/nginx/html/autoinstall/meta-data
sudo tee /usr/share/nginx/html/autoinstall/meta-data << 'EOF'
instance-id: ubuntu-2204-pxe
local-hostname: ubuntu-pxe
EOF
User-Data 파일 생성
- password는 반드시 openssl passwd -6으로 생성한 해시값 사용
# 패스워드 : ubuntu
openssl passwd -6 'ubuntu'
$6$YHHqTfkwCtHcDgHa$ljH6JlVWXT05xha4sCOjnQckLICoQJ5GpDlF0iwJ74zESHPTo.Sqwnb16zwZeHIAIcd9M0Kd503JPO5FD/tgb/
sudo vim /usr/share/nginx/html/autoinstall/user-data
sudo tee /usr/share/nginx/html/autoinstall/user-data << 'EOF'
#cloud-config
autoinstall:
version: 1
locale: ko_KR.UTF-8
keyboard:
layout: kr
timezone: Asia/Seoul
identity:
hostname: ubuntu-pxe
username: ubuntu
password: "$6$YHHqTfkwCtHcDgHa$ljH6JlVWXT05xha4sCOjnQckLICoQJ5GpDlF0iwJ74zESHPTo.Sqwnb16zwZeHIAIcd9M0Kd503JPO5FD/tgb/"
ssh:
install-server: true
allow-pw: true
packages:
- vim
- curl
- net-tools
storage:
layout:
name: direct
late-commands:
- curtin in-target -- systemctl enable ssh
EOF
Cloud-Init 구성 검증
cloud-init schema --config-file /usr/share/nginx/html/autoinstall/user-data
서비스 재시작
sudo systemctl restart isc-dhcp-server tftpd-hpa nginx
네트워크 부팅 설치(Network boot)
- VirtualBox에서 VM 서버 (PXE 클라이언트) 생성
- Network Boot(PXE) : F12 → l) LAN

무인 설치 시작
728x90
반응형
'리눅스' 카테고리의 다른 글
| CentOS Stream 10에서 PXE 서버를 구성하는 방법 (0) | 2025.12.21 |
|---|---|
| CentOS Stream 10에서 고정 IP를 설정하는 방법 (0) | 2025.12.21 |
| 우분투 24.04에서 PXE 부팅을 통해 cloud-init 기반의 Autoinstall을 사용하여 운영체제를 설치하는 방법 (0) | 2025.12.19 |
| macOS에서 ISO 이미지를 USB 부팅 디스크로 생성하는 방법 (1) | 2025.12.17 |
| 네트워크 성능 튜닝 (1) | 2025.12.16 |