Port scripts for systemd unit from MariaDB
This commit is contained in:
parent
c8c069a981
commit
dfd59cb65f
32
community-mysql-scripts.patch
Normal file
32
community-mysql-scripts.patch
Normal file
@ -0,0 +1,32 @@
|
||||
diff -rup mysql-5.6.19-orig/scripts/CMakeLists.txt mysql-5.6.19/scripts/CMakeLists.txt
|
||||
--- mysql-5.6.19-orig/scripts/CMakeLists.txt 2014-07-22 10:07:12.053410263 +0200
|
||||
+++ mysql-5.6.19/scripts/CMakeLists.txt 2014-07-22 10:10:44.102502369 +0200
|
||||
@@ -381,6 +381,28 @@ ELSE()
|
||||
ENDIF()
|
||||
INSTALL_SCRIPT(${CMAKE_CURRENT_BINARY_DIR}/${file} COMPONENT ${${file}_COMPONENT})
|
||||
ENDFOREACH()
|
||||
+
|
||||
+ # files for systemd
|
||||
+ SET(SYSTEMD_SCRIPTS
|
||||
+ mysql.tmpfiles.d
|
||||
+ mysqld.service
|
||||
+ mysqld-prepare-db-dir
|
||||
+ mysqld-wait-ready
|
||||
+ mysqld-check-socket
|
||||
+ mysqld-scripts-common
|
||||
+ )
|
||||
+ FOREACH(file ${SYSTEMD_SCRIPTS})
|
||||
+ IF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${file}.sh)
|
||||
+ CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${file}.sh
|
||||
+ ${CMAKE_CURRENT_BINARY_DIR}/${file} ESCAPE_QUOTES @ONLY)
|
||||
+ ELSEIF(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${file}.in)
|
||||
+ CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${file}.in
|
||||
+ ${CMAKE_CURRENT_BINARY_DIR}/${file} ESCAPE_QUOTES @ONLY)
|
||||
+ ELSE()
|
||||
+ MESSAGE(FATAL_ERROR "Can not find ${file}.sh or ${file}.in in "
|
||||
+ "${CMAKE_CURRENT_SOURCE_DIR}" )
|
||||
+ ENDIF()
|
||||
+ ENDFOREACH()
|
||||
ENDIF()
|
||||
|
||||
# Install libgcc as mylibgcc.a
|
@ -22,9 +22,12 @@
|
||||
# my.cnf and my.cnf.d
|
||||
%global ship_my_cnf 0
|
||||
|
||||
# Name for the systemd unit file
|
||||
%global daemon_name mysqld.service
|
||||
|
||||
Name: community-mysql
|
||||
Version: 5.6.19
|
||||
Release: 4%{?dist}
|
||||
Release: 5%{?dist}
|
||||
Summary: MySQL client programs and shared libraries
|
||||
Group: Applications/Databases
|
||||
URL: http://www.mysql.com
|
||||
@ -39,10 +42,12 @@ Source4: mysql_config_multilib.sh
|
||||
Source5: my_config.h
|
||||
Source6: README.mysql-docs
|
||||
Source7: README.mysql-license
|
||||
Source10: mysql.tmpfiles.d
|
||||
Source11: mysqld.service
|
||||
Source12: mysqld-prepare-db-dir
|
||||
Source13: mysqld-wait-ready
|
||||
Source10: mysql.tmpfiles.d.in
|
||||
Source11: mysqld.service.in
|
||||
Source12: mysqld-prepare-db-dir.sh
|
||||
Source13: mysqld-wait-ready.sh
|
||||
Source14: mysqld-check-socket.sh
|
||||
Source15: mysqld-scripts-common.sh
|
||||
# To track rpmlint warnings
|
||||
Source17: mysql-5.6.10-rpmlintrc
|
||||
|
||||
@ -63,6 +68,7 @@ Patch25: community-mysql-5.6.16-mysql-install.patch
|
||||
Patch26: community-mysql-5.6.13-major.patch
|
||||
Patch34: community-mysql-pluginerrmsg.patch
|
||||
Patch35: community-mysql-5.6.19-gcc49-aarch64-opt.patch
|
||||
Patch37: community-mysql-scripts.patch
|
||||
|
||||
BuildRequires: cmake
|
||||
BuildRequires: dos2unix
|
||||
@ -147,7 +153,7 @@ MySQL package.
|
||||
|
||||
Summary: The error messages files required by server and embedded
|
||||
Group: Applications/Databases
|
||||
Requires: %{name}-common%{?_isa} = %{epoch}:%{version}-%{release}
|
||||
Requires: %{name}-common%{?_isa} = %{version}-%{release}
|
||||
|
||||
%description errmsg
|
||||
The package provides error messages files for the MySQL daemon and the
|
||||
@ -276,6 +282,7 @@ the MySQL sources.
|
||||
%endif
|
||||
%patch34 -p1
|
||||
%patch35 -p1
|
||||
%patch37 -p1
|
||||
|
||||
# Modify tests to pass on all archs
|
||||
pushd mysql-test
|
||||
@ -313,6 +320,9 @@ add_test 'main.upgrade : unknown'
|
||||
%endif
|
||||
popd
|
||||
|
||||
cp %{SOURCE10} %{SOURCE11} %{SOURCE12} %{SOURCE13} %{SOURCE14} \
|
||||
%{SOURCE15} scripts
|
||||
|
||||
%build
|
||||
# fail quickly and obviously if user tries to build as root
|
||||
%if %runselftest
|
||||
@ -332,6 +342,7 @@ mkdir build && pushd build
|
||||
cmake .. -DBUILD_CONFIG=mysql_release \
|
||||
-DFEATURE_SET="community" \
|
||||
-DINSTALL_LAYOUT=RPM \
|
||||
-DDAEMON_NAME="%{daemon_name}" \
|
||||
-DCMAKE_INSTALL_PREFIX="%{_prefix}" \
|
||||
%if 0%{?fedora} >= 20
|
||||
-DINSTALL_DOCDIR="share/doc/%{name}" \
|
||||
@ -401,11 +412,13 @@ install -D -p -m 0644 %{SOURCE3} %{buildroot}%{_sysconfdir}/my.cnf
|
||||
%endif
|
||||
|
||||
# install systemd unit files and scripts for handling server startup
|
||||
install -D -p -m 644 %{SOURCE11} %{buildroot}%{_unitdir}/%{basename:%SOURCE11}
|
||||
install -p -m 755 %{SOURCE12} %{buildroot}%{_libexecdir}/
|
||||
install -p -m 755 %{SOURCE13} %{buildroot}%{_libexecdir}/
|
||||
install -D -p -m 644 scripts/mysqld.service %{buildroot}%{_unitdir}/%{daemon_name}
|
||||
install -p -m 755 scripts/mysqld-prepare-db-dir %{buildroot}%{_libexecdir}/mysqld-prepare-db-dir
|
||||
install -p -m 755 scripts/mysqld-wait-ready %{buildroot}%{_libexecdir}/mysqld-wait-ready
|
||||
install -p -m 755 scripts/mysqld-check-socket %{buildroot}%{_libexecdir}/mysqld-check-socket
|
||||
install -p -m 644 scripts/mysqld-scripts-common %{buildroot}%{_libexecdir}/mysqld-scripts-common
|
||||
|
||||
install -D -p -m 0644 %{SOURCE10} %{buildroot}%{_tmpfilesdir}/%{name}.conf
|
||||
install -D -p -m 0644 scripts/mysql.tmpfiles.d %{buildroot}%{_tmpfilesdir}/%{name}.conf
|
||||
|
||||
# mysql-test includes one executable that doesn't belong under /usr/share,
|
||||
# so move it and provide a symlink
|
||||
@ -489,18 +502,18 @@ popd
|
||||
%post embedded -p /sbin/ldconfig
|
||||
|
||||
%post server
|
||||
%systemd_post mysqld.service
|
||||
%systemd_post %{daemon_name}
|
||||
/bin/touch %{_localstatedir}/log/mysqld.log
|
||||
|
||||
%preun server
|
||||
%systemd_preun mysqld.service
|
||||
%systemd_preun %{daemon_name}
|
||||
|
||||
%postun libs -p /sbin/ldconfig
|
||||
|
||||
%postun embedded -p /sbin/ldconfig
|
||||
|
||||
%postun server
|
||||
%systemd_postun_with_restart mysqld.service
|
||||
%systemd_postun_with_restart %{daemon_name}
|
||||
|
||||
%files
|
||||
%doc README.mysql-docs
|
||||
@ -648,9 +661,11 @@ popd
|
||||
%{_datadir}/%{name}/mysql_test_data_timezone.sql
|
||||
%{_datadir}/%{name}/my-*.cnf
|
||||
|
||||
%{_unitdir}/%{basename:%SOURCE11}
|
||||
%{_libexecdir}/%{basename:%SOURCE12}
|
||||
%{_libexecdir}/%{basename:%SOURCE13}
|
||||
%{_unitdir}/%{daemon_name}
|
||||
%{_libexecdir}/mysqld-prepare-db-dir
|
||||
%{_libexecdir}/mysqld-wait-ready
|
||||
%{_libexecdir}/mysqld-check-socket
|
||||
%{_libexecdir}/mysqld-scripts-common
|
||||
|
||||
%{_tmpfilesdir}/%{name}.conf
|
||||
%attr(0755,mysql,mysql) %dir %{_localstatedir}/run/mysqld
|
||||
@ -687,6 +702,9 @@ popd
|
||||
%{_mandir}/man1/mysql_client_test.1*
|
||||
|
||||
%changelog
|
||||
* Tue Jul 22 2014 Honza Horak <hhorak@redhat.com> - 5.6.19-5
|
||||
- Port scripts for systemd unit from MariaDB
|
||||
|
||||
* Mon Jul 21 2014 Honza Horak <hhorak@redhat.com> - 5.6.19-4
|
||||
- Port some latest changes from MariaDB package to sync those packages
|
||||
- Error messages now provided by a separate package (thanks Alexander Barkov)
|
||||
|
@ -1 +0,0 @@
|
||||
d /var/run/mysqld 0755 mysql mysql -
|
1
mysql.tmpfiles.d.in
Normal file
1
mysql.tmpfiles.d.in
Normal file
@ -0,0 +1 @@
|
||||
d /var/run/@RPM_PACKAGE_PREFIX@mysqld 0755 mysql mysql -
|
@ -1,82 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# This script creates the mysql data directory during first service start.
|
||||
# In subsequent starts, it does nothing much.
|
||||
|
||||
# extract value of a MySQL option from config files
|
||||
# Usage: get_mysql_option SECTION VARNAME DEFAULT
|
||||
# result is returned in $result
|
||||
# We use my_print_defaults which prints all options from multiple files,
|
||||
# with the more specific ones later; hence take the last match.
|
||||
get_mysql_option(){
|
||||
result=`/usr/bin/my_print_defaults "$1" | sed -n "s/^--$2=//p" | tail -n 1`
|
||||
if [ -z "$result" ]; then
|
||||
# not found, use default
|
||||
result="$3"
|
||||
fi
|
||||
}
|
||||
|
||||
# Defaults here had better match what mysqld_safe will default to
|
||||
get_mysql_option mysqld datadir "/var/lib/mysql"
|
||||
datadir="$result"
|
||||
get_mysql_option mysqld_safe log-error "/var/log/mysqld.log"
|
||||
errlogfile="$result"
|
||||
|
||||
# Absorb configuration settings from the specified systemd service file,
|
||||
# or the default "mysqld" service if not specified
|
||||
SERVICE_NAME="$1"
|
||||
if [ x"$SERVICE_NAME" = x ]
|
||||
then
|
||||
SERVICE_NAME=mysqld.service
|
||||
fi
|
||||
|
||||
myuser=`systemctl show -p User "${SERVICE_NAME}" |
|
||||
sed 's/^User=//'`
|
||||
if [ x"$myuser" = x ]
|
||||
then
|
||||
myuser=mysql
|
||||
fi
|
||||
|
||||
mygroup=`systemctl show -p Group "${SERVICE_NAME}" |
|
||||
sed 's/^Group=//'`
|
||||
if [ x"$mygroup" = x ]
|
||||
then
|
||||
mygroup=mysql
|
||||
fi
|
||||
|
||||
# Set up the errlogfile with appropriate permissions
|
||||
touch "$errlogfile"
|
||||
chown "$myuser:$mygroup" "$errlogfile"
|
||||
chmod 0640 "$errlogfile"
|
||||
[ -x /sbin/restorecon ] && /sbin/restorecon "$errlogfile"
|
||||
|
||||
# Make the data directory
|
||||
if [ ! -d "$datadir/mysql" ] ; then
|
||||
# First, make sure $datadir is there with correct permissions
|
||||
# (note: if it's not, and we're not root, this'll fail ...)
|
||||
if [ ! -e "$datadir" -a ! -h "$datadir" ]
|
||||
then
|
||||
mkdir -p "$datadir" || exit 1
|
||||
fi
|
||||
chown "$myuser:$mygroup" "$datadir"
|
||||
chmod 0755 "$datadir"
|
||||
[ -x /sbin/restorecon ] && /sbin/restorecon "$datadir"
|
||||
|
||||
# Now create the database
|
||||
echo "Initializing MySQL database"
|
||||
/usr/bin/mysql_install_db --datadir="$datadir" --user="$myuser"
|
||||
ret=$?
|
||||
if [ $ret -ne 0 ] ; then
|
||||
echo "Initialization of MySQL database failed." >&2
|
||||
echo "Perhaps /etc/my.cnf is misconfigured." >&2
|
||||
# Clean up any partially-created database files
|
||||
if [ ! -e "$datadir/mysql/user.frm" ] ; then
|
||||
rm -rf "$datadir"/*
|
||||
fi
|
||||
exit $ret
|
||||
fi
|
||||
# In case we're running as root, make sure files are owned properly
|
||||
chown -R "$myuser:$mygroup" "$datadir"
|
||||
fi
|
||||
|
||||
exit 0
|
87
mysqld-prepare-db-dir.sh
Normal file
87
mysqld-prepare-db-dir.sh
Normal file
@ -0,0 +1,87 @@
|
||||
#!/bin/sh
|
||||
|
||||
# This script creates the mysql data directory during first service start.
|
||||
# In subsequent starts, it does nothing much.
|
||||
|
||||
source "`dirname ${BASH_SOURCE[0]}`/mariadb-scripts-common"
|
||||
|
||||
# If two args given first is user, second is group
|
||||
# otherwise the arg is the systemd service file
|
||||
if [ "$#" -eq 2 ]
|
||||
then
|
||||
myuser="$1"
|
||||
mygroup="$2"
|
||||
else
|
||||
# Absorb configuration settings from the specified systemd service file,
|
||||
# or the default "mariadb" service if not specified
|
||||
SERVICE_NAME="$1"
|
||||
if [ x"$SERVICE_NAME" = x ]
|
||||
then
|
||||
SERVICE_NAME=@DAEMON_NAME@.service
|
||||
fi
|
||||
|
||||
myuser=`systemctl show -p User "${SERVICE_NAME}" |
|
||||
sed 's/^User=//'`
|
||||
if [ x"$myuser" = x ]
|
||||
then
|
||||
myuser=mysql
|
||||
fi
|
||||
|
||||
mygroup=`systemctl show -p Group "${SERVICE_NAME}" |
|
||||
sed 's/^Group=//'`
|
||||
if [ x"$mygroup" = x ]
|
||||
then
|
||||
mygroup=mysql
|
||||
fi
|
||||
fi
|
||||
|
||||
# Set up the errlogfile with appropriate permissions
|
||||
touch "$errlogfile"
|
||||
ret=$?
|
||||
# Provide some advice if the log file cannot be touched
|
||||
if [ $ret -ne 0 ] ; then
|
||||
errlogdir=$(dirname $errlogfile)
|
||||
if ! [ -d "$errlogdir" ] ; then
|
||||
echo "The directory $errlogdir does not exist."
|
||||
elif [ -f "$errlogfile" ] ; then
|
||||
echo "The log file $errlogfile cannot be touched, please, fix its permissions."
|
||||
else
|
||||
echo "The log file $errlogfile could not be created."
|
||||
fi
|
||||
echo "The daemon will be run under $myuser:$mygroup"
|
||||
exit 1
|
||||
fi
|
||||
chown "$myuser:$mygroup" "$errlogfile"
|
||||
chmod 0640 "$errlogfile"
|
||||
[ -x /sbin/restorecon ] && /sbin/restorecon "$errlogfile"
|
||||
|
||||
# Make the data directory
|
||||
if [ ! -d "$datadir/mysql" ] ; then
|
||||
# First, make sure $datadir is there with correct permissions
|
||||
# (note: if it's not, and we're not root, this'll fail ...)
|
||||
if [ ! -e "$datadir" -a ! -h "$datadir" ]
|
||||
then
|
||||
mkdir -p "$datadir" || exit 1
|
||||
fi
|
||||
chown "$myuser:$mygroup" "$datadir"
|
||||
chmod 0755 "$datadir"
|
||||
[ -x /sbin/restorecon ] && /sbin/restorecon "$datadir"
|
||||
|
||||
# Now create the database
|
||||
echo "Initializing MySQL database"
|
||||
@bindir@/mysql_install_db --datadir="$datadir" --user="$myuser"
|
||||
ret=$?
|
||||
if [ $ret -ne 0 ] ; then
|
||||
echo "Initialization of MySQL database failed." >&2
|
||||
echo "Perhaps @sysconfdir@/my.cnf is misconfigured." >&2
|
||||
# Clean up any partially-created database files
|
||||
if [ ! -e "$datadir/mysql/user.frm" ] ; then
|
||||
rm -rf "$datadir"/*
|
||||
fi
|
||||
exit $ret
|
||||
fi
|
||||
# In case we're running as root, make sure files are owned properly
|
||||
chown -R "$myuser:$mygroup" "$datadir"
|
||||
fi
|
||||
|
||||
exit 0
|
@ -1,55 +1,44 @@
|
||||
#!/bin/sh
|
||||
|
||||
source "`dirname ${BASH_SOURCE[0]}`/mariadb-scripts-common"
|
||||
|
||||
# This script waits for mysqld to be ready to accept connections
|
||||
# (which can be many seconds or even minutes after launch, if there's
|
||||
# a lot of crash-recovery work to do).
|
||||
# Running this as ExecStartPost is useful so that services declared as
|
||||
# "After mysqld" won't be started until the database is really ready.
|
||||
|
||||
if [ $# -ne 1 ] ; then
|
||||
echo "You need to pass daemon pid as an argument for this script."
|
||||
exit 20
|
||||
fi
|
||||
|
||||
# Service file passes us the daemon's PID (actually, mysqld_safe's PID)
|
||||
daemon_pid="$1"
|
||||
|
||||
# extract value of a MySQL option from config files
|
||||
# Usage: get_mysql_option SECTION VARNAME DEFAULT
|
||||
# result is returned in $result
|
||||
# We use my_print_defaults which prints all options from multiple files,
|
||||
# with the more specific ones later; hence take the last match.
|
||||
get_mysql_option(){
|
||||
result=`/usr/bin/my_print_defaults "$1" | sed -n "s/^--$2=//p" | tail -n 1`
|
||||
if [ -z "$result" ]; then
|
||||
# not found, use default
|
||||
result="$3"
|
||||
fi
|
||||
}
|
||||
|
||||
# Defaults here had better match what mysqld_safe will default to
|
||||
get_mysql_option mysqld datadir "/var/lib/mysql"
|
||||
datadir="$result"
|
||||
get_mysql_option mysqld socket "/var/lib/mysql/mysql.sock"
|
||||
socketfile="$result"
|
||||
|
||||
# Wait for the server to come up or for the mysqld process to disappear
|
||||
ret=0
|
||||
while /bin/true; do
|
||||
RESPONSE=`/usr/bin/mysqladmin --no-defaults --socket="$socketfile" --user=UNKNOWN_MYSQL_USER ping 2>&1`
|
||||
# Check process still exists
|
||||
if ! [ -d "/proc/${daemon_pid}" ] ; then
|
||||
ret=1
|
||||
break
|
||||
fi
|
||||
RESPONSE=`@bindir@/mysqladmin --no-defaults --socket="$socketfile" --user=UNKNOWN_MYSQL_USER ping 2>&1`
|
||||
mret=$?
|
||||
if [ $mret -eq 0 ]; then
|
||||
if [ $mret -eq 0 ] ; then
|
||||
break
|
||||
fi
|
||||
# exit codes 1, 11 (EXIT_CANNOT_CONNECT_TO_SERVICE) are expected,
|
||||
# anything else suggests a configuration error
|
||||
if [ $mret -ne 1 -a $mret -ne 11 ]; then
|
||||
ret=1
|
||||
echo "Cannot check for MySQL Daemon startup because of mysqladmin failure." >&2
|
||||
ret=$mret
|
||||
break
|
||||
fi
|
||||
# "Access denied" also means the server is alive
|
||||
echo "$RESPONSE" | grep -q "Access denied for user" && break
|
||||
|
||||
# Check process still exists
|
||||
if ! /bin/kill -0 $daemon_pid 2>/dev/null; then
|
||||
ret=1
|
||||
break
|
||||
fi
|
||||
sleep 1
|
||||
done
|
||||
|
@ -18,7 +18,7 @@
|
||||
# though /lib/... will still work.
|
||||
|
||||
[Unit]
|
||||
Description=MySQL database server
|
||||
Description=MySQL @MAJOR_VERSION@.@MINOR_VERSION@ database server
|
||||
After=syslog.target
|
||||
After=network.target
|
||||
|
||||
@ -27,11 +27,12 @@ Type=simple
|
||||
User=mysql
|
||||
Group=mysql
|
||||
|
||||
ExecStartPre=/usr/libexec/mysqld-prepare-db-dir %n
|
||||
ExecStartPre=@libexecdir@/mariadb-check-socket
|
||||
ExecStartPre=@libexecdir@/mysqld-prepare-db-dir %n
|
||||
# Note: we set --basedir to prevent probes that might trigger SELinux alarms,
|
||||
# per bug #547485
|
||||
ExecStart=/usr/bin/mysqld_safe --basedir=/usr
|
||||
ExecStartPost=/usr/libexec/mysqld-wait-ready $MAINPID
|
||||
ExecStart=@bindir@/mysqld_safe --basedir=/usr
|
||||
ExecStartPost=@libexecdir@/mysqld-wait-ready $MAINPID
|
||||
|
||||
# Give a reasonable amount of time for the server to start up/shut down
|
||||
TimeoutSec=300
|
Loading…
Reference in New Issue
Block a user