UEFI HTTPBoot에 대해 자세히 알아보고 이를 LAN에서 네트워크 부팅 옵션으로 설정하고 싶지만 세부 정보가 매우 부족합니다. 내가 찾은 최고의 문서는 다음과 같습니다.수스 문서HTTP Boot 서버를 구성하는 데 필요한 정보가 누락되어 있습니다.
저는 PFSense를 DHCP/DNS 서버로 사용합니다. ~에 따르면이 블로그, PFSense의 HTTP 시작 옵션은 상당히 새로운 버전인 2.6에서 사용할 수 있습니다. 블로그 게시물에 따르면 PFSense가 제대로 작동하려면 특별한 옵션을 사용하여 구성해야 합니다.
vendor-class-identifier “HTTPClient”
"수량"은 60입니다.
(NBP)의 부팅 프로세스나 요구 사항 Network Boot Program
또는 네트워크 부팅을 위한 페이로드를 준비하는 프로세스에 대한 정보가 거의 없습니다.
몇 가지 질문이 있습니다:
*.efi
HTTP 부팅을 위해 UEFI를 지원하고 파일이 있는 Linux 배포판을 가리킬 수 있습니까?- NBP를 준비하는 과정은 무엇입니까? 특정 배포의 ISO 콘텐츠를 HTTP 정적 서버로 추출하고
*.efi
URL의 파일을 가리키시겠습니까? - EFI 파일이 로드되면 부트로더가 시작되는 것 같죠? 어떤 부트로더라도 작동하나요? 아니면 특별히 HTTPBoot를 지원해야 합니까? 이 프로세스
*.efi
나 다른 프로세스가 특정 부트로더를 실행하는 것을 이해할 수 있도록 부트로더를 어떻게 구성합니까 ? - 루트 파일 시스템은 URI 파일의 호스트에 상대적인 경로로만 지정됩니까?
- 부트로더를 구성한 후 여러 다른 배포판을 사용하려면 부트로더 구성에 맞게 구성한 다음
*.efi
부팅할 파일 중 하나를 선택할 수 있습니까? vendor-class-identifier
이 옵션 과 이와 관련된 "번호"는 무엇입니까 ?
답변1
HTTP 부팅을 위해 UEFI를 지원하고 *.efi 파일이 있는 Linux 배포판을 가리킬 수 있습니까?
UEFI 부트로더나 HTTP를 사용한 부팅을 방해하는 기타 동작에 문제가 없다고 가정하면 왜 그렇지 않은지 모르겠습니다.
NBP를 준비하는 과정은 무엇입니까? 특정 배포의 ISO 콘텐츠를 HTTP 정적 서버로 추출하고
*.efi
URL의 파일을 가리키시겠습니까?
네, 이것이 첫 번째 단계가 될 것입니다. 배포판에 따라 일부 커널 부팅 옵션을 추가하여 설치 환경에 a) 운영 체제 드라이버가 네트워크 인터페이스 제어권을 넘겨받은 후 네트워크를 (재) 설정하고 b) initramfs 설치 위치를 알려주도록 할 수도 있습니다. 추가 설치 프로그램 구성 요소(예: squashfs 파일 시스템 이미지)를 찾습니다(해당하는 경우). 이는 배포판에 따라 다릅니다.
EFI 파일이 로드되면 부트로더가 시작되는 것 같죠? 어떤 부트로더라도 작동하나요? 아니면 특별히 HTTPBoot를 지원해야 합니까? 이 프로세스
*.efi
나 다른 프로세스가 특정 부트로더를 실행하는 것을 이해할 수 있도록 부트로더를 어떻게 구성합니까 ?
UEFI 부트로더는 LoadFile
UEFI 펌웨어 프로토콜을 사용하여 디스크에서 파일을 로드할 수 있습니다. UEFI 구현이 HTTPBoot를 지원하는 경우 동일한 펌웨어 프로토콜이 HTTP URL도 허용할 수 있습니다. 펌웨어에는 로드할 첫 번째 파일의 URL을 알려주기 위해 DHCP 서버가 필요합니다. 이는 *.efi
부트로더 실행 파일일 수도 있고,분명히 전체 UEFI 부팅 가능 ISO 이미지도 있습니다.(13페이지 참조)
아마도 부트 로더는 디스크 미디어에서 부팅할 때 초기 부트 로더 파일과 동일한 디렉토리에 있는 다른 파일을 참조하는 것처럼 동일한 URI 디렉토리 경로에 있는 다른 파일을 참조할 수 있으며 슬래시 또는 백슬래시로 시작하는 모든 파일 경로를 참조할 수 있습니다. 처음에 인용됩니다. DHCP 서버에서 제공한 원래 전체 URL을 사용하여 지정된 호스트 이름에 대한 전체 URI 경로로 해석됩니다.
루트 파일 시스템은 URI 파일의 호스트에 상대적인 경로로만 지정됩니까?
침착하고 조급해하지 마십시오. HTTPBoot의 유일한 임무는 부트로더를 작동시켜 HTTP 서버에서 다른 파일을 쉽게 로드할 수 있도록 하는 것입니다. Linux 부팅의 경우 일반적으로 이러한 파일은 다음과 같습니다.
- 로드할 추가 파일의 경로(또는 URI)와 기본 커널 부팅 옵션을 지정하는 GRUB 구성 파일
- 커널 파일
- initramfs 파일(해당하는 경우)
루트 파일 시스템을 선택하는 것은 커널이나 initramfs의 작업이며 이는 발생합니다.뒤쪽에커널은 UEFI 펌웨어에서 시스템 제어권을 인수했습니다. 그래서 HTTPBoot는전혀 아무것도루트 파일 시스템 지정과 관련됩니다.
루트 파일 시스템과 관련하여 HTTPBoot는 본질적으로 이전 스타일의 PXE 부팅과 다르지 않습니다. Linux 네트워크 드라이버를 시작하고 구성하려면 initramfs가 필요할 것이며 루트 파일 시스템에 액세스하려면 어떤 방법을 사용하든 사용할 수 있습니다. initramfs가 이를 지원할 수 있습니다. 설치 프로그램의 경우 이는 다른 목적으로 HTTP URL에서 로컬 RAM 디스크로 다운로드된 squashfs 이미지일 수 있으며, 그렇게 해야 하는 경우 NFSroot일 수도 있습니다. 구성 방법은 전적으로 사용 중인 배포판에 따라 다릅니다.
부트로더를 구성한 후 여러 다른 배포판을 사용하려면 부트로더 구성에서 적절하게 구성하면 되고 *.efi 파일을 선택하여 부팅하면 됩니까?
예, 하지만 보안 부팅은 상황을 복잡하게 만들 수 있습니다. 보안 부팅 지원이 필요한 경우 shimx64.efi
단일 심은 일반적으로 함께 제공되는 배포의 서명 키와 선택적으로 MOK(머신 소유자 키)만 지원할 수 있습니다. 부팅 메뉴 링크에서 다른 배포판에 shim을 로드할 수 없는 경우 "주" 배포판을 선택하고 주요 배포판이 아닌 모든 배포판의 커널과 커널 모듈을 자체 MOK로 수동으로 다시 서명하고 MOK를 교체해야 합니다. 시스템 NVRAM에 등록되어 있습니다. 또는 시스템에서 펌웨어의 보안 부팅 키 조작을 허용하는 경우 각 릴리스의 보안 부팅 인증서를 펌웨어 보안 부팅 허용 목록(UEFI NVRAM 변수 db
)에 추가할 수 있습니다.
vendor-class-identifier
이 옵션 과 이와 관련된 "번호"는 무엇입니까 ?
option vendor-class-identifier
ISC DHCP 서버의 구성 구문은 다음과 같습니다.DHCP 옵션 #60.
HTTPBoot를 지원하는 UEFI 펌웨어는 DHCP 요청에 DHCP 옵션 #60을 포함하고 옵션 값을 string 으로 설정해야 합니다 HTTPClient
. 이는 일반적인 PXE 부팅 클라이언트가 이 옵션을 string PXEClient
+ 일부 하드웨어/펌웨어 아키텍처 식별자로 설정하는 것과 같습니다.
이는 DHCP 서버에서 HTTPBoot 지원 클라이언트를 감지하는 데 사용될 수 있으며 이러한 클라이언트에 대한 DHCP 응답에 동일한 옵션을 포함해야 합니다.
연결한 SuSE 문서의 DHCP 구성 조각:
class "httpclients" {
match if substring (option vendor-class-identifier, 0, 10) = "HTTPClient";
option vendor-class-identifier "HTTPClient";
filename "http://www.httpboot.local/sle/EFI/BOOT/bootx64.efi";
}
기본적으로는 다음과 같습니다. "DHCP 요청에 DHCP 옵션 60이 포함되어 있고 해당 값의 처음 10바이트가 문자열을 형성하는 경우 HTTPClient
응답에서 동일한 옵션을 반복하고 bootx64.efi
레거시 BOOTP 부팅 파일 이름 매개변수에 URL을 제공합니다.
이론적으로는 DHCP 옵션 #67("부팅 파일 이름")을 사용하여 부팅 URL을 지정할 수도 있지만 실제로는 DHCP 옵션 RL로 지정된 경우 파일 이름/u를 손상시키는 일부 펌웨어 구현을 본 적이 있지만 허용하는 펌웨어 구현은 없습니다. BOOTP 형식이 사용됩니다. 다른 구현에는 반대 버그가 있을 수 있습니다. 따라서 한 가지 방법으로 URL을 지정해 보십시오. 즉시 작동하지 않고 HTTP 서버 로그 또는 네트워크 트래픽 덤프에 펌웨어가 손상된 HTTP 요청을 생성하고 있음이 표시되면 반대 방법을 시도해 보십시오.