==================================================== Frequently Asked Questions (FAQ) for Postgres95 Linux Specific TO BE READ IN CONJUNCTION WITH THE NORMAL FAQ ==================================================== last updated: Mon Oct 28 10:25:00 BST 1996 current maintainer: Andrew C.R. Martin (martin@biochem.ucl.ac.uk) original author: Andrew C.R. Martin (martin@biochem.ucl.ac.uk) Changes in this version (* = modified, + = new, - = removed): -0.*) Bugs in Postgres95 V1.08 *1.3) [REDHAT] Why do I get problems with missing libdl and dlfcn.h? *1.4) [SLACKWARE 3.1] Why do I get problems with missing libdl and dlfcn.h? *1.5) My compile of the backend dies complaining about the include file dlfcn.h missing *1.9) Why do I get problems with ld.so? *1.13) What are the references in X11_LIB to libsocket and libnsl in src/Makefile.global? This file is divided approximately as follows: 1.*) Installing Postgres95 2.*) Compiling accessory programs 3.*) Runtime Problems 4.*) Spurious Problems in Need of Verification Questions answered: 1.1) What changes do I need to make to src/Makefile.global 1.2) Why do I get problems with missing libreadline? 1.3) [REDHAT] Why do I get problems with missing libdl and dlfcn.h? 1.4) [SLACKWARE 3.1] Why do I get problems with missing libdl and dlfcn.h? 1.5) My compile of the backend dies complaining about the include file dlfcn.h missing 1.6) GCC complains about an ignored option -fpic 1.7) I get warnings of the form warning: cast from pointer to integer of different size 1.8) [SuSE-Linux 4.2] Where is curses and termcap? 1.9) Why do I get problems with ld.so? 1.10) Why do I get `yy_flush_buffer undefined' errors? 1.11) How do I compile Postgres95 on an a.out system? 1.12) Why does make fail with: yacc -d /disk2/postgres95/src/backend/parser/gram.y make: /usr/bin/make: cannot execute binary file 1.13) What are the references in X11_LIB to libsocket and libnsl in src/Makefile.global? 1.14) [DEBIAN] Where is libtermcap? 2.1) The linker fails to find libX11 when compiling pgtclsh 3.1) I get an error reporting _fUnKy_POSTPORT_sTuFf_ undefined when running scripts like createuser 3.2) I run postmaster and after that system says 'Bad system call(Core dumped)' 3.3) When I try to start the Postmaster, why do I get an error of the form Failed Assertion("!(file != 0):(null)", File: "/usr/local/postgres95/src/backend/storage/file/fd.c", Line: 257) !(file != 0) (0) initdb: could not create template database initdb: cleaning up. 3.4) Why doesn't createuser work? 3.5) Why do I get an error like: IpcMemoryCreate: memKey=155356396 , size=760632 , permission=384IpcMemoryCreate: shmget(..., create, ...) failed: Invalid argument 4.1) Why doesn't the postmaster start the first time? ---------------------------------------------------------------------- Section 1: Compiling Postgres95 ---------------------------------------------------------------------- 1.1) What changes do I need to make to src/Makefile.global You *must* set the following variables: PORTNAME= linux You will also need to change the following to match your own installation: SRCDIR POSTGRESDIR If you switch on the USE_TCL option, you will need to set these: TCL_INCDIR= TCL_LIBDIR= TCL_LIB= TK_INCDIR= TK_LIBDIR= TK_LIB= X11_INCDIR= X11_LIBDIR= X11_LIB= On my Slackware3.0 system, these are: TCL_INCDIR= /usr/include/tcl TCL_LIBDIR= /usr/lib TCL_LIB= -ltcl TK_INCDIR= /usr/include/tcl TK_LIBDIR= /usr/lib TK_LIB= -ltk X11_INCDIR= /usr/include/X11 X11_LIBDIR= /usr/X386/lib X11_LIB= -lX11 You may also make any other changes you need as documented in the INSTALL file and in Makefile.global 1.2) Why do I get problems with missing libreadline? Linux systems generally don't come with the GNU readline library installed. Either comment out the USE_READLINE variable in src/Makefile.global or install the GNU readline library. Note that Debian Linux (like FreeBSD) does come with readline installed. 1.3) [REDHAT] Why do I get problems with missing libdl and dlfcn.h? The libdl library is used for dynamic linking of user-supplied functions at run-time. For some reason this library was missed out from the Redhat distribution. It seems that the latest Redhat 4.0 (Colgate) fixes this. RedHat now have a new ld.so RPM package on their FTP site. Simply grab: ftp://ftp.redhat.com/pub/redhat/devel/i386/RedHat/RPMS/ld.so-1.7.14-4.i386.rpm Install the RPM file in the usual way and off you go! There has been one report of a corrupted system resulting from programs accessing these libraries while updating them (not altogether surprising). Consequently it is a good idea to reboot the system before installing the new libraries and to have as little running as possible during this upgrade. Going into single-user mode is probably a good idea! If you want to do it the hard way, you can obtain the library and the header file from: ftp://tsx-11.mit.edu/pub/linux/packages/GCC/ld.so-1.7.14.tar.gz Alternatively, you may find precompiled binaries in distributions/debian/buzz/binary-i386/base/ld.so-1.7.14-4.deb on the same site, or follow the instructions given for question 1.2 for correcting the same error with early releases of Slackware 3.1. Don't use this method unless you know what you are doing! 1.4) [SLACKWARE 3.1] Why do I get problems with missing libdl and dlfcn.h? See the answer to question 1.3. Slackware up to version 3.0 was supplied with this library and include file and they seem to be back in again in the latest versions of 3.1, but the early 3.1 releases (before 9th September 1996) had them missing and many CD-ROM versions will have been pressed from the first 3.1 releases. There has been one report of a corrupted system resulting from programs accessing these libraries while updating them (not altogether surprising). Consequently it is a good idea to reboot the system before installing the new libraries and to have as little running as possible during this upgrade. Going into single-user mode is probably a good idea! The easiest fix is to obtain the file ldso.tgz from the a4 disk of a more recent Slackware 3.1 distribution and unpack this file from the root (/) directory, then do sh install/doinst.sh to complete the installation. Follow this with ldconfig If you want to install manually, you must first install the file dlfcn.h in /usr/include. Second, install the file libdl.so.1.7.14 (or whatever the latest release is) in /lib, then do: cd /lib ln -sf libdl.so.1.7.14 libdl.so.1 ln -sf libdl.so.1 libdl.so On some systems (depending on your GCC configuration) it may be necessary to do: cd /usr/lib ln -sf /lib/libdl.so . Finally ldconfig 1.5) My compile of the backend dies complaining about the include file dlfcn.h missing See the answer to question 1.3/1.4. Don't forget that if you are using an a.out system you must first have installed the dld package (which is not supplied with most a.out systems) to have dlfcn.h at all. See Question 1.11. 1.6) GCC complains about an ignored option -fpic Earlier versions of GCC accepted either -fpic or -fPIC. It appears that more recent versions (V2.7.2?) require -fPIC. If you are using an ELF version of Linux, this can safely be ignored as -fPIC is the default. You can correct this by editing src/mk/port/postgres.mk.linux 1.7) I get warnings of the form warning: cast from pointer to integer of different size These can safely be ignored 1.8) [SuSE-Linux 4.2] Where is curses and termcap? SuSE-Linux has ncurses but not curses. Edit src/bin/psql/Makefile and Change LIBCURSES= -lcurses to LIBCURSES= -lncurses SuSE-Linux has the termcap library is in /usr/lib/termcap instead of in /usr/lib Edit src/bin/psql/Makefile and Change ifeq ($(PORTNAME), linux) LD_ADD += -ltermcap else to ifeq ($(PORTNAME), linux) LD_ADD += -L/usr/lib/termcap -ltermcap else In fact, since ncurses uses terminfo rather than termcap, it should be possible to change this line to LD_ADD += since you shouldn't need the termcap library. 1.9) Why do I get problems with ld.so? If you get problems with ld.so, another library required under ELF for dynamic loading, then you have messed up your installation or (more likely) upgrade of Linux. See the answers to Question 1.3/1.4. You may need to install ld.so.x.y.z in /lib and run ldconfig. The most recent stable release of the ld package is 1.7.14 At the time of writing, 1.8.x versions of ld are experimental. 1.10) Why do I get `yy_flush_buffer undefined' errors? This isn't really Linux specific, but is common on older Linux installations. You must have a recent version of flex (2.5.2 or later) to compile Postgres95. Note that flex 2.5.3 has a bug: see Question 3.4. 1.11) How do I compile Postgres95 on an a.out system? First, you must install the dld library. This may be obtained from Sunsite as: Linux/libs/dld.3.2.7.tar.gz Second, comment out the LINUX_ELF line in src/mk/port/postgres.mk.linux 1.12) Why does make fail with: yacc -d /disk2/postgres95/src/backend/parser/gram.y make: /usr/bin/make: cannot execute binary file yacc is generally implemented as a script which invokes bison -y For some reason (certain versions of make? certain versions of bash?) make is unable to execute this script file. To correct this, simply edit src/mk/port/postgres.mk.linux and, at the end of the file, change: # YACC = bison -y to YACC = bison -y 1.13) What are the references in X11_LIB to libsocket and libnsl in src/Makefile.global? This was a problem in 1.08 (they are Sun Solaris specific). It is fixed in 1.09. 1.14) [DEBIAN] Where is libtermcap? Debian Linux comes without the termcap library and uses ncurses (which uses terminfo instead). There is no need to change the LIBCURSES variable in src/bin/psql/Makefile since Debian provides a link from libncurses to libcurses (unlike SuSE-Linux --- see Question 1.8). Edit src/bin/psql/Makefile and change: ifeq ($(PORTNAME), linux) LD_ADD += -ltermcap else to ifeq ($(PORTNAME), linux) CFLAGS += else ---------------------------------------------------------------------- Section 2: Compiling accessory programs ---------------------------------------------------------------------- 2.1) The linker fails to find libX11 when compiling pgtclsh Modify the src/Makefile.global to change X11_LIBDIR = /usr/lib to X11_LIBDIR = /usr/X11R6/lib ---------------------------------------------------------------------- Section 3: Runtime Problems ---------------------------------------------------------------------- 3.1) I get an error reporting _fUnKy_POSTPORT_sTuFf_ undefined when running scripts like createuser This is a bug in V1.06-V1.07 of Postgres and is fixed in V1.08 3.2) I run postmaster and after that system says 'Bad system call(Core dumped)' This indicates that you have no compiled shared memory support into your kernel. You need to recompile the Linux kernel to add this feature. 3.3) When I try to start the Postmaster, why do I get an error of the form Failed Assertion("!(file != 0):(null)", File: "/usr/local/postgres95/src/backend/storage/file/fd.c", Line: 257) !(file != 0) (0) initdb: could not create template database initdb: cleaning up. Your permissions on the file /dev/null are wrong. ls -l /dev/null should give you something like: crw-rw-rw- 1 root wheel 2, 2 Oct 8 18:41 /dev/null Correct the permissions using: chmod a+rw /dev/null 3.4) Why doesn't createuser work? There is a problem with Version 2.5.3 of GNU flex and createuser. Your options are to downgrade flex to V2.5.2, apply a patch to V2.5.3 (supplied in doc/README.flex) or wait for V2.5.4 which will fix the bug. 3.5) Why do I get an error like: IpcMemoryCreate: memKey=155356396 , size=760632 , permission=384IpcMemoryCreate: shmget(..., create, ...) failed: Invalid argument You haven't build IPC support into your Linux kernel. You will have to rebuild the kernel and switch on this option. ---------------------------------------------------------------------- Section 4: Spurious Problems in Need of Verification ---------------------------------------------------------------------- 4.1) Why doesn't the postmaster start the first time? Pawko Olszewski reported a problem that, using Linux kernel 2.0.18, the postmaster wouldn't start the first time it is run using postmaster -B 256 but if run as postmaster -B 64 killed and then restarted as postmaster -B 256 everything was OK. I haven't been able to repeat this problem! Nobody else has reported anything similar. **************************************************************************** Dr. Andrew C.R. Martin, University College London & SciTech Software EMAIL: martin@biochem.ucl.ac.uk Tel:(Work) +44(0)171 419 3890 URL: http://www.biochem.ucl.ac.uk/~martin (Home) +44(0)1372 275775 ****************************************************************************