Improved signal handling, removing result ISO if xorriso exits with error, redirected a few messages from stdout to stderr
This commit is contained in:
parent
34981b1278
commit
5897c706a4
@ -32,6 +32,8 @@ usage() {
|
|||||||
echo "Exported non-empty variable MERGE_FOR_DIST enforces the use of a" >&2
|
echo "Exported non-empty variable MERGE_FOR_DIST enforces the use of a" >&2
|
||||||
echo "particular directory in /dists of iso1. Normally only one" >&2
|
echo "particular directory in /dists of iso1. Normally only one" >&2
|
||||||
echo "such directory is found and thus no need to set MERGE_FOR_DIST." >&2
|
echo "such directory is found and thus no need to set MERGE_FOR_DIST." >&2
|
||||||
|
echo "Exported non-empty variable MERGE_KEEP_ISO prevents the removal" >&2
|
||||||
|
echo "of result_iso after xorriso indicated failure of production." >&2
|
||||||
echo "Exported non-empty variable XORRISO overrides command xorriso." >&2
|
echo "Exported non-empty variable XORRISO overrides command xorriso." >&2
|
||||||
echo "This may be needed if installed xorriso is older than 1.4.2." >&2
|
echo "This may be needed if installed xorriso is older than 1.4.2." >&2
|
||||||
echo 'If XORRISO is set to "dummy" then no new ISO will emerge.' >&2
|
echo 'If XORRISO is set to "dummy" then no new ISO will emerge.' >&2
|
||||||
@ -82,39 +84,34 @@ check_single_word() {
|
|||||||
MOUNT_LIST=
|
MOUNT_LIST=
|
||||||
UMOUNT_LIST=
|
UMOUNT_LIST=
|
||||||
RMDIR_LIST=
|
RMDIR_LIST=
|
||||||
TEMPFILE_LIST="merged_dists merged_md5sum.txt merged_README.txt temp_file"
|
TEMPFILE_LIST=
|
||||||
|
EMERGING_ISO=
|
||||||
|
|
||||||
finish_cleanup() {
|
# Cleanup temporary files, mount points and made directories
|
||||||
if test -n "$1"
|
|
||||||
|
cleanup_ignore_counter=0
|
||||||
|
|
||||||
|
cleanup_ignore_handler() {
|
||||||
|
cleanup_ignore_counter=$(expr "$cleanup_ignore_counter" + 1)
|
||||||
|
if test "$cleanup_ignore_counter" -ge 4
|
||||||
then
|
then
|
||||||
echo >&2
|
# Reset traps to default
|
||||||
if test "$1" -gt 0
|
trap - INT TERM QUIT
|
||||||
then
|
echo "--- Ignored several INT, TERM, or QUIT signals during cleanup." >&2
|
||||||
echo "--- Merge run aborted !" >&2
|
echo "--- Will give in to next signal." >&2
|
||||||
else
|
return 0
|
||||||
echo "Merge run ended with success indication." >&2
|
|
||||||
fi
|
|
||||||
exit "$1"
|
|
||||||
fi
|
fi
|
||||||
|
echo "--- Ignored INT, TERM, or QUIT signal during cleanup." >&2
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
# Cleanup temporary files, mount points and made directories
|
cleanup() {
|
||||||
cleanup_ran=0
|
|
||||||
|
|
||||||
cleanup_and_end() {
|
# Make sure to be in cleanup state of traps
|
||||||
# Remove trap
|
trap cleanup_ignore_handler INT TERM QUIT
|
||||||
trap - INT TERM QUIT EXIT
|
|
||||||
|
|
||||||
if test "$cleanup_ran" = 1
|
|
||||||
then
|
|
||||||
finish_cleanup "$1"
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
cleanup_ran=1
|
|
||||||
|
|
||||||
echo >&2
|
echo >&2
|
||||||
echo "Cleaning up temporary files and mount points ..." 2>&1
|
echo "Cleaning up temporary files and mount points ..." >&2
|
||||||
|
|
||||||
ret=0
|
ret=0
|
||||||
|
|
||||||
@ -153,6 +150,28 @@ cleanup_and_end() {
|
|||||||
ret=1
|
ret=1
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
if test -n "$EMERGING_ISO" && test -e "$EMERGING_ISO"
|
||||||
|
then
|
||||||
|
if test -n "$MERGE_KEEP_ISO"
|
||||||
|
then
|
||||||
|
echo "Removal of incomplete result ISO suppressed by MERGE_KEEP_ISO." >&2
|
||||||
|
echo "Remaining: $EMERGING_ISO" >&2
|
||||||
|
else
|
||||||
|
echo "Removing incomplete result ISO." >&2
|
||||||
|
echo \
|
||||||
|
" (This can be suppressed by exporting non-empty variable MERGE_KEEP_ISO.)" \
|
||||||
|
>&2
|
||||||
|
if rm "$EMERGING_ISO"
|
||||||
|
then
|
||||||
|
dummy=dummy
|
||||||
|
else
|
||||||
|
echo "--- Note: Cannot remove incomplete result: $EMERGING_ISO" >&2
|
||||||
|
ret=1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
if test "$ret" = 0
|
if test "$ret" = 0
|
||||||
then
|
then
|
||||||
echo "Cleanup completed." >&2
|
echo "Cleanup completed." >&2
|
||||||
@ -160,14 +179,49 @@ cleanup_and_end() {
|
|||||||
echo "--- Cleanup could not be fully completed." >&2
|
echo "--- Cleanup could not be fully completed." >&2
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Might exit
|
# Do not come back via trap again
|
||||||
finish_cleanup "$1"
|
trap - INT TERM QUIT
|
||||||
|
|
||||||
return $ret
|
return $ret
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Handler for INT TERM QUIT events if "$1" is empty
|
||||||
|
# Procedural program exit if "$1" is not empty
|
||||||
|
cleanup_and_end() {
|
||||||
|
|
||||||
# +++ No cleanup_and_end before TEMPFILE_LIST is verified to be missing +++
|
# Early assume cleanup state of traps
|
||||||
|
trap cleanup_ignore_handler INT TERM QUIT
|
||||||
|
trap - EXIT
|
||||||
|
|
||||||
|
if test -z "$1"
|
||||||
|
then
|
||||||
|
exit_value=6
|
||||||
|
echo >&2
|
||||||
|
echo "--- Encountered INT, TERM, or QUIT signal." >&2
|
||||||
|
else
|
||||||
|
exit_value="$1"
|
||||||
|
fi
|
||||||
|
cleanup
|
||||||
|
echo >&2
|
||||||
|
if test "$exit_value" -gt 0
|
||||||
|
then
|
||||||
|
echo "--- Merge run aborted !" >&2
|
||||||
|
else
|
||||||
|
echo "Merge run ended with success indication." >&2
|
||||||
|
fi
|
||||||
|
exit "$exit_value"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Handler for rogue EXIT
|
||||||
|
cleanup_for_exit() {
|
||||||
|
|
||||||
|
# Early assume cleanup state of traps
|
||||||
|
trap cleanup_ignore_handler INT TERM QUIT
|
||||||
|
trap - EXIT
|
||||||
|
|
||||||
|
cleanup
|
||||||
|
echo >&2
|
||||||
|
echo "--- Merge run ended by unexpected EXIT event !" >&2
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
## Check arguments and dependencies
|
## Check arguments and dependencies
|
||||||
@ -191,7 +245,7 @@ do
|
|||||||
then
|
then
|
||||||
dummy=dummy
|
dummy=dummy
|
||||||
else
|
else
|
||||||
echo "--- Missing a helper program: $i" 2>&1
|
echo "--- Missing a helper program: $i" >&2
|
||||||
missing=1
|
missing=1
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
@ -210,16 +264,16 @@ then
|
|||||||
dummy=dummy
|
dummy=dummy
|
||||||
else
|
else
|
||||||
echo '--- Help text of xorriso program '"$XORRISO"' lacks word "replay".' \
|
echo '--- Help text of xorriso program '"$XORRISO"' lacks word "replay".' \
|
||||||
2>&1
|
>&2
|
||||||
echo "--- It will fail when trying to make the new ISO bootable." 2>&1
|
echo "--- It will fail when trying to make the new ISO bootable." >&2
|
||||||
echo " Consider to get and compile GNU xorriso from" 2>&1
|
echo " Consider to get and compile GNU xorriso from" >&2
|
||||||
echo " https://www.gnu.org/software/xorriso" 2>&1
|
echo " https://www.gnu.org/software/xorriso" >&2
|
||||||
echo " and to export variable XORRISO with the binary's path." 2>&1
|
echo " and to export variable XORRISO with the binary's path." >&2
|
||||||
echo >&2
|
echo >&2
|
||||||
missing=1
|
missing=1
|
||||||
fi
|
fi
|
||||||
else
|
else
|
||||||
echo "--- Test run of xorriso program failed: $XORRISO -no_rc -version" 2>&1
|
echo "--- Test run of xorriso program failed: $XORRISO -no_rc -version" >&2
|
||||||
missing=1
|
missing=1
|
||||||
fi
|
fi
|
||||||
if test "$missing" = 1
|
if test "$missing" = 1
|
||||||
@ -229,11 +283,13 @@ then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
existing_tempfiles=
|
existing_tempfiles=
|
||||||
for i in $TEMPFILE_LIST
|
for i in merged_dists merged_md5sum.txt merged_README.txt temp_file
|
||||||
do
|
do
|
||||||
if test -e "$i"
|
if test -e "$i"
|
||||||
then
|
then
|
||||||
existing_tempfiles="$existing_tempfiles $i"
|
existing_tempfiles="$existing_tempfiles $i"
|
||||||
|
else
|
||||||
|
TEMPFILE_LIST="$TEMPFILE_LIST $i"
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
if test -n "$existing_tempfiles"
|
if test -n "$existing_tempfiles"
|
||||||
@ -245,8 +301,12 @@ then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|
||||||
# +++ From here on: Always call cleanup_and_end to perform exit +++
|
# +++ From here on: Always call cleanup_and_end to perform exit +++
|
||||||
trap cleanup_and_end INT TERM QUIT EXIT
|
|
||||||
|
|
||||||
|
trap cleanup_and_end INT TERM QUIT
|
||||||
|
trap cleanup_for_exit EXIT
|
||||||
|
|
||||||
RESULT_ISO="$1"
|
RESULT_ISO="$1"
|
||||||
check_single_word "$2" "result_iso" || cleanup_and_end 1
|
check_single_word "$2" "result_iso" || cleanup_and_end 1
|
||||||
@ -683,6 +743,9 @@ else
|
|||||||
fi
|
fi
|
||||||
echo >&2
|
echo >&2
|
||||||
|
|
||||||
|
# Mark the result path for possible removal by cleanup
|
||||||
|
EMERGING_ISO="$RESULT_ISO"
|
||||||
|
|
||||||
if "$XORRISO" \
|
if "$XORRISO" \
|
||||||
-no_rc \
|
-no_rc \
|
||||||
-indev "$iso_1" \
|
-indev "$iso_1" \
|
||||||
@ -700,6 +763,9 @@ if "$XORRISO" \
|
|||||||
-padding included \
|
-padding included \
|
||||||
-compliance no_emul_toc
|
-compliance no_emul_toc
|
||||||
then
|
then
|
||||||
|
# Revoke mark for possible removal by cleanup
|
||||||
|
EMERGING_ISO=
|
||||||
|
|
||||||
test "$XORRISO" = echo || \
|
test "$XORRISO" = echo || \
|
||||||
echo "Run of xorriso program ended without error indication." >&2
|
echo "Run of xorriso program ended without error indication." >&2
|
||||||
else
|
else
|
||||||
|
Binary file not shown.
Loading…
Reference in New Issue
Block a user