PxE를 사용하여 물리적 서버 설치를 자동화하려고 합니다. 이 경우에는 Oracle Virtual Server(OVS, Xen 및 사용자 정의 Linux 커널이 포함된 RHEL/Centos 유사 시스템)를 설치합니다. 나는 팔로우한다단계 개요존재하다공식 문서그리고 ansible을 사용하여 구현합니다.
요약하면 몇 가지 중요한 고려 사항을 고려했습니다.
- 저는 버전 3.4.2를 사용하고 있으므로 UEFI 기반 PXE 클라이언트용 부트로더를 직접 구축하고 있습니다.
- GRUB2 부트 로더를 구축하는 데 필요한 grub2-tools 패키지를 제공하기 때문에 Oracle Linux 7.3을 사용하고 있습니다.
ansible을 사용하여 tftp, dhcp 및 http 서버(단순화를 위해 모두 동일한 상자에 있음)를 구성했는데 모두 예상대로 작동하는 것 같습니다(파일 다운로드 및 IP 할당 테스트를 거쳤으며 모든 것이 잘 작동합니다). 이것이 내가 부트로더를 만드는 방법이다
$ grub2-mkimage -p '(tftp,<tftp server IP>)' -O x86_64-efi -d <path to grub2 modules taken from installation iso> -c <path to grub2.cfg file> -o <path to tftp-server dir>/core.efi <embeded modules: net efinet tftp gzio part_gpt efi_gop efi_uga video_bochs video_cirrus all_video ext2 multiboot2 normal>
내 grub2.cfg 파일의 현재 상태는 다음과 같습니다.
set timeout=60
# Load modules
insmod net
insmod efinet
insmod tftp
insmod gzio
insmod part_gpt
insmod efi_gop
insmod efi_uga
insmod video_bochs
insmod video_cirrus
insmod all_video
insmod ext2
insmod multiboot2
insmod normal
menuentry 'Install Oracle VM Server 3.4.2' --class fedora --class gnu-linux --class gnu --class os {
# dhcp, tftp server in my network
set net_default_server=<tftp IP>
# This is for testing
echo 'Network status: '
net_ls_addr
net_ls_routes
echo 'Loading Xen...'
multiboot2 /isolinux/xen.gz dom0_mem=max:11582M dom0_max_vcpus=20 noreboot
echo 'Loading Linux Kernel...'
module2 /isolinux/vmlinuz ip=dhcp vlanid=<vlan> repo=http://<Http server IP>/pxelinux/ISOs/OVS3.4.2 ks=http://<http server IP>/pxelinux/kickstart/ovs-3.4.2.ks ksdevice=<mac address of the dhcp configured nic>
echo 'Loading initrd...'
module2 /isolinux/initrd.img
}
서버가 올바르게 시작되고, IP가 설정되고, core.efi
이미지와 파일이 tftp 서버에서 다운로드되고, "Welcome to Grub!" grub2.cfg
메시지가 표시되지만 grub2.cfg
파일에 구성된 것을 실행해야 하면 다음과 같은 일이 발생합니다.
//Start PXE Over IPv4
Station IP Address is X.X.X.X
Server IP Address is X.X.X.X
NBP filename is /boot/grub2/core.efi
NBP filesize is 397824 Bytes
Downloading NBP file...
Succeed to download NBP file.
Downloading NBP file...
Succeed to download NBP file.
Welcome to GRUB!
Unknown command 'menuentry'.
Unknown command '#'.
Unknown command '#'.
Unknown command 'echo'.
efinet0 <mac address> <dhcp delivered ip>
efinet0:local <net segment>/<netmask> efinet0
efinet0:default 0.0.0.0/0 gw <network gateway>
Unknown command 'echo'.
Unknown command 'echo'.
Unknown command 'echo'.
Unknown command '}'.
마지막으로 grub2.cfg 파일의 모든 명령을 올바르게 입력하고 kickstart를 사용하여 실제로 시스템을 부팅하고 설치할 수 있는 grub 프롬프트로 이동했습니다. grub2.cfg 파일을 실행하기 전에 일부 모듈을 가져오지 않기 때문에 grub2 이미지 생성에서 뭔가 빠진 것 같습니다. 특정 명령만 실행되고 나머지는 "알 수 없음"입니다.
답변1
몇 주 동안 이 문제를 해결한 후에 마침내 문제를 해결했습니다. Oracle 설명서에 있는 내용을 시도하고 다음 업데이트(3.4.3 및 3.4.4)에 대한 변경 로그에서 이를 발견했기 때문에 OVS ISO의 최신 버전으로 업그레이드도 시도했습니다.
Oracle VM Server를 위한 단순화된 UEFI PXE 부팅
이번 릴리스부터 PXE 부트 환경의 UEFI 기반 시스템에 Oracle VM Server를 설치하기 위해 GRUB 2 부트 로더를 수동으로 구축할 필요가 없습니다. Oracle VM Server ISO 이미지 파일은 UEFI 기반 시스템을 위한 /EFI/BOOT/grubx64.efi 부트 로더를 제공합니다. Oracle VM 설치 및 업그레이드 설명서의 PXE 부팅에서 x86용 Oracle VM Server 설치를 참조하십시오.
grub.cfg 파일을 어디에 설정했는지, 이름을 어떻게 지정했는지에 관계없이 해당 버전의 grub 이미지를 사용하는 것도 작동하지 않습니다.
나는 돌아가서 나만의 그럽 이미지를 만들었고 이 명령은 완벽하게 작동했습니다.
다음 명령을 사용하여 grub 이미지를 만듭니다.
grub2-mkimage -p '(tftp,)/' -O x86_64-efi -d /grub2/lib/grub/x86_64-efi -o /mycore.efi efinet tftp
다음 내용으로 "grub.cfg"(이 파일의 이름을 변경하지 않음)를 생성하고 이를 코어 이미지와 모든 grub2 모듈이 포함된 하위 디렉터리 옆에 배치합니다.
set default="1" function load_video { insmod efi_gop insmod efi_uga insmod video_bochs insmod video_cirrus insmod all_video } load_video set gfxpayload=keep insmod gzio insmod part_gpt insmod ext2 set timeout=60 '### END /etc/grub.d/00_header ### echo "Setting root with device lable Oracle VM Server" search --no-floppy --set=root -l 'Oracle VM Server' '### BEGIN /etc/grub.d/10_linux ### menuentry 'Install Oracle VM Server 3.4.4' --class fedora --class gnu-linux --class gnu --class os { echo 'Loading Xen...' multiboot2 /isolinux/xen.gz dom0_mem=max:11582M dom0_max_vcpus=20 noreboot echo 'Loading Linux Kernel...' module2 /isolinux/vmlinuz ip=dhcp vlanid=<vlan> repo=http://<path to ISO> ks=http://<path to kickstart> ksdevice=<device mac address> echo 'Loading initrd...' module2 /isolinux/initrd.img }
물론 dhcp "filename" 지시문에서 /mycore.efi를 가리켜야 합니다.
마지막으로 내 tftp 파일은 다음과 같습니다.
tftproot grub2 grub.cfg mycore.efi x86_64-efi *.mod isolinux initrd.img TRANS.TBL vmlinuz xen.gz
나의 결정적인 실수는 파일 이름을 "grub.cfg" 대신 "grub2.cfg"로 지정했다는 것입니다. 이걸 처음부터 발견했다면 더 빨리 끝낼 수 있었을 텐데.
이 답변많은 도움이 되었습니다.