[PXE] 구축 가이드

이번에 사내 PXE를 갈아 엎으려고 최근에 진행 해본 Project이다.

VM상에서 테스트를 해보았다.

먼저 PXE는 tftp, dhcp , apache(option임) 으로 사용이 가능하다.

  • tftp-hpa,tftpd-hpa (pxe 파일 전송시 필요)
  • isc-dhcpd-server(pxe client에서 ip통신을 할 수 있도록 ip를 할당)
  • apache2 (역시 파일 전송 및 autoinstall file 배포시 사용)
  • nfs (nfs도 역시 파일 전송을 사용할때 씀)

apt로 모두 패키지를 설치해준다.

환경은 다음과 같다

  • /tftpboot : boot file들 모음
  • /tftpboot/pxelinux.cfg/ : 부팅시 불러올 템플릿(?) 모음
  • /var/www/html : autoinstall or 불러올 file
  • /os : iso를 풀어둔 os리스트 폴더

sudo mkdir /tftpboot

로 bootfile을 불러올 디렉터리를 생성한다.

tftp의 설정은

sudo vi /etc/default/tftpd-hpa

안에 있으며,

TFTP_DIRECTORY="/tftpboot"

으로 설정해준다.

이후 pxelinux, syslinux-common을 설치하여 pxe의 기본 설정을 한다.

sudo apt install pxelinux syslinux-common

sudo cp /usr/lib/syslinux/modules/bios/ldlinux.c32 /tftpboot
sudo cp /usr/lib/PXELINUX/pxelinux.0 /tftpboot

으로 위 폴더에 넣어준다

추가적으로 여러 os를 같이 넣어 둘 예정이라면,

sudo cp /usr/lib/syslinux/modules/bios/menu.c32 /tftpboot

로 이동 시켜 두면 추후에 메뉴도 설정할 수 있다.

이제 pxe부팅시 기본으로 불러오는 파일을 생성해 보자

sudo mkdir /tftpboot/pxelinux.cfg

로 diretory를 생성한다.

default 라는 파일을 /tftpboot/pxelinux.cfg/default로 생성한다.

sudo vi /tftpboot/pxelinux.cfg/default

defaultfile은 자신의 환경에 맞게 설정해 준다.

예시로 ubuntu를 설치하는 default파일은 다음과 같다

여기서는 pxe server ip는 10.0.0.5이며, Kernel과 initrd는 nfs 폴더 안에 있다.

label ubuntu-Server-20.04
        menu label Install Ubuntu Server 20.04 LTS -AutoInstall
        kernel vmlinuz_20.04
        append boot=casper maybe-ubiquity netboot=nfs ip=dhcp nfsroot=10.0.0.5:/data/OS/ubuntu_20.04 initrd=initrd_20.04 

menu를 표시하는건 다음과 같다

default menu.c32
prompt 0

MENU TITLE OS SELECTION MENU
MENU AUTOBOOT Starting localdisk boot  in # seconds
timeout 100
TOTALTIMEOUT 9000

label disk0
  localboot 0
  MENU LABEL Boot local disk

label ubuntu-Server-20.04
        menu label Install Ubuntu Server 20.04 LTS
        kernel vmlinuz_20.04
        initrd=initrd_20.04
        append boot=casper maybe-ubiquity netboot=nfs ip=dhcp nfsroot=10.0.0.5:/data/ubuntu20.04

위에서 봐야할 곳은

  • vmlinuz_20.04
  • initrd_20.04

이다. 위 두파일은 ubuntu설치 iso기준으로 casper 폴더 안에 initrd, vmlinuz라고 되어있을것이다. /tftpboot에 복사해 둔다

NFS 설치

default 파일에서 nfs를 이용하여 파일을 땡겨오니, pxe서버에도 nfs를설치 해 준다.

sudo apt install nfs-kernel-server -y

설치 이후에는 nfs서버 root폴더를 지정해 줘야한다.

/etc/exports

안에 있으며,

예시는

#절대경로(/data/os, ip(권한)
/data/os 10.0.0.0/24(ro,sync,no_subtree_check) #읽기 전용으로 공유

이후 nfs를 재시작 한다.

sudo systemctl restart nfs-kernel-server

이 글에서는 /data/os안에 ubuntu20.04 디렉터리를 만들어서 진행 하였다.

isc-dhcp-server설치

isc-dhcp-server는 pxe로 부팅 할 때, ip를 할당해주는 역할을 한다. pxe client에서 요청을 날리면 dhcp에서 ip를 할당하여 ip통신을 가능하게 해준다.

/etc/default/isc-dhcp-server

안에서 default interface바꿔줘야함

자신 Ip할당 해둬야함.

dhcpd.conf

subnet 10.0.0.0 netmask 255.255.255.0 {
 allow booting;
 allow bootp;
 option routers                  10.10.10.1; #원하는 ip 주소 넣기
 option subnet-mask              255.255.255.0;
 option domain-name              "example.com";
 option domain-name-servers       1.1.1.1;
 option time-offset              -18000;     # Eastern Standard Time
 range 10.0.0.200 10.0.0.220; # 할당 할 ip주소의 범위
 next-server 10.0.0.55; #pxe가 설치된 서버 ip 를 넣는다
 filename "pxelinux.0";
 INTERFACES="ens19"; #pxe 서버에 interface를 설정해 준다. 
}

위는 템플릿 파일이며, 자신의 입맛대로 고쳐서 사용하면 된다.


pxe 부팅 해보기

해당 pxe 서버를 통해 부팅을 해보자.

(proxmox부팅사진)

Mac주소 기반 booting 하기

여러대의 PC,Sever에 배포를 하 되, mac주소에 따라서 os를 어떤걸 깔아야할 지 지정 해 줄수 있다.
이렇게 하면 어떤 pc에는 ubuntu를, 어떤pc에는 rhel을 설치 할 수 있게 된다.

예시 mac : aa:aa:aa:aa:aa:aa 으로 진행하며, mac based file은 아래 저장을 한다.

/tftpboot/pxelinux.cfg/

: 으로 되어있는걸 -으로 바꾸면

aa-aa-aa-aa-aa-aa

으로 바뀌며, 앞에 접두사로 01-을 붙혀준다.

01-aa-aa-aa-aa-aa-aa

으로 하고 해당 파일안에 pxe부팅에 필요한 정보들을 적어넣는다.

DEFAULT ubuntu-20.04
LABEL ubuntu-20.04
  MENU LABEL Install Ubuntu 20.04 LTS - AutoInstall
  KERNEL vmlinuz_20.04
  APPEND root=/dev/nfs boot=casper maybe-ubiquity netboot=nfs ip=dhcp nfsroot=10.0.0.55:/data/os/ubuntu20.04 initrd=initrd_20.04 autoinstall url=http://10.0.0.55/user-data-20.04

위는 예시이다. 입맛에 맞춰서 수정하면 된다


트러블 슈팅

ubuntu iso를 mount 하고 정확하게 nfsroot안에 넣었지만,

unable to find a live file system on the network 

와 같은 에러가 발생하면서 hang이 걸린다면,

mount 햇던 iso파일 안에

.disk

라는 디렉터리가 있다. 이 디렉터리를 해당 nfsroot에 옮겨주면 문제 해결~

Read more

[VOIP] Korea-WAN-VoIP

일본인 친구들과 이야기 하다보니, VoIP로 WAN을 만들 수 있지 않을까 싶어서 프로젝트를 시작 해봤다. VoIP를 VPN을 묶어서 WAN으로 만들 수 있지 않을까? 생각 해보니, 이미 일본측에서는 해당 프로젝트를 진행하고 있었다. 한국쪽에서도 해당 프로젝트를 진행해보기 위해서, 디스코드 서버를 생성하였다. Korea-WAN-VoIP 먼저, 용어 정리를 해보고 시작하자. PBX : Private Branch Exchange 의 약자로,

By dobob

[Yubikey] Yubikey 5C 사용기

최근에 Steam Account가 2FA를 사용해도 해킹을 당하는 일이 있어, 보안에 관심이 생겨 Yubikey를 하나 구입했다. Amazon.com에서 구매를 하였고, 해당 Hardware 키가 도착하여 리뷰를 작성한다. Yubikey Manager 자신이 사용하고 있는 OS상에서 사용할 Yubikey Manager를 다운받고 실행한다. Yubikey 5C NFC를 구매하였으므로, 해당 제품의 정보가 나오는 것을 볼 수 있다. Application -&

By dobob

[docker] VPN을 통하여 컨테이너 통신

먼저, 해당 프로젝트는 kawaii-beer의 프로젝트 중 발췌함. NAS에 docker를 설치하여, 해당 컨테이너를 VPN을 통하여 패킷을 전송할 수 있게 할 생각이다. 그래서 찾아본 방법이 vpn컨테이너와 service 컨테이너를 따로 둬서 service 컨테이너에서 발생하는 모든 traffic은 vpn컨테이너를 통해서 통신할 수 있게 하는 방법을 생각했다. 예시로 사용한 Service는 minIO이다. (망분리(?)) 그래서 사용한 image는 다음과

By dobob