diff options
author | Murthy Narkedimilli <murthy.narkedimilli@oracle.com> | 2013-04-03 18:09:37 +0200 |
---|---|---|
committer | Murthy Narkedimilli <murthy.narkedimilli@oracle.com> | 2013-04-03 18:09:37 +0200 |
commit | 152fe9e9c4ffb0a41cb01991220c467061745239 (patch) | |
tree | 0de9b69cea712f5c5560b8a2f4e5eb7c0b21de2b /packaging | |
parent | 3b9185793d06ba53637dc4d56111965b40873fb1 (diff) | |
download | mariadb-git-152fe9e9c4ffb0a41cb01991220c467061745239.tar.gz |
Bug 16534721 - MYSQL_INSTALL_DB RUNS AGAIN DURING UPGRADE EVEN DATA DIRECTORY EXISTS
Diffstat (limited to 'packaging')
-rw-r--r-- | packaging/solaris/CMakeLists.txt | 32 | ||||
-rw-r--r-- | packaging/solaris/postinstall-solaris.sh | 124 |
2 files changed, 156 insertions, 0 deletions
diff --git a/packaging/solaris/CMakeLists.txt b/packaging/solaris/CMakeLists.txt new file mode 100644 index 00000000000..02881e0af8f --- /dev/null +++ b/packaging/solaris/CMakeLists.txt @@ -0,0 +1,32 @@ +# Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +# Any files in this directory are auxiliary files for Solaris "pkg" packages. +# They will be configured during "pkg" creation, not during (binary) build. + +# Currently, this expands to "support-files/" in most layouts, +# but to "/usr/share/mysql/" in a RPM. +# It is important not to pollute "/usr/bin". +SET(inst_location ${INSTALL_SUPPORTFILESDIR}) + +FOREACH(script postinstall-solaris) + CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/${script}.sh + ${CMAKE_CURRENT_BINARY_DIR}/${script} COPYONLY ) + + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${script} + DESTINATION ${inst_location}/solaris COMPONENT Server_Scripts + PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) +ENDFOREACH() diff --git a/packaging/solaris/postinstall-solaris.sh b/packaging/solaris/postinstall-solaris.sh new file mode 100644 index 00000000000..027969fcf0e --- /dev/null +++ b/packaging/solaris/postinstall-solaris.sh @@ -0,0 +1,124 @@ +#!/bin/sh +# +# Copyright (c) 2008, 2013, Oracle and/or its affiliates. All rights reserved. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA +# +# Solaris post install script +# + +#if [ /usr/man/bin/makewhatis ] ; then +# /usr/man/bin/makewhatis "$BASEDIR/mysql/man" +#fi + +mygroup=mysql +myuser=mysql +mydatadir=/var/lib/mysql +basedir=@@basedir@@ + +if [ -n "$BASEDIR" ] ; then + basedir="$BASEDIR" +fi + +# What MySQL calls "basedir" and what pkgadd tools calls "basedir" +# is not the same thing. The default pkgadd base directory is /opt/mysql, +# the MySQL one "/opt/mysql/mysql". + +mybasedir="$basedir/@@instdir@@" +mystart1="$mybasedir/support-files/mysql.server" +myinstdb="$mybasedir/scripts/mysql_install_db" +mystart=/etc/init.d/mysql + +# Check: Is this a first installation, or an upgrade ? + +if [ -d "$mydatadir/mysql" ] ; then + : # If the directory for system table files exists, we assume an upgrade. +else + INSTALL=new # This is a new installation, the directory will soon be created. +fi + +# Create data directory if needed + +[ -d "$mydatadir" ] || mkdir -p -m 755 "$mydatadir" || exit 1 +[ -d "$mydatadir/mysql" ] || mkdir "$mydatadir/mysql" || exit 1 +[ -d "$mydatadir/test" ] || mkdir "$mydatadir/test" || exit 1 + +# Set the data directory to the right user/group + +chown -R $myuser:$mygroup $mydatadir + +# Solaris patch 119255 (somewhere around revision 42) changes the behaviour +# of pkgadd to set TMPDIR internally to a root-owned install directory. This +# has the unfortunate side effect of breaking running mysql_install_db with +# the --user=mysql argument as mysqld uses TMPDIR if set, and is unable to +# write temporary tables to that directory. To work around this issue, we +# create a subdirectory inside TMPDIR (if set) for mysqld to write to. +# +# Idea from Ben Hekster <heksterb@gmail.com> in bug#31164 + +if [ -n "$TMPDIR" ] ; then + savetmpdir="$TMPDIR" + TMPDIR="$TMPDIR/mysql.$$" + export TMPDIR + mkdir "$TMPDIR" + chown $myuser:$mygroup "$TMPDIR" +fi + +if [ -n "$INSTALL" ] ; then + # We install/update the system tables + ( + cd "$mybasedir" + scripts/mysql_install_db \ + --rpm \ + --random-passwords \ + --user=mysql \ + --basedir="$mybasedir" \ + --datadir=$mydatadir + ) +fi + +if [ -n "$savetmpdir" ] ; then + TMPDIR="$savetmpdir" +fi + +# ---------------------------------------------------------------------- + +# Handle situation there is old start script installed already + +# If old start script is a soft link, we just remove it +[ -h "$mystart" ] && rm -f "$mystart" + +# If old start script is a file, we rename it +[ -f "$mystart" ] && mv -f "$mystart" "$mystart.old.$$" + +# ---------------------------------------------------------------------- + +# We create a copy of an unmodified start script, +# as a reference for the one maybe modifying it + +cp -f "$mystart1.in" "$mystart.in" || exit 1 + +# We rewrite some scripts + +for script in "$mystart" "$mystart1" "$myinstdb" ; do + script_in="$script.in" + sed -e "s,@basedir@,$mybasedir,g" \ + -e "s,@datadir@,$mydatadir,g" "$script_in" > "$script" + chmod u+x $script +done + +rm -f "$mystart.in" + +exit 0 + |