내 PxE grub2 구성에 누락된 사항

내 PxE grub2 구성에 누락된 사항

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"로 지정했다는 것입니다. 이걸 처음부터 발견했다면 더 빨리 끝낼 수 있었을 텐데.

이 답변많은 도움이 되었습니다.

관련 정보