From ff4d0d435e32e6abf1e467a44056ea38041cb849 Mon Sep 17 00:00:00 2001 From: "Marc G. Fournier" Date: Mon, 23 Sep 1996 08:24:13 +0000 Subject: [PATCH] Here's a patch that I discussed recently on pg95-dev that changes the way one creates a database system. Parts that were in "make install" are not either in "make all" or initdb. Nothing goes in the PGDATA directory besides user data. Creating multiple database systems is easier. In addition to applying the patch, it is necessary to move the file libpq/pg_hba to backend/libpq/pg_hba.sample. Submitted by: Bryan Henderson --- src/backend/Makefile | 78 ++-- src/backend/catalog/Makefile.inc | 43 ++- .../pg_hba => backend/libpq/pg_hba.sample} | 0 src/bin/cleardbdir/cleardbdir.sh | 34 +- src/bin/initdb/initdb.sh | 335 ++++++++++-------- src/interfaces/libpq/Makefile | 104 +++--- src/mk/postgres.mk | 8 +- src/mk/postgres.shell.mk | 21 +- 8 files changed, 321 insertions(+), 302 deletions(-) rename src/{interfaces/libpq/pg_hba => backend/libpq/pg_hba.sample} (100%) diff --git a/src/backend/Makefile b/src/backend/Makefile index 7cf55de5a4..e08cc57533 100644 --- a/src/backend/Makefile +++ b/src/backend/Makefile @@ -7,7 +7,7 @@ # # # IDENTIFICATION -# $Header: /cvsroot/pgsql/src/backend/Makefile,v 1.6 1996/09/21 06:27:11 scrappy Exp $ +# $Header: /cvsroot/pgsql/src/backend/Makefile,v 1.7 1996/09/23 08:21:52 scrappy Exp $ # #------------------------------------------------------------------------- @@ -17,13 +17,11 @@ # in your custom makefile, ../Makefile.custom.) BIGOBJS= true - -PROG= postgres +PROG= postgres global1.bki.source local1_template1.bki.source MKDIR= ../mk include $(MKDIR)/postgres.mk - include $(CURDIR)/access/Makefile.inc include $(CURDIR)/bootstrap/Makefile.inc include $(CURDIR)/catalog/Makefile.inc @@ -60,6 +58,7 @@ OBJS:= $(subst .s,.o,$(SRCS:%.c=$(objdir)/%.o)) CLEANFILES+= $(notdir $(OBJS)) endif + ############################################################################# # # TIOGA stuff @@ -86,7 +85,7 @@ CFLAGS+= -DPOSTGRESDIR='"$(POSTGRESDIR)"' \ -I$(CURDIR)/$(objdir) \ -I$(CURDIR)/include \ -I$(CURDIR)/port/$(PORTNAME) \ - -I$(SRCDIR)/include + -I../include # turn this on if you prefer European style dates instead of American # style dates @@ -192,52 +191,33 @@ endif # # Installation. # -# Install the bki files to the data directory. We also copy a version -# of them that has "PGUID" intact, so one can change the value of the -# postgres userid before running initdb in the case of customizing the -# binary release (i.e., fixing up PGUID w/o recompiling the system). -# Those files are copied out as foo.source. The program newbki(1) can -# be run later to reset the postgres login id (but it must be run before -# initdb is run, or after clearing the data directory with -# cleardbdir(1)). [newbki distributed with v4r2 but not with Postgres95.] +# Install the backend program (postgres) to the binary directory and +# make a link as "postmaster". Install the bki files templates and sample +# files to the library directory. # +# (History: Before Release 2, make install generated a bki.source file +# and then used build parameters to convert it to a bki file, then installed +# that bki file in the /files subdirectory of the default data directory. +# Initdb then used the bki file to generate the database catalog classes. +# That had to change because (1) there can be more than one database system, +# and (2) the parameters of a database system should be set at initdb time, +# not at postgres build time. -# NAMEDATALEN=`egrep "^#define NAMEDATALEN" $(CURDIR)/include/postgres.h | awk '{print $$3}'`; \ -# OIDNAMELEN=`egrep "^#define OIDNAMELEN" $(CURDIR)/include/postgres.h | awk '{print $$3}'`; \ - -install: beforeinstall pg_id $(BKIFILES) postgres - $(INSTALL) $(INSTL_EXE_OPTS) $(objdir)/postgres $(DESTDIR)$(BINDIR)/postgres +install: beforeinstall postgres fmgr.h\ + global1.bki.source local1_template1.bki.source \ + libpq/pg_hba.sample + + $(INSTALL) $(INSTL_EXE_OPTS) $(objdir)/postgres \ + $(DESTDIR)$(BINDIR)/postgres @rm -f $(DESTDIR)$(BINDIR)/postmaster cd $(DESTDIR)$(BINDIR); ln -s postgres postmaster - @cd $(objdir); \ - PG_UID=`./pg_id $(POSTGRESLOGIN)`; \ - POSTGRESLOGIN=$(POSTGRESLOGIN);\ - echo "NAMEDATALEN = $(NAMEDATALEN)"; \ - echo "OIDNAMELEN = $(OIDNAMELEN)"; \ - case $$PG_UID in "NOUSER") \ - echo "Warning: no account named $(POSTGRESLOGIN), using yours";\ - POSTGRESLOGIN=`whoami`; \ - PG_UID=`./pg_id`;; \ - esac ;\ - for bki in $(BKIFILES); do \ - sed \ - -e "s/postgres PGUID/$$POSTGRESLOGIN $$PG_UID/" \ - -e "s/NAMEDATALEN/$(NAMEDATALEN)/g" \ - -e "s/OIDNAMELEN/$(OIDNAMELEN)/g" \ - -e "s/PGUID/$$PG_UID/" \ - < $$bki > $$bki.sed ; \ - echo "Installing $(DESTDIR)$(DATADIR)/files/$$bki."; \ - $(INSTALL) $(INSTLOPTS) \ - $$bki.sed $(DESTDIR)$(DATADIR)/files/$$bki; \ - rm -f $$bki.sed; \ - echo "Installing $(DESTDIR)$(DATADIR)/files/$$bki.source."; \ - $(INSTALL) $(INSTLOPTS) \ - $$bki $(DESTDIR)$(DATADIR)/files/$$bki.source; \ - done; - @echo "Installing $(DATADIR)/pg_hba"; - @cp $(srcdir)/libpq/pg_hba $(DATADIR) - @chmod 644 $(DATADIR)/pg_hba - + $(INSTALL) $(INSTLOPTS) $(objdir)/fmgr.h $(HEADERDIR)/fmgr.h + $(INSTALL) $(INSTLOPTS) $(objdir)/global1.bki.source \ + $(DESTDIR)$(LIBDIR)/global1.bki.source + $(INSTALL) $(INSTLOPTS) $(objdir)/local1_template1.bki.source \ + $(DESTDIR)$(LIBDIR)/local1_template1.bki.source + $(INSTALL) $(INSTLOPTS) libpq/pg_hba.sample \ + $(DESTDIR)$(LIBDIR)/pg_hba.sample # so we can get the UID of the postgres owner (w/o moving pg_id to # src/tools). We just want the vanilla LDFLAGS for pg_id @@ -247,10 +227,8 @@ ifeq ($(CC), cc) IDLDFLAGS+= -Aa -D_HPUX_SOURCE endif endif -pg_id: $(srcdir)/bin/pg_id/pg_id.c - $(CC) $(IDLDFLAGS) -o $(objdir)/$(@F) $< -CLEANFILES+= pg_id postgres +CLEANFILES+= postgres ############################################################################# diff --git a/src/backend/catalog/Makefile.inc b/src/backend/catalog/Makefile.inc index b29a0bfad2..1ee43d766b 100644 --- a/src/backend/catalog/Makefile.inc +++ b/src/backend/catalog/Makefile.inc @@ -7,13 +7,14 @@ # # # IDENTIFICATION -# $Header: /cvsroot/pgsql/src/backend/catalog/Attic/Makefile.inc,v 1.1.1.1 1996/07/09 06:21:14 scrappy Exp $ +# $Header: /cvsroot/pgsql/src/backend/catalog/Attic/Makefile.inc,v 1.2 1996/09/23 08:22:04 scrappy Exp $ # #------------------------------------------------------------------------- catdir=$(CURDIR)/catalog VPATH:=$(VPATH):$(catdir) +cat_hdr_dir= ../include/catalog SRCS_CATALOG= catalog.c heap.c index.c indexing.c \ pg_aggregate.c pg_operator.c pg_proc.c pg_type.c @@ -28,7 +29,7 @@ HEADERS+= catalog.h catname.h heap.h index.h indexing.h pg_aggregate.h \ pg_user.h pg_variable.h pg_version.h # -# The following is to create the .bki files. +# The following is to create the .bki.source files. # TODO: sort headers, (figure some automatic way of of determining # the bki sources?) # @@ -41,29 +42,27 @@ BKIOPTS= -DALLOW_PG_GROUP endif GENBKI= $(catdir)/genbki.sh -BKIFILES= global1.bki local1_template1.bki -GLOBALBKI_SRCS= pg_database.h pg_demon.h pg_magic.h pg_defaults.h \ - pg_variable.h pg_server.h pg_user.h pg_hosts.h \ - pg_group.h pg_log.h pg_time.h +GLOBALBKI_SRCS= $(addprefix $(cat_hdr_dir)/, \ + pg_database.h pg_demon.h pg_magic.h pg_defaults.h \ + pg_variable.h pg_server.h pg_user.h pg_hosts.h \ + pg_group.h pg_log.h pg_time.h \ + ) -LOCALBKI_SRCS= pg_proc.h pg_type.h pg_attribute.h pg_class.h \ - pg_inherits.h pg_index.h pg_version.h pg_statistic.h pg_operator.h \ - pg_opclass.h pg_am.h pg_amop.h pg_amproc.h pg_language.h pg_parg.h \ - pg_aggregate.h pg_ipl.h pg_inheritproc.h \ - pg_rewrite.h pg_listener.h indexing.h +LOCALBKI_SRCS= $(addprefix $(cat_hdr_dir)/, \ + pg_proc.h pg_type.h pg_attribute.h pg_class.h \ + pg_inherits.h pg_index.h pg_version.h pg_statistic.h \ + pg_operator.h pg_opclass.h pg_am.h pg_amop.h pg_amproc.h \ + pg_language.h pg_parg.h \ + pg_aggregate.h pg_ipl.h pg_inheritproc.h \ + pg_rewrite.h pg_listener.h indexing.h \ + ) -global1.bki: $(GENBKI) $(GLOBALBKI_SRCS) - sh $(SHOPTS) $(GENBKI) $(BKIOPTS) \ - $(patsubst $(GENBKI),,$^) > $(objdir)/$(@F) +global1.bki.source: $(GENBKI) $(GLOBALBKI_SRCS) + sh $(SHOPTS) $(GENBKI) $(BKIOPTS) $(GLOBALBKI_SRCS) > $(objdir)/$(@F) +local1_template1.bki.source: $(GENBKI) $(LOCALBKI_SRCS) + sh $(SHOPTS) $(GENBKI) $(BKIOPTS) $(LOCALBKI_SRCS) > $(objdir)/$(@F) -local1_template1.bki: $(GENBKI) $(LOCALBKI_SRCS) - sh $(SHOPTS) $(GENBKI) $(BKIOPTS) \ - $(patsubst $(GENBKI),,$^) > $(objdir)/$(@F) +CLEANFILES+= global.bki.source local1_template1.bki.source - -#${PROG}: ${BKIFILES} -# - -CLEANFILES+= ${BKIFILES} diff --git a/src/interfaces/libpq/pg_hba b/src/backend/libpq/pg_hba.sample similarity index 100% rename from src/interfaces/libpq/pg_hba rename to src/backend/libpq/pg_hba.sample diff --git a/src/bin/cleardbdir/cleardbdir.sh b/src/bin/cleardbdir/cleardbdir.sh index d9c03ab75c..39bdce18ef 100644 --- a/src/bin/cleardbdir/cleardbdir.sh +++ b/src/bin/cleardbdir/cleardbdir.sh @@ -4,34 +4,24 @@ # cleardbdir.sh-- # completely clear out the database directory # -# this program clears out the database directory, but leaves the .bki -# files so that initdb(1) can be run again. +# A program by this name used to be necessary because the database +# files were mixed in with postgres program files. Now, the database +# files are in their own directory so you can just rm it. # +# We have to ship this program, which now just tells the user there's +# no such program, to make sure that the old program from +# a prior release gets deleted. If it hung around, it could confuse +# the user. # # Copyright (c) 1994, Regents of the University of California # # # IDENTIFICATION -# $Header: /cvsroot/pgsql/src/bin/cleardbdir/Attic/cleardbdir.sh,v 1.1.1.1 1996/07/09 06:22:11 scrappy Exp $ +# $Header: /cvsroot/pgsql/src/bin/cleardbdir/Attic/cleardbdir.sh,v 1.2 1996/09/23 08:23:03 scrappy Exp $ # #------------------------------------------------------------------------- -[ -z "$PGDATA" ] && PGDATA=_fUnKy_DATADIR_sTuFf_ - -echo "This program completely destroys all the databases in the directory" -echo "$PGDATA" -echo _fUnKy_DASH_N_sTuFf_ "Are you sure you want to do this (y/n) [n]? "_fUnKy_BACKSLASH_C_sTuFf_ -read resp || exit -case $resp in - y*) : ;; - *) exit ;; -esac - -cd $PGDATA || exit -for i in * -do -if [ $i != "files" -a $i != "pg_hba" ] -then - /bin/rm -rf $i -fi -done +echo "The cleardbir program no longer exists. To remove an old database" +echo "system, simply wipe out the whole directory that contains it." +echo +echo "You can create a new database system with initdb." diff --git a/src/bin/initdb/initdb.sh b/src/bin/initdb/initdb.sh index 1e22e99b02..6c32050f38 100644 --- a/src/bin/initdb/initdb.sh +++ b/src/bin/initdb/initdb.sh @@ -2,221 +2,266 @@ #------------------------------------------------------------------------- # # initdb.sh-- -# create a postgres template database +# Create (initialize) a Postgres database system. +# +# A database system is a collection of Postgres databases all managed +# by the same postmaster. # -# this program feeds the proper input to the ``postgres'' program -# to create a postgres database and register it in the -# shared ``pg_database'' database. +# To create the database system, we create the directory that contains +# all its data, create the files that hold the global classes, create +# a few other control files for it, and create one database: the +# template database. +# +# The template database is an ordinary Postgres database. Its data +# never changes, though. It exists to make it easy for Postgres to +# create other databases -- it just copies. +# +# Optionally, we can skip creating the database system and just create +# (or replace) the template database. +# +# To create all those classes, we run the postgres (backend) program and +# feed it data from bki files that are in the Postgres library directory. # # Copyright (c) 1994, Regents of the University of California # # # IDENTIFICATION -# $Header: /cvsroot/pgsql/src/bin/initdb/Attic/initdb.sh,v 1.5 1996/09/21 06:24:41 scrappy Exp $ +# $Header: /cvsroot/pgsql/src/bin/initdb/Attic/initdb.sh,v 1.6 1996/09/23 08:23:17 scrappy Exp $ # #------------------------------------------------------------------------- # ---------------- # Set paths from environment or default values. -# The _fUnKy_..._sTuFf_ gets set when the script is installed -# from the default value for this build. -# Currently the only thing wee look for from the environment is -# PGDATA, PGHOST, and PGPORT +# The _fUnKy_..._sTuFf_ gets set when the script is built (with make) +# from parameters set in the make file. +# Currently the only thing we look for from the environment is +# PGDATA, PGHOST, and PGPORT. However, we should have environment +# variables for all the paths. # # ---------------- [ -z "$PGDATA" ] && { PGDATA=_fUnKy_DATADIR_sTuFf_; export PGDATA; } [ -z "$PGPORT" ] && { PGPORT=_fUnKy_POSTPORT_sTuFf_; export PGPORT; } [ -z "$PGHOST" ] && { PGHOST=localhost; export PGHOST; } -POSTGRESDIR=_fUnKy_POSTGRESDIR_sTuFf_ BINDIR=_fUnKy_BINDIR_sTuFf_ -FILESDIR=$PGDATA/files +LIBDIR=_fUnKy_LIBDIR_sTuFf_ +NAMEDATALEN=_fUnKy_NAMEDATALEN_sTuFf_ +OIDNAMELEN=_fUnKy_OIDNAMELEN_sTuFf_ PATH=$BINDIR:$PATH export PATH CMDNAME=`basename $0` -# ---------------- -# check arguments: -# -d indicates debug mode. -# -n means don't clean up on error (so your cores don't go away) -# ---------------- +# Set defaults: debug=0 noclean=0 -verbose=0 +template_only=0 +POSTGRES_SUPERUSERNAME=$USER -for ARG -do - case "$ARG" in - -d) debug=1; echo "$CMDNAME: debug mode on";; - -n) noclean=1; echo "$CMDNAME: noclean mode on";; - -v) verbose=1; echo "$CMDNAME: verbose mode on";; - *) echo "initdb [-d][-n][-v]\n -d : debug mode\n -n : noclean mode, leaves temp files around \n -v : verbose mode"; exit 0; - esac +for ARG ; do + if [ $ARG = "--debug" -o $ARG = "-d" ]; then + debug=1 + echo "Running with debug mode on." + elif [ $ARG = "--noclean" -o $ARG = "-n" ]; then + noclean=1 + echo "Running with noclean mode on. Mistakes will not be cleaned up." + elif [ $ARG = "--template" ]; then + template_only=1 + echo "updating template1 database only." + elif [ ${ARG#--username=} != $ARG ]; then + POSTGRES_SUPERUSERNAME=${ARG,"--username="} + elif [ ${ARG#--pgdata=} != $ARG ]; then + PGDATA=${ARG#--pgdata=} + else + echo "initdb [--template] [--debug] [--noclean]" \ + "[--username=SUPERUSER] [--pgdata=DATADIR]" + fi done -# ---------------- -# if the debug flag is set, then -# ---------------- -if test "$debug" -eq 1 -then +if [ "$debug" -eq 1 ]; then BACKENDARGS="-boot -C -F -d" else BACKENDARGS="-boot -C -F -Q" fi +TEMPLATE=$LIBDIR/local1_template1.bki.source +GLOBAL=$LIBDIR/global1.bki.source +PG_HBA_SAMPLE=$LIBDIR/pg_hba.sample -TEMPLATE=$FILESDIR/local1_template1.bki -GLOBAL=$FILESDIR/global1.bki -if [ ! -f $TEMPLATE -o ! -f $GLOBAL ] -then - echo "$CMDNAME: error: database initialization files not found." - echo "$CMDNAME: either gmake install has not been run or you're trying to" - echo "$CMDNAME: run this program on a machine that does not store the" - echo "$CMDNAME: database (PGHOST doesn't work for this)." +#------------------------------------------------------------------------- +# Find the input files +#------------------------------------------------------------------------- + +for PREREQ_FILE in $TEMPLATE $GLOBAL $PG_HBA_SAMPLE; do + if [ ! -f $PREREQ_FILE ]; then + echo "$CMDNAME does not find the file '$PREREQ_FILE'." + echo "This means Postgres95 is incorrectly installed." + exit 1 + fi +done + +echo "$CMDNAME: using $TEMPLATE as input to create the template database." +if [ $template_only -eq 0 ]; then + echo "$CMDNAME: using $GLOBAL as input to create the global classes." + echo "$CMDNAME: using $PG_HBA_SAMPLE as the host-based authentication" \ + "control file." +fi + +#--------------------------------------------------------------------------- +# Figure out who the Postgres superuser for the new database system will be. +#--------------------------------------------------------------------------- + +if [ -z $POSTGRES_SUPERUSERNAME ]; then + echo "Can't tell what username to use. You don't have the USER" + echo "environment variable set to your username and didn't specify the " + echo "--username option" exit 1 fi -if test "$verbose" -eq 1 -then - echo "$CMDNAME: using $TEMPLATE" - echo "$CMDNAME: using $GLOBAL" +POSTGRES_SUPERUID=`pg_id $POSTGRES_SUPERUSERNAME` + +if [ $POSTGRES_SUPERUID = NOUSER ]; then + echo "Valid username not given. You must specify the username for " + echo "the Postgres superuser for the database system you are " + echo "initializing, either with the --username option or by default " + echo "to the USER environment variable." + exit 10 fi -# -# Figure out who I am... -# - -PG_UID=`pg_id` - -if test $PG_UID -eq 0 -then - echo "$CMDNAME: do not install POSTGRES as root" - exit 1 +if [ $POSTGRES_SUPERUID -ne `pg_id` -a `pg_id` -ne 0 ]; then + echo "Only the unix superuser may initialize a database with a different" + echo "Postgres superuser. (You must be able to create files that belong" + echo "to the specified Postgres userid)." + exit 2 fi -# ---------------- -# create the template database if necessary -# the first we do is create data/base, so we'll check for that. -# ---------------- +echo "We are initializing the database system with username" \ + "$POSTGRES_SUPERUSERNAME (uid=$POSTGRES_SUPERUID)." +echo "Please be aware that Postgres is not secure. Anyone who can connect" +echo "to the database can act as user $POSTGRES_SUPERUSERNAME " \ + "with very little effort." -if test -d "$PGDATA/base" -then - echo "$CMDNAME: error: it looks like initdb has already been run. You must" - echo "clean out the database directory first with the cleardbdir program" - exit 1 -fi +# ----------------------------------------------------------------------- +# Create the data directory if necessary +# ----------------------------------------------------------------------- # umask must disallow access to group, other for files and dirs umask 077 -mkdir $PGDATA/base $PGDATA/base/template1 - -if test "$verbose" -eq 1 -then - echo "$CMDNAME: creating SHARED relations in $PGDATA" - echo "$CMDNAME: creating template database in $PGDATA/base/template1" - echo "postgres $BACKENDARGS template1 < $TEMPLATE " +if [ -d "$PGDATA" ]; then + if [ $template_only -eq 0 ]; then + echo "$CMDNAME: error: Directory $PGDATA already exists." + echo "This probably means initdb has already been run and the " + echo "database system already exists." + echo + echo "If you want to create a new database system, either remove " + echo "the $PGDATA directory or run initdb with environment variable" + echo "PGDATA set to something other than $PGDATA." + exit 1 + fi +else + if [ ! -d $PGDATA ]; then + echo "Creating Postgres database system directory $PGDATA" + mkdir $PGDATA + if [ $? -ne 0 ]; then exit 5; fi + fi + if [ ! -d $PGDATA/base ]; then + echo "Creating Postgres database system directory $PGDATA/base" + mkdir $PGDATA/base + if [ $? -ne 0 ]; then exit 5; fi + fi fi -postgres $BACKENDARGS template1 < $TEMPLATE +#---------------------------------------------------------------------------- +# Create the template1 database +#---------------------------------------------------------------------------- +rm -rf $PGDATA/base/template1 +mkdir $PGDATA/base/template1 -if test $? -ne 0 -then +echo "$CMDNAME: creating template database in $PGDATA/base/template1" +echo "Running: postgres $BACKENDARGS template1" + +cat $TEMPLATE \ +| sed -e "s/postgres PGUID/$POSTGRES_SUPERUSERNAME $POSTGRES_SUPERUID/" \ + -e "s/NAMEDATALEN/$NAMEDATALEN/g" \ + -e "s/OIDNAMELEN/$OIDNAMELEN/g" \ + -e "s/PGUID/$POSTGRES_SUPERUID/" \ +| postgres $BACKENDARGS template1 + +if [ $? -ne 0 ]; then echo "$CMDNAME: could not create template database" - if test $noclean -eq 0 - then - echo "$CMDNAME: cleaning up." - cd $PGDATA - for i in * - do - if [ $i != "files" -a $i != "pg_hba" ] - then - /bin/rm -rf $i - fi - done - else - echo "$CMDNAME: cleanup not done (noclean mode set)." + if [ $noclean -eq 0 ]; then + echo "$CMDNAME: cleaning up by wiping out $PGDATA/base/template1" + rm -rf $PGDATA/base/template1 + else + echo "$CMDNAME: cleanup not done because noclean options was used." fi - exit 1; + exit 1; fi pg_version $PGDATA/base/template1 -# -# Add the template database to pg_database -# +#---------------------------------------------------------------------------- +# Create the global classes, if requested. +#---------------------------------------------------------------------------- -echo "open pg_database" > /tmp/create.$$ -echo "insert (template1 $PG_UID template1)" >> /tmp/create.$$ -#echo "show" >> /tmp/create.$$ -echo "close pg_database" >> /tmp/create.$$ +if [ $template_only -eq 0 ]; then + echo "$CMDNAME: creating global classes in $PGDATA" -if test "$verbose" -eq 1 -then - echo "postgres $BACKENDARGS template1 < $GLOBAL" -fi + echo "Creating global classes in $PG_DATA/base" + echo "Running: postgres $BACKENDARGS template1" -postgres $BACKENDARGS template1 < $GLOBAL + cat $GLOBAL \ + | sed -e "s/postgres PGUID/$POSTGRES_SUPERUSERNAME $POSTGRES_SUPERUID/" \ + -e "s/NAMEDATALEN/$NAMEDATALEN/g" \ + -e "s/OIDNAMELEN/$OIDNAMELEN/g" \ + -e "s/PGUID/$POSTGRES_SUPERUID/" \ + | postgres $BACKENDARGS template1 -if (test $? -ne 0) -then - echo "$CMDNAME: could create shared relations" - if (test $noclean -eq 0) + if (test $? -ne 0) then - echo "$CMDNAME: cleaning up." - cd $PGDATA - for i in * - do - if [ $i != "files" ] - then - /bin/rm -rf $i - fi - done - else - echo "$CMDNAME: cleanup not done (noclean mode set)." + echo "$CMDNAME: could not create global classes." + if (test $noclean -eq 0); then + echo "$CMDNAME: cleaning up." + rm -rf $PGDATA + else + echo "$CMDNAME: cleanup not done (noclean mode set)." + fi + exit 1; fi - exit 1; -fi -pg_version $PGDATA + pg_version $PGDATA -if test "$verbose" -eq 1 -then - echo "postgres $BACKENDARGS template1 < /tmp/create.$$" -fi + cp $PG_HBA_SAMPLE $PGDATA/pg_hba -postgres $BACKENDARGS template1 < /tmp/create.$$ + echo "Adding template1 database to pg_database..." -if test $? -ne 0 -then - echo "$CMDNAME: could not log template database" - if (test $noclean -eq 0) - then - echo "$CMDNAME: cleaning up." - cd $PGDATA - for i in * - do - if [ $i != "files" ] - then - /bin/rm -rf $i - fi - done - else - echo "$CMDNAME: cleanup not done (noclean mode set)." + echo "open pg_database" > /tmp/create.$$ + echo "insert (template1 $POSTGRES_SUPERUID template1)" >> /tmp/create.$$ + #echo "show" >> /tmp/create.$$ + echo "close pg_database" >> /tmp/create.$$ + + echo "Running: postgres $BACKENDARGS template1 < /tmp/create.$$" + + postgres $BACKENDARGS template1 < /tmp/create.$$ + + if [ $? -ne 0 ]; then + echo "$CMDNAME: could not log template database" + if [ $noclean -eq 0 ]; then + echo "$CMDNAME: cleaning up." + rm -rf $PGDATA + else + echo "$CMDNAME: cleanup not done (noclean mode set)." + fi + exit 1; fi - exit 1; + rm -f /tmp/create.$$ fi -if test $debug -eq 0 -then - -if test "$verbose" -eq 1 -then +if [ $debug -eq 0 ]; then echo "vacuuming template1" -fi echo "vacuum" | postgres -F -Q template1 > /dev/null fi -rm -f /tmp/create.$$ + diff --git a/src/interfaces/libpq/Makefile b/src/interfaces/libpq/Makefile index bef510b4b3..4a2d689a6e 100644 --- a/src/interfaces/libpq/Makefile +++ b/src/interfaces/libpq/Makefile @@ -7,94 +7,98 @@ # # # IDENTIFICATION -# $Header: /cvsroot/pgsql/src/interfaces/libpq/Makefile,v 1.4 1996/08/28 23:02:43 scrappy Exp $ +# $Header: /cvsroot/pgsql/src/interfaces/libpq/Makefile,v 1.5 1996/09/23 08:23:33 scrappy Exp $ # #------------------------------------------------------------------------- -LIB= pq - MKDIR= ../mk include $(MKDIR)/postgres.mk -CFLAGS+= -I$(srcdir)/backend/include \ - -I$(srcdir)/include \ - -I$(srcdir)/backend \ - -I$(CURDIR) \ +CFLAGS+= -I../backend/include \ + -I$../include \ + -I$../backend \ + -I. \ ifdef KRBVERS CFLAGS+= $(KRBFLAGS) endif # dllist.c is found in backend/lib -VPATH:= $(VPATH):$(srcdir)/backend/lib +VPATH:= $(VPATH):../backend/lib LIBSRCS= fe-auth.c fe-connect.c fe-exec.c fe-misc.c fe-lobj.c \ dllist.c pqsignal.c ifeq ($(PORTNAME), next) -VPATH:=$(VPATH):$(srcdir)/backend/port/$(PORTNAME) +VPATH:=$(VPATH):../backend/port/$(PORTNAME) LIBSRCS+= getcwd.c putenv.c endif +all:: libpq.a postgres.h c.h + +postgres.h: ../backend/include/postgres.h +# Note: ../backend/include/postgres.h needs to be named something different +# to avoid confusion with this thing we're building now. +# +# hardwire NAMEDATALEN and OIDNAMELEN into the postgres.h for this installation + rm -f obj/postgres.h + echo "#define NAMEDATALEN $(NAMEDATALEN)" >> obj/postgres.h + echo "#define OIDNAMELEN $(OIDNAMELEN)" >> obj/postgres.h + cat ../backend/include/postgres.h >> obj/postgres.h + +c.h: ../backend/include/c.h + rm -f obj/c.h + echo "#undef PORTNAME" > obj/c.h + echo "#define PORTNAME $(PORTNAME)" >> obj/c.h + echo "#undef PORTNAME_$(PORTNAME)" >> obj/c.h + echo "#define PORTNAME_$(PORTNAME)" >> obj/c.h + cat ../backend/include/c.h >> obj/c.h .PHONY: beforeinstall-headers install-headers ifndef NO_BEFOREINSTL beforeinstall-headers: - @-if [ ! -d $(HEADERDIR) ]; then mkdir $(HEADERDIR); fi - @-if [ ! -d $(HEADERDIR)/port ]; then mkdir $(HEADERDIR)/port; fi - @-if [ ! -d $(HEADERDIR)/port/$(PORTNAME) ]; \ + @if [ ! -d $(HEADERDIR) ]; then mkdir $(HEADERDIR); fi + @if [ ! -d $(HEADERDIR)/port ]; then mkdir $(HEADERDIR)/port; fi + @if [ ! -d $(HEADERDIR)/port/$(PORTNAME) ]; \ then mkdir $(HEADERDIR)/port/$(PORTNAME); fi - @-if [ ! -d $(HEADERDIR)/include ]; \ + @if [ ! -d $(HEADERDIR)/include ]; \ then mkdir $(HEADERDIR)/include; fi - @-if [ ! -d $(HEADERDIR)/lib ]; \ + @if [ ! -d $(HEADERDIR)/lib ]; \ then mkdir $(HEADERDIR)/lib; fi - @-if [ ! -d $(HEADERDIR)/libpq ]; \ + @if [ ! -d $(HEADERDIR)/libpq ]; \ then mkdir $(HEADERDIR)/libpq; fi - @-if [ ! -d $(HEADERDIR)/utils ]; \ + @if [ ! -d $(HEADERDIR)/utils ]; \ then mkdir $(HEADERDIR)/utils; fi else beforeinstall-headers: .dosomething endif -HEADERFILES = include/postgres.h \ - libpq/pqcomm.h \ - libpq/libpq-fs.h \ - lib/dllist.h \ - utils/geo-decls.h - -ifeq ($(PORTNAME), hpux) -HEADERFILES += port/hpux/fixade.h -endif - - TEMPDIR=obj -install-headers: beforeinstall-headers - @for i in ${HEADERFILES}; do \ - echo "Installing $(HEADERDIR)/$$i."; \ - $(INSTALL) $(INSTLOPTS) $(srcdir)/backend/$$i $(HEADERDIR)/$$i; \ - done +install-headers: beforeinstall-headers postgres.h c.h + $(INSTALL) $(INSTLOPTS) ../backend/include/postgres.h \ + $(HEADERDIR)/postgres.h + $(INSTALL) $(INSTLOPTS) ../include/libpq/pqcomm.h \ + $(HEADERDIR)/libpq/pqcomm.h + $(INSTALL) $(INSTLOPTS) ../include/libpq/libpq-fs.h \ + $(HEADERDIR)/libpq/libpq-fs.h + $(INSTALL) $(INSTLOPTS) ../include/lib/dllist.h \ + $(HEADERDIR)/libpq/dllist.h + $(INSTALL) $(INSTLOPTS) ../include/utils/geo-decls.h \ + $(HEADERDIR)/utils/geo-decls.h $(INSTALL) $(INSTLOPTS) libpq-fe.h $(HEADERDIR)/libpq-fe.h - @mv -f $(HEADERDIR)/include/* $(HEADERDIR) - @rmdir $(HEADERDIR)/include -# XXX - installing fmgr.h depends on the backend being built - $(INSTALL) $(INSTLOPTS) $(srcdir)/backend/$(objdir)/fmgr.h $(HEADERDIR)/fmgr.h - @rm -f $(TEMPDIR)/c.h - @echo "#undef PORTNAME" > $(TEMPDIR)/c.h - @echo "#define PORTNAME $(PORTNAME)" >> $(TEMPDIR)/c.h - @echo "#undef PORTNAME_$(PORTNAME)" >> $(TEMPDIR)/c.h - @echo "#define PORTNAME_$(PORTNAME)" >> $(TEMPDIR)/c.h - @cat $(srcdir)/backend/include/c.h >> $(TEMPDIR)/c.h - $(INSTALL) $(INSTLOPTS) $(TEMPDIR)/c.h $(HEADERDIR)/c.h - @rm -f $(TEMPDIR)/postgres.h -# hardwire NAMEDATALEN and OIDNAMELEN into the postgres.h for this installation - @echo "#define NAMEDATALEN $(NAMEDATALEN)" >> $(TEMPDIR)/postgres.h - @echo "#define OIDNAMELEN $(OIDNAMELEN)" >> $(TEMPDIR)/postgres.h - @cat $(srcdir)/backend/include/postgres.h >> $(TEMPDIR)/postgres.h - $(INSTALL) $(INSTLOPTS) $(TEMPDIR)/postgres.h $(HEADERDIR)/postgres.h - @rm -f $(TEMPDIR)/c.h $(TEMPDIR)/postgres.h +ifeq ($(PORTNAME), hpux) + $(INSTALL) $(INSTLOPTS) ../backend/port/hpux/fixade.h \ + $(HEADERDIR)/port/hpux/fixade.h +endif + $(INSTALL) $(INSTLOPTS) obj/c.h $(HEADERDIR)/c.h + $(INSTALL) $(INSTLOPTS) obj/postgres.h $(HEADERDIR)/postgres.h install:: install-headers +CLEANFILES+= c.h postgres.h + +LIB= pq include $(MKDIR)/postgres.lib.mk + diff --git a/src/mk/postgres.mk b/src/mk/postgres.mk index 61e44f51d5..a925e07d83 100644 --- a/src/mk/postgres.mk +++ b/src/mk/postgres.mk @@ -9,7 +9,7 @@ # # # IDENTIFICATION -# $Header: /cvsroot/pgsql/src/mk/Attic/postgres.mk,v 1.2 1996/07/27 02:04:12 scrappy Exp $ +# $Header: /cvsroot/pgsql/src/mk/Attic/postgres.mk,v 1.3 1996/09/23 08:24:11 scrappy Exp $ # #------------------------------------------------------------------------- @@ -123,10 +123,8 @@ beforeinstall: localobj then mkdir $(DESTDIR)$(LIBDIR); fi @-if test ! -d $(DESTDIR)$(BINDIR); \ then mkdir $(DESTDIR)$(BINDIR); fi - @-if test ! -d $(DESTDIR)$(DATADIR); \ - then mkdir $(DESTDIR)$(DATADIR); fi - @-if test ! -d $(DESTDIR)$(DATADIR)/files; \ - then mkdir $(DESTDIR)$(DATADIR)/files; fi + @-if test ! -d $(HEADERDIR); \ + then mkdir $(HEADERDIR); fi else beforeinstall: localobj endif diff --git a/src/mk/postgres.shell.mk b/src/mk/postgres.shell.mk index 398c3fd813..65eeff2916 100644 --- a/src/mk/postgres.shell.mk +++ b/src/mk/postgres.shell.mk @@ -11,28 +11,33 @@ # # # IDENTIFICATION -# $Header: /cvsroot/pgsql/src/mk/Attic/postgres.shell.mk,v 1.1.1.1 1996/07/09 06:22:19 scrappy Exp $ +# $Header: /cvsroot/pgsql/src/mk/Attic/postgres.shell.mk,v 1.2 1996/09/23 08:24:13 scrappy Exp $ # # NOTES # the shell script you write might include the following strings which # will be turned into the values listed below: # # _fUnKy_BINDIR_sTuFf_ - location of installed binaries -# _fUnKy_DATADIR_sTuFf_ - location of the data directory +# _fUnKy_LIBDIR_sTuFf_ - location of installed library stuff +# _fUnKy_DATADIR_sTuFf_ - location of the default data directory # _fUnKy_POSTGRESDIR_sTuFf_ - location of the postgres "home" directory +# _fUnKy_NAMEDATALEN_sTuFf_ - length of a datum of type "name" +# _fUnKy_OIDNAMELEN_sTuFf_ - ? # _fUnKy_IPCCLEANPATH_sTuFf_ - location of the ipcs and ipcrm programs # _fUnKy_DASH_N_sTuFf_ - -n flag used in echo # _fUnKy_BACKSLASH_C_sTuFf_ - continuation (echo) #------------------------------------------------------------------------- # -# And all the shell scripts here get stuffed with the default -# values for BINDIR, DATADIR, and POSTGRESDIR +# Insert installation-dependent filepaths into the shell script # -SEDSCRIPT= -e "s^_fUnKy_BINDIR_sTuFf_^$(BINDIR)^g" \ - -e "s^_fUnKy_DATADIR_sTuFf_^$(DATADIR)^g" \ - -e "s^_fUnKy_IPCCLEANPATH_sTuFf_^$(IPCSDIR)^g" \ - -e "s^_fUnKy_POSTGRESDIR_sTuFf_^$(POSTGRESDIR)^g" +SEDSCRIPT= \ + -e "s^_fUnKy_BINDIR_sTuFf_^$(BINDIR)^g" \ + -e "s^_fUnKy_LIBDIR_sTuFf_^$(LIBDIR)^g" \ + -e "s^_fUnKy_DATADIR_sTuFf_^$(DATADIR)^g" \ + -e "s^_fUnKy_IPCCLEANPATH_sTuFf_^$(IPCSDIR)^g" \ + -e "s^_fUnKy_NAMEDATALEN_sTuFf_^$(NAMEDATALEN)^g" \ + -e "s^_fUnKy_OIDNAMELEN_sTuFf_^$(OIDNAMELEN)^g" # # We also need to fix up the scripts to deal with the lack of installed