PXE Linux Server for Distribute of Multiple OS (windows and linux)
Dasandata_PXE Linux Server for Distribute of Multiple OS
안녕하세요.
다산데이타 입니다.
여러가지 운영체제를 네트워크를 통해 배포하는
PXE Server를 구성한 후 관련정보를 모아 정리하였습니다.
(구글문서도구에서 먼저 작성하고 옮기다 보니 깔끔하지 않네요 ㅠ.ㅠ 아래 링크에서 원본을 보실 수 있습니다.
https://docs.google.com/document/d/1VxVdVOZJjq78GGPb1o8tQ3lK3OqY4XOPb_9OkQD6y78/edit?usp=sharing)
개요
PXE란?
랜카드에 내장된 기능
네트워크를 통해 부트로더 와 커널을 로딩
CD롬 이나 USB메모리 없이 운영체제를 설치
iSCSI를 이용할 경우 Diskless 시스템도 구성 가능
한 대의 서버로 동시에 여러대의 운영제제를 배포할 수 있음
필요성
사용자들이 요구하는 다양한 운영체제를 간편하게 설치
Clonezilla 및 Winpe 도 네트워크를 통해 불러와서 사용가능 (USB메모리 불필요)
차후 - iSCSI를 활용하여 한대의 하드웨어에 여러 운영체제 테스트 가능
목표
Multiple Linux 와 Multiple Windows 를 배포할 수 있는 서버 구축.
UEFI 와 BIOS 에 영향을 받지 않는 배포 서버 구축.
(불특정 다수의 하드웨어의 BIOS 설정에 상관없이 배포될 수 있도록 하기 위해 UEFI 와 BIOS 동시 지원이 필요함.)
용어 및 배경지식
BIOS & UEFI : http://texit.tistory.com/31
하드디스크 이해 : http://webdir.tistory.com/160
MBR 과 GPT : http://cappleblog.co.kr/131
부팅프로세스 : http://0x200.tistory.com/entry/리눅스-부팅-프로세스
부트로더 :
http://egloos.zum.com/shadowxx/v/2333450
커널 : http://egloos.zum.com/dstein/v/2172464
initrd , ramdisk :
http://www.ylabs.co.kr/index.php?document_srl=1493&mid=board_centos
http://croky.tistory.com/entry/초기-RAM-디스크-사용하기-initrd
PXE 개념설명 : http://www.sauru.so/blog/setup-pxe-master/
PXE 서버 구축후기 : http://www.2cpu.co.kr/nas/10339?&page=3
PXE 를 통한 OS설치 자동화 : http://blog.pages.kr/156
처음부터 시작하는 pxe 부팅 : http://egloos.zum.com/dukuduku/v/6442770
PXE를 활용한 윈도우 설치하기 : http://subini.tistory.com/35
처음부터 시작하는 pxe 부팅 : http://egloos.zum.com/dukuduku/v/6442770
어디선가 구한 pptx (프리젠테이션) 파일
CREATING A [LEGACY & EFI] PXE SERVER USING PXELINUX
https://drive.google.com/open?id=0B7n3uYHX-nJwMDFzZGRDckF3VWc
변화된 윈도우의 설치 구조와 Install.wim 이미지 파일 이해하기
자신만의 윈도우 7 설치 DVD 만들기 (VMware + Sysprep + ImageX + 윈도우 DVD 원본 ISO)
ImageX 를 통한 Sysprep 봉인 윈도우(만능 고스트) 만들기
GimageX 이용하여 윈도우 버전별 통합 설치파일 만들기 (install.wim)
http://ooppa.tistory.com/entry/윈도우-GimageX-이용한-버전별-10817-OS-통합하기
테스트 환경 (vmware vsphere esxi hypervisor)
Linux Server - 망#1 (192.168.0.10) 용 1ea
Linux Server - 망#2 (10.0.0.10) 용 1ea
BIOS Test Client (esxi 5.5) 1ea
UEFI Test Client (esxi 5.5) 1ea
PXE 서버 와 망을 2개로 분리한 이유 :
부트로더 및 커널에 따라 UEFI 지원 여부가 다름
Windows 커널을 로드할 수 있으면서 메뉴 기능을 지원하는 UEFI용 부트로더가
리눅스 UEFI 커널 로딩을 원활하기 지원하지 않아
Windows UEFI 배포서버를 망을 분리하여 따로 구성함
(bootx64.efi 에서 ipex 가 로딩되지 않음, old kernel error 발생)
망#1 - 192.168.0.10 / BIOS - Linux+Windows / UEFI - Linux only
망#2 - 10.0.0.10 / BIOS - Linux+Windows / UEFI - Windows only
구성도
구성도 #1
구성도 #2
폴더 구조 & 파일명
tftp root path 에 의한 상대경로 고려.
http document root path 에 의한 상대경로 고려.
BIOS 와 UEFI 용 커널 빛 부트로더 디렉토리 분리.
심볼릭 링크(ln -s) 를 사용한 Source File 경로 리 매핑 (Source File 통합관리)
dnsmasq를 사용할 경우 dhcp 에서 호출 하는 기본 kernel 파일명 리 매핑. (pxelinux --> pxelinux.0)
Tree - Linux Server - 망#1 (192.168.0.10) 용
[root@dasanpxe:tftp]#
[root@dasanpxe:tftp]# pwd
/pub/tftp
[root@dasanpxe:tftp]#
[root@dasanpxe:tftp]# tree -L 3
.
├── bios
│ ├── boot -> ../boot/
│ ├── ldlinux.c32
│ ├── libcom32.c32
│ ├── libutil.c32
│ ├── pxelinux.0
│ ├── pxelinux.cfg
│ │ └── default
│ ├── SplashP.png
│ └── vesamenu.c32
├── boot
│ ├── centos
│ │ ├── 6.8
│ │ └── 7.3.1611
│ ├── clonzilla
│ │ ├── boot
│ │ ├── Clonezilla-Live-Version
│ │ ├── EFI
│ │ ├── GPL
│ │ ├── live
│ │ ├── syslinux
│ │ └── utils
│ ├── ipxe
│ │ ├── ipxe.iso
│ │ └── ipxe.krn
│ ├── memdisk
│ ├── ubuntu
│ │ ├── 12.04
│ │ ├── 14.04
│ │ └── 16.04
│ ├── winmltinst
│ │ ├── autorun.inf
│ │ ├── boot
│ │ ├── bootmgr
│ │ ├── bootmgr.efi
│ │ ├── efi
│ │ ├── setup.exe
│ │ ├── sources
│ │ ├── support
│ │ ├── wimboot
│ │ └── wimboot.ipxe
│ └── winpe
│ ├── winpeamd64.iso.bak
│ └── winpe.iso
├── default -> ./bios/pxelinux.cfg/default
├── efi.x64
│ ├── bootx64
│ ├── bootx64.0 -> bootx64
│ └── grub.cfg
└── grub.cfg -> efi.x64/grub.cfg
25 directories, 25 files
[root@dasanpxe:tftp]#
[root@dasanpxe:tftp]#
Tree - Linux Server - 망#2 (10.0.0.10) 용
[root@dasanpxe tftp]#
[root@dasanpxe tftp]# pwd
/pub/tftp
[root@dasanpxe tftp]#
[root@dasanpxe tftp]# tree -L 3
.
├── bios
│ ├── boot -> ../boot/
│ ├── ldlinux.c32
│ ├── libcom32.c32
│ ├── libutil.c32
│ ├── pxelinux.0
│ ├── pxelinux.cfg
│ │ └── default
│ ├── SplashP.png
│ └── vesamenu.c32
├── boot
│ ├── centos
│ │ ├── 6.8
│ │ └── 7.3.1611
│ ├── clonzilla
│ │ ├── boot
│ │ ├── Clonezilla-Live-Version
│ │ ├── EFI
│ │ ├── GPL
│ │ ├── live
│ │ ├── syslinux
│ │ └── utils
│ ├── ipxe
│ │ ├── install.ipxe
│ │ ├── ipxe.efi
│ │ ├── ipxe.iso
│ │ └── ipxe.krn
│ ├── memdisk
│ ├── ubuntu
│ │ ├── 12.04
│ │ ├── 14.04
│ │ └── 16.04
│ ├── winmltinst
│ │ ├── autorun.inf
│ │ ├── boot
│ │ ├── bootmgr
│ │ ├── bootmgr.efi
│ │ ├── efi
│ │ ├── setup.exe
│ │ ├── sources
│ │ ├── support
│ │ ├── wimboot
│ │ └── wimboot.ipxe
│ └── winpe
│ └── winpe.iso
├── default -> ./bios/pxelinux.cfg/default
├── efi.x64
│ └── ipxe.efi -> ../boot/ipxe/ipxe.efi
└── install.ipxe -> ./boot/ipxe/install.ipxe
25 directories, 24 files
[root@dasanpxe tftp]#
[root@dasanpxe tftp]#
준비
[Service]
isc-dhcp-server
공유기를 사용하고 있다면 충돌을 피하기 위해 dhcp 기능을 off
아키텍쳐 (BIOS / UEFI) 에 따라 다른 커널 과 부트로더를 지정할 수 있음 (3가지 방법)
tftp (xinetd)
커널 & 부트로더 전송
(선택사항) dnsmasq
dhcp 와 tftp 를 동시에 지원함
httpd
centos 설치에 필요한 파일을 local network 를 통해 전송하는데 사용
ipxe를 이용하여 booting sccript 를 전송하는데 필요함
samba(smb)
Windows 설치파일을 전송하는데 사용
winpe 에서 인증오류가 발생하는 경우 sambapasswd -a 로 접속 사용자 지정필요.
[Boot Loader Files]
pxelinux
syslinux 에서 추출
bios kernel loading
다양한 kernel 을 지원하나 uefi 는 안됨.
memdisk
syslinux 에서 추출
booting to iso file (bios만 지원됨)
bootx64.efi
Linux 설치파일 EFI 디렉토리 에서 추출
uefi kernel loading
load 하지 못 하는 kernel이 많음.
syslinux 에서 제공되는 uefi 부트로더 - syslinux.efi - 가 있으나
이번 구성에서 제대로 동작하지 않아서 제외 함.
ipxe
ipxe.org 에서 다운로드
windows 부팅에 필요한 wimboot kernel loading
uefi 의 경우 bootx64.efi를 통하면 오류 발생하여
boot script 의 path를 embed 하여 make 한 ipxe kernel 을 dhcp 에서 직접 호출해야함.
bios 에서는 sanboot를 통해 iso 파일으로도 부팅 할 수 있음.
(중요!) ipxe chain embed
[root@dasanpxe:~]#
[root@dasanpxe:~]# pwd
/root/
[root@dasanpxe:~]# git clone git://git.ipxe.org/ipxe.git
[root@dasanpxe:~]# cd ipxe/src
[root@dasanpxe:src]# pwd
/root/ipxe/src
[root@dasanpxe:src]#
[root@dasanpxe:src]# vi chain.ipxe
[root@dasanpxe:src]# cat /root/ipxe/src/chain.ipxe
#!ipxe
dhcp
chain http://10.0.0.10/install.ipxe
[root@dasanpxe:src]#
[root@dasanpxe:src]# make bin-x86_64-efi/ipxe.efi EMBED=chain.ipxe
rm -f bin-x86_64-efi/*.* bin-x86_64-efi/.certificate.* bin-x86_64-efi/.certificates.* bin-x86_64-efi/.private_key.* bin-x86_64-efi/errors bin-x86_64-efi/NIC ./util/zbin ./util/elf2efi32 ./util/elf2efi64 ./util/efirom ./util/efifatbin ./util/iccfix ./util/einfo TAGS bin-x86_64-efi/symtab
[PARSEROM]
[DEPS] arch/x86/transitions/libkir.S
<<중략>>
[BUILD] bin-x86_64-efi/uhci.ids.o
[BUILD] bin-x86_64-efi/ehci.ids.o
[BUILD] bin-x86_64-efi/hvm.ids.o
[AR] bin-x86_64-efi/blib.a
ar: creating bin-x86_64-efi/blib.a
[HOSTCC] util/elf2efi64
[VERSION] bin-x86_64-efi/version.ipxe.efi.o
[LD] bin-x86_64-efi/ipxe.efi.tmp
[FINISH] bin-x86_64-efi/ipxe.efi
rm bin-x86_64-efi/version.ipxe.efi.o
[root@dasanpxe:src]#
[root@dasanpxe:src]# ls -al
total 244K
-rw-r--r-- 1 root root 42K Jan 9 19:07 Makefile.housekeeping
<<중략>>
-rw-r--r-- 1 root root 53 Jan 18 15:50 chain.ipxe
drwxr-xr-x 20 root root 4.0K Jan 18 15:50 .
drwxr-xr-x 3 root root 4.0K Jan 18 15:53 util
drwxr-xr-x 3 root root 24K Jan 18 15:53 bin-x86_64-efi
[root@dasanpxe:src]#
[root@dasanpxe:src]# cd bin-x86_64-efi/
[root@dasanpxe:bin-x86_64-efi]# file ipxe.efi
ipxe.efi: MS-DOS executable
[root@dasanpxe:bin-x86_64-efi]#
[root@dasanpxe:bin-x86_64-efi]# cp ./ipxe.efi /pub/tftp/boot/ipxe/ipxe.efi
[root@dasanpxe:bin-x86_64-efi]#
wimboot
ipxe.org 에서 다운로드
windows kernel loading
bootx64.efi 부트로더에서 old kernel error 발생하여 ipxe를 이용하여 로딩해야 함.
[Source Files]
CentOS
local network 를 통한 http, nfs, ftp 방식을 모두 지원하므로
설치파일 전체를 iso 에서 추출하여 저장
web을 통한 net install 도 지원하지만 이 문서에서는 다루지 않았습니다.
centos 7은 uefi가 지원되지만 6.8미만은 지원되지 않습니다. (old kernel error)
Ubunut
local network 를 통한 설치방식을 지원하지 않음.
net install 만 지원 되므로 server iso 의 netboot 디렉토리에서 kernel 과 ramdisk 추출 (\install\netboot\ubuntu-installer\amd64\linux & initrd.gz)
14.04 및 16.04 모두 uefi 지원 (12.04는 테스트 되지 않음)
Clonezilla
BIOS 와 UEFI 모두 지원됨.
memdisk 로 iso로 파일 로딩 & 자체 커널을 통해 부팅 가능.
WinPE.ISO
memdisk 로 iso 파일 로딩
UEFI 에서는 memdisk 가 old kernel error 오류가 발생되어 BIOS에서만 사용가능
ipxe 에서 sanboot를 이용해서 iso 파일로 부팅하는 방법도 있음.
Multi Windows (리눅스 보다 어려움.. ㅋ)
Microsoft에서 배포하는 DISM (Deployment Image Servicing and Management)
를 사용하여 여러버젼의 윈도우를 통합할 수 있음.
cmd 방식의 DISM 대신 보통 GimageX 를 사용함.
http://ooppa.tistory.com/entry/윈도우-GimageX-이용한-버전별-10817-OS-통합하기
설치파일의 전송은 배포 서버에서 smaba 를 통해 설치파일 디렉토리를 공유하고
winpe를 통해 net use 로 공유폴더에 접근하여 setup을 실행.
net use 를 사용할 수 있는 winpe 부팅 파일인 boot.wim는
Windows ADK(Windows Assessment and Deployment Kit) 를 사용하여 추출합니다.
https://developer.microsoft.com/ko-kr/windows/hardware/windows-assessment-deployment-kit
boot.wim 은 wimboot 부트로더를 사용하여 로드할 수 있으며
wimboot 를 로드하기 위해 ipxe 의 chain 을 사용합니다.
단, uefi 클라이언트 의 경우 bootx64.efi 에서 wimboot를 지원하지 않아
wimboot 파일이 있는 위치를 삽입(embed) 한 ipxe kernel을 dhcp에서 직접 호출합니다.
[중요!] dism 으로 startnet.cmd 편집
(adk 설치 / winpe 에서 boot.wim을 복사한 후 작업합니다.)
C:\>
C:\>dir
C 드라이브의 볼륨: Win10
볼륨 일련 번호: 0246-9FF7
C:\ 디렉터리
2017-01-18 오후 06:58 225,133,601 boot.wim
2017-01-19 오후 01:02 <DIR> Intel
2015-07-10 오후 08:04 <DIR> PerfLogs
2017-01-26 오전 05:38 <DIR> Program Files
2017-01-31 오후 04:05 <DIR> Program Files (x86)
2017-01-19 오후 01:15 <DIR> Users
2017-01-31 오전 08:38 <DIR> Windows
1개 파일 225,133,601 바이트
13개 디렉터리 25,431,404,544 바이트 남음
C:\>dir boot.wim
C 드라이브의 볼륨: Win10
볼륨 일련 번호: 0246-9FF7
C:\ 디렉터리
2017-01-18 오후 06:58 225,133,601 boot.wim
1개 파일 225,133,601 바이트
0개 디렉터리 25,431,404,544 바이트 남음
C:\>
C:\>
C:\>mkdir mount
C:\>
C:\>dism /mount-image /imagefile:"c:\boot.wim" /index:1 /mountdir:"c:\mount"
배포 이미지 서비스 및 관리 도구
버전: 10.0.14393.0
이미지를 탑재하는 중
[==========================100.0%=====================]
작업을 완료했습니다.
C:\>
C:\>
C:\>
C:\>copy c:\mount\windows\system32\startnet.cmd c:\mount\windows\system32\startnet.cmd.bak
1개 파일이 복사되었습니다.
C:\>notepad c:\mount\windows\system32\startnet.cmd
C:\>
C:\>type c:\mount\windows\system32\startnet.cmd
wpeinit
net use z: \\10.0.0.10\install /user:dasan dasan
net use z: \\192.168.0.10\install /user:dasan dasan
net use z: \\10.0.0.10\install /user:dasan dasan
net use z: \\192.168.0.10\install /user:dasan dasan
z:
setup
C:\>dism /unmount-image /mountdir:"c:\mount" /commit
배포 이미지 서비스 및 관리 도구
버전: 10.0.14393.0
이미지를 저장하는 중
[==========================100.0%=====================]
이미지를 탑재 해제하는 중
[==========================100.0%=====================]
작업을 완료했습니다.
C:\>
C:\>
C:\>end
설정파일
Service
[Service] dhcpd.conf
[root@dasanpxe:/]# cat /etc/dhcp/dhcpd.conf
#
# DHCP Server Configuration file.
# see /usr/share/doc/dhcp*/dhcpd.conf.example
# see dhcpd.conf(5) man page
#
authoritative;
### ens224 conf start ###
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.50 192.168.0.149;
option routers 192.168.0.1;
option broadcast-address 192.168.0.255;
option domain-name-servers 8.8.8.8;
default-lease-time 6000;
max-lease-time 72000;
### PXE Server IP ###
next-server 192.168.0.10;
}
#### ens225 conf end ####
#### 192.168.0.10 UEFI & BIOS ###
class "pxeclient" {
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
if substring (option vendor-class-identifier, 15, 5) = "00000" {
# BIOS client
filename "bios/pxelinux.0";
}
else {
# default to UEFI 64 bit
filename "efi.x64/bootx64";
}
}
[root@dasanpxe:/]#
<!--- 10.0.0.10 의 경우 아래 참조 --->
#### 10.0.0.10 UEFI & BIOS ###
class "pxeclient" {
match if substring (option vendor-class-identifier, 0, 9) = "PXEClient";
if substring (option vendor-class-identifier, 15, 5) = "00000" {
# BIOS client
filename "bios/pxelinux.0";
}
else {
# default to UEFI 64 bit
filename "efi.x64/ipxe.efi";
}
[Service] tftp.con
[root@dasanpxe:/]# cat /etc/xinetd.d/tftp
# default: off
# description: The tftp server serves files using the trivial file transfer \
# protocol. The tftp protocol is often used to boot diskless \
# workstations, download configuration files to network-aware printers, \
# and to start the installation process for some operating systems.
service tftp
{
socket_type = dgram
protocol = udp
wait = yes
user = root
server = /usr/sbin/in.tftpd
server_args = -s /pub/tftp
disable = no
per_source = 11
cps = 100 2
flags = IPv4
}
[root@dasanpxe:/]#
[root@dasanpxe:/]#
[Service] httpd.conf
[root@dasanpxe:/]# cat /etc/httpd/conf/httpd.conf
#DocumentRoot "/var/www/html"
DocumentRoot "/pub/tftp/boot"
#
# Relax access to content within /var/www.
#
<Directory "/pub/tftp/boot">
AllowOverride None
# Allow open access:
Require all granted
</Directory>
# Further relax access to the default document root:
<Directory "/pub/tftp/boot">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
[Service] samba.conf + smbpasswd -a
# samba 접근시 사용할 사용자 이름과 아이디 생성 및 smbpasswd 지정
[root@dasanpxe:/]# adduser dasan
[root@dasanpxe:/]# passwd dasan
Changing password for user dasan.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[root@dasanpxe:/]#
[root@dasanpxe:/]#
[root@dasanpxe:/]#
[root@dasanpxe:/]#
[root@dasanpxe:/]# cat /etc/samba/smb.conf
workgroup = WORKGROUP
interfaces = ens224
security = user
passdb backend = tdbsam
map to guest = Bad User
[install]
comment = windows install distro
path = /pub/tftp/boot/winmltinst
public = yes
writable = yes
write list = dasan
create mask = 0777
directory mask = 0777
[root@dasanpxe:/]#
[root@dasanpxe:/]# smbpasswd -a dasan
New SMB password:
Retype new SMB password:
[root@dasanpxe:/]#
[root@dasanpxe:/]#
(옵션) [Service] dnsmasq.conf or pxe.conf
[root@dasanpxe:/]# cat /etc/dnsmasq.conf
# We only want this running on the interface facing the dedicated PXE network
interface=ensxxx
# PXE Subnet
dhcp-range=xx.x.x.50,xx.x.x.150,4h
dhcp-option=option:router,xx.x.x.1
server=8.8.8.8
# PXE Boot Options
# 프롬프트의 경우 BIOS Only 로만 사용할때는 잘 되지만 UEFI 와 함께 사용하면 잘 안됨
#pxe-prompt="Choose: "
#pxe-prompt="What system shall I netboot?", timeout before first available
#pxe-prompt="Press F8 for the Select Menu.... time out", 10
##### PXEClient:Arch:00000
pxe-service=X86PC, "Boot from local disk", 64
pxe-service=X86PC, "Boot BIOS PXE", bios/pxelinux
##### PXEClient:Arch:00007
pxe-service=BC_EFI, "Boot from local disk", 64
pxe-service=BC_EFI, "Boot UEFI PXE-BC", efi.x64/bootx64
##### PXEClient:Arch:00009
pxe-service=X86-64_EFI, "Boot UEFI PXE-64", efi.x64/bootx64
#or
#pxe-service=X86-64_EFI, "Boot UEFI PXE-64", boot/ipxe/ipxe.efi
# TFTP Configuration
enable-tftp
tftp-root=/pub/tftp
[root@dasanpxe:/]#
Boot Menu
[Boot Menu] pxelinux.cfg/default
[root@dasanpxe:/]# cat /pub/tftp/bios/pxelinux.cfg/default
UI vesamenu.c32
#default vesamenu.c32
#PROMPT 0
timeout 300
MENU TITLE Dasandata Legacy(BIOS) PXE Boot Menu (192.168.0.10)
MENU RESOLUTION 640 480
MENU BACKGROUND SplashP.png
MENU INCLUDE graphics.conf
label 1
menu label ^Boot from local drive
menu default
localboot 0
label blank
menu label -------------------------------------------------------------------
label 2
menu label ^Windows Multi Install via ipxe.krn + wimboot
kernel boot/ipxe/ipxe.krn dhcp && chain boot/winmltinst/wimboot.ipxe
label 3
menu label Win^PE ISO via memdisk
root (hd0,0)
kernel boot/memdisk
append iso initrd=boot/winpe/winpe.iso raw
label 4
menu label Clone^zilla live via tftp (192.168.0.10)
kernel boot/clonzilla/live/vmlinuz fetch=tftp://192.168.0.10/pub/tftp/boot/clonzilla/live/filesystem.squashfs boot=live union=overlay keyboard-layouts=NONE locales=en_US.UTF-8
append initrd=boot/clonzilla/live/initrd.img
label 6
menu label ^iPXE (iso) via memdisk
kernel boot/memdisk
append iso initrd=boot/ipxe/ipxe.iso
label blank
menu label -------------------------------------------------------------------
label 10
menu label ^Centos 7.3 1611 Minimal via local http (192.168.0.10)
kernel boot/centos/7.3.1611/vmlinuz
append initrd=boot/centos/7.3.1611/initrd.img ip=dhcp inst.repo=http://192.168.0.10/centos/7.3.1611/
label 11
menu label ^Centos 6.8 Minimal via local http (192.168.0.10)
kernel boot/centos/6.8/images/pxeboot/vmlinuz
append initrd=boot/centos/6.8/images/pxeboot/initrd.img method=http://192.168.0.10/centos/6.8/ devfs=nomount
label 12
menu label ^Ubuntu 16.04 Server via Web
kernel boot/ubuntu/16.04/linux
append initrd=boot/ubuntu/16.04/initrd.gz
label 13
menu label ^Ubuntu 14.04 Server via Web
kernel boot/ubuntu/14.04/linux
append initrd=boot/ubuntu/14.04/initrd.gz
label blank
menu label -end---------------------------------------------------------------
[root@dasanpxe:/]#
[Boot Menu] grup.cfg
[root@dasanpxe:/]# cat /pub/tftp/efi.x64/grub.cfg
set menu_color_normal=white/black
set menu_color_highlight=black/light-gray
set timeout=30
insmod png
#### Menu Start
menuentry 'Boot from Local Drive' {
exit
}
menuentry 'Clonzilla Live via tftp (192.168.0.10)' {
linuxefi boot/clonzilla/live/vmlinuz fetch=tftp://192.168.0.10/pub/tftp/boot/clonzilla/live/filesystem.squashfs boot=live union=overlay keyboard-layouts=NONE locales=en_US.UTF-8
initrdefi boot/clonzilla/live/initrd.img
}
menuentry 'Centos 7.3 1611 Minimal via http (192.168.0.10)' {
linuxefi boot/centos/7.3.1611/vmlinuz ip=dhcp inst.repo=http://192.168.0.10/centos/7.3.1611/
initrdefi boot/centos/7.3.1611/initrd.img
}
menuentry 'Ubuntu 16.04 Server via Web' {
linuxefi boot/ubuntu/16.04/linux
initrdefi boot/ubuntu/16.04/initrd.gz
}
menuentry 'Ubuntu 14.04 Server via Web' {
linuxefi boot/ubuntu/14.04/linux
initrdefi boot/ubuntu/14.04/initrd.gz
}
[root@dasanpxe:/]#
[Boot Menu] wimboot.ipxe
[root@dasanpxe:/]# cat /pub/tftp/boot/winmltinst/wimboot.ipxe
#!ipxe
kernel wimboot
initrd boot/bcd BCD
initrd boot/boot.sdi boot.sdi
initrd sources/boot.wim boot.wim
boot
[root@dasanpxe:/]#
[Boot Menu] install.ipxe
[root@dasanpxe:/]# cat /pub/tftp/boot/ipxe/install.ipxe
#!ipxe
#install.ipxe
:start
menu Please choose an operating system to install
item --gap Windows UEFI & BIOS ------------------------
item windows Windows Install via ipxe-wimboot-boot.wim
#item --gap ETC ------------------------------
item shell iPXE shell
item --gap exit ---------------------------------------
item exit Exit
choose --default exit --timeout 20000 target && goto ${target}
:windows
kernel boot/winmltinst/wimboot
initrd boot/winmltinst/boot/bcd BCD
initrd boot/winmltinst/boot/boot.sdi boot.sdi
initrd boot/winmltinst/sources/boot.wim boot.wim
boot
:failed
echo Booting failed, dropping to shell
goto shell
:shell
echo Type 'exit' to get the back to the menu
shell
set menu-timeout 0
set submenu-timeout 0
goto start
:exit
kernel
boot
[root@dasanpxe:/]#
(기타, 참조용) ipxe menu example
#!ipxe
#/pub/tftp/install.ipxe
:start
menu Please choose an operating system to install
item --gap Linux --------------------------------------
item centos7.3.1611.http Centos 7.3.1611 via Local http
item centos6.8 Centos 6.8 via Local http
item ubuntu12.04 Ubuntu 12.04 via Web
item ubuntu14.04 Ubuntu 14.04 via Web
item ubuntu16.04 Ubuntu 16.04 via Web
item --gap Windows ------------------------------------
item windows Windows Install via wimboot-boot.wim
item --gap ETC ----------------------------------------
item clonezilla Clonezilla
item winpe.iso.bios Windows PE ISO via sanboot-iso [BIOS]
item winpe.iso.memdisk Windows PE ISO via memdisk
item shell iPXE shell
item --gap exit ---------------------------------------
item exit Exit
choose --default exit --timeout 20000 target && goto ${target}
:centos7.3.1611.http
kernel centos/7.3.1611/vmlinuz inst.repo=http://10.0.0.2/centos/7.3.1611/ initrd=initrd
initrd centos/7.3.1611/initrd.img
boot
#:centos7.3.1611.http
# kernel centos/7.3.1611/vmlinuz initrd=centos/7.3.1611/initrd.img repo=http://10.0.0.2/centos/7.3.1611/
# initrd centos/7.3.1611/initrd.img
# boot
:centos6.8
kernel centos/6.8/vmlinuz initrd=centos/6.8/initrd.img repo=http://10.0.0.2/centos/6.8/
initrd centos/6.8/initrd.img
boot
:ubuntu12.04
kernel ubuntu/12.04/linux
initrd ubuntu/12.04/initrd.gz
boot
:ubuntu14.04
kernel ubuntu/14.04/linux
initrd ubuntu/14.04/initrd.gz
boot
:ubuntu16.04
kernel ubuntu/16.04/linux
initrd ubuntu/16.04/initrd.gz
boot
:windows
kernel winboot/wimboot
initrd winboot/boot/bcd BCD
initrd winboot/boot/boot.sdi boot.sdi
initrd winboot/boot/boot.wim boot.wim
boot
:winpe.iso.bios
sanboot http://10.0.0.2/winpe/winpeamd64.iso || goto failed
goto start
:winpe.iso.memdisk
kernel memdisk
initrd winpe/winpeamd64.iso || goto failed
goto start
:clonezilla
kernel clonzilla/live/vmlinuz fetch=tftp://10.0.0.2/pub/tftp/clonzilla/live/filesystem.squashfs boot=live union=overlay keyboard-layouts=NONE locales=en_US.UTF-8
initrd clonzilla/live/initrd.img
boot
:failed
echo Booting failed, dropping to shell
goto shell
:shell
echo Type 'exit' to get the back to the menu
shell
set menu-timeout 0
set submenu-timeout 0
goto start
:exit
kernel pxelinux.0
boot
시연화면
UEFI LInux
https://www.youtube.com/watch?v=cg3VcF61TUk
UEFI Windows
https://www.youtube.com/watch?v=FUNPbetmypk
향후 과제
기가비트 and 10GbE 네트워크로 업그레이드 후 배포 속도 비교
dnsmasq 와 isc-dhcp + tftp (xinetd) 의 배포 속도 비교
Windows UEFI & BIOS 배포서버 통합, 하나의 서버에서 모두 배포
iSCSI 를 통한 DiskLess 시스템 구축 (PC방, 대형 강의실 등 활용)
kickstart 를 이용한 리눅스 자동설치
차세대 기술 - Goodbye PXE, Hello HTTP Boot
UEFI 에서 http를 통한 kernel loading 자체 지원
youtube - https://www.youtube.com/watch?v=EjJUBxM7pNM
ipxe -
http://ipxe.org/appnote/uefihttp
https://firmwaresecurity.com/2015/05/09/new-uefi-http-boot-support-in-uefi-2-5/
23.7 HTTP Boot - http://www.uefi.org/sites/default/files/resources/UEFI%202_5.pdf
http://manualzz.com/doc/12137633/goodbye-pxe--hello-http-boot
http://www.slideshare.net/eurolinux/uefi-presentation
후기
끝날것 같지 않던 삽질을 드디어 마쳤습니다. ^^;
도움이 될만한 정보였기를 바랍니다.
댓글