diff options
author | unknown <gweir@work.mysql.com> | 2003-02-01 00:42:26 +0100 |
---|---|---|
committer | unknown <gweir@work.mysql.com> | 2003-02-01 00:42:26 +0100 |
commit | 88301da1cd4feb1d7cbcad1984795f937ac8152e (patch) | |
tree | f7c383e264e8172bc011c8dc34a02e47c418eeb3 /netware/mysql_install_db.c | |
parent | 2479bdeae9e48165017d07f737dc30c911d305e1 (diff) | |
download | mariadb-git-88301da1cd4feb1d7cbcad1984795f937ac8152e.tar.gz |
Many files:
new file
Makefile.am:
Changes from Novell diff
netware/Makefile.am:
Changes from Novell diff
BitKeeper/etc/logging_ok:
Logging to logging@openlogging.org accepted
Diffstat (limited to 'netware/mysql_install_db.c')
-rw-r--r-- | netware/mysql_install_db.c | 437 |
1 files changed, 437 insertions, 0 deletions
diff --git a/netware/mysql_install_db.c b/netware/mysql_install_db.c new file mode 100644 index 00000000000..96f416880b1 --- /dev/null +++ b/netware/mysql_install_db.c @@ -0,0 +1,437 @@ +/* + Copyright (c) 2002 Novell, Inc. 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; either version 2 of the License, or + (at your option) any later version. + + 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +*/ + +#include <stdlib.h> +#include <stdio.h> +#include <netdb.h> +#include <sys/stat.h> +#include <monitor.h> +#include <strings.h> +#include <getopt.h> +#include <screen.h> + +#include "my_config.h" +#include "my_manage.h" + +/****************************************************************************** + + global variables + +******************************************************************************/ +char autoclose; +char basedir[PATH_MAX]; +char datadir[PATH_MAX]; +char err_log[PATH_MAX]; +char out_log[PATH_MAX]; +char mysqld[PATH_MAX]; +char hostname[PATH_MAX]; +char sql_file[PATH_MAX]; +char default_option[PATH_MAX]; + +/****************************************************************************** + + prototypes + +******************************************************************************/ + +void start_defaults(int, char*[]); +void finish_defaults(); +void read_defaults(arg_list); +void parse_args(int, char*[]); +void get_options(int, char*[]); +void create_paths(); +int mysql_install_db(int argc, char *argv[]); + +/****************************************************************************** + + functions + +******************************************************************************/ + +/****************************************************************************** + + start_defaults() + + Start setting the defaults. + +******************************************************************************/ +void start_defaults(int argc, char *argv[]) +{ + struct stat buf; + int i; + + // default options + static char *default_options[] = + { + "--no-defaults", + "--defaults-file=", + "--defaults-extra-file=", + NULL + }; + + // autoclose + autoclose = FALSE; + + // basedir + get_basedir(argv[0], basedir); + + // hostname + if (gethostname(hostname,PATH_MAX) < 0) + { + // default + strcpy(hostname,"mysql"); + } + + // default option + default_option[0] = NULL; + for (i=0; (argc > 1) && default_options[i]; i++) + { + if(!strnicmp(argv[1], default_options[i], strlen(default_options[i]))) + { + strncpy(default_option, argv[1], PATH_MAX); + break; + } + } + + // set after basedir is established + datadir[0] = NULL; + err_log[0] = NULL; + out_log[0] = NULL; + mysqld[0] = NULL; + sql_file[0] = NULL; +} + +/****************************************************************************** + + finish_defaults() + + Finish setting the defaults. + +******************************************************************************/ +void finish_defaults() +{ + struct stat buf; + int i; + + // datadir + if (!datadir[0]) snprintf(datadir, PATH_MAX, "%s/data", basedir); + + // err-log + if (!err_log[0]) snprintf(err_log, PATH_MAX, "%s/%s.err", datadir, hostname); + + // out-log + if (!out_log[0]) snprintf(out_log, PATH_MAX, "%s/%s.out", datadir, hostname); + + // sql-file + if (!sql_file[0]) snprintf(sql_file, PATH_MAX, "%s/bin/init_db.sql", basedir); + + // mysqld + if (!mysqld[0]) snprintf(mysqld, PATH_MAX, "%s/bin/mysqld", basedir); +} + +/****************************************************************************** + + read_defaults() + + Read the defaults. + +******************************************************************************/ +void read_defaults(arg_list pal) +{ + arg_list al; + char defaults_file[PATH_MAX]; + char mydefaults[PATH_MAX]; + char line[PATH_MAX]; + FILE *fp; + + // defaults output file + snprintf(defaults_file, PATH_MAX, "%s/bin/defaults.out", basedir); + remove(defaults_file); + + // mysqladmin file + snprintf(mydefaults, PATH_MAX, "%s/bin/my_print_defaults", basedir); + + // args + init_args(al); + add_arg(al, mydefaults); + if (default_option[0]) add_arg(al, default_option); + add_arg(al, "mysqld"); + add_arg(al, "mysql_install_db"); + + spawn(mydefaults, al, TRUE, NULL, defaults_file, NULL); + + free_args(al); + + // gather defaults + if((fp = fopen(defaults_file, "r")) != NULL) + { + while(fgets(line, PATH_MAX, fp)) + { + char *p; + + // remove end-of-line character + if ((p = strrchr(line, '\n')) != NULL) *p = '\0'; + + // add the option as an argument + add_arg(pal, line); + } + + fclose(fp); + } + + // remove file + remove(defaults_file); +} + +/****************************************************************************** + + parse_args() + + Get the options. + +******************************************************************************/ +void parse_args(int argc, char *argv[]) +{ + int index = 0; + int c; + + // parse options + enum opts + { + OPT_BASEDIR = 0xFF, + OPT_DATADIR, + OPT_SQL_FILE + }; + + static struct option options[] = + { + {"autoclose", no_argument, &autoclose, TRUE}, + {"basedir", required_argument, 0, OPT_BASEDIR}, + {"datadir", required_argument, 0, OPT_DATADIR}, + {"sql-file", required_argument, 0, OPT_SQL_FILE}, + {0, 0, 0, 0} + }; + + // we have to reset getopt_long because we use it multiple times + optind = 1; + + // turn off error reporting + opterr = 0; + + while ((c = getopt_long(argc, argv, "b:h:", options, &index)) >= 0) + { + switch (c) + { + case OPT_BASEDIR: + case 'b': + strcpy(basedir, optarg); + break; + + case OPT_DATADIR: + case 'h': + strcpy(datadir, optarg); + break; + + case OPT_SQL_FILE: + strcpy(sql_file, optarg); + break; + + default: + // ignore + break; + } + } +} + +/****************************************************************************** + + get_options() + + Get the options. + +******************************************************************************/ +void get_options(int argc, char *argv[]) +{ + arg_list al; + + // start defaults + start_defaults(argc, argv); + + // default file arguments + init_args(al); + add_arg(al, "dummy"); + read_defaults(al); + parse_args(al->argc, al->argv); + free_args(al); + + // command-line arguments + parse_args(argc, argv); + + // finish defaults + finish_defaults(); +} + +/****************************************************************************** + + create_paths() + + Create database paths. + +******************************************************************************/ +void create_paths() +{ + struct stat info; + char temp[PATH_MAX]; + + // check for tables + snprintf(temp, PATH_MAX, "%s/mysql/host.frm", datadir); + if (!stat(temp, &info)) + { + printf("A database already exists in the directory:\n"); + printf("\t%s\n\n", datadir); + exit(-1); + } + + // data directory + if (stat(datadir, &info)) + { + mkdir(datadir, 0); + } + + // mysql directory + snprintf(temp, PATH_MAX, "%s/mysql", datadir); + if (stat(temp, &info)) + { + mkdir(temp, 0); + } + + // test directory + snprintf(temp, PATH_MAX, "%s/test", datadir); + if (stat(temp, &info)) + { + mkdir(temp, 0); + } +} + +/****************************************************************************** + + mysql_install_db() + + Install the database. + +******************************************************************************/ +int mysql_install_db(int argc, char *argv[]) +{ + arg_list al; + int i, j, err; + char skip; + + // private options + static char *private_options[] = + { + "--autoclose", + "--sql-file=", + NULL + }; + + // args + init_args(al); + add_arg(al, "%s", mysqld); + + // parent args + for(i = 1; i < argc; i++) + { + skip = FALSE; + + // skip private arguments + for (j=0; private_options[j]; j++) + { + if(!strnicmp(argv[i], private_options[j], strlen(private_options[j]))) + { + skip = TRUE; + break; + } + } + + if (!skip) add_arg(al, "%s", argv[i]); + } + + add_arg(al, "--bootstrap"); + add_arg(al, "--skip-grant-tables"); + add_arg(al, "--skip-innodb"); + add_arg(al, "--skip-bdb"); + + // spawn mysqld + err = spawn(mysqld, al, TRUE, sql_file, out_log, err_log); + + // free args + free_args(al); + + return err; +} + +/****************************************************************************** + + main() + +******************************************************************************/ +int main(int argc, char **argv) +{ + // get options + get_options(argc, argv); + + // check for an autoclose option + if (!autoclose) setscreenmode(SCR_NO_MODE); + + // create paths + create_paths(); + + // install the database + if (mysql_install_db(argc, argv)) + { + printf("ERROR - The database creation failed!\n"); + printf("See the following log for more infomration:\n"); + printf("\t%s\n\n", err_log); + exit(-1); + } + + // status + printf("Initial database successfully created in the directory:\n"); + printf("\t%s\n", datadir); + + // info + printf("\nPLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !\n"); + + printf("\nThis is done with:\n"); + printf("\tmysqladmin -u root password 'new-password'\n"); + + printf("\nSee the manual for more instructions.\n"); + + printf("\nYou can start the MySQL daemon with:\n"); + printf("\tmysqld_safe\n"); + + printf("\nPlease report any problems with:\n"); + printf("\t/mysql/mysqlbug.txt\n"); + + printf("\nThe latest information about MySQL is available on the web at\n"); + printf("\thttp://www.mysql.com\n"); + + printf("\nSupport MySQL by buying support at https://order.mysql.com\n\n"); + + return 0; +} |