PXE: 파일을 찾을 수 없습니다. 그런데 왜 그렇습니까?

PXE: 파일을 찾을 수 없습니다. 그런데 왜 그렇습니까?

다음과 같이 Ubuntu 22.04 서버용 PXE 부팅을 설정하려고 합니다.이 지침. 이 내 꺼야 /srv/tftp:

root@vogon:~# ll /srv/tftp
total 1444
drwxr-xr-x 3 root root    4096 Jul 15  2022 boot/
drwxr-xr-x 3 root root    4096 Jul  1  2022 debian/
drwxrwxrwx 3 root root    4096 Jul  8  2022 debian-installer/
lrwxrwxrwx 1 root root      36 Jul  8  2022 grub.cfg -> debian-installer/amd64/grub/grub.cfg
-rw-r--r-- 1 root root    9278 Jul  1  2022 grub.cfg.bk
-rw-r--r-- 1 root root 1426816 Jan 25 13:44 grubx64.efi
drwx------ 2 root root   16384 Jul  8  2022 lost+found/
drwxr-xr-x 2 root root    4096 Jan 25 13:22 save/
drwxr-xr-x 4 root root    4096 Jan 25 12:52 ubuntu/

아이디어는 여러 배포판 중에서 선택할 수 있다는 것입니다. 이는 Debian 11 및 Ubuntu 20.04에서 작동합니다. 이제 Ubuntu 22.04를 추가하고 싶습니다. 여기에 내 것이 있습니다 grub.cfg.

root@vogon:~# cat /srv/tftp/grub.cfg
set menu_color_normal=cyan/blue
set menu_color_highlight=white/blue
set gfxpayload=text
set timeout=-1

menuentry 'Debian 11'{
        set background_color=black
        linux    /debian/11/amd64/linux priority=low vga=788 ---
        initrd   /debian/11/amd64/initrd.gz
}

menuentry "Ubuntu 20.04" {
  linux /ubuntu/20.04/amd64/linux only-ubiquity ip=dhcp ---
  initrd /ubuntu/20.04/amd64/initrd.gz
}

menuentry "Ubuntu 22.04 Server" {
  linux /srv/tftp/ubuntu/22.04-srv/vmlinuz url=https://www.releases.ubuntu.com/22.04/ubuntu-22.04.1-live-server-amd64.iso only-ubiquity ip=dhcp ---
  initrd=/srv/tftp/ubuntu/22.04-srv/initrd
}

메뉴는 잘 표시되지만 을 선택하면 Ubuntu 22.04 Server잠시 메시지가 표시되지만 File not found어떤 파일에 대한 정보는 표시되지 않습니다. 이 항목의 행이 linux ...여러 번 변경되었으며 모두 동일한 오류가 표시됩니다. 에서 언급된 마지막 파일은 syslog다음과 같습니다 /srv/tftp/ubuntu/22.04-srv/vmlinuz.

...
Jan 25 13:18:52 vogon in.tftpd[376344]: RRQ from 192.168.50.96 filename grubx64.efi
Jan 25 13:18:52 vogon in.tftpd[376345]: RRQ from 192.168.50.96 filename /debian-installer/amd64/grub/x86_64-efi/command.lst
Jan 25 13:18:52 vogon in.tftpd[376346]: RRQ from 192.168.50.96 filename /debian-installer/amd64/grub/x86_64-efi/fs.lst
Jan 25 13:18:52 vogon in.tftpd[376347]: RRQ from 192.168.50.96 filename /debian-installer/amd64/grub/x86_64-efi/crypto.lst
Jan 25 13:18:52 vogon in.tftpd[376348]: RRQ from 192.168.50.96 filename /debian-installer/amd64/grub/x86_64-efi/terminal.lst
Jan 25 13:18:52 vogon in.tftpd[376349]: RRQ from 192.168.50.96 filename /debian-installer/amd64/grub/grub.cfg
Jan 25 13:19:00 vogon in.tftpd[376358]: RRQ from 192.168.50.96 filename /srv/tftp/ubuntu/22.04-srv/vmlinuz
...

vmlinux로드된 것 같지만 url=...이해되지 않은 것 같습니다. 하지만 무엇이어야 합니까?

답변1

grubx64.efiTFTP 서버가 요청 하면 파일을 제공합니다 /srv/tftp/grubx64.efi.

요청 하면 /debian-installer/amd64/grub/x86_64-efi/command.lst파일을 제공합니다 /srv/tftp/debian-installer/amd64/grub/x86_64-efi/command.lst. 패턴이 보이나요?

TFTP 서버는 /srv/tftp/수신하는 모든 요청의 경로 이름에 접두사를 추가하여 /srv/tftp/그 아래 디렉터리로만 TFTP 액세스를 효과적으로 제한하는 것으로 보입니다. 이것이 /srv/tftp귀하의 서버라고 말할 수 있습니다TFTP 루트 디렉터리.

Ubuntu 22.04용 메뉴 항목을 작성할 때 다른 메뉴 항목과 달리 이 접두어를 작성했습니다. TFTP 서버가 요청을 받으면 /srv/tftp/ubuntu/22.04-srv/vmlinuz접두사를 다시 추가하고 결국에는 /srv/tftp/srv/tftp/ubuntu/22.04-srv/vmlinuz존재하지 않는 읽기를 시도합니다.

/srv/tftp/grub.cfgUbuntu 22.04의 항목을 다음으로 변경하는 것이 좋습니다 .

menuentry "Ubuntu 22.04 Server" {
  linux /ubuntu/22.04-srv/vmlinuz url=https://www.releases.ubuntu.com/22.04/ubuntu-22.04.1-live-server-amd64.iso only-ubiquity ip=dhcp ---
  initrd /ubuntu/22.04-srv/initrd
}

키워드 뒤에 오는 파일 이름은 PXE 부팅 GRUB가 TFTP를 통해 이러한 파일을 다운로드하도록 linux지시하므로 initrd이러한 경로 이름은 서버의 TFTP 루트에 상대적이어야 합니다.

이 시점에서는 url=GRUB이 부팅하려고 하는 커널에 해석되지 않고 그대로 전달되는 데이터 문자열입니다. 커널이 부팅되고 파일의 스크립트와 도구가 initrd실행되기 시작하면(즉, initramfs 부팅 단계에서) /proc/cmdlineUbuntu 네트워크 설치 파일이 없어 initrd확인을 위해 추출할 수 없습니다 . , 하지만 옵션이 존재하는 것 같습니다. url=유사한 도구를 사용하거나 curlwgetURL의 내용을 RAM 디스크에 다운로드하기 위해 일부 스크립트가 실행될 것입니다.

URL이 지정되어 있으므로 https://TFTP와는 아무런 관련이 없습니다. 인터넷 연결이 가장 빠르지 않은 경우 ISO를 한 번 다운로드하고 상당히 로컬 HTTP 또는 HTTPS 서버에서 호스팅하고 url=그에 따라 매개변수를 조정해야 할 수 있습니다. 이렇게 하면 적어도 설치 프로세스의 초기 부분의 속도가 빨라집니다.

관련 정보