오늘은 PXE 네트워크 부팅으로 서버용으로 사용중인 미니 PC의 운영체제를 재설치해야 합니다.
KVM으로 연동은 되어있지만, 제 PC의 BIOS와 PiKVM과의 호환이 좋지 않아 부팅중에 USB 대용량 저장장치 에뮬레이팅 기능이 활성화 되면 키보드 마우스가 인식하지 않습니다.
이전글 참고.
때문에 KVM 기능으로 OS 설치가 불가능해 네트워크 부팅을 사용해야 할 처지가 되었습니다.
PC PXE(네트워크 부팅) 활성화 하기
우선 제 시나리오 입니다.
시놀로지 DHCP서버 기능을 이용하여 따로 리눅스 서버 구축 없이 PXE 부팅 구현. 그리고 webstation으로 간단하게 http서버 오픈하여 간단하게 PXE파일 다운로드가 가능하게 설정.
PXE부팅으로 IPXE로 부팅후 미리 제작한 메뉴로 진입. 후 OS 설치.
우선 네트워크 부팅을 위해서는 바이오스 상에서 네트워크 장치를 미리 활성화를 시켜주고 부팅 우선순위로 지정 합니다.
PXE(네트워크 부팅) 구성하기
그다음 시놀로지 제어판 -> 파일 서비스 -> 고급 탭으로 이동
하단으로 내리면 TFTP 항목이 있는데 TFTP 서비스를 활성화 한 뒤, 부팅에 사용될 파일들이 있는곳을 TFTP 루트 폴더로 지정합니다.
시놀로지 DHCP 패키지를 설치하고 DHCP 서버를 활성화 시켜주어야 합니다. 서브넷을 생성 해 주어야 하는데, 사용중인 라우터의 IP 대역을 그대로 사용하시면 됩니다. 그 다음 PXE탭으로 가서 또 PXE를 활성화 해주어야 하고, 로컬 TFTP 서버를 선택하면 앞에서 루트 폴더로 지정한 곳의 내용물이 나오게 됩니다. IPXE를 사용하기 위해서는 undionly.kpxe 파일을 선택하면 이 파일로 부팅이 가능해 집니다.
undionly.kpxe는 이곳 에서 다운로드 가능 합니다.
ipxe로 부팅된 후 사용할 메뉴 파일을 제작해야 합니다. 메뉴 파일을 제작해두지 않으면 이미지 로드와 부팅과같은 명령어들을 일일이 입력해야 하기 때문에 효율이 떨어지고 귀찮기때문에 미리 만들어두는게 좋습니다.
개인 환경마다 base-url로 사용할 주소와 부팅에 사용할 파일들이 다르기 때문에 바로 사용은 못하겠지만, 일단 참고용으로 제가 만든 menu.ipxe 파일 첨부합니다.
menu.ipxe
#!ipxe
# Variables are specified in boot.ipxe.cfg
# Some menu defaults
set menu-timeout 5000
set base-url http://192.168.0.100:81/
:start
menu iPXE boot menu for ${manufacturer} ${product} (${archb}bit)
item proxmox proxmox
item debian debian
item gparted gparted
item boot-repair boot-repair
item shell Drop to iPXE shell
item reboot Reboot computer
item
item --key x exit E${chotkey}x${resetbold}it iPXE and continue BIOS boot
choose --timeout ${menu-timeout} --default ${menu-default} selected || goto cancel
set menu-timeout 0
goto ${selected}
:cancel
echo You cancelled the menu, dropping you to a shell
:shell
echo Type 'exit' to get the back to the menu
shell
set menu-timeout 0
set submenu-timeout 0
goto start
:failed
echo Booting failed, dropping to shell
goto shell
:proxmox
initrd ${base-url}proxmox/initrd
chain ${base-url}proxmox/linux26 vga=791 video=vesafb:ywrap,mtrr ramdisk_size=2097152 rw quiet initrd=initrd splash=silent
imgfree
goto start
:debian
menu label debian
kernel ${base-url}debian-installer/amd64/linux vga=788 initrd=initrd.gz
initrd ${base-url}debian-installer/amd64/initrd.gz
boot || imgfree
goto start
:gparted
menu label gparted
kernel ${base-url}memdisk iso raw
initrd ${base-url}iso/gparted.iso
boot || imgfree
goto start
:boot-repair
menu label boot-repair
kernel ${base-url}memdisk iso raw
initrd ${base-url}iso/boot-repair.iso
boot || imgfree
goto start
PXE(네트워크 부팅) 시연
실제로 작업을 하면서 글을 쓰다보니 놓친 사진들이 많아 vmware로 시연한 사진들이 일부 포함되어 있으니 참고 바랍니다. ( 실 사용과 일치 )
이제 직접 부팅을 시도해 봅니다. 모든 구성이 정상이라면 현재 PC의 맥주소와 할당된 아이피, DHCP 서버주소 ( 여기서는 시놀로지의 IP )가 표시 됩니다.
PXE환경에서 undionly.kpxe파일이 정상적으로 로드가 되면 iPXE 로더로 부팅이 됩니다.
iPXE로 부팅이되면 컨트롤 + B 조합으로 커맨드라인으로 진입할 수 있습니다.
커맨드라인으로 진입되면 우선 dhcp를 입력하여 아이피를 할당 받는 작업을 합니다.
chain http://메뉴파일주소를 입력하여 메뉴로 부팅을 시도합니다.
메뉴 작성에 문제가 없다면 위와 유사한 형태의 메뉴가 표시가 됩니다.
pxe 부팅까지는 금방 하는데 메뉴에서 인스톨러로 부팅시키는 과정에서 삽질을 오래 해서 그런가 체감상 엄청 오래 걸린 듯 합니다.
다행히 많은 시도 끝에 부팅 성공했고 서버도 다시 잘 세팅했습니다. 끝.