Update install.sh

This commit is contained in:
Kroese 2024-05-26 03:07:20 +02:00 committed by GitHub
parent 09aad4203b
commit 6e1a387183
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -468,6 +468,7 @@ detectLanguage() {
setXML() { setXML() {
local file="/custom.xml" local file="/custom.xml"
[ ! -f "$file" ] || [ ! -s "$file" ] && file="$STORAGE/custom.xml" [ ! -f "$file" ] || [ ! -s "$file" ] && file="$STORAGE/custom.xml"
[ ! -f "$file" ] || [ ! -s "$file" ] && file="/run/assets/custom.xml" [ ! -f "$file" ] || [ ! -s "$file" ] && file="/run/assets/custom.xml"
[ ! -f "$file" ] || [ ! -s "$file" ] && file="$1" [ ! -f "$file" ] || [ ! -s "$file" ] && file="$1"
@ -700,6 +701,76 @@ addDriver() {
return 0 return 0
} }
addDrivers() {
local file="$1"
local index="$2"
local msg="Adding drivers to image..."
info "$msg" && html "$msg"
local drivers="$TMP/drivers"
mkdir -p "$drivers"
if ! tar -xf /drivers.txz -C "$drivers" --warning=no-timestamp; then
error "Failed to extract driver!" && return 1
fi
local target="\$WinPEDriver\$"
local dest="$drivers/$target"
mkdir -p "$dest"
wimlib-imagex update "$file" "$index" --command "delete --force --recursive /$target" >/dev/null || true
addDriver "$DETECTED" "$drivers" "$target" "qxl"
addDriver "$DETECTED" "$drivers" "$target" "viofs"
addDriver "$DETECTED" "$drivers" "$target" "sriov"
addDriver "$DETECTED" "$drivers" "$target" "smbus"
addDriver "$DETECTED" "$drivers" "$target" "qxldod"
addDriver "$DETECTED" "$drivers" "$target" "viorng"
addDriver "$DETECTED" "$drivers" "$target" "viostor"
addDriver "$DETECTED" "$drivers" "$target" "NetKVM"
addDriver "$DETECTED" "$drivers" "$target" "Balloon"
addDriver "$DETECTED" "$drivers" "$target" "vioscsi"
addDriver "$DETECTED" "$drivers" "$target" "pvpanic"
addDriver "$DETECTED" "$drivers" "$target" "vioinput"
addDriver "$DETECTED" "$drivers" "$target" "viogpudo"
addDriver "$DETECTED" "$drivers" "$target" "vioserial"
addDriver "$DETECTED" "$drivers" "$target" "qemupciserial"
if ! wimlib-imagex update "$file" "$index" --command "add $dest /$target" >/dev/null; then
return 1
fi
rm -rf "$drivers"
return 0
}
addFolder() {
local src="$1"
local dest file
local folder="/oem"
[ ! -d "$folder" ] && folder="/OEM"
[ ! -d "$folder" ] && folder="$STORAGE/oem"
[ ! -d "$folder" ] && folder="$STORAGE/OEM"
[ ! -d "$folder" ] && return 0
local msg="Adding OEM folder to image..."
info "$msg" && html "$msg"
dest="$src/\$OEM\$/\$1/"
mkdir -p "$dest"
! cp -r "$folder" "$dest" && return 1
file=$(find "$dest" -maxdepth 1 -type f -iname install.bat | head -n 1)
[ -f "$file" ] && unix2dos -q "$file"
return 0
}
updateImage() { updateImage() {
local dir="$1" local dir="$1"
@ -708,7 +779,7 @@ updateImage() {
local file="autounattend.xml" local file="autounattend.xml"
local org="${file//.xml/.org}" local org="${file//.xml/.org}"
local dat="${file//.xml/.dat}" local dat="${file//.xml/.dat}"
local desc path src loc xml index result local desc path src wim xml index result
[[ "${DETECTED,,}" == "winxp"* ]] && return 0 [[ "${DETECTED,,}" == "winxp"* ]] && return 0
@ -724,28 +795,36 @@ updateImage() {
if [ ! -d "$src" ]; then if [ ! -d "$src" ]; then
[[ "${PLATFORM,,}" == "x64" ]] && BOOT_MODE="windows_legacy" [[ "${PLATFORM,,}" == "x64" ]] && BOOT_MODE="windows_legacy"
warn "failed to locate 'sources' folder in ISO image, $FB" && return 1 error "failed to locate 'sources' folder in ISO image, $FB" && return 1
fi fi
loc=$(find "$src" -maxdepth 1 -type f -iname boot.wim | head -n 1) wim=$(find "$src" -maxdepth 1 -type f -iname boot.wim | head -n 1)
[ ! -f "$loc" ] && loc=$(find "$src" -maxdepth 1 -type f -iname boot.esd | head -n 1) [ ! -f "$wim" ] && wim=$(find "$src" -maxdepth 1 -type f -iname boot.esd | head -n 1)
if [ ! -f "$loc" ]; then if [ ! -f "$wim" ]; then
[[ "${PLATFORM,,}" == "x64" ]] && BOOT_MODE="windows_legacy" [[ "${PLATFORM,,}" == "x64" ]] && BOOT_MODE="windows_legacy"
warn "failed to locate 'boot.wim' or 'boot.esd' in ISO image, $FB" && return 1 error "failed to locate 'boot.wim' or 'boot.esd' in ISO image, $FB" && return 1
fi fi
index="1" index="1"
result=$(wimlib-imagex info -xml "$loc" | tr -d '\000') result=$(wimlib-imagex info -xml "$wim" | tr -d '\000')
if [[ "${result^^}" == *"<IMAGE INDEX=\"2\">"* ]]; then if [[ "${result^^}" == *"<IMAGE INDEX=\"2\">"* ]]; then
index="2" index="2"
fi fi
if wimlib-imagex extract "$loc" "$index" "/$file" "--dest-dir=$TMP" >/dev/null 2>&1; then if ! addDrivers "$wim" "$index"; then
if ! wimlib-imagex extract "$loc" "$index" "/$dat" "--dest-dir=$TMP" >/dev/null 2>&1; then error "Failed to add drivers to image!" && return 1
if ! wimlib-imagex extract "$loc" "$index" "/$org" "--dest-dir=$TMP" >/dev/null 2>&1; then fi
if ! wimlib-imagex update "$loc" "$index" --command "rename /$file /$org" > /dev/null; then
if ! addFolder "$src"; then
error "Failed to add OEM folder to image!" && return 1
fi
if wimlib-imagex extract "$wim" "$index" "/$file" "--dest-dir=$TMP" >/dev/null 2>&1; then
if ! wimlib-imagex extract "$wim" "$index" "/$dat" "--dest-dir=$TMP" >/dev/null 2>&1; then
if ! wimlib-imagex extract "$wim" "$index" "/$org" "--dest-dir=$TMP" >/dev/null 2>&1; then
if ! wimlib-imagex update "$wim" "$index" --command "rename /$file /$org" > /dev/null; then
warn "failed to backup original answer file ($file)." warn "failed to backup original answer file ($file)."
fi fi
fi fi
@ -764,11 +843,11 @@ updateImage() {
cp "$asset" "$answer" cp "$asset" "$answer"
updateXML "$answer" "$language" updateXML "$answer" "$language"
if ! wimlib-imagex update "$loc" "$index" --command "add $answer /$file" > /dev/null; then if ! wimlib-imagex update "$wim" "$index" --command "add $answer /$file" > /dev/null; then
MANUAL="Y" MANUAL="Y"
warn "failed to add answer file ($xml) to ISO image, $FB" warn "failed to add answer file ($xml) to ISO image, $FB"
else else
wimlib-imagex update "$loc" "$index" --command "add $answer /$dat" > /dev/null || true wimlib-imagex update "$wim" "$index" --command "add $answer /$dat" > /dev/null || true
fi fi
rm -f "$answer" rm -f "$answer"
@ -777,10 +856,10 @@ updateImage() {
if [[ "$MANUAL" == [Yy1]* ]]; then if [[ "$MANUAL" == [Yy1]* ]]; then
wimlib-imagex update "$loc" "$index" --command "delete --force /$file" > /dev/null || true wimlib-imagex update "$wim" "$index" --command "delete --force /$file" > /dev/null || true
if wimlib-imagex extract "$loc" "$index" "/$org" "--dest-dir=$TMP" >/dev/null 2>&1; then if wimlib-imagex extract "$wim" "$index" "/$org" "--dest-dir=$TMP" >/dev/null 2>&1; then
if ! wimlib-imagex update "$loc" "$index" --command "add $TMP/$org /$file" > /dev/null; then if ! wimlib-imagex update "$wim" "$index" --command "add $TMP/$org /$file" > /dev/null; then
warn "failed to restore original answer file ($org)." warn "failed to restore original answer file ($org)."
fi fi
fi fi
@ -801,48 +880,10 @@ updateImage() {
fi fi
fi fi
local msg="Adding drivers to image..."
info "$msg" && html "$msg"
local drivers="$TMP/drivers"
mkdir -p "$drivers"
if ! tar -xf /drivers.txz -C "$drivers" --warning=no-timestamp; then
error "Failed to extract driver!" && return 1
fi
local target="\$WinPEDriver\$"
local dest="$drivers/$target"
mkdir -p "$dest"
wimlib-imagex update "$loc" "$index" --command "delete --force --recursive /$target" >/dev/null || true
addDriver "$DETECTED" "$drivers" "$target" "qxl"
addDriver "$DETECTED" "$drivers" "$target" "viofs"
addDriver "$DETECTED" "$drivers" "$target" "sriov"
addDriver "$DETECTED" "$drivers" "$target" "smbus"
addDriver "$DETECTED" "$drivers" "$target" "qxldod"
addDriver "$DETECTED" "$drivers" "$target" "viorng"
addDriver "$DETECTED" "$drivers" "$target" "viostor"
addDriver "$DETECTED" "$drivers" "$target" "NetKVM"
addDriver "$DETECTED" "$drivers" "$target" "Balloon"
addDriver "$DETECTED" "$drivers" "$target" "vioscsi"
addDriver "$DETECTED" "$drivers" "$target" "pvpanic"
addDriver "$DETECTED" "$drivers" "$target" "vioinput"
addDriver "$DETECTED" "$drivers" "$target" "viogpudo"
addDriver "$DETECTED" "$drivers" "$target" "vioserial"
addDriver "$DETECTED" "$drivers" "$target" "qemupciserial"
if ! wimlib-imagex update "$loc" "$index" --command "add $dest /$target" >/dev/null; then
warn "Failed to add drivers to image!"
fi
rm -rf "$drivers"
return 0 return 0
} }
removeDownload() { removeImage() {
local iso="$1" local iso="$1"
@ -853,39 +894,6 @@ removeDownload() {
return 0 return 0
} }
copyOEM() {
local dir="$1"
local folder="/oem"
local src dest file
[ ! -d "$folder" ] && folder="/OEM"
[ ! -d "$folder" ] && folder="$STORAGE/oem"
[ ! -d "$folder" ] && folder="$STORAGE/OEM"
[ ! -d "$folder" ] && return 0
local msg="Copying OEM folder to image..."
info "$msg" && html "$msg"
src=$(find "$dir" -maxdepth 1 -type d -iname sources | head -n 1)
if [ ! -d "$src" ]; then
error "failed to locate 'sources' folder in ISO image!" && return 1
fi
dest="$src/\$OEM\$/\$1/"
mkdir -p "$dest"
if ! cp -r "$folder" "$dest"; then
error "Failed to copy OEM folder!" && return 1
fi
file=$(find "$dest" -maxdepth 1 -type f -iname install.bat | head -n 1)
[ -f "$file" ] && unix2dos -q "$file"
return 0
}
buildImage() { buildImage() {
local dir="$1" local dir="$1"
@ -1040,22 +1048,18 @@ fi
if ! prepareImage "$ISO" "$DIR"; then if ! prepareImage "$ISO" "$DIR"; then
abortInstall "$ISO" && return 0 abortInstall "$ISO" && return 0
exit 60 exit 66
fi fi
if ! updateImage "$DIR" "$XML" "$LANGUAGE"; then if ! updateImage "$DIR" "$XML" "$LANGUAGE"; then
abortInstall "$ISO" && return 0 abortInstall "$ISO" && return 0
exit 60
fi
if ! removeDownload "$ISO"; then
exit 64
fi
if ! copyOEM "$DIR"; then
exit 63 exit 63
fi fi
if ! removeImage "$ISO"; then
exit 64
fi
if ! buildImage "$DIR"; then if ! buildImage "$DIR"; then
exit 65 exit 65
fi fi