summaryrefslogtreecommitdiff
path: root/netware/mysql_install_db.c
diff options
context:
space:
mode:
authorunknown <gweir@work.mysql.com>2003-02-01 00:42:26 +0100
committerunknown <gweir@work.mysql.com>2003-02-01 00:42:26 +0100
commit88301da1cd4feb1d7cbcad1984795f937ac8152e (patch)
treef7c383e264e8172bc011c8dc34a02e47c418eeb3 /netware/mysql_install_db.c
parent2479bdeae9e48165017d07f737dc30c911d305e1 (diff)
downloadmariadb-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.c437
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;
+}