From 1b70e83dddcafbcbea84fc55a6396e4876a9a0c4 Mon Sep 17 00:00:00 2001 From: Joey Hess Date: Thu, 4 Sep 2014 13:53:42 -0400 Subject: Avoid propigating nonzero exit status of any command called by etckeeper out to the caller. This is to avoid making apt give up because git is misconfigured and cannot commit, or similar. Closes: #760011 I absoltely do not want etckeeper to dive into the rats nest of making git be able to commit reliably. git commit has about a dozen failure modes, and it's up to the admin to avoid breaking their system by not giving it a hostname, or writing a broken ~/.gitconfig, or not giving uid 0 a user name, etc. I considered making only apt.conf's etckeeper calls be guarded with || true, but this would also need to be done for the other package managers that can call etckeeper. And it's better to let etckeeper indicate which script failed, rather than seeing an error message and apt continuing without an indication of why git commit was being called then. --- debian/changelog | 8 ++++++++ etckeeper | 5 ++++- etckeeper.8 | 4 ++++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/debian/changelog b/debian/changelog index 1575d89..ef5039b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,11 @@ +etckeeper (1.14) UNRELEASED; urgency=medium + + * Avoid propigating nonzero exit status of any command called by etckeeper + out to the caller. This is to avoid making apt give up because git is + misconfigured and cannot commit, or similar. Closes: #760011 + + -- Joey Hess Thu, 04 Sep 2014 13:49:26 -0400 + etckeeper (1.13) unstable; urgency=medium * Ignore check-mk-agent-logwatch's FHS violating diff --git a/etckeeper b/etckeeper index 554ada9..bfd1070 100755 --- a/etckeeper +++ b/etckeeper @@ -126,5 +126,8 @@ lsscripts() { } for script in $(lsscripts "$ETCKEEPER_CONF_DIR/$command.d"); do - "$script" "$@" + if ! "$script" "$@"; then + echo "etckeeper failed running $script" >&1 + exit 0 + fi done diff --git a/etckeeper.8 b/etckeeper.8 index 62ae976..7ac077f 100644 --- a/etckeeper.8 +++ b/etckeeper.8 @@ -64,6 +64,10 @@ prompting.) /etc/etckeeper also contains directories containing the programs that are run for each of the above commands. +.SH EXIT STATUS +If the etckeeper command fails to run for some reason, etckeeper will show +what failed, but still exit 0. This is to avoid breaking things like apt +that call etckeeper. .SH ENVIRONMENT VARIABLES ETCKEEPER_CONF_DIR path to configuration directory instead of default /etc/etckeeper. .SH SEE ALSO -- cgit v1.2.3