mkisofs与isoinfo笔记
#!/usr/bin/env bash ################################## # Download the Windows 10 x64 ISO WIN10_IMG_DESTINATION="./windows.iso" WIN10_IMG_ARCH="x64" if [ ! -f "${WIN10_IMG_DESTINATION}" ]; then if [[ "$WIN10_IMG_ARCH" == "x86" ]] || [[ "$WIN10_IMG_ARCH" == "i386" ]] ; then echo "Retrieving the x86 Windows 10 iso URL..." WINDOWS_10_ISO_URL=$(curl -LsI -o /dev/null -w %{url_effective} "https://windows101tricks.com/1903-iso-32") else echo "Retrieving the x64 Windows 10 iso URL..." WINDOWS_10_ISO_URL=$(curl -LsI -o /dev/null -w %{url_effective} "https://windows101tricks.com/1903-iso-64") fi echo "Making sure the URL comes from a trusted Microsoft (sub)domain..." if [[ $WINDOWS_10_ISO_URL == https://software-download.microsoft.com/* ]] ; then echo "Downloading the Windows 10 installation iso..." wget "$WINDOWS_10_ISO_URL" -O "$WIN10_IMG_DESTINATION" else echo "URL validation failed. Please download the Windows 10 iso manually." exit 1 fi else echo "Windows 10 iso already exists. Skipping download..." fi # ################################## # Variable containing the path to the windows.iso WIN10_IMG="$WIN10_IMG_DESTINATION" TMP="./tmp" ISO_FILES="${TMP}/iso-files" ISO_MP="${TMP}/iso-mountpoint" # Remove ./tmp if it already exists, then create ./tmp/iso-files and ./tmp/iso-mountpoint rm -rf "${TMP}" mkdir -p "${ISO_FILES}" mkdir -p "${ISO_MP}" # Extract the files fromt he ISO to ./tmp/iso-files sudo mount -t udf "${WIN10_IMG}" "${ISO_MP}" sudo cp -Rva ${ISO_MP}/* "${ISO_FILES}" sudo umount "${ISO_MP}" # Make modifications to the Windows ISO #BOOT_DIR="${ISO_FILES}/efi/microsoft/boot" #sudo mv "${BOOT_DIR}/cdboot.efi" "${BOOT_DIR}/tmp.efi" #sudo mv "${BOOT_DIR}/cdboot_noprompt.efi" "${BOOT_DIR}/cdboot.efi" #sudo mv "${BOOT_DIR}/tmp.efi" "${BOOT_DIR}/cdboot_noprompt.efi" # Extract the boot.img (didn't help at all) #BOOT_SECTOR_LENGTH="$(isoinfo -d -i "${WIN10_IMG}" | grep "Nsect " | grep -o "[^ ]*$")" #STARTING_SECTOR="$(isoinfo -d -i ./vm-files/windows10.iso | grep "Bootoff " | grep -o "[^ ]*$")" #dd if="${WIN10_IMG}" of="${ISO_FILES}/boot.img" bs=2048 count="${BOOT_SECTOR_LENGTH}" skip="${STARTING_SECTOR}" # Extract boot load segment address and size BOOT_LOAD_SEG="$(dumpet -i "${WIN10_IMG}" | grep "Media load segment: " | cut -d ':' -f2 | cut -d ' ' -f2)" BOOT_LOAD_SIZE="$(dumpet -i "${WIN10_IMG}" | grep "Load Sectors: " | grep -o "[^:]*$" | cut -d ' ' -f2 | head -1)" # Extract meta data : SYSTEM_ID="$(isoinfo -d -i "${WIN10_IMG}" | grep "System id: " | cut -d ' ' -f3-)" VOLUME_ID="$(isoinfo -d -i "${WIN10_IMG}" | grep "Volume id: " | cut -d ' ' -f3-)" VOLUME_SET_ID="$(isoinfo -d -i "${WIN10_IMG}" | grep "Volume set id: " | cut -d ' ' -f4-)" #PUBLISHER_ID="$(isoinfo -d -i "${WIN10_IMG}" | grep "Publisher id: " | cut -d ' ' -f3-)" # Always uppercase PUBLISHER_ID="$(isoinfo -d -i "${WIN10_IMG}" | grep "ID '" | cut -d "'" -f2)" DATA_PREPARER_ID="$(isoinfo -d -i "${WIN10_IMG}" | grep "Data preparer id: " | cut -d ' ' -f4-)" APPLICATION_ID="$(isoinfo -d -i "${WIN10_IMG}" | grep "Application id: " | cut -d ' ' -f3-)" COPYRIGHT_FILE_ID="$(isoinfo -d -i "${WIN10_IMG}" | grep "Copyright file id: " | cut -d ' ' -f4-)" ABSTRACT_FILE_ID="$(isoinfo -d -i "${WIN10_IMG}" | grep "Abstract file id: " | cut -d ' ' -f4-)" BIBLIOGRAPHIC_FILE_ID="$(isoinfo -d -i "${WIN10_IMG}" | grep "Bibliographic file id: " | cut -d ' ' -f4-)" # Create a new ISO image using mkisofs # (.mkisofsrc is necessary, because some options are not available on the cli directly) rm ".mkisofsrc" echo "APPI=${APPLICATION_ID}" >> ".mkisofsrc" echo "COPY=${COPYRIGHT_FILE_ID}" >> ".mkisofsrc" echo "ABST=${ABSTRACT_FILE_ID}" >> ".mkisofsrc" echo "BIBL=${BIBLIOGRAPHIC_FILE_ID}" >> ".mkisofsrc" echo "PREP=${DATA_PREPARER_ID}" >> ".mkisofsrc" echo "PUBL=${PUBLISHER_ID}" >> ".mkisofsrc" echo "SYSI=${SYSTEM_ID}" >> ".mkisofsrc" echo "VOLI=${VOLUME_ID}" >> ".mkisofsrc" echo "VOLS=${VOLUME_SET_ID}" >> ".mkisofsrc" sudo rm "${WIN10_IMG}.tmp.iso" sudo mkisofs \ -no-emul-boot \ -b boot/etfsboot.com \ -boot-load-seg "${BOOT_LOAD_SEG}" \ -boot-load-size "${BOOT_LOAD_SIZE}" \ -eltorito-alt-boot \ -e efi/boot/bootx64.efi \ -no-emul-boot \ -iso-level 2 \ -boot-info-table \ -udf \ -D \ -N \ -relaxed-filenames \ -allow-lowercase \ -o "${WIN10_IMG}.tmp.iso" \ "${ISO_FILES}" rm ".mkisofsrc" # Print the variables that we gathered echo echo "Extracted meta data (form original image):" echo "BOOT_LOAD_SEG: ${BOOT_LOAD_SEG}" echo "BOOT_LOAD_SIZE: ${BOOT_LOAD_SIZE}" echo "-------" echo "SYSTEM_ID: ${SYSTEM_ID}" echo "VOLUME_ID: ${VOLUME_ID}" echo "VOLUME_SET_ID: ${VOLUME_SET_ID}" echo "PUBLISHER_ID: ${PUBLISHER_ID}" echo "DATA_PREPARER_ID: ${DATA_PREPARER_ID}" echo "APPLICATION_ID: ${APPLICATION_ID}" echo "COPYRIGHT_FILE_ID: ${COPYRIGHT_FILE_ID}" echo "ABSTRACT_FILE_ID: ${ABSTRACT_FILE_ID}" echo "BIBLIOGRAPHIC_FILE_ID: ${BIBLIOGRAPHIC_FILE_ID}" # Show difference between new and old image as reported by isoinfo echo echo "-------------- isoinfo diff -----------------" diff <(isoinfo -d -i "${WIN10_IMG}") <(isoinfo -d -i "${WIN10_IMG}.tmp.iso") # Show difference between new and old image as reported by dumpet echo echo " -------------- dumpet diff -----------------" diff <(dumpet -i "${WIN10_IMG}") <(dumpet -i "${WIN10_IMG}.tmp.iso") # Overwrite the original ISO with the new one #sudo rm "${WIN10_IMG}" #sudo mv "${WIN10_IMG}.tmp.iso" "${WIN10_IMG}"
#!/bin/bash # provide paths, no closing / ISO_IMAGE="/path/to/Win10.iso" ISO_IMAGE_OUT="/path/to/Win10_split.iso" WORKING_DIR="/home/user/working" echo "Paths set" echo "ISO_IMAGE $ISO_IMAGE" echo "WORKING DIRECTORY: $WORKING_DIR" # prerequisites # sudo apt-get install libxml2-dev ntfs-3g-dev libfuse-dev libattr1-dev dumpet # install schily tools http://schilytools.sourceforge.net/ # alias smake=/opt/schily/bin/smake # alias mkisofs=/opt/schily/bin/mkisofs # install wimlib https://wimlib.net/ # git clone git://wimlib.net/wimlib # cd wimlib # libtoolize --force # aclocaldc # autoheader # automake --force-missing --add-missing # autoconf # ./configure # sudo make install # gsudo ldconfig -v printf "\nRemoving/recreating the working directory\n" rm -r -d -f $WORKING_DIR mkdir $WORKING_DIR printf "\nMounting the ISO image\n" sudo mount -r -t udf $ISO_IMAGE /media/iso printf "\nCopying the ISO image contents to the working directory\n" cp -r /media/iso/* $WORKING_DIR chmod -R 755 $WORKING_DIR printf "\nUnmounting the ISO image\n" sudo umount /media/iso printf "\nSplitting the install.wim archive\n" wimsplit $WORKING_DIR/sources/install.wim $WORKING_DIR/sources/install.swm 2000 rm -d -f $WORKING_DIR/sources/install.wim printf "\nGetting the boot image LBA from the ISO\n----------\n" dumpet -i $ISO_IMAGE printf "\nShould be a integer number following the second 'Load LBA': " read LOAD_LBA printf "\n" dd if=$ISO_IMAGE bs=2048 skip=$LOAD_LBA count=1 > $WORKING_DIR/efi/win_efi_boot.img printf "\nNow we get the boot.img and check the right file size.\nThe below output should detect a 'DOS/MBR boot sector' and sectors size should be 2880 which would mean 2880 * 512 / 2048 = 720.\n----------\n" file $WORKING_DIR/efi/win_efi_boot.img printf "\nThat would make the input 720: " read LOAD_COUNT printf "\n" dd if=$ISO_IMAGE bs=2048 skip=$LOAD_LBA count=$LOAD_COUNT > $WORKING_DIR/efi/win_efi_boot.img printf "\nBuilding an image\n" /opt/schily/bin/mkisofs \ -no-emul-boot \ -b boot/etfsboot.com \ -boot-load-seg 0 \ -boot-load-size 8 \ -eltorito-alt-boot \ -no-emul-boot \ -b efi/win_efi_boot.img \ -boot-load-size 1 \ -iso-level 4 \ -UDF \ -o $ISO_IMAGE_OUT \ $WORKING_DIR/ printf "\n\nImage ready!\n\n"
oscdimg -m -o -u2 -udfver102 - bootdata:2#p0,e,bc:\winpe_x64\etfsboot.com#pEF,e,bc:\winpe_x64\efisys.bin c:\winpe_x64\ISO c:\winpe_x64\winpeuefi.iso #winpe-uefi https://learn.microsoft.com/en-us/troubleshoot/windows-server/deployment/create-iso-image-for-uefi-platforms
dism /capture-image /imagefile:E:\install.wim /capturedir:D:\ /ScratchDir:E:\Scratch /name:"W10PROx64" /compress:maximum /checkintegrity /verify /bootable
参考:
https://www.techtarget.com/searchenterprisedesktop/tip/How-to-create-a-custom-ISO-for-Windows-10
https://unix.stackexchange.com/questions/531012/how-to-modify-an-installation-iso-and-keep-it-bootable