mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
With the current wording, users might think that the -F option is not required as long as the script is placed in the default path. Be clear that the option is always required. Also includes some minor language improvements in the rest of the comment. Signed-off-by: Fiona Ebner <f.ebner@proxmox.com> Reviewed-by: Kostiantyn Kostiuk <kkostiuk@redhat.com> Link: https://lore.kernel.org/qemu-devel/20250916122111.36019-1-f.ebner@proxmox.com Signed-off-by: Kostiantyn Kostiuk <kkostiuk@redhat.com>
63 lines
2.0 KiB
Bash
Executable File
63 lines
2.0 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
# This script is executed when the guest agent receives fsfreeze-freeze and
|
|
# fsfreeze-thaw commands, provided that the --fsfreeze-hook (-F) option of
|
|
# qemu-ga is specified and the script is placed in /etc/qemu/fsfreeze-hook or in
|
|
# the path specified together with -F. When the agent receives fsfreeze-freeze
|
|
# requests, this script is called with "freeze" as its argument before the
|
|
# filesystem is frozen. And for fsfreeze-thaw requests, it is called with "thaw"
|
|
# as its argument after the filesystem is thawed.
|
|
|
|
LOGFILE=/var/log/qga-fsfreeze-hook.log
|
|
FSFREEZE_D=$(dirname -- "$0")/fsfreeze-hook.d
|
|
|
|
# Check whether file $1 is a backup or rpm-generated file and should be ignored
|
|
is_ignored_file() {
|
|
case "$1" in
|
|
*~ | *.bak | *.orig | *.rpmnew | *.rpmorig | *.rpmsave | *.sample | *.dpkg-old | *.dpkg-new | *.dpkg-tmp | *.dpkg-dist | *.dpkg-bak | *.dpkg-backup | *.dpkg-remove)
|
|
return 0 ;;
|
|
esac
|
|
return 1
|
|
}
|
|
|
|
USE_SYSLOG=0
|
|
# if log file is not writable, fallback to syslog
|
|
[ ! -w "$LOGFILE" ] && USE_SYSLOG=1
|
|
# try to update log file and fallback to syslog if it fails
|
|
touch "$LOGFILE" &>/dev/null || USE_SYSLOG=1
|
|
|
|
# Ensure the log file is writable, fallback to syslog if not
|
|
log_message() {
|
|
local message="$1"
|
|
if [ "$USE_SYSLOG" -eq 0 ]; then
|
|
printf "%s: %s\n" "$(date)" "$message" >>"$LOGFILE"
|
|
else
|
|
logger -t qemu-ga-freeze-hook "$message"
|
|
fi
|
|
}
|
|
|
|
# Iterate executables in directory "fsfreeze-hook.d" with the specified args
|
|
[ ! -d "$FSFREEZE_D" ] && exit 0
|
|
|
|
for file in "$FSFREEZE_D"/* ; do
|
|
is_ignored_file "$file" && continue
|
|
[ -x "$file" ] || continue
|
|
|
|
log_message "Executing $file $@"
|
|
if [ "$USE_SYSLOG" -eq 0 ]; then
|
|
"$file" "$@" >>"$LOGFILE" 2>&1
|
|
STATUS=$?
|
|
else
|
|
"$file" "$@" 2>&1 | logger -t qemu-ga-freeze-hook
|
|
STATUS=${PIPESTATUS[0]}
|
|
fi
|
|
|
|
if [ $STATUS -ne 0 ]; then
|
|
log_message "Error: $file finished with status=$STATUS"
|
|
else
|
|
log_message "$file finished successfully"
|
|
fi
|
|
done
|
|
|
|
exit 0
|