본문 바로가기

리눅스

우분투에서 PXE 네트워크 부팅 서버를 구성하는 방법

728x90

우분투에서 PXE 네트워크 부팅 서버를 구성하는 방법

1. TFTP 설치 및 설정

sudo apt-get update
sudo apt-get install -y tftpd-hpa
  • TFTP 서비스 상태 확인
sudo systemctl status tftpd-hpa
  • TFTP 서비스 비활성화
sudo systemctl disable tftpd-hpa
  • TFTP 서비스 중지
sudo systemctl stop tftpd-hpa

2. TFTP 설정 파일

sudo vim /etc/default/tftpd-hpa
# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure --create"
  • TFTP 루트 디렉토리 생성
sudo mkdir -p /var/lib/tftpboot

3. Syslinux 및 PXELINUX 설치

sudo apt-get install -y syslinux-common pxelinux

4. 부팅 이미지 파일 복사

PXELINUX 부팅 이미지(pxelinux.0)를 /var/lib/tftpboot 디렉터리로 복사

sudo cp /usr/lib/PXELINUX/pxelinux.0 /var/lib/tftpboot
sudo cp /usr/lib/PXELINUX/lpxelinux.0 /var/lib/tftpboot
sudo cp /usr/lib/syslinux/modules/bios/{libcom32.c32,libutil.c32,menu.c32,vesamenu.c32} /var/lib/tftpboot
sudo cp /usr/lib/syslinux/modules/bios/ldlinux.c32 /var/lib/tftpboot

UEFI 모드

더보기

---

sudo apt-get 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

---

5. ISO 이미지에서 파일 복사

  • ISO 이미지 다운로드
cd /usr/local/src
wget https://cdimage.ubuntu.com/ubuntu-server/jammy/daily-live/current/jammy-live-server-amd64.iso
  • ISO 마운트 포인트 디렉토리 생성
sudo mkdir -p /mnt/iso
sudo mount -o loop ./jammy-live-server-amd64.iso /mnt/iso
  • repository 디렉토리 생성
sudo mkdir -p /var/www/html/repository/ubuntu-releases/22.04
sudo ln -s /var/www/html/repository/ubuntu-releases/22.04 /var/www/html/repository/ubuntu-releases/jammy
sudo mv /usr/local/src/jammy-live-server-amd64.iso /var/www/html/repository/ubuntu-releases/22.04/.
sudo cp -r /mnt/iso/* /var/www/html/repository/ubuntu-releases/22.04/
  • vmlinuz, initrd 파일 복사
sudo cp /mnt/iso/casper/{vmlinuz,initrd} /var/lib/tftpboot
  • TFTP 루트 디렉토리 설정
sudo chmod -R 755 /var/lib/tftpboot
sudo chown -R nobody:nogroup /var/lib/tftpboot

6. 부팅 설정 파일 생성

/srv/tftp/pxelinux.cfg/default 파일을 생성하고 PXE 부팅 메뉴를 구성

sudo mkdir -p /var/lib/tftpboot/pxelinux.cfg
sudo vim /var/lib/tftpboot/pxelinux.cfg/default
DEFAULT menu.c32
PROMPT 0
MENU TITLE PXE Boot Menu
TIMEOUT 300

LABEL Ubuntu
    MENU LABEL Install Ubuntu 22.04
    KERNEL vmlinuz
    INITRD initrd
    APPEND root=/dev/ram0 ramdisk_size=1500000 ip=dhcp url=http://192.168.56.71/ubuntu-releases/22.04/jammy-live-server-amd64.iso fsck.mode=skip

LABEL local
    MENU LABEL Boot Local Disk
    LOCALBOOT 0
728x90

dnsmasq(DHCP) 설치 및 설정

  • dnsmasq 패키지 설치
sudo apt-get install -y dnsmasq
  • dnsmasq 설정
sudo cp /etc/dnsmasq.conf /etc/dnsmasq.conf_$(date '+%Y%m%d_%H%M%S')
echo "conf-dir=/etc/dnsmasq.d/,*.conf" > /etc/dnsmasq.conf
sudo mkdir -p /etc/dnsmasq.d /var/log/dnsmasq
echo "
# Network Interfaces
bind-interfaces
interface=enp0s8
interface=lo

# DNS Settings
domain=sangchul.kr
server=8.8.8.8

# DHCP Settings
dhcp-range=192.168.56.200,192.168.56.230,12h
dhcp-option=3,192.168.56.1
dhcp-option=6,192.168.56.71

dhcp-leasefile=/var/log/dnsmasq/dnsmasq.leases 

# TFTP Settings
enable-tftp
tftp-root=/var/lib/tftpboot
dhcp-boot=pxelinux.0,pxeserver,192.168.56.71

# Logging
log-facility=/var/log/dnsmasq/dnsmasq.log
" | sudo tee /etc/dnsmasq.d/pxe.conf
  • 구성 파일 구문 확인(syntax check)
dnsmasq --test
$ dnsmasq --test
dnsmasq: syntax check OK.
  • dnsmasq 서비스 다시 시작
sudo systemctl restart dnsmasq

Nginx 설치 및 설정

curl -s https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
 | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
gpg --dry-run --quiet --no-keyring --import --import-options import-show \
 /usr/share/keyrings/nginx-archive-keyring.gpg
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-get update
sudo apt-get install -y nginx
echo "### pex.host
server {
    listen 80;
    server_name _;

    root /var/www/html/repository;
    index index.html index.htm;
    autoindex on;

    access_log /var/log/nginx/pxe.host-access.log main;
    error_log /var/log/nginx/pxe.host-error.log;

    location / {
        try_files $uri $uri/ =404;
    }
}" | sudo tee /etc/nginx/conf.d/pex.host.conf
sudo systemctl restart nginx

 

dnsmasq, nginx 재시작

sudo systemctl restart dnsmasq nginx

네트워크 부팅 설치(Network boot)

network_boot_1
network_boot_2
network_boot_3
network_boot_4
network_boot_5
network_boot_6
network_boot_7

 

DEFAULT menu.c32 PROMPT 0 메뉴 제목 PXE 부팅 메뉴 시간 초과 300 LABEL Ubuntu MENU LABEL Ubuntu 22.04 설치 KERNEL vmlinuz INITRD initrd APPEND root=/dev/ram0 ramdisk_size=1500000 ip=dhcp url=http://192.168.56.71/ubuntu-releases /22.04/jammy-live-server-amd64.iso fsck.mode=skip LABEL 로컬 메뉴 LABEL 부팅 로컬 디스크 LOCALBOOT 0
 
728x90