사용자 정의 킥스타트 파일(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 -report
Red 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 --uefi
UEFI와 호환되게 만들고 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.img
EFI/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에서 작동할 수 있는 더 쉬운 방법이 있습니다. 이는 lorax
RHEL 및 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