linuxefi는 "먼저 커널을 로드해야 합니다"를 발생시킵니다.

linuxefi는 "먼저 커널을 로드해야 합니다"를 발생시킵니다.

이에 대해 여러 가지 질문이 있다는 것을 알고 있지만 이번 질문은 다른 것 같습니다. 다음은 PXE 부팅 서버에서 제공하는 Grub 구성입니다.

net_ls_addr
sleep -i 5
set retcode=$?
clear

if [ $retcode == 1 ]; then
 quit
fi

if [ $retcode == 0 ]; then
 quit
fi

if [ $retcode == 3 ]; then
 terminal_output gfxterm
 set gfxmode="800x600;640x480;auto"
 set theme=theme.txt
fi

menuentry 'Install Custom CentOS 7 Linux x86_64 (CC7)' {
 insmod progress
 clear
 #set net_default_server=linuxsofturl
 echo -n 'loading kernel ...'
 linuxefi (http)/aims/boot/CC7_X86_64/vmlinuz ip=dhcp inst.repo=http://linuxsofturl/centos/7/os/x86_64/
 clear
 echo -n 'loading initrd ...'
 initrdefi (http)/aims/boot/CC7_X86_64/initrd
}

이전에 언급한 것처럼 이렇게 하면 "커널을 먼저 로드해야 합니다"라는 결과가 발생합니다. 지금까지는 잘 작동하고 있습니다. 더 많은 배경을 추가하기 위해 2주 전까지는 다음 메뉴 항목을 사용할 수 있었습니다.

menuentry 'Install CentOS 8 Linux x86_64 (C8)' {
 insmod progress
 clear
 echo -n 'loading kernel ...'
 linuxefi /aims/boot/C8_X86_64/vmlinuz ip=dhcp inst.repo=http://linuxsofturl/centos/8/BaseOS/x86_64/os/ inst.addrepo=CUSTOM,http://linuxsofturl/centos/8/CUSTOM/x86_64/ inst.addrepo=locmap,http://linuxsofturl/internal/repos/potd8-stable/x86_64/os/ ks=http://linuxsofturl/linux/centos8/default.ks
 clear
 echo -n 'loading initrd ...'
 initrdefi /aims/boot/C8_X86_64/initrd
}

menuentry 'Install Custom CentOS 7 Linux x86_64 (CC7)' {
 insmod progress
 clear
 #set net_default_server=linuxsofturl
 echo -n 'loading kernel ...'
 linuxefi (http)/aims/boot/CC7_X86_64/vmlinuz ip=dhcp inst.repo=http://linuxsofturl/centos/7/os/x86_64/
 clear
 echo -n 'loading initrd ...'
 initrdefi (http)/aims/boot/CC7_X86_64/initrd
}

menuentry 'Install Scientific Linux Custom 6 x86_64 (SLC6)' {
 insmod progress
 clear
 echo -n 'loading kernel ...'
 linux (http)/aims/boot/SLC6X_X86_64/vmlinuz ip=dhcp repo=http://linuxsofturl/slc6X/x86_64/
 clear
 echo -n 'loading initrd ...'
 initrd (http)/aims/boot/SLC6X_X86_64/initrd
}

menuentry 'Install RHEL 8.2 x86_64 (license required)' {
  insmod progress
  clear
  echo -n 'loading kernel ...'
  linux (http)/aims/boot/RHEL_8_2_X86_64/vmlinuz ip=dhcp repo=http://linuxsofturl/enterprise/rhel/server/8/8.2/x86_64/
  clear
  echo -n 'loading initrd ...'
  initrd (http)/aims/boot/RHEL_8_2_X86_64/initrd
 }

linux+(http)를 사용하거나 linuxefiHTTP 프로토콜을 사용하지 않는 것(따라서 속도가 느린 TFTP를 사용함)이 트릭을 수행하는 것처럼 보이지만 지금까지 이것이 효과가 있었던 이유가 있습니다.

편집: 참고로 이것은 TFTP 서버의 로그 출력입니다. 206 HTTP 오류의 일부에 유의하십시오.

2020-09-14T15:06:36.618691+02:00 aimstest01 httpd: 128.142.32.27 - - [14/Sep/2020:15:06:36 +0200] "GET /aims/boot/CC7_X86_64/vmlinuz HTTP/1.1" 200 6762688 114153 "-" "GRUB 2.02~beta2"
2020-09-14T15:07:11.137769+02:00 aimstest01 httpd: 128.142.32.27 - - [14/Sep/2020:15:06:37 +0200] "GET /aims/boot/CC7_X86_64/vmlinuz HTTP/1.1" 206 6762688 34080353 "-" "GRUB 2.02~beta2"

답변1

HTTP를 프로토콜로 사용하면 KeepAliveTimeout이 Grub의 시간 초과보다 길면 커널 다운로드 시간이 초과되어 위 오류와 함께 실패합니다. Apache 구성에서 이 값을 줄이면 문제가 해결됩니다.

관련 정보