I have debugged the problem to root cause. In the postinst script it calls:
invoke-rc.d mysql start || exit $?
Running this manually:
# service mysql start
Starting MySQL database server: mysqld ..
# echo $?
1
Tracing the script, it's a bash script, yields:
bash -x /etc/init.d/mysql start
...
+ log_end_msg_post 0
+ :
+ return 0
++ /etc/mysql/debian-start
+ output=
+ '[' -n '' ']'
Which corresponds to this section of the init.d script.
if mysqld_status check_alive warn; then
log_end_msg 0
# Now start mysqlcheck or whatever the admin wants.
output=$(/etc/mysql/debian-start)
[ -n "$output" ] && log_action_msg "$output"
else
Which then falls off the bottom of the script. Since the exit code of
the last command run is non-zero (the [ -n "$output" ] has no output)
it causes the exit code of the script to be non-zero too.
This is a deja-bug as I have debugged this before:
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=739846
Unfortunately I failed to realize that the exit 0 was a local change I
had put in to fix this problem previously. Making it a confusing bug
report. And unfortunately having fixed the problem for myself I
didn't follow up on it. My bad.
But the problem is exactly the same. The script needs to exit 0 at
the end. At all points when there is an error it exits non-zero.
That is all okay. But that means that when the script exits normally
it should definitely exit 0. Note that the previous versions of the
/etc/init.d/skeleton script included a ":" at the end to clear the
exit code and basically do the same thing.
The simplest fix is to add an "exit 0" at the bottom of the script.
Bob
signature.asc
Description: Digital signature

