Imported from ../bash-4.0-rc1.tar.gz.
[platform/upstream/bash.git] / NOTES
diff --git a/NOTES b/NOTES
index 0594d22..b938d02 100644 (file)
--- a/NOTES
+++ b/NOTES
@@ -1,16 +1,18 @@
-Platform-Specific Configuration Notes
-=====================================
+Platform-Specific Configuration and Operation Notes
+===================================================
 
 1.  configure --without-gnu-malloc on:
 
-       alpha running OSF/1
-       alpha running Linux
+       alpha running OSF/1, Linux, or NetBSD (malloc needs 8-byte alignment;
+       bash malloc has 8-byte alignment now, but I have no alphas to test on)
 
        next running NeXT/OS
 
-       all machines running SunOS YP code: SunOS4, SunOS5, HP/UX
+       all machines running SunOS YP code: SunOS4, SunOS5, HP/UX, if you
+       have problems with username completion or tilde expansion for
+       usernames found via YP/NIS
 
-       linux (optional)
+       linux (optional, but don't do it if you're using Doug Lea's malloc)
 
        QNX 4.2
        other OSF/1 machines (KSR/1, HP, IBM AIX/ESA)
@@ -19,24 +21,327 @@ Platform-Specific Configuration Notes
        DG/UX
        Cray
 
-       NetBSD/sparc (malloc needs 8-byte alignment; GNU malloc has 4-byte)
+       NetBSD/sparc (malloc needs 8-byte alignment; bash malloc has 8-byte
+       alignment now, but I have no NetBSD machines to test on)
 
-       BSD/OS 2.1 if you want to use loadable builtins
+       BSD/OS 2.1, 3.x if you want to use loadable builtins
 
-       If you are using GNU libc, especially on a linux system
+       Motorola m68k machines running System V.3.  There is a file descriptor
+       leak caused by using the bash malloc because closedir(3) needs to read
+       freed memory to find the file descriptor to close
 
-(Configuring --without-gnu-malloc will still result in lib/malloc/libmalloc.a
-being built and linked against, but there is only a stub file in the archive.)
-
-2.  configure using shlicc on BSD/OS 2.1 to use loadable builtins
+2.  Configure using shlicc2 on BSD/OS 2.1 and BSD/OS 3.x to use loadable
+    builtins
 
 3.  Bash cannot be built in a directory separate from the source directory
     using configure --srcdir=... unless the version of `make' you're using
-    does $VPATH handling right.  The SunOS make, for one, does not seem to
-    do it right.  The script support/mkclone can be used to create a
-    `build tree' using symlinks to get around this.
-
-4.  I've had reports that username completion does not work on IRIX 5.3
-    when linking with -lnsl.  This is only a problem when you're running
-    NIS.  Editing the Makefile after configure runs and removing the
-    `-lnsl' from the assignment to `LIBS' fixes the problem.
+    does $VPATH handling right.  The script support/mkclone can be used to
+    create a `build tree' using symlinks to get around this.
+
+4.  I've had reports that username completion (as well as tilde expansion
+    and \u prompt expansion) does not work on IRIX 5.3 when linking with
+    -lnsl.  This is only a problem when you're running NIS, since
+    apparently -lnsl supports only /etc/passwd and not the NIS functions
+    for retrieving usernames and passwords.  Editing the Makefile after
+    configure runs and removing the `-lnsl' from the assignment to `LIBS'
+    fixes the problem.
+
+5.  There is a problem with the `makewhatis' script in older (pre-7.0)
+    versions of Red Hat Linux.  Running `makewhatis' with bash-2.0 or
+    later versions results in error messages like this:
+
+    /usr/sbin/makewhatis: cd: manpath: No such file or directory
+    /usr/sbin/makewhatis: manpath/whatis: No such file or directory
+    chmod: manpath/whatis: No such file or directory
+    /usr/sbin/makewhatis: cd: catpath: No such file or directory
+    /usr/sbin/makewhatis: catpath/whatis: No such file or directory
+    chmod: catpath/whatis: No such file or directory
+
+    The problem is with `makewhatis'.  Red Hat (and possibly other
+    Linux distributors) uses a construct like this in the code:
+
+        eval path=$"$pages"path
+
+    to do indirect variable expansion.  This `happened to work' in
+    bash-1.14 and previous versions, but that was more an accident
+    of implementation than anything else -- it was never supported
+    and certainly is not portable.
+
+    Bash-2.0 has a new feature that gives a new meaning to $"...".
+    This is explained more completely in item 1 in the COMPAT file.
+
+    The three lines in the `makewhatis' script that need to be changed
+    look like this:
+
+             eval $topath=$"$topath":$name
+    [...]
+       eval path=$"$pages"path
+    [...]
+    eval path=$"$pages"path
+
+    The portable way to write this code is
+
+             eval $topath="\$$topath":$name
+       eval path="\$$pages"path
+    eval path="\$$pages"path
+
+    You could also experiment with another new bash feature: ${!var}.
+    This does indirect variable expansion, making the use of eval
+    unnecessary.
+
+6.  There is a problem with syslogd on many Linux distributions (Red Hat
+    and Slackware are two that I have received reports about).  syslogd
+    sends a SIGINT to its parent process, which is waiting for the daemon
+    to finish its initialization.  The parent process then dies due to
+    the SIGINT, and bash reports it, causing unexpected console output
+    while the system is booting that looks something like
+
+       starting daemons: syslogd/etc/rc.d/rc.M: line 29: 38 Interrupt ${NET}/syslogd
+
+    Bash-2.0 reports events such as processes dying in scripts due to
+    signals when the standard output is a tty.  Bash-1.14.x and previous
+    versions did not report such events.
+
+    This should probably be reported as a bug to whatever Linux distributor
+    people see the problem on.  In my opinion, syslogd should be changed to
+    use some other method of communication, or the wrapper function (which
+    appeared to be `daemon' when I looked at it some time ago) or script
+    (which appeared to be `syslog') should catch SIGINT, since it's an
+    expected event, and exit cleanly.
+
+7.  Several people have reported that `dip' (a program for SLIP/PPP
+    on Linux) does not work with bash-2.0 installed as /bin/sh.
+
+    I don't run any Linux boxes myself, and do not have the dip
+    code handy to look at, but the `problem' with bash-2.0, as
+    it has been related to me, is that bash requires the `-p'
+    option to be supplied at invocation if it is to run setuid
+    or setgid. 
+
+    This means, among other things, that setuid or setgid programs
+    which call system(3) (a horrendously bad practice in any case)
+    relinquish their setuid/setgid status in the child that's forked
+    to execute /bin/sh. 
+
+    The following is an *unofficial* patch to bash-2.0 that causes it
+    to not require `-p' to run setuid or setgid if invoked as `sh'.
+    It has been reported to work on Linux.  It will make your system
+    vulnerable to bogus system(3) calls in setuid executables.
+
+--- ../bash-2.0.orig/shell.c    Wed Dec 18 14:16:30 1996
++++ shell.c     Fri Mar  7 13:12:03 1997
+@@ -347,7 +347,7 @@
+   if (posixly_correct)
+     posix_initialize (posixly_correct);
+
+-  if (running_setuid && privileged_mode == 0)
++  if (running_setuid && privileged_mode == 0 && act_like_sh == 0)
+     disable_priv_mode ();
+
+   /* Need to get the argument to a -c option processed in the
+
+8.  Some people have asked about binding all of the keys in a PC-keyboard-
+    style numeric keypad to readline functions.  Here's something I
+    received from the gnu-win32 list that may help.  Insert the following
+    lines into ~/.inputrc:
+
+# home key
+"\e[1~":beginning-of-line
+# insert key
+"\e[2~":kill-whole-line
+# del key
+"\e[3~":delete-char
+# end key
+"\e[4~":end-of-line
+# pgup key
+"\e[5~":history-search-forward
+# pgdn key
+"\e[6~":history-search-backward
+
+9.  Hints for building under Minix 2.0 (Contributed by Terry R. McConnell,
+    <tmc@barnyard.syr.edu>)
+
+   The version of /bin/sh distributed with Minix is not up to the job of
+   running the configure script. The easiest solution is to swap /bin/sh
+   with /usr/bin/ash. Then use chmem(1) to increase the memory allocated
+   to /bin/sh. The following settings are known to work:
+
+   text         data     bss   stack  memory
+   63552  9440          3304   65536  141832  /bin/sh
+
+   If you have problems with make or yacc it may be worthwhile first to
+   install the GNU versions of these utilities before attempting to build
+   bash. (As of this writing, all of these utilities are available for the
+   i386 as pre-built binaries via anonymous ftp at math.syr.edu in the
+   pub/mcconnell/minix directory. Note that the GNU version of yacc is called
+   bison.)
+
+   Unless you want to see lots of warnings about old-style declarations,
+   do LOCAL_CFLAGS=-wo; export LOCAL_CFLAGS before running configure.
+   (These warnings are harmless, but annoying.)
+
+   configure will insist that you supply a host type. For example, do
+   ./configure --host=i386-pc-minix.
+
+   Minix does not support the system calls required for a proper 
+   implementation of ulimit().  The `ulimit' builtin will not be available.
+
+   Configure will fail to notice that many things like uid_t are indeed
+   typedef'd in <sys/types.h>, because it uses egrep for this purpose
+   and minix has no egrep. You could try making a link /usr/bin/egrep -->
+   /usr/bin/grep. Better is to install the GNU version of grep in
+   /usr/local/bin and make the link /usr/local/bin/egrep -->/usr/local/bin/grep.
+   (These must be hard links, of course, since Minix does not support
+   symbolic links.)
+
+   You will see many warnings of the form:
+   warning: unknown s_type: 98
+   I have no idea what this means, but it doesn't seem to matter.
+
+10. If you do not have /usr/ccs/bin in your PATH when building on SunOS 5.x
+    (Solaris 2), the configure script will be unable to find `ar' and
+    `ranlib' (of course, ranlib is unnecessary).  Make sure your $PATH
+    includes /usr/ccs/bin on SunOS 5.x.  This generally manifests itself
+    with libraries not being built and make reporting errors like
+    `cr: not found' when library construction is attempted.
+
+11. Building a statically-linked bash on Solaris 2.5.x, 2.6, 7, or 8 is
+    complicated.
+
+    It's not possible to build a completely statically-linked binary, since
+    part of the C library depends on dynamic linking.  The following recipe
+    assumes that you're using gcc and the Solaris ld (/usr/ccs/bin/ld) on
+    Solaris 2.5.x or 2.6:
+
+       configure --enable-static-link
+       make STATIC_LD= LOCAL_LIBS='-Wl,-B,dynamic -ldl -Wl,-B,static'
+
+    This should result in a bash binary that depends only on libdl.so:
+
+       thor(2)$ ldd bash
+               libdl.so.1 =>    /usr/lib/libdl.so.1
+
+    If you're using the Sun C Compiler (Sun WorkShop C Compiler version
+    4.2 was what I used), you should be able to get away with using
+
+       configure --enable-static-link
+       make STATIC_LD=  LOCAL_LIBS='-B dynamic -ldl -B static'
+
+    If you want to completely remove any dependence on /usr, perhaps
+    to put a copy of bash in /sbin and have it available when /usr is
+    not mounted, force the build process to use the shared dl.so library
+    in /etc/lib.
+
+    For gcc, this would be something like
+
+       configure --enable-static-link
+       make STATIC_LD= LOCAL_LIBS='-Wl,-B,dynamic -Wl,-R/etc/lib -ldl -Wl,-B,static'
+
+    For Sun's WS4.2 cc
+
+       configure --enable-static-link
+       make STATIC_LD=  LOCAL_LIBS='-B dynamic -R/etc/lib -ldl -B static'
+
+    seems to work, at least on Solaris 2.5.1:
+
+       thor(2)$ ldd bash
+               libdl.so.1 =>    /etc/lib/libdl.so.1
+
+    On Solaris 7 (Solaris 8, using the version of gcc on the free software
+    CD-ROM), the following recipe appears to work for gcc:
+
+       configure --enable-static-link
+       make STATIC_LD='-Wl,-Bstatic' LOCAL_LIBS='-Wl,-Bdynamic -Wl,-R/etc/lib -ldl -Wl,-Bstatic'
+
+       thor.ins.cwru.edu(2)$ ldd bash
+               libdl.so.1 =>    /etc/lib/libdl.so.1
+
+    Make the analogous changes if you are running Sun's C Compiler.
+
+    I have received word that adding -L/etc/lib (or the equivalent
+    -Wl,-L/etc/lib) might also be necessary, in addition to the -R/etc/lib.
+
+    On later versions of Solaris, it may be necessary to add -lnsl before
+    -ldl; statically-linked versions of bash using libnsl are not guaranteed
+    to work correctly on future versions of Solaris.
+
+12. Configuring bash to build it in a cross environment.  Currently only
+    two native versions can be compiled this way, cygwin32 and x86 BeOS.
+    For BeOS, you would configure it like this:
+
+       export RANLIB=i586-beos-ranlib
+       export AR=i586-beos-ar
+       export CC=i586-beos-gcc
+       configure i586-beos
+
+    Similarly for cygwin32.
+
+13. Bash-2.05 has reverted to the bash-2.03 behavior of honoring the current
+    locale setting when processing ranges within pattern matching bracket
+    expressions ([A-Z]).  This is what POSIX.2 and SUSv2 specify.
+
+    The behavior of the matcher in bash-2.05 depends on the current LC_COLLATE
+    setting.  Setting this variable to `C' or `POSIX' will result in the
+    traditional behavior ([A-Z] matches all uppercase ASCII characters).
+    Many other locales, including the en_US locale (the default on many US
+    versions of Linux) collate the upper and lower case letters like this:
+
+       AaBb...Zz
+
+    which means that [A-Z] matches every letter except `z'.
+
+    The portable way to specify upper case letters is [:upper:] instead of
+    A-Z; lower case may be specified as [:lower:] instead of a-z.
+
+    Look at the manual pages for setlocale(3), strcoll(3), and, if it is
+    present, locale(1).  If you have locale(1), you can use it to find
+    your current locale information even if you do not have any of the
+    LC_ variables set.
+
+    My advice is to put
+
+        export LC_COLLATE=C
+
+    into /etc/profile and inspect any shell scripts run from cron for
+    constructs like [A-Z].  This will prevent things like
+
+       rm [A-Z]*
+
+    from removing every file in the current directory except those beginning
+    with `z' and still allow individual users to change the collation order.
+    Users may put the above command into their own profiles as well, of course.
+
+14. Building on Interix (nee OpenNT), which Microsoft bought from Softway
+    Systems and has seemingly abandoned (thanks to Kevin Moore for this item).
+
+       1.  cp cross-build/opennt.cache config.cache
+
+       2.  If desired, edit pathnames.h to set the values of SYS_PROFILE and
+           DEFAULT_HOSTS_FILE appropriately.
+
+       3.  export CONFIG_SHELL=$INTERIX_ROOT/bin/sh
+
+       4.  ./configure --prefix=$INTERIX_ROOT/usr/local (or wherever you
+           want it).
+
+       5. make; make install; enjoy
+
+15.  Configure with `CC=xlc' if you don't have gcc on AIX 4.2 and later
+     versions.  `xlc' running in `cc' mode has trouble compiling error.c.
+
+16.  Configure --disable-multibyte on NetBSD versions (1.4 through at least
+     1.6.1) that include wctype.h but do not define wctype_t.
+
+17.  Do NOT use bison-1.75.  It builds a non-working parser.  The most
+     obvious effect is that constructs like "for i; do echo $i; done" don't
+     loop over the positional parameters.
+
+18.  I have received reports that using -O2 with the MIPSpro results in a
+     binary that fails in strange ways.  Using -O1 seems to work.
+
+19.  There is special handling to ensure the shell links against static
+     versions of the included readline and history libraries on Mac OS X;
+     Apple ships inadequate dynamic libreadline and libhistory "replacements"
+     as standard libraries.
+
+