List:Commits« Previous MessageNext Message »
From:tim Date:November 29 2007 11:16pm
Subject:bk commit into 5.0 tree (tsmith:1.2584) BUG#32219
View as plain text  
Below is the list of changes that have just been committed into a local
5.0 repository of tsmith. When tsmith does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2007-11-29 15:16:42-07:00, tsmith@stripped +3 -0
  Bug #32219: too many hosts in default grant tables 6.0.3
  
  Fix is to remove any references to the current hostname when running
  mysql_install_db --cross-bootstrap.  (The dist-hook make target makes
  this call, and the resulting data directory is included in the source
  distribution as win/data/*.)
  
  Also, a few other clean-ups to mysql_install_db while there.

  Makefile.am@stripped, 2007-11-29 15:16:41-07:00, tsmith@stripped +1 -1
    Adapt to clean-up in mysql_install_db (--windows becomes --cross-bootstrap)

  scripts/mysql_install_db.sh@stripped, 2007-11-29 15:16:41-07:00, tsmith@stripped
+37 -29
    Filter out references to the current hostname when performing
    a cross-bootstrap installation by removing any lines which
    contain the string "@current_hostname".
    
    Deprecate the old --windows option; use --cross-bootstrap
    instead, since it more accurately reflects the purpose.
    
    Other clean-up: the wrong syntax was being used to test the
    exit status of mysqld --bootstrap.  It mostly worked, as long
    as mysqld succeeded.  However, it was not robust.

  scripts/mysql_system_tables_data.sql@stripped, 2007-11-29 15:16:41-07:00,
tsmith@stripped +8 -3
    Rename local @hostname variable to @current_hostname, which is a more
    unique label to search on.  mysql_install_db now filters out all
    lines which include "@current_hostname" during a --cross-bootstrap
    installation.

diff -Nrup a/Makefile.am b/Makefile.am
--- a/Makefile.am	2007-10-12 03:15:29 -06:00
+++ b/Makefile.am	2007-11-29 15:16:41 -07:00
@@ -102,7 +102,7 @@ dist-hook:
 	rm -rf `find $(distdir) -type d -name SCCS -print`
 	rm -f  `find $(distdir) -type l -print`
 	mkdir -p $(distdir)/win
-	scripts/mysql_install_db --no-defaults --windows \
+	scripts/mysql_install_db --no-defaults --cross-bootstrap \
 		--basedir=$(top_builddir) \
 		--datadir=$(distdir)/win/data \
 		--srcdir=$(top_srcdir)
diff -Nrup a/scripts/mysql_install_db.sh b/scripts/mysql_install_db.sh
--- a/scripts/mysql_install_db.sh	2007-09-24 07:40:38 -06:00
+++ b/scripts/mysql_install_db.sh	2007-11-29 15:16:41 -07:00
@@ -30,13 +30,15 @@ user=""
 force=0
 in_rpm=0
 ip_only=0
-windows=0
+cross_bootstrap=0
 
 usage()
 {
   cat <<EOF
 Usage: $0 [OPTIONS]
   --basedir=path       The path to the MySQL installation directory.
+  --cross-bootstrap    For internal use.  Used when building the MySQL system
+                       tables on a different host than the target.
   --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
@@ -56,8 +58,6 @@ Usage: $0 [OPTIONS]
                        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
 
@@ -67,7 +67,7 @@ EOF
 
 s_echo()
 {
-  if test "$in_rpm" -eq 0 -a "$windows" -eq 0
+  if test "$in_rpm" -eq 0 -a "$cross_bootstrap" -eq 0
   then
     echo "$1"
   fi
@@ -109,16 +109,17 @@ parse_arguments()
       --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 ;;
+      --cross-bootstrap|--windows)
+        # 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.  See top-level 'dist-hook' make target.
+        #
+        # --windows is a deprecated alias
+         cross_bootstrap=1 ;;
 
       *)
         if test -n "$pick_args"
@@ -213,8 +214,8 @@ then
   pkgdatadir="@pkgdatadir@"
 else
   bindir="$basedir/bin"
-  # We set up bootstrap-specific paths later, so skip this for --windows
-  if test "$windows" -eq 0
+  # We set up bootstrap-specific paths later, so skip this for now
+  if test "$cross_bootstrap" -eq 0
   then
     pkgdatadir=`find_in_basedir --dir fill_help_tables.sql share share/mysql`
     if test -z "$pkgdatadir"
@@ -256,8 +257,8 @@ do
   fi
 done
 
-# Set up Windows-specific paths
-if test "$windows" -eq 1
+# Set up bootstrap-specific paths
+if test "$cross_bootstrap" -eq 1
 then
   mysqld="./sql/mysqld"
   if test -n "$srcdir" -a -f "$srcdir/sql/share/english/errmsg.sys"
@@ -280,7 +281,7 @@ fi
 hostname=`@HOSTNAME@`
 
 # Check if hostname is valid
-if test "$windows" -eq 0 -a "$in_rpm" -eq 0 -a "$force" -eq 0
+if test "$cross_bootstrap" -eq 0 -a "$in_rpm" -eq 0 -a "$force" -eq 0
 then
   resolved=`$bindir/resolveip $hostname 2>&1`
   if [ $? -ne 0 ]
@@ -329,6 +330,16 @@ then
   args="$args --user=$user"
 fi
 
+# When doing a "cross bootstrap" install, no reference to the current
+# host should be added to the system tables.  So we filter out any
+# lines which contain the current host name.
+if test $cross_bootstrap -eq 1
+then
+  filter_cmd_line="sed -e '/@current_hostname/d'"
+else
+  filter_cmd_line="cat"
+fi
+
 # Peform the install of system tables
 mysqld_bootstrap="${MYSQLD_BOOTSTRAP-$mysqld}"
 mysqld_install_cmd_line="$mysqld_bootstrap $defaults $mysqld_opt --bootstrap \
@@ -337,15 +348,14 @@ mysqld_install_cmd_line="$mysqld_bootstr
 
 # 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`
+if { echo "use mysql;"; cat $create_system_tables $fill_system_tables; } | eval
"$filter_cmd_line" | $mysqld_install_cmd_line > /dev/null
 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`
+  if { echo "use mysql;"; cat $fill_help_tables; } | $mysqld_install_cmd_line >
/dev/null
   then
-    # Fill suceeded
     s_echo "OK"
   else
     echo
@@ -359,14 +369,12 @@ then
   s_echo "support-files/mysql.server to the right place for your system"
   s_echo
 
-  if test "$windows" -eq 0
+  if test "$cross_bootstrap" -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
+    # This is not a true installation on a running system.  The end user must
+    # set a password after installing the data files on the real host system.
+    # At this point, there is no end user, so it does not make sense to print
+    # this reminder.
     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'"
diff -Nrup a/scripts/mysql_system_tables_data.sql b/scripts/mysql_system_tables_data.sql
--- a/scripts/mysql_system_tables_data.sql	2007-10-10 14:12:34 -06:00
+++ b/scripts/mysql_system_tables_data.sql	2007-11-29 15:16:41 -07:00
@@ -2,6 +2,12 @@
 -- The inital data for system tables of MySQL Server
 --
 
+-- When setting up a "cross bootstrap" database (e.g., creating data on a Unix
+-- host which will later be included in a Windows zip file), any lines
+-- containing "@current_hostname" are filtered out by mysql_install_db.
+set @current_hostname= @@hostname;
+
+
 -- Fill "db" table with default grants for anyone to
 -- access database 'test' and 'test_%' if "db" table didn't exist
 CREATE TEMPORARY TABLE tmp_db LIKE db;
@@ -15,10 +21,9 @@ DROP TABLE tmp_db;
 -- from local machine if "users" table didn't exist before
 CREATE TEMPORARY TABLE tmp_user LIKE user;
 INSERT INTO tmp_user VALUES
('localhost','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
-set @hostname= @@hostname;
-REPLACE INTO tmp_user VALUES
(@hostname,'root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
+REPLACE INTO tmp_user VALUES
(@current_hostname,'root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
 REPLACE INTO tmp_user VALUES
('127.0.0.1','root','','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','','','','',0,0,0,0);
 INSERT INTO tmp_user (host,user) VALUES ('localhost','');
-INSERT INTO tmp_user (host,user) VALUES (@@hostname,'');
+INSERT INTO tmp_user (host,user) VALUES (@current_hostname,'');
 INSERT INTO user SELECT * FROM tmp_user WHERE @had_user_table=0;
 DROP TABLE tmp_user;
Thread
bk commit into 5.0 tree (tsmith:1.2584) BUG#32219tim29 Nov