From 6c40590405da71a592a65b68e6b41b11437fb517 Mon Sep 17 00:00:00 2001 From: Christian Hesse Date: Mon, 28 Jan 2019 00:26:23 +0100 Subject: [PATCH] use environment file in systemd units for _WSREP_START_POSITION We used to run `systemctl set-environment` to pass _WSREP_START_POSITION. This is bad because: * it clutter systemd's environment (yes, pid 1) * it requires root privileges * options (like LimitNOFILE=) are not applied Let's just create an environment file in ExecStartPre=, that is read before ExecStart= kicks in. We have _WSREP_START_POSITION around for the main process without any downsides. --- support-files/CMakeLists.txt | 2 ++ support-files/mariadb.service.in | 12 ++++++------ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/support-files/CMakeLists.txt b/support-files/CMakeLists.txt index 4c1db775c19..7f49fca212b 100644 --- a/support-files/CMakeLists.txt +++ b/support-files/CMakeLists.txt @@ -32,6 +32,8 @@ ELSE() SET(MYSQLD_GROUP "mysql") SET(ini_file_extension "cnf") SET(HOSTNAME "uname -n") + get_filename_component(MYSQL_UNIX_DIR ${MYSQL_UNIX_ADDR} DIRECTORY) + SET(mysqlunixdir ${MYSQL_UNIX_DIR}) ENDIF() # XXX: shouldn't we just have variables for all this stuff and centralise diff --git a/support-files/mariadb.service.in b/support-files/mariadb.service.in index b7a55596029..2f990df4a15 100644 --- a/support-files/mariadb.service.in +++ b/support-files/mariadb.service.in @@ -70,20 +70,20 @@ ProtectSystem=full # Prevent accessing /home, /root and /run/user ProtectHome=true -# Execute pre and post scripts as root, otherwise it does it as User= -PermissionsStartOnly=true +# Use an environment file to pass variable _WSREP_START_POSITION +EnvironmentFile=-@mysqlunixdir@/wsrep-start-position @SYSTEMD_EXECSTARTPRE@ # Perform automatic wsrep recovery. When server is started without wsrep, # galera_recovery simply returns an empty string. In any case, however, # the script is not expected to return with a non-zero status. -# It is always safe to unset _WSREP_START_POSITION environment variable. +# It is always safe to remove @mysqlunixdir@/wsrep-start-position +# environment file. # Do not panic if galera_recovery script is not available. (MDEV-10538) -ExecStartPre=/bin/sh -c "systemctl unset-environment _WSREP_START_POSITION" ExecStartPre=/bin/sh -c "[ ! -e @bindir@/galera_recovery ] && VAR= || \ VAR=`cd @bindir@/..; @bindir@/galera_recovery`; [ $? -eq 0 ] \ - && systemctl set-environment _WSREP_START_POSITION=$VAR || exit 1" + && echo _WSREP_START_POSITION=$VAR > @mysqlunixdir@/wsrep-start-position || exit 1" # Needed to create system tables etc. # ExecStartPre=@scriptdir@/mysql_install_db -u mysql @@ -96,7 +96,7 @@ ExecStartPre=/bin/sh -c "[ ! -e @bindir@/galera_recovery ] && VAR= || \ ExecStart=@sbindir@/mysqld $MYSQLD_OPTS $_WSREP_NEW_CLUSTER $_WSREP_START_POSITION # Unset _WSREP_START_POSITION environment variable. -ExecStartPost=/bin/sh -c "systemctl unset-environment _WSREP_START_POSITION" +ExecStartPost=/bin/rm -f @mysqlunixdir@/wsrep-start-position @SYSTEMD_EXECSTARTPOST@