Sisyphus repositório
Última atualização: 1 outubro 2023 | SRPMs: 18631 | Visitas: 37704476
en ru br
ALT Linux repositórios
S:8.0.30-alt2
5.0: 5.0.89-alt1
4.1: 5.0.51-alt2.a
4.0: 5.0.51-alt2.a.M40.2
+updates:5.0.51-alt2.a.M40.1
3.0: 4.0.24-alt1

Group :: Banco de dados
RPM: MySQL

 Main   Changelog   Spec   Patches   Sources   Download   Gear   Bugs e FR  Repocop 

Patch: mysql-5.0.51-alt-mysql_install_db.patch
Download


diff --git a/mysql/scripts/mysql_install_db.sh b/mysql/scripts/mysql_install_db.sh
index 5716d4f..9daa1be 100644
--- a/mysql/scripts/mysql_install_db.sh
+++ b/mysql/scripts/mysql_install_db.sh
@@ -1,6 +1,8 @@
 #!/bin/sh
-# Copyright (C) 2002-2003 MySQL AB
-# 
+# Copyright (C) 2001-2007 Dmitry V. Levin <ldv@altlinux.org>
+#                         Anton Kachalov  <mouse@altlinux.org>
+#                         Konstantin A. Lepikhov <lakostis@altlinux.org>
+#
 # 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.
@@ -14,412 +16,130 @@
 # along with this program; if not, write to the Free Software
 # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 
-# This scripts creates the MySQL Server system tables
-#
-# All unrecognized arguments to this script are passed to mysqld.
-
-basedir=""
-ldata=""
-srcdir=""
-
-args=""
-defaults=""
-mysqld_opt=""
-user=""
-
-force=0
-in_rpm=0
-ip_only=0
-windows=0
-
-usage()
-{
-  cat <<EOF
-Usage: $0 [OPTIONS]
-  --basedir=path       The path to the MySQL installation directory.
-  --datadir=path       The path to the MySQL data directory.
-  --force              Causes mysql_install_db to run even if DNS does not
-                       work.  In that case, grant table entries that normally
-                       use hostnames will use IP addresses.
-  --ldata=path         The path to the MySQL data directory.
-  --rpm                For internal use.  This option is used by RPM files
-                       during the MySQL installation process.
-  --skip-name-resolve  Use IP addresses rather than hostnames when creating
-                       grant table entries.  This option can be useful if
-                       your DNS does not work.
-  --srcdir=path        For internal use.  The directory under which
-                       mysql_install_db looks for support files such as the
-                       error message file and the file for popoulating the
-                       help tables.
-  --user=user_name     The login username to use for running mysqld.  Files
-                       and directories created by mysqld will be owned by this
-                       user.  You must be root to use this option.  By default
-                       mysqld runs using your current login name and files and
-                       directories that it creates will be owned by you.
-  --windows            For internal use.  This option is used for creating
-                       Windows distributions.
-
-All other options are passed to the mysqld program
-
-EOF
-  exit 1
-}
-
-s_echo()
-{
-  if test "$in_rpm" -eq 0 -a "$windows" -eq 0
-  then
-    echo "$1"
-  fi
-}
-
-parse_arg()
-{
-  echo "$1" | sed -e 's/^[^=]*=//'
-}
-
-parse_arguments()
-{
-  # We only need to pass arguments through to the server if we don't
-  # handle them here.  So, we collect unrecognized options (passed on
-  # the command line) into the args variable.
-  pick_args=
-  if test "$1" = PICK-ARGS-FROM-ARGV
-  then
-    pick_args=1
-    shift
-  fi
-
-  for arg
-  do
-    case "$arg" in
-      --force) force=1 ;;
-      --basedir=*) basedir=`parse_arg "$arg"` ;;
-      --srcdir=*)  srcdir=`parse_arg "$arg"` ;;
-      --ldata=*|--datadir=*) ldata=`parse_arg "$arg"` ;;
-      --user=*)
-        # Note that the user will be passed to mysqld so that it runs
-        # as 'user' (crucial e.g. if log-bin=/some_other_path/
-        # where a chown of datadir won't help)
-	 user=`parse_arg "$arg"` ;;
-      --skip-name-resolve) ip_only=1 ;;
-      --verbose) verbose=1 ;; # Obsolete
-      --rpm) in_rpm=1 ;;
-      --help) usage ;;
-      --no-defaults|--defaults-file=*|--defaults-extra-file=*)
-        defaults="$arg" ;;
-
-      --windows)
-	# This is actually a "cross bootstrap" argument used when
-        # building the MySQL system tables on a different host
-        # than the target. The platform independent
-        # files that are created in --datadir on the host can
-        # be copied to the target system, the most common use for
-        # this feature is in the windows installer which will take
-        # the files from datadir and include them as part of the install
-        # package.
-         windows=1 ;;
-
-      *)
-        if test -n "$pick_args"
-        then
-          # This sed command makes sure that any special chars are quoted,
-          # so the arg gets passed exactly to the server.
-          # XXX: This is broken; true fix requires using eval and proper
-          # quoting of every single arg ($basedir, $ldata, etc.)
-          #args="$args "`echo "$arg" | sed -e 's,\([^a-zA-Z0-9_.-]\),\\\\\1,g'`
-          args="$args $arg"
-        fi
-        ;;
-    esac
-  done
-}
-
-# Try to find a specific file within --basedir which can either be a binary
-# release or installed source directory and return the path.
-find_in_basedir()
-{
-  case "$1" in
-    --dir)
-      return_dir=1; shift
-      ;;
-  esac
-
-  file=$1; shift
-
-  for dir in "$@"
-  do
-    if test -f "$basedir/$dir/$file"
-    then
-      if test -n "$return_dir"
-      then
-        echo "$basedir/$dir"
-      else
-        echo "$basedir/$dir/$file"
-      fi
-      break
-    fi
-  done
-}
+PROG="${0##*/}"
 
-missing_in_basedir()
+GetConf()
 {
-  echo "FATAL ERROR: Could not find $* inside --basedir"
-  echo
-  echo "When using --basedir you must point either into a MySQL binary"
-  echo "distribution directory or a compiled tree previously populated"
-  echo "by 'make install'"
+	local group=$1
+	[ -n "$group" ] || group="$PROG"
+	shift
+
+	local name=$1
+	shift
+
+	local varname=$1
+	[ -n "$varname" ] || varname="$name"
+	shift
+
+	local default=$1
+	shift
+
+	local val=`my_print_defaults "$group" |grep "^--$name=" |tail -1`
+	if [ -n "$val" ]; then
+		eval export $varname="${val#--$name=}"
+	else
+		eval export $varname="$default"
+	fi
 }
 
-# Ok, let's go.  We first need to parse arguments which are required by
-# my_print_defaults so that we can execute it first, then later re-parse
-# the command line to add any extra bits that we need.
-parse_arguments PICK-ARGS-FROM-ARGV "$@"
+GetConf '' mysqld '' @sbindir@/mysqld
+GetConf mysqld chroot '' @localstatedir@
+GetConf mysqld datadir '' /db
+GetConf mysqld basedir '' /usr
 
-# We can now find my_print_defaults, either in the supplied --basedir
-# location or in the installed area.
-if test -n "$basedir"
-then
-  print_defaults=`find_in_basedir my_print_defaults bin extra`
-  if ! test -x "$print_defaults"
-  then
-    missing_in_basedir my_print_defaults
-    exit 1
-  fi
-else
-  print_defaults="@bindir@/my_print_defaults"
-  if ! test -x "$print_defaults"
-  then
-    echo "FATAL ERROR: Could not find $print_defaults"
-    echo
-    echo "If you are using a binary release, you must run this script from"
-    echo "within the directory the archive extracted into.  If you compiled"
-    echo "MySQL yourself you must run 'make install' first."
-    exit 1
-  fi
-fi
-
-# Now we can get arguments from the groups [mysqld] and [mysql_install_db]
-# in the my.cfg file, then re-run to merge with command line arguments.
-parse_arguments `$print_defaults $defaults mysqld mysql_install_db`
-parse_arguments PICK-ARGS-FROM-ARGV "$@"
-
-# Path to MySQL installation directory
-if test -z "$basedir"
-then
-  basedir="@prefix@"
-  bindir="@bindir@"
-  mysqld="@libexecdir@/mysqld"
-  pkgdatadir="@pkgdatadir@"
-else
-  bindir="$basedir/bin"
-  # We set up bootstrap-specific paths later, so skip this for --windows
-  if test "$windows" -eq 0
-  then
-    pkgdatadir=`find_in_basedir --dir fill_help_tables.sql share share/mysql`
-    if test -z "$pkgdatadir"
-    then
-      missing_in_basedir fill_help_tables.sql
-      exit 1
-    fi
-    mysqld=`find_in_basedir mysqld libexec sbin bin`
-    if ! test -x "$mysqld"
-    then
-      missing_in_basedir mysqld
-      exit 1
-    fi
-  fi
-fi
-
-# Path to data directory
-if test -z "$ldata"
-then
-  ldata="@localstatedir@"
+if ! cd "$chroot$datadir"; then
+	echo "Cannot change to datadir '$datadir'"
+	exit 1
 fi
 
-# Set up paths to SQL scripts required for bootstrap and ensure they exist.
-if test -n "$srcdir"
-then
-  pkgdatadir="$srcdir/scripts"
-fi
-
-fill_help_tables="$pkgdatadir/fill_help_tables.sql"
-create_system_tables="$pkgdatadir/mysql_system_tables.sql"
-fill_system_tables="$pkgdatadir/mysql_system_tables_data.sql"
-
-for f in $fill_help_tables $create_system_tables $fill_system_tables
-do
-  if test ! -f "$f"
-  then
-    echo "FATAL ERROR: Could not find SQL file '$f'"
-    exit 1
-  fi
+hostname=`/bin/hostname`              # Install this too in the user table
+
+# Initialize variables
+fill_help_tables=
+mysql_system_tables=
+mysql_system_tables_data=
+create_user=
+
+for file in mysql_system_tables mysql_system_tables_data fill_help_tables; do
+	if test ! -f "@datadir@/mysql/$file.sql"
+	then
+		echo "FATAL ERROR: Could not find SQL file '$file.sql' in"
+		echo "@datadir@/mysql"
+		exit 1
+	else 
+		eval $file="@datadir@/mysql/$file.sql"
+	fi
 done
 
-# Set up Windows-specific paths
-if test "$windows" -eq 1
-then
-  mysqld="./sql/mysqld"
-  if test -n "$srcdir" -a -f "$srcdir/sql/share/english/errmsg.sys"
-  then
-    mysqld_opt="--language=$srcdir/sql/share/english"
-  else
-    mysqld_opt="--language=./sql/share/english"
-  fi
-fi
-
-# Make sure mysqld is available in default location (--basedir option is
-# already tested above).
-if test ! -x "$mysqld"
-then
-  echo "FATAL ERROR: $mysqld not found!"
-  exit 1
-fi
-
-# Try to determine the hostname
-hostname=`@HOSTNAME@`
-
-# Check if hostname is valid
-if test "$windows" -eq 0 -a "$in_rpm" -eq 0 -a "$force" -eq 0
-then
-  resolved=`$bindir/resolveip $hostname 2>&1`
-  if [ $? -ne 0 ]
-  then
-    resolved=`$bindir/resolveip localhost 2>&1`
-    if [ $? -ne 0 ]
-    then
-      echo "Neither host '$hostname' nor 'localhost' could be looked up with"
-      echo "$bindir/resolveip"
-      echo "Please configure the 'hostname' command to return a correct"
-      echo "hostname."
-      echo "If you want to solve this at a later stage, restart this script"
-      echo "with the --force option"
-      exit 1
-    fi
-    echo "WARNING: The host '$hostname' could not be looked up with resolveip."
-    echo "This probably means that your libc libraries are not 100 % compatible"
-    echo "with this binary MySQL version. The MySQL daemon, mysqld, should work"
-    echo "normally with the exception that host name resolving will not work."
-    echo "This means that you should use IP addresses instead of hostnames"
-    echo "when specifying MySQL privileges !"
-  fi
-fi
-
-if test "$ip_only" -eq 1
-then
-  hostname=`echo "$resolved" | awk '/ /{print $6}'`
-fi
-
-# Create database directories mysql & test
-for dir in $ldata $ldata/mysql $ldata/test
-do
-  if test ! -d $dir
-  then
-    mkdir -p $dir
-    chmod 700 $dir
-  fi
-  if test -w / -a ! -z "$user"
-  then
-    chown $user $dir
-  fi
-done
-
-if test -n "$user"
-then
-  args="$args --user=$user"
-fi
+[ -f "$chroot$datadir/mysql/user.frm" ] || create_user=1
 
 # Peform the install of system tables
-mysqld_bootstrap="${MYSQLD_BOOTSTRAP-$mysqld}"
-mysqld_install_cmd_line="$mysqld_bootstrap $defaults $mysqld_opt --bootstrap \
-  --basedir=$basedir --datadir=$ldata --skip-innodb --skip-bdb \
-  --skip-ndbcluster $args --max_allowed_packet=8M --net_buffer_length=16K"
-
-# Pipe mysql_system_tables.sql to "mysqld --bootstrap"
-s_echo "Installing MySQL system tables..."
-if `(echo "use mysql;"; cat $create_system_tables $fill_system_tables) | $mysqld_install_cmd_line`
-then
-  s_echo "OK"
-
-  s_echo "Filling help tables..."
-  # Pipe fill_help_tables.sql to "mysqld --bootstrap"
-  if `(echo "use mysql;"; cat $fill_help_tables) | $mysqld_install_cmd_line`
-  then
-    # Fill suceeded
-    s_echo "OK"
-  else
-    echo
-    echo "WARNING: HELP FILES ARE NOT COMPLETELY INSTALLED!"
-    echo "The \"HELP\" command might not work properly"
-    echo
-  fi
-
-  s_echo
-  s_echo "To start mysqld at boot time you have to copy"
-  s_echo "support-files/mysql.server to the right place for your system"
-  s_echo
-
-  if test "$windows" -eq 0
-  then
-    # A root password should of course also be set on Windows!
-    # The reason for not displaying these prompts here is that when
-    # executing this script with the --windows argument the script
-    # is used to generate system tables mainly used by the
-    # windows installer. And thus the password should not be set until
-    # those files has been copied to the target system
-    echo "PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !"
-    echo "To do so, start the server, then issue the following commands:"
-    echo "$bindir/mysqladmin -u root password 'new-password'"
-    echo "$bindir/mysqladmin -u root -h $hostname password 'new-password'"
-    echo
-    echo "Alternatively you can run:"
-    echo "$bindir/mysql_secure_installation"
-    echo
-    echo "which will also give you the option of removing the test"
-    echo "databases and anonymous user created by default.  This is"
-    echo "strongly recommended for production servers."
-    echo
-    echo "See the manual for more instructions."
-    echo
-
-    if test "$in_rpm" -eq 0
-    then
-      echo "You can start the MySQL daemon with:"
-      echo "cd @prefix@ ; $bindir/mysqld_safe &"
-      echo
-      echo "You can test the MySQL daemon with mysql-test-run.pl"
-      echo "cd mysql-test ; perl mysql-test-run.pl"
-      echo
-    fi
-    echo "Please report any problems with the @scriptdir@/mysqlbug script!"
-    echo
-    echo "The latest information about MySQL is available on the web at"
-    echo "http://www.mysql.com"
-    echo "Support MySQL by buying support/licenses at http://shop.mysql.com"
-  fi
-  exit 0
+if [ -n "$mysql_system_tables" -o -n "$mysql_system_tables_data" -o -n "$fill_help_tables" ]; then
+	echo "Installing all prepared tables"
+	for dir in mysql test; do
+			[ -d "$chroot$datadir/$dir" ] || mkdir $chroot$datadir/$dir
+			# Change permissions to fix any new files.
+			chown -R mysql:mysql "$chroot$datadir/$dir"
+
+			# Fix permissions for the permission database so that only the user can read them.
+			chmod -R g-w,o-rw "$chroot$datadir/$dir"
+	done
+	if eval "(echo 'use mysql;'; cat $mysql_system_tables $mysql_system_tables_data $fill_help_tables) | \
+			 $mysqld --bootstrap --skip-innodb --skip-bdb --skip-ndbcluster \
+			         --max_allowed_packet=8M \
+			         --net_buffer_length=16K"
+	then
+		if [ -n "$create_user" ]; then
+			cat << END_OF_DATA
+PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
+To do so, start the server, then issue the following commands:
+@bindir@/mysqladmin -u root  password 'new-password'
+@bindir@/mysqladmin -u root -h $hostname  password 'new-password'
+
+Alternatively you can run:
+@bindir/mysql_secure_installation
+
+which will also give you the option of removing the test
+databases and anonymous user created by default.  This is
+strongly recommended for production servers.
+
+See the manual for more instructions.
+
+END_OF_DATA
+		fi
+		cat << END_OF_DATA
+Please report any problems with the @bindir@/mysqlbug script!
+  
+The latest information about MySQL is available on the web at
+http://www.mysql.com
+END_OF_DATA
+  	else
+		cat << END_OF_DATA
+Installation of system tables failed!
+
+Examine the logs in $chroot/log for more information.
+You can also try to start the mysqld daemon with:
+$mysqld --skip-grant &
+You can use the command line tool
+@bindir@/mysql to connect to the mysql
+database and look at the grant tables:
+
+shell> @bindir@/mysql -u root mysql
+mysql> show tables
+
+Try 'mysqld --help' if you have problems with paths. Using --log
+gives you a log in $chroot/log that may be helpful.
+
+The latest information about MySQL is available on the web at
+http://www.mysql.com
+Please consult the MySQL manual section: 'Problems running mysql_install_db',
+and the manual section that describes problems on your OS.
+Another information source is the MySQL email archive.
+Please check all of the above before mailing us!
+And if you do mail us, you MUST use the @bindir@/mysqlbug script!
+END_OF_DATA
+		exit 1
+	fi
 else
-  echo "Installation of system tables failed!"
-  echo
-  echo "Examine the logs in $ldata for more information."
-  echo "You can try to start the mysqld daemon with:"
-  echo "$mysqld --skip-grant &"
-  echo "and use the command line tool"
-  echo "$bindir/mysql to connect to the mysql"
-  echo "database and look at the grant tables:"
-  echo
-  echo "shell> $bindir/mysql -u root mysql"
-  echo "mysql> show tables"
-  echo
-  echo "Try 'mysqld --help' if you have problems with paths. Using --log"
-  echo "gives you a log in $ldata that may be helpful."
-  echo
-  echo "The latest information about MySQL is available on the web at"
-  echo "http://www.mysql.com"
-  echo "Please consult the MySQL manual section: 'Problems running mysql_install_db',"
-  echo "and the manual section that describes problems on your OS."
-  echo "Another information source is the MySQL email archive."
-  echo "Please check all of the above before mailing us!"
-  echo "And if you do mail us, you MUST use the @scriptdir@/mysqlbug script!"
-  exit 1
+	echo No additional actions have to be done with MySQL privilege tables.
 fi
 
projeto & código: Vladimir Lettiev aka crux © 2004-2005, Andrew Avramenko aka liks © 2007-2008
mantenedor atual: Michael Shigorin
mantenedor da tradução: Fernando Martini aka fmartini © 2009