Fix quotation of variables

This commit is contained in:
Manuel Thalmann 2023-03-25 13:39:57 +01:00
parent 897f0354c7
commit e66425895b

View file

@ -55,7 +55,7 @@ RUN \
pattern="fixme:win:NtUserLockWindowUpdate ((nil))"; \ pattern="fixme:win:NtUserLockWindowUpdate ((nil))"; \
# The amount of times the pattern should occur for the process to be considered stuck # The amount of times the pattern should occur for the process to be considered stuck
patternCount=2; \ patternCount=2; \
output=$( \ output="$( \
sed \ sed \
# Handle exit hints # Handle exit hints
-e "s/^exit \([[:digit:]]\+\)$/\1/; t end;" \ -e "s/^exit \([[:digit:]]\+\)$/\1/; t end;" \
@ -66,45 +66,46 @@ RUN \
# Branch "stuck": delete output and exit with code 42 # Branch "stuck": delete output and exit with code 42
-e ":stuck s/.*//; q42;" \ -e ":stuck s/.*//; q42;" \
# Branch "end": exit with code 0 # Branch "end": exit with code 0
-e ":end q;"); \ -e ":end q;")"; \
exitCode="$?"; \
exitCode=$?; \ exitCode=$?; \
# Kill installer if it got stuck (according to console output) # Kill installer if it got stuck (according to console output)
[ $exitCode -eq 42 ] && pkill -9 MDK537.exe; \ [ "$exitCode" -eq 42 ] && pkill -9 MDK537.exe; \
# Use `sed`s exit code if non-zero # Use `sed`s exit code if non-zero
[ $exitCode -ne 0 ] && exit $exitCode; \ [ "$exitCode" -ne 0 ] && exit $exitCode; \
# Use `sed`s output otherwise # Use `sed`s output otherwise
[ $exitCode -eq 0 ] && exit $output; \ [ "$exitCode" -eq 0 ] && exit $output; \
}; \ }; \
# Run actual MDK537 installer # Run actual MDK537 installer
install_keil() { \ install_keil() { \
echo "Starting ARM Keil installation"; \ echo "Starting ARM Keil installation"; \
try=$1; \ try="$1"; \
# Run installer asynchronously # Run installer asynchronously
{ \ { \
{ 2>&1 WINEDEBUG=+all,trace-all,warn-all /usr/bin/entrypoint wine MDK537.exe --batch-install || echo "exit $?"; } \ { 2>&1 WINEDEBUG=+all,trace-all,warn-all /usr/bin/entrypoint wine MDK537.exe --batch-install || echo "exit $?"; } \
# Write output to `log.txt` # Write output to `log.txt`
| { [ $DEBUG -eq 1 ] && tee log.txt || cat; } \ | { [ "$DEBUG" -eq 1 ] && tee log.txt || cat; } \
# Pipe stdout and stderr to `handle_output` function # Pipe stdout and stderr to `handle_output` function
| handle_output & \ | handle_output & \
}; \ }; \
pid=$!; \ pid="$!"; \
# Continuously display screenshots and iteration number # Continuously display screenshots and iteration number
[ $DEBUG -eq 1 ] \ [ "$DEBUG" -eq 1 ] \
&& { \ && { \
{ \ { \
x=0; \ x=0; \
maxCount=120; \ maxCount=120; \
while ps -p $pid > /dev/null && [ $x -ne $maxCount ]; do \ while ps -p "$pid" > /dev/null && [ "$x" -ne "$maxCount" ]; do \
# Create screenshot and print it to the console # Create screenshot and print it to the console
fileName=screens/install-try$try-$x.png; \ fileName="screens/install-try$try-$x.png"; \
import -window root $fileName; \ import -window root "$fileName"; \
tiv -w 10000 -h 10000 $fileName; \ tiv -w 10000 -h 10000 "$fileName"; \
x=$(bash -c "declare -i x=$x+1; echo "'$x'); \ x=$(bash -c "declare -i x=$x+1; echo "'$x'); \
echo $x; \ echo $x; \
sleep 1; \ sleep 1; \
done; \ done; \
# Kill installer after timeout indicated by `maxCount` # Kill installer after timeout indicated by `maxCount`
[ $x -eq $maxCount ] && { pkill -9 MDK537.exe; mv log.txt logs/timeout-try$try.log; }; \ [ "$x" -eq "$maxCount" ] && { pkill -9 MDK537.exe; mv log.txt "logs/timeout-try$try.log"; }; \
} & \ } & \
}; \ }; \
wait $pid; \ wait $pid; \
@ -114,12 +115,12 @@ RUN \
&& [ -f log.txt ] \ && [ -f log.txt ] \
&& { \ && { \
# Move logs to location based on exit code # Move logs to location based on exit code
[ $exitCode -eq 0 ] && mv log.txt logs/success-try$try.log; \ [ "$exitCode" -eq 0 ] && mv log.txt "logs/success-try$try.log"; \
[ $exitCode -eq 42 ] && mv log.txt logs/timeout-handled-try$try.log; \ [ "$exitCode" -eq 42 ] && mv log.txt "logs/timeout-handled-try$try.log"; \
[ $exitCode -ne 0 ] && mv log.txt logs/fail-try$try.log; \ [ "$exitCode" -ne 0 ] && mv log.txt "logs/fail-try$try.log"; \
}; \ }; \
[ $exitCode -ne 0 ] && { \ [ "$exitCode" -ne 0 ] && { \
[ $exitCode -eq 42 ] && echo "The installation got stuck" || \ [ "$exitCode" -eq 42 ] && echo "The installation got stuck" || \
echo "The installation failed"; \ echo "The installation failed"; \
} || \ } || \
echo "The installation was successful"; \ echo "The installation was successful"; \
@ -132,16 +133,16 @@ RUN \
# Create job for waiting for Xvfb to start # Create job for waiting for Xvfb to start
watchStarting="$(mktemp)"; \ watchStarting="$(mktemp)"; \
{ 2>&1 inotifywait -e create /tmp/.X11-unix/; } | { sed -u -e "/^Watches established.\$/e rm \"$watchStarting\""; } & \ { 2>&1 inotifywait -e create /tmp/.X11-unix/; } | { sed -u -e "/^Watches established.\$/e rm \"$watchStarting\""; } & \
resolver=$!; \ resolver="$!"; \
while [ -f "$watchStarting" ]; do true; done; \ while [ -f "$watchStarting" ]; do true; done; \
{ \ { \
# Improve arguments for screenshots # Improve arguments for screenshots
ARGS=$([ $DEBUG -eq 1 ] && echo "-screen 0 640x480x24 -dpi 192" || echo ""); \ ARGS="$([ $DEBUG -eq 1 ] && echo "-screen 0 640x480x24 -dpi 192" || echo "")"; \
Xvfb ${DISPLAY} ${ARGS} & \ Xvfb ${DISPLAY} ${ARGS} & \
}; \ }; \
displayPID=$!; \ displayPID="$!"; \
# Wait for Xvfb to start # Wait for Xvfb to start
wait $resolver; \ wait "$resolver"; \
y=0; \ y=0; \
while ! \ while ! \
install_keil \ install_keil \
@ -152,27 +153,27 @@ RUN \
# Increase counter # Increase counter
y=$(bash -c "declare -i y=$y+1; echo "'$y'); \ y=$(bash -c "declare -i y=$y+1; echo "'$y'); \
done && \ done && \
kill -9 $displayPID > /dev/null 2>&1; \ kill -9 "$displayPID" > /dev/null 2>&1; \
# Delete unfinished installations # Delete unfinished installations
rm -rf "$(/usr/bin/entrypoint winepath 'C:\Keil_v5')/Backup."*; \ rm -rf "$(/usr/bin/entrypoint winepath 'C:\Keil_v5')/Backup."*; \
rm MDK537.exe; \ rm MDK537.exe; \
rm -f /tmp/.X*-lock; rm -f /tmp/.X*-lock;
RUN \ RUN \
keilConfig=$(/usr/bin/entrypoint winepath 'C:\Keil_v5\TOOLS.INI') && \ keilConfig="$(/usr/bin/entrypoint winepath 'C:\Keil_v5\TOOLS.INI')" && \
winAppData="$(/usr/bin/entrypoint wine cmd.exe /c 'echo %LOCALAPPDATA%' | tr -d '\r' | sed 's/\\/\\\\/g')" && \ winAppData="$(/usr/bin/entrypoint wine cmd.exe /c 'echo %LOCALAPPDATA%' | tr -d '\r' | sed 's/\\/\\\\/g')" && \
packDir="$winAppData"'\Arm\Packs' && \ packDir="$winAppData"'\Arm\Packs' && \
sed -i '/^RTEPATH=/d' $keilConfig && \ sed -i '/^RTEPATH=/d' "$keilConfig" && \
echo 'RTEPATH="'"$packDir"'"' | sed -i '/\[UV2\]/ r /dev/stdin' $keilConfig echo 'RTEPATH="'"$packDir"'"' | sed -i '/\[UV2\]/ r /dev/stdin' "$keilConfig"
RUN \ RUN \
wget ${PACK_URL} --progress=bar:force:noscroll --no-check-certificate -O InES.pack; \ wget "${PACK_URL}" --progress=bar:force:noscroll --no-check-certificate -O InES.pack; \
/usr/bin/entrypoint xvfb-run wine 'C:\Keil_v5\UV4\PackUnzip.exe' --embedded --agree-license InES.pack & \ /usr/bin/entrypoint xvfb-run wine 'C:\Keil_v5\UV4\PackUnzip.exe' --embedded --agree-license InES.pack & \
pid=$!; \ pid="$!"; \
wait $pid; \ wait "$pid"; \
pkill -P -9 $pid > /dev/null 2>&1; \ pkill -P -9 "$pid" > /dev/null 2>&1; \
kill -9 $pid > /dev/null 2>&1; \ kill -9 "$pid" > /dev/null 2>&1; \
kill -9 $displayPID > /dev/null 2>&1; \ kill -9 "$displayPID" > /dev/null 2>&1; \
rm InES.pack; \ rm InES.pack; \
rm -f /tmp/.X*-lock; rm -f /tmp/.X*-lock;