X-Git-Url: https://wimlib.net/git/?p=wimlib;a=blobdiff_plain;f=programs%2Fmkwinpeimg;h=48143b6dad04d111e5a95adf380ddf5c09b8ace2;hp=3e932e749fa739c778c6bc047ddb2eb62d0344fb;hb=54ab9fc02a6deab44102a7f18b85c6ff7cf7774b;hpb=e539282ce394eba2d94752c3e3cbf8beaaad7aff diff --git a/programs/mkwinpeimg b/programs/mkwinpeimg index 3e932e74..48143b6d 100755 --- a/programs/mkwinpeimg +++ b/programs/mkwinpeimg @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash # # This script can make a customized bootable image of Windows PE. # @@ -20,6 +20,7 @@ script_name="$(basename $0)" PREFIX_REG="::" +WIMLIB_VERSION=1.2.3 calc_columns () { STAT_COL=80 @@ -105,6 +106,9 @@ Usage: $script_name [OPTIONS] IMAGE -O, --overlay=DIR Adds all the files in DIR to the Windows PE image. -t, --tmp-dir=DIR Use DIR as the temporary base of the ISO filesystem. Defaults to making one using "mktemp -d". + -a, --arch=ARCH Use the Windows PE version from the WAIK that has + the CPU architecture ARCH. Possible values: + "x86" or "amd64". Default is "x86". -h, --help Display this information. -v, --version Show version information. @@ -113,7 +117,7 @@ EOF } version() { - echo "$script_name (wimlib 0.4.8)" + echo "$script_name (wimlib $WIMLIB_VERSION)" exit 0 } @@ -121,12 +125,17 @@ make=disk process_command_line() { - if ! options=$(getopt -o oiw:W:s:O:t:A:hv -l \ - only-wim,iso,wim:,windows-dir:,start-script:,overlay:,tmp-dir:,waik-dir:,help,version \ + if ! options=$(getopt -o oiw:W:s:O:t:A:a:hv -l \ + only-wim,iso,wim:,windows-dir:,start-script:,overlay:,tmp-dir:,waik-dir:,arch:,help,version \ -- "$@" ); then usage exit 1 fi + + # default arch value + arch="X86" + arch_id="1" + eval set -- "$options" while [ $# -gt 0 ]; do case "$1" in @@ -170,6 +179,25 @@ process_command_line() { tmp_dir="$2" shift ;; + -a|--arch) + if [ "$2" == "x86" ]; then + arch="X86" + arch_id="1" + # Need to test Itanium images before making it an + # option. Note: syslinux is x86 only so can't be used + # for the Itanium disk image. + #elif [ "$2" == "ia64" ]; then + #arch="IA64" + #arch_id="2" + elif [ "$2" == "amd64" ]; then + arch="AMD64" + arch_id="3" + else + echo "ERROR: $2 is not a valid arch (x86/amd64)" + exit 1 + fi + shift + ;; -h|--help) usage exit 0 @@ -189,6 +217,7 @@ process_command_line() { esac shift done + if [ $# -ne 1 ]; then echo "You must specify the name of the image file to create!" echo "Run \"$script_name -h\" to see usage information." @@ -288,16 +317,16 @@ get_primary_boot_files() { if [ -n "$waik_dir" ]; then # Get boot files from the WAIK. - stat_busy "Copying primary boot files from the Windows Automated Installation Kit ($waik_dir)" + stat_busy "Copying primary boot files from the Windows Automated Installation Kit ($waik_dir, $arch)" if [ $make = iso ]; then - cabextract "$waik_dir"/wAIKX86.msi -F F_WINPE_X86_etfsboot.com -p \ + cabextract "$waik_dir"/wAIK${arch}.msi -F F_WINPE_${arch}_etfsboot.com -p \ > "$tmp_dir"/etfsboot.com || stat_fail fi - cabextract "$waik_dir"/wAIKX86.msi -F F1_BOOTMGR -p \ + cabextract "$waik_dir"/wAIK${arch}.msi -F F${arch_id}_BOOTMGR -p \ > "$tmp_dir"/bootmgr || stat_fail - cabextract "$waik_dir"/wAIKX86.msi -F F_WINPE_X86_boot.sdi -p \ + cabextract "$waik_dir"/wAIK${arch}.msi -F F_WINPE_${arch}_boot.sdi -p \ > "$tmp_dir"/boot/boot.sdi || stat_fail - cabextract "$waik_dir"/wAIKX86.msi -F F_WINPE_X86_bcd -p \ + cabextract "$waik_dir"/wAIK${arch}.msi -F F_WINPE_${arch}_bcd -p \ > "$tmp_dir"/boot/bcd || stat_fail stat_done else @@ -324,7 +353,7 @@ get_boot_wim() { if [ -n "$waik_dir" ]; then # WAIK stat_busy "Extracting boot.wim from \"$waik_dir/WinPE.cab\"" - cabextract "$waik_dir/WinPE.cab" -F F1_WINPE.WIM -p \ + cabextract "$waik_dir/WinPE.cab" -F F${arch_id}_WINPE.WIM -p \ > "$boot_wim" 2>/dev/null || stat_fail stat_done else @@ -394,7 +423,7 @@ make_iso_img() { stat_busy "Making ISO image \"$image\"" - mkisofs -sysid "" -A "" -V "Microsoft Windows PE (x86)" -d -N \ + mkisofs -sysid "" -A "" -V "Microsoft Windows PE ($arch)" -d -N \ -b etfsboot.com -no-emul-boot -c boot.cat -hide etfsboot.com \ -hide boot.cat -quiet -o "$image" "$tmp_dir" || stat_fail