Bug 16534721 - MYSQL_INSTALL_DB RUNS AGAIN DURING UPGRADE EVEN DATA DIRECTORY EXISTS
This commit is contained in:
parent
7a4bd32efb
commit
b9e98c660f
@ -1,4 +1,4 @@
|
||||
# Copyright (c) 2006, 2012, Oracle and/or its affiliates. All rights reserved.
|
||||
# Copyright (c) 2006, 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
|
||||
@ -366,6 +366,7 @@ ELSE()
|
||||
SET(CPACK_GENERATOR "TGZ")
|
||||
ENDIF()
|
||||
ADD_SUBDIRECTORY(packaging/WiX)
|
||||
ADD_SUBDIRECTORY(packaging/solaris)
|
||||
|
||||
# Create a single package with "make package"
|
||||
# (see http://public.kitware.com/Bug/view.php?id=11452)
|
||||
|
32
packaging/solaris/CMakeLists.txt
Normal file
32
packaging/solaris/CMakeLists.txt
Normal file
@ -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()
|
124
packaging/solaris/postinstall-solaris.sh
Normal file
124
packaging/solaris/postinstall-solaris.sh
Normal file
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user