summaryrefslogtreecommitdiff
path: root/packaging
diff options
context:
space:
mode:
authorMurthy Narkedimilli <murthy.narkedimilli@oracle.com>2013-04-03 18:09:37 +0200
committerMurthy Narkedimilli <murthy.narkedimilli@oracle.com>2013-04-03 18:09:37 +0200
commit152fe9e9c4ffb0a41cb01991220c467061745239 (patch)
tree0de9b69cea712f5c5560b8a2f4e5eb7c0b21de2b /packaging
parent3b9185793d06ba53637dc4d56111965b40873fb1 (diff)
downloadmariadb-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.txt32
-rw-r--r--packaging/solaris/postinstall-solaris.sh124
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
+