From 3f619478f796eddbba6e39502fe941b285dd97b1 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 4 May 2024 20:00:34 +0200 Subject: Adding upstream version 1:10.11.6. Signed-off-by: Daniel Baumann --- scripts/mysql_install_db.sh | 714 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 714 insertions(+) create mode 100644 scripts/mysql_install_db.sh (limited to 'scripts/mysql_install_db.sh') diff --git a/scripts/mysql_install_db.sh b/scripts/mysql_install_db.sh new file mode 100644 index 00000000..31557b60 --- /dev/null +++ b/scripts/mysql_install_db.sh @@ -0,0 +1,714 @@ +#!/bin/sh +# Copyright (c) 2000, 2013, Oracle and/or its affiliates. +# Copyright (c) 2009, 2013, Monty Program Ab +# +# 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-1335 USA + +# This scripts creates the MariaDB Server system tables +# +# All unrecognized arguments to this script are passed to mariadbd. + +basedir="" +builddir="" +ldata="@localstatedir@" +langdir="" +srcdir="" + +args="" +defaults="" +defaults_group_suffix="" +mysqld_opt="" +user="" +group="" +silent_startup="--silent-startup" +log_error="" + +force=0 +in_rpm=0 +ip_only=0 +cross_bootstrap=0 +auth_root_authentication_method=socket +auth_root_socket_user="" +skip_test_db=0 +extra_file="" + +dirname0=`dirname $0 2>/dev/null` +dirname0=`dirname $dirname0 2>/dev/null` + +usage() +{ + cat <&1` + if test $? -ne 0 + then + resolved=`"$resolveip" localhost 2>&1` + if test $? -ne 0 + then + echo "Neither host '$hostname' nor 'localhost' could be looked up with" + echo "'$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" + link_to_help + 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 MariaDB version. The MariaDB daemon, mariadbd, 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 MariaDB privileges !" + fi +fi + +if test "$ip_only" -eq 1 +then + hostname=`echo "$resolved" | awk '/ /{print $6}'` +fi + +# Create database directories +for dir in "$ldata" +do + if test ! -d "$dir" + then + if ! `mkdir -p "$dir"` + then + echo "Fatal error Can't create database directory '$dir'" + link_to_help + exit 1 + fi + chmod 700 "$dir" + fi + if test -n "$user" + then + if test -z "$group" + then + chown $user $dir + else + chown $user:$group $dir + fi + if test $? -ne 0 + then + echo "Cannot change ownership of the database directories to the '$user'" + echo "user. Check that you have the necessary permissions and try again." + exit 1 + fi + fi +done + +if test -n "$user" +then + if test -z "$srcdir" -a "$in_rpm" -eq 0 -a -d "$pamtooldir/auth_pam_tool_dir" + then + chown 0 "$pamtooldir/auth_pam_tool_dir/auth_pam_tool" && \ + chmod 04755 "$pamtooldir/auth_pam_tool_dir/auth_pam_tool" + if test $? -ne 0 + then + echo "Couldn't set an owner to '$pamtooldir/auth_pam_tool_dir/auth_pam_tool'." + echo "It must be root, the PAM authentication plugin doesn't work otherwise.." + echo + fi + chown $user "$pamtooldir/auth_pam_tool_dir" && \ + chmod 0700 "$pamtooldir/auth_pam_tool_dir" + if test $? -ne 0 + then + echo "Cannot change ownership of the '$pamtooldir/auth_pam_tool_dir' directory" + echo "to the '$user' user. Check that you have the necessary permissions and try again." + echo + fi + fi + args="$args --user=$user" +fi + +#To be enabled if/when we enable --group as an option to mariadbd +#if test -n "$group" +#then +# args="$args --group=$group" +#fi + +if test -f "$ldata/mysql/user.frm" +then + echo "mysql.user table already exists!" + echo "Run mysql_upgrade, not mysql_install_db" + exit 0 +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 + +# Disable log error if the user don't have right to write/create the file +# This is common when a user tries to install a personal mariadbd server and +# the global config in /etc is using --log-error. +# The server will internally change log-error to stderr to stderr if it cannot +# write the the log file. This code only disables the error message from a not +# writable log-error, which can be confusing. +if test -n "$log_error" +then + if test \( -e "$log_error" -a \! -w "$log_error" \) -o \( ! -e "$log_error" -a ! -w "`dirname "$log_error"`" \) + then + if test -n "$verbose" + then + echo "resetting log-error '$log_error' because no write access" + fi + log_error="" + args="$args --skip-log-error" + fi +fi + +# Configure mariadbd command line +mysqld_bootstrap="${MYSQLD_BOOTSTRAP-$mysqld}" +mysqld_install_cmd_line() +{ + "$mysqld_bootstrap" $defaults $defaults_group_suffix "$mysqld_opt" --bootstrap $silent_startup\ + "--basedir=$basedir" "--datadir=$ldata" --log-warnings=0 --enforce-storage-engine="" \ + "--plugin-dir=${plugindir}" \ + $args --max_allowed_packet=8M \ + --net_buffer_length=16K +} + +# Use $auth_root_socket_user if explicitly specified. +# Otherwise use the owner of datadir - ${user:-$USER} +# Use 'root' as a fallback +auth_root_socket_user=${auth_root_socket_user:-${user:-${USER:-root}}} + +cat_sql() +{ + echo "create database if not exists mysql;" + echo "use mysql;" + + case "$auth_root_authentication_method" in + normal) + echo "SET @auth_root_socket=NULL;" + ;; + socket) + echo "SET @auth_root_socket='$auth_root_socket_user';" + ;; + esac + + cat "$create_system_tables" "$create_system_tables2" "$fill_system_tables" "$fill_help_tables" "$maria_add_gis_sp" "$mysql_sys_schema" + if test "$skip_test_db" -eq 0 + then + cat "$mysql_test_db" + fi + + # cat extra file if it's not null + if test ! -z "$extra_file" + then + cat "$extra_file" + fi +} + +# Create the system and help tables by passing them to "mariadbd --bootstrap" +s_echo "Installing MariaDB/MySQL system tables in '$ldata' ..." +if cat_sql | eval "$filter_cmd_line" | mysqld_install_cmd_line > /dev/null +then + printf "@VERSION@-MariaDB" > "$ldata/mysql_upgrade_info" + s_echo "OK" +else + log_file_place=$ldata + if test -n "$log_error" + then + log_file_place="$log_error or $log_file_place" + fi + echo + echo "Installation of system tables failed! Examine the logs in" + echo "$log_file_place for more information." + echo + echo "The problem could be conflicting information in an external" + echo "my.cnf files. You can ignore these by doing:" + echo + echo " shell> $0 --defaults-file=~/.my.cnf" + echo + echo "You can also try to start the mariadbd daemon with:" + echo + echo " shell> $mysqld --skip-grant-tables --general-log &" + echo + echo "and use the command line tool $bindir/mariadb" + echo "to connect to the mysql database and look at the grant tables:" + echo + echo " shell> $bindir/mariadb -u root mysql" + echo " MariaDB> show tables;" + echo + echo "Try '$mysqld --help' if you have problems with paths. Using" + echo "--general-log gives you a log in $ldata that may be helpful." + link_to_help + echo "You can find the latest source at https://downloads.mariadb.org and" + echo "the maria-discuss email list at https://launchpad.net/~maria-discuss" + echo + echo "Please check all of the above before submitting a bug report" + echo "at https://mariadb.org/jira" + echo + exit 1 +fi + +# Don't output verbose information if running inside bootstrap or using +# --srcdir for testing. In such cases, there's no end user looking at +# the screen. +if test "$cross_bootstrap" -eq 0 && test -z "$srcdir" +then + s_echo + s_echo "To start mariadbd at boot time you have to copy" + s_echo "support-files/mariadb.service to the right place for your system" + + if test "$auth_root_authentication_method" = normal + then + echo + echo + echo "PLEASE REMEMBER TO SET A PASSWORD FOR THE MariaDB root USER !" + echo "To do so, start the server, then issue the following command:" + echo + echo "'$bindir/mariadb-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." + else + echo + echo + echo "Two all-privilege accounts were created." + echo "One is root@localhost, it has no password, but you need to" + echo "be system 'root' user to connect. Use, for example, sudo mysql" + echo "The second is $auth_root_socket_user@localhost, it has no password either, but" + echo "you need to be the system '$auth_root_socket_user' user to connect." + echo "After connecting you can set the password, if you would need to be" + echo "able to connect as any of these users with a password and without sudo" + fi + + echo + echo "See the MariaDB Knowledgebase at https://mariadb.com/kb" + + if test "$in_rpm" -eq 0 + then + echo + echo "You can start the MariaDB daemon with:" + echo "cd '$basedir' ; $bindir/mariadb-safe --datadir='$ldata'" + echo + echo "You can test the MariaDB daemon with mysql-test-run.pl" + echo "cd '$basedir/@INSTALL_MYSQLTESTDIR@' ; perl mariadb-test-run.pl" + fi + + echo + echo "Please report any problems at https://mariadb.org/jira" + echo + echo "The latest information about MariaDB is available at https://mariadb.org/." + echo + echo "Consider joining MariaDB's strong and vibrant community:" + echo "https://mariadb.org/get-involved/" + echo +fi + +exit 0 -- cgit v1.2.3