From: Joerg Bruehe Date: November 2 2012 7:17pm Subject: bzr push into mysql-trunk branch (joerg.bruehe:4893 to 4894) List-Archive: http://lists.mysql.com/commits/145154 Message-Id: <20121102191705.29647.5108.4894@trift-6core.fambruehe> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit 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 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).