4894 Joerg Bruehe 2012-11-02 [merge]
Upmerge
added:
packaging/solaris/
packaging/solaris/CMakeLists.txt
packaging/solaris/postinstall-solaris.sh
modified:
CMakeLists.txt
scripts/mysql_install_db.pl.in
4893 Dmitry Lenev 2012-11-02
WL#6561 "Deprecate and remove support for .sym files (custom symlink
implementation)".
Starting from Vista/Server 2008 a native symlinking mechanism is
supported by Windows (through MKLINK command). Since starting from
5.6 we don't plan to support Windows XP/Server 2003 this makes MySQL
Server implementation of symbolic links for Windows (based on custom
.sym files) redundant. Therefore it is a good idea first to deprecate
and then completely remove code implementing custom symbolic links.
Note that having this custom implementation around is a bad idea not
only from code complexity view point, but it also creates performance
problems in some scenarios and is cause behind some bugs.
This patch is the second step in this WL which completely removes this
custom implementation. To do this it:
* Removes USE_SYMDIR macro and all code withing #ifdef USE_SYMDIR.
* Replaces usage of my_disable_symlinks with my_enable_symlinks
to facilitate the next step.
* Removes my_use_symdir global variable. In places where it is used
to check if DATA/INDEX DIRECTORY clause should be supported we use
my_enable_symlinks instead. Uses my_enable_symlinks to store value
of --symbolic-links start-up option.
After this change --symbolic-links option doesn't have any effect on
Windows. But it still controls behavior for DATA/INDEX DIRECTORY
clauses for MyISAM and Archive tables on Unix platforms.
modified:
cmake/os/Windows.cmake
config.h.cmake
extra/replace.c
include/my_sys.h
mysys/mf_pack.c
mysys/my_static.c
mysys/my_symlink2.c
sql/mysqld.cc
sql/sql_cache.cc
sql/sql_show.cc
sql/sql_table.cc
sql/sql_table.h
storage/archive/ha_archive.cc
storage/myisam/ha_myisam.cc
=== modified file 'CMakeLists.txt'
--- a/CMakeLists.txt 2012-10-09 14:14:24 +0000
+++ b/CMakeLists.txt 2012-11-02 18:31:49 +0000
@@ -440,6 +440,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)
=== added directory 'packaging/solaris'
=== added file 'packaging/solaris/CMakeLists.txt'
--- a/packaging/solaris/CMakeLists.txt 1970-01-01 00:00:00 +0000
+++ b/packaging/solaris/CMakeLists.txt 2012-11-02 18:31:49 +0000
@@ -0,0 +1,32 @@
+# Copyright (c) 2012, 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()
=== added file 'packaging/solaris/postinstall-solaris.sh'
--- a/packaging/solaris/postinstall-solaris.sh 1970-01-01 00:00:00 +0000
+++ b/packaging/solaris/postinstall-solaris.sh 2012-11-02 18:39:15 +0000
@@ -0,0 +1,124 @@
+#!/bin/sh
+#
+# Copyright (c) 2008, 2012, 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@stripped> 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
+
=== modified file 'scripts/mysql_install_db.pl.in'
--- a/scripts/mysql_install_db.pl.in 2012-10-19 18:17:44 +0000
+++ b/scripts/mysql_install_db.pl.in 2012-11-02 18:47:08 +0000
@@ -353,7 +353,9 @@ sub tell_root_password {
sub generate_random_password {
# Short term:
# On (at least) Linux and Solaris, a "random" device is available, use it:
- # cat /dev/urandom | tr -dc "[:alnum:]" | fold -w 8 | head -1
+ # cat /dev/urandom | LC_CTYPE=C tr -dc "[:alnum:]" | fold -w 8 | head -1
+ # Without LC_CTYPE, "tr" may not know the "alnum" character class -
+ # and there are user profiles which do not have this set.
# Note: There is no guarantee the results will pass a validation checker
# as resulted from WL#2739
# http://wl.no.oracle.com/worklo/?tid=2739
@@ -364,7 +366,7 @@ sub generate_random_password {
# http://search.cpan.org/~cgrau/String-MkPasswd/bin/mkpasswd.pl
# Using it got approved recently.
#
- my $password = `cat /dev/urandom | tr -dc "[:alnum:]" | fold -w 8 | head -1`;
+ my $password = `cat /dev/urandom | LC_CTYPE=C tr -dc "[:alnum:]" | fold -w 8 | head -1`;
chomp ($password);
return $password;
}
No bundle (reason: useless for push emails).
| Thread |
|---|
| • bzr push into mysql-trunk branch (joerg.bruehe:4893 to 4894) | Joerg Bruehe | 5 Nov |