Red Hat 7.4: UEFI 전용 시스템용 USB 미디어에 킥스타트 파일을 삽입하는 방법은 무엇입니까?

Red Hat 7.4: UEFI 전용 시스템용 USB 미디어에 킥스타트 파일을 삽입하는 방법은 무엇입니까?

사용자 정의 킥스타트 파일(USB 미디어로 전송)을 사용하고 grub에 적절한 매개변수를 추가하여 Red Hat Linux 7.4용 설치 이미지를 구축하려고 하는데 ks=이를 수행하는 방법을 알 수 없습니다.

내가 시도한 것은 다음과 같습니다.

dd if=rhel-server-7.4-x86_64-dvd.iso of=/dev/sdb

이렇게 하면 부팅 가능한 USB 스틱이 만들어지지만 물론 킥스타트 파일은 없습니다.

다음으로 ISO의 내용을 임시 파일에 복사하고, ISO 내용을 추가 ks.cfg하고 grub 구성을 수정한 다음 이를 사용하여 genisoimage새 이미지를 다시 작성했습니다.

genisoimage \
  -untranslated-filenames \
  -rational-rock \
  -v \
  -translation-table \
  -input-charset "default" \
  -J \
  -joliet-long \
  $VOLLABELARGS 
  -b isolinux/isolinux.bin \
  -c isolinux/boot.cat \
  -no-emul-boot \
  -boot-load-size 4 \
  -boot-info-table \
  -eltorito-alt-boot \
  -efi-boot images/efiboot.img \
  -no-emul-boot \
  -o $THISDIR/$VOLLABEL.iso \

이는 Red Hat의 자체 RHEL 6 지침을 기반으로 합니다. 물론 저는 RHEL 7을 사용하고 있습니다. 이는 BIOS 부팅에서는 제대로 작동하지만 UEFI 시스템에서 시도하면 결과 이미지가 "호환되지 않음"으로 거부됩니다.

결과 이미지도 원본 RHEL ISO보다 훨씬 더 큽니다.

확인해 보니 xorriso원본 이미지와 많이 다른 것으로 확인되었습니다. isohybrid어느 정도 도움이 되지만 이미지를 부팅 가능하게 만드는 데는 충분하지 않습니다.

xorriso -reportRed Hat ISO의 출력:

xorriso -indev rhel-server-7.4-x86_64-dvd.iso -report_el_torito cmd
-volid 'RHEL-7.4 Server.x86_64'
-volume_date uuid '2017071101014600'
-boot_image isolinux system_area=--interval:imported_iso:0s-15s:zero_mbrpt,zero_gpt:'rhel-server-7.4-x86_64-boot.iso'
-boot_image any partition_cyl_align=on
-boot_image any partition_offset=0
-boot_image any partition_hd_cyl=64
-boot_image any partition_sec_hd=32
-boot_image any iso_mbr_part_type=0x00
-boot_image any cat_path='/isolinux/boot.cat'
-boot_image isolinux bin_path='/isolinux/isolinux.bin'
-boot_image any platform_id=0x00
-boot_image any emul_type=no_emulation
-boot_image any load_size=2048
-boot_image any boot_info_table=on
-boot_image any next
-boot_image any efi_path='/images/efiboot.img'
-boot_image any platform_id=0xef
-boot_image any emul_type=no_emulation
-boot_image any load_size=9211904
-boot_image isolinux partition_entry=gpt_basdat

xorriso내 이미지에 대한 출력:

xorriso -indev myimage.iso -report_el_torito cmd
-volid '"MYIMAGE"'
-volume_date uuid '2018011923504500'
-boot_image isolinux system_area=--interval:imported_iso:0s-15s:zero_mbrpt:'MYIMAGE.iso'
-boot_image any partition_cyl_align=on
-boot_image any partition_offset=0
-boot_image any partition_hd_cyl=64
-boot_image any partition_sec_hd=32
-boot_image any iso_mbr_part_type=0x17
-boot_image any cat_path='/isolinux/boot.cat'
-boot_image isolinux bin_path='/isolinux/isolinux.bin'
-boot_image any platform_id=0x00
-boot_image any emul_type=no_emulation
-boot_image any load_size=2048
-boot_image any boot_info_table=on
-boot_image any next
-boot_image any efi_path='/images/efiboot.img'
-boot_image any platform_id=0xef
-boot_image any emul_type=no_emulation
-boot_image any load_size=9211904

둘을 비교해 보면 Red Hat에는 GPT와 관련된 항목이 몇 가지 있는데 내 이미지가 누락되어 있습니다.

다른 접근 방식도 살펴봤지만 잘못된 방향으로 가고 있는지조차 확신할 수 없습니다.

  • lorax/livemedia-creator를 사용하세요. 지침이 혼란스럽다는 것을 알았습니다. 라이브 이미지를 구축하는 데 사용되는 것 같은데 Anaconda를 호출하는 방법을 모르겠습니다.

  • USB 스틱을 표준 3파티션 하드 드라이브로 포맷합니다. 하지만 부팅 가능하게 만드는 방법을 모르겠습니다.

내가 원하는 것을 달성하는 가장 좋은/가장 쉬운 방법은 무엇입니까?

내 요청:

  • Linux 명령줄이어야 합니다. 이 프로세스를 스크립트로 작성하고 싶습니다.
  • 이미지 파일이 생성되어야 하며, 가능하다면 USB 스크립트에 직접 쓰고 싶지 않습니다.
  • 루트가 아닌 사용자로 실행할 수 있어야 합니다.

이미지 파일은 CD/DVD 부팅을 지원할 필요가 없습니다.

답변1

이제 절차가 완료되었습니다. @ 감사합니다.토마스 슈미트귀중한 팁.

이것이 완전한 과정입니다.

개요

원본 Red Hat DVD에서 세 개의 파일을 수정해야 합니다:

  • isolinux/isolinux.cfg
  • EFI/BOOT/grub.cfg
  • images/efiboot.img

사용할 볼륨 레이블을 결정합니다. 볼륨 레이블은 14자 미만이어야 합니다.

그런 다음 genisoimage해당 볼륨 레이블로 새 ISO를 빌드 하고 isohybrid --uefiUEFI와 호환되게 만들고 implantisomd5올바른 체크섬을 업데이트 하는 데 사용됩니다.

단계별로

이 스크립트는 제가 작성했지만 우리 상황에 딱 맞기 때문에 게시할 필요가 없습니다.

  • 원본 Red Hat DVD를 사용하여 설치하십시오 fuseiso.
  • 환경 변수를 VOLUMELABEL원하는 볼륨 레이블로 설정합니다.
  • 수정해야 하는 세 개의 파일을 다른 위치에 복사합니다.

isolinux.cfg파일을 편집합니다 . 이 파일은 BIOS 부팅에 사용됩니다.

  • isolinux.cfg파일을 편집 하고 append: 로 시작하는 처음 두 줄 에 매개변수를 추가합니다 ks=hd:LABEL=$VOLUMELABEL:/ks.cfg.
  • inst.stage2읽을 수 있는 위치(아마도 4개 위치)에서 이 매개변수를 업데이트합니다 inst.stage2=hd:LABEL=$VOLUMELABEL.
  • menu default이미지가 기본값 Install으로 설정되도록 이 항목을 제거할 수도 있습니다 Test & Install.

grub.cfg파일을 편집합니다 . 이 파일은 EFI 부팅에 사용됩니다. 이 파일(및 그 안의 모든 항목 EFI/BOOT)은 두 번 존재합니다. 한 번은 일반 DVD 이미지에, 다른 한 번은 efiboot.img파일 내에 존재합니다.

  • 로 시작하는 처음 두 줄에 동일한 매개변수를 추가합니다 linuxefi.
  • inst.stage2읽을 수 있는 위치(아마도 4개 위치)에서 이 매개변수를 업데이트합니다 inst.stage2=hd:LABEL=$VOLUMELABEL.
  • search중요하지만 간과되기 쉬운 내용: in 으로 시작하는 줄도 편집하세요 grub.cfg.

efiboot.img파일을 편집합니다 . 실제로 EFI가 활성화됩니다.

  • 파일 복사본을 마운트합니다 efiboot.img. 불행하게도 저는 이 작업을 수행할 수 있는 방법을 찾지 못했습니다. fusermount따라서 이 작업을 수행하려면 루트 권한이 있어야 합니다.
  • 수정된 내용을 아래 파일 grub.cfg에 복사하세요efiboot.imgEFI/BOOT
  • 파일 복사본을 제거합니다 efiboot.img.

이제 ISO 이미지를 생성할 수 있습니다.

매개변수는 genisoimage위치를 구분합니다. 핵심 사항: 원래 마운트된 ISO 파일( 로 마운트됨)을 기반으로 이미지를 기반으로 $TMPDIR한 다음 -m세 개의 수정된 파일을 제외하고 마이그레이션 지점을 사용하여 수정 사항과 킥스타트 파일을 이미지에 삽입했습니다. 내 이미지에서 카탈로그 플러그인도 제거했습니다.

genisoimage \
  -untranslated-filenames \
  -graft-points \
  -rational-rock \
  -v \
  -translation-table \
  -input-charset "default" \
  -J \
  -joliet-long \
  -V $VOLLABEL -A $VOLLABEL -volset $VOLLABEL \
  -b isolinux/isolinux.bin \
  -c isolinux/boot.cat \
  -no-emul-boot \
  -boot-load-size 4 \
  -boot-info-table \
  -eltorito-alt-boot \
  -efi-boot images/efiboot.img \
  -no-emul-boot \
  -quiet \
  -o $THISDIR/$VOLLABEL.iso \
  -m $TMPDIR/EFI/BOOT/grub.cfg \
  -m $TMPDIR/isolinux/isolinux.cfg \
  -m $TMPDIR/images/efiboot.img \
  -m addons \
  $TMPDIR \
  EFI/BOOT/grub.cfg=$TMPGRAFT/grub.cfg \
  isolinux/isolinux.cfg=$TMPGRAFT/isolinux.cfg \
  images/efiboot.img=$TMPGRAFT/efiboot.img \
  $KICKSTARTFILE=$KICKSTARTDIR/$KICKSTARTFILE

isohybrid --uefi그런 다음 다음을 사용하십시오 implantisomd5.

isohybrid --uefi $THISDIR/$VOLUMELABEL.iso
implantisomd5 $THISDIR/$VOLUMELABEL.iso

답변2

이것이 제니소이미지 리메이크에 비해 원작이 갖는 결정적인 장점일지도 모른다.

-boot_image isolinux partition_entry=gpt_basdat

genisoimage는 EFI용 파티션 테이블을 생성할 수 없습니다. (차이점을 보려면 "/sbin/fdisk -l"을 통해 두 ISO를 모두 확인하십시오.) 실제로는 0xef 유형의 MBR 파티션이 필요합니다. 그러나 전통적인 접근 방식은 유효하지 않고 쓸모없는 GPT도 추가하는 것입니다.

파티션 테이블을 얻는 한 가지 방법은 genisoimage 이후에 실행하는 것입니다.

isohybrid --uefi $THISDIR/$VOLLABEL.iso

이 프로그램은 SYSLINUX 소스 코드에서 파생되었습니다. 동일한 소스 배포판의 버전을 사용하거나 "isolinux.bin"의 git clone을 사용해야 합니다.

다른 배포판에서는 xorriso의 mkisofs 에뮬레이션과 이 xorriso 명령으로 알려주는 부팅 옵션을 사용합니다.

xorriso -indev rhel-server-7.4-x86_64-dvd.iso -report_el_torito as_mkisofs

-isohybrid-mbr 옵션은 긴 주소를 갖습니다:

--interval:imported_iso:0s-15s:zero_mbrpt,zero_gpt:'rhel-server-7.4-x86_64-boot.iso

이는 xorriso에게 원본 ISO의 처음 32KiB를 MBR 템플릿 및 추가 시스템 영역으로 사용하도록 지시합니다. 일반적으로 이는 432바이트에 불과한 SYSLINUX 파일 "isohdpfx.bin"입니다. 처음 432바이트를 직접 복사하고 "mbr.bin"으로 바꿀 수 있습니다.

dd if=rhel-server-7.4-x86_64-dvd.iso bs=432 count=1 of=mbr.bin

답변3

xorriso다른 종속성 없이 로컬에서 사용할 수 있는 방법을 찾고 있습니다.가다미아크의대답은 정확합니다. 유일한 차이점은 7단계이며 다음을 반영해야 합니다.

xorriso \
  -indev "$ISO_SRC" \
  -boot_image any replay \
  -map "$SCRIPTS" /"$SCRIPTS" \
  -map "$FILES" / \
  -outdev "$ISO_DST"

순서가 중요하므로 -boot_image any replay나중에 지정 하면 -map매핑된 디렉터리가 기본 ISO 콘텐츠로 덮어쓰여집니다.

내 GitHub 저장소에 대한 링크는 다음과 같습니다.여기에는 UEFI 전용 시스템의 USB 미디어에 킥스타트 파일을 삽입하는 bash 스크립트가 포함되어 있습니다.

답변4

이제 RHEL/CentOS 및 Fedora ISO에서 작동할 수 있는 더 쉬운 방법이 있습니다. 이는 loraxRHEL 및 Fedora가 처음에 ISO를 구축하는 데 사용하는 프로젝트의 일부이기 때문입니다.맥시소. 하지만 저는 Fedora 32에서만 테스트했습니다.

테스트하는 동안 버그를 발견했습니다. 소스 ISO가 UEFI 및 Mac에서 부팅 가능한 경우 새 ISO는 Mac 및 레거시 BIOS 시스템에서만 부팅됩니다. 에 고정이번 홍보아직 출시되지는 않았지만, mkksiso나머지를 설치했다면 별도로 다운로드할 수 있는 간단한 Python 스크립트입니다.lorax

이제 킥스타트 주입이 매우 간단해졌습니다.

sudo dnf install lorax
wget -cN https://raw.githubusercontent.com/weldr/lorax/master/src/sbin/mkksiso
chmod +x mkksiso
sudo ./mkksiso -V MyNewVolumeID path/to/kickstart path/to/orig.iso path/to/

예를 들어 참조하십시오.https://github.com/michel-slm/luks-kickstarts/blob/master/rebuild.sh

관련 정보