source: trunk/third/bash/NOTES @ 18290

Revision 18290, 12.8 KB checked in by zacheiss, 21 years ago (diff)
This commit was generated by cvs2svn to compensate for changes in r18289, which included commits to RCS files with non-trunk default branches.
Line 
1Platform-Specific Configuration and Operation Notes
2===================================================
3
41.  configure --without-gnu-malloc on:
5
6        alpha running OSF/1, Linux, or NetBSD (malloc needs 8-byte alignment;
7        bash malloc has 8-byte alignment now, but I have no alphas to test on)
8
9        next running NeXT/OS
10
11        all machines running SunOS YP code: SunOS4, SunOS5, HP/UX, if you
12        have problems with username completion or tilde expansion for
13        usernames found via YP/NIS
14
15        linux (optional, but don't do it if you're using Doug Lea's malloc)
16
17        QNX 4.2
18        other OSF/1 machines (KSR/1, HP, IBM AIX/ESA)
19        AIX
20        sparc SVR4, SVR4.2 (ICL reference port)
21        DG/UX
22        Cray
23
24        NetBSD/sparc (malloc needs 8-byte alignment; bash malloc has 8-byte
25        alignment now, but I have no NetBSD machines to test on)
26
27        BSD/OS 2.1, 3.x if you want to use loadable builtins
28
29        Motorola m68k machines running System V.3.  There is a file descriptor
30        leak caused by using the bash malloc because closedir(3) needs to read
31        freed memory to find the file descriptor to close
32
332.  Configure using shlicc2 on BSD/OS 2.1 and BSD/OS 3.x to use loadable
34    builtins
35
363.  Bash cannot be built in a directory separate from the source directory
37    using configure --srcdir=... unless the version of `make' you're using
38    does $VPATH handling right.  The script support/mkclone can be used to
39    create a `build tree' using symlinks to get around this.
40
414.  I've had reports that username completion (as well as tilde expansion
42    and \u prompt expansion) does not work on IRIX 5.3 when linking with
43    -lnsl.  This is only a problem when you're running NIS, since
44    apparently -lnsl supports only /etc/passwd and not the NIS functions
45    for retrieving usernames and passwords.  Editing the Makefile after
46    configure runs and removing the `-lnsl' from the assignment to `LIBS'
47    fixes the problem.
48
495.  There is a problem with the `makewhatis' script in older (pre-7.0)
50    versions of Red Hat Linux.  Running `makewhatis' with bash-2.0 or
51    later versions results in error messages like this:
52
53    /usr/sbin/makewhatis: cd: manpath: No such file or directory
54    /usr/sbin/makewhatis: manpath/whatis: No such file or directory
55    chmod: manpath/whatis: No such file or directory
56    /usr/sbin/makewhatis: cd: catpath: No such file or directory
57    /usr/sbin/makewhatis: catpath/whatis: No such file or directory
58    chmod: catpath/whatis: No such file or directory
59
60    The problem is with `makewhatis'.  Red Hat (and possibly other
61    Linux distributors) uses a construct like this in the code:
62
63        eval path=$"$pages"path
64
65    to do indirect variable expansion.  This `happened to work' in
66    bash-1.14 and previous versions, but that was more an accident
67    of implementation than anything else -- it was never supported
68    and certainly is not portable.
69
70    Bash-2.0 has a new feature that gives a new meaning to $"...".
71    This is explained more completely in item 1 in the COMPAT file.
72
73    The three lines in the `makewhatis' script that need to be changed
74    look like this:
75
76             eval $topath=$"$topath":$name
77    [...]
78       eval path=$"$pages"path
79    [...]
80    eval path=$"$pages"path
81
82    The portable way to write this code is
83
84             eval $topath="\$$topath":$name
85       eval path="\$$pages"path
86    eval path="\$$pages"path
87
88    You could also experiment with another new bash feature: ${!var}.
89    This does indirect variable expansion, making the use of eval
90    unnecessary.
91
926.  There is a problem with syslogd on many Linux distributions (Red Hat
93    and Slackware are two that I have received reports about).  syslogd
94    sends a SIGINT to its parent process, which is waiting for the daemon
95    to finish its initialization.  The parent process then dies due to
96    the SIGINT, and bash reports it, causing unexpected console output
97    while the system is booting that looks something like
98
99        starting daemons: syslogd/etc/rc.d/rc.M: line 29: 38 Interrupt ${NET}/syslogd
100
101    Bash-2.0 reports events such as processes dying in scripts due to
102    signals when the standard output is a tty.  Bash-1.14.x and previous
103    versions did not report such events.
104
105    This should probably be reported as a bug to whatever Linux distributor
106    people see the problem on.  In my opinion, syslogd should be changed to
107    use some other method of communication, or the wrapper function (which
108    appeared to be `daemon' when I looked at it some time ago) or script
109    (which appeared to be `syslog') should catch SIGINT, since it's an
110    expected event, and exit cleanly.
111
1127.  Several people have reported that `dip' (a program for SLIP/PPP
113    on Linux) does not work with bash-2.0 installed as /bin/sh.
114
115    I don't run any Linux boxes myself, and do not have the dip
116    code handy to look at, but the `problem' with bash-2.0, as
117    it has been related to me, is that bash requires the `-p'
118    option to be supplied at invocation if it is to run setuid
119    or setgid.
120
121    This means, among other things, that setuid or setgid programs
122    which call system(3) (a horrendously bad practice in any case)
123    relinquish their setuid/setgid status in the child that's forked
124    to execute /bin/sh.
125
126    The following is an *unofficial* patch to bash-2.0 that causes it
127    to not require `-p' to run setuid or setgid if invoked as `sh'.
128    It has been reported to work on Linux.  It will make your system
129    vulnerable to bogus system(3) calls in setuid executables.
130
131--- ../bash-2.0.orig/shell.c    Wed Dec 18 14:16:30 1996
132+++ shell.c     Fri Mar  7 13:12:03 1997
133@@ -347,7 +347,7 @@
134   if (posixly_correct)
135     posix_initialize (posixly_correct);
136
137-  if (running_setuid && privileged_mode == 0)
138+  if (running_setuid && privileged_mode == 0 && act_like_sh == 0)
139     disable_priv_mode ();
140
141   /* Need to get the argument to a -c option processed in the
142
1438.  Some people have asked about binding all of the keys in a PC-keyboard-
144    style numeric keypad to readline functions.  Here's something I
145    received from the gnu-win32 list that may help.  Insert the following
146    lines into ~/.inputrc:
147
148# home key
149"\e[1~":beginning-of-line
150# insert key
151"\e[2~":kill-whole-line
152# del key
153"\e[3~":delete-char
154# end key
155"\e[4~":end-of-line
156# pgup key
157"\e[5~":history-search-forward
158# pgdn key
159"\e[6~":history-search-backward
160
1619.  Hints for building under Minix 2.0 (Contributed by Terry R. McConnell,
162    <tmc@barnyard.syr.edu>)
163
164   The version of /bin/sh distributed with Minix is not up to the job of
165   running the configure script. The easiest solution is to swap /bin/sh
166   with /usr/bin/ash. Then use chmem(1) to increase the memory allocated
167   to /bin/sh. The following settings are known to work:
168
169   text         data     bss   stack  memory
170   63552  9440          3304   65536  141832  /bin/sh
171
172   If you have problems with make or yacc it may be worthwhile first to
173   install the GNU versions of these utilities before attempting to build
174   bash. (As of this writing, all of these utilities are available for the
175   i386 as pre-built binaries via anonymous ftp at math.syr.edu in the
176   pub/mcconnell/minix directory. Note that the GNU version of yacc is called
177   bison.)
178
179   Unless you want to see lots of warnings about old-style declarations,
180   do LOCAL_CFLAGS=-wo; export LOCAL_CFLAGS before running configure.
181   (These warnings are harmless, but annoying.)
182
183   configure will insist that you supply a host type. For example, do
184   ./configure --host=i386-pc-minix.
185
186   Minix does not support the system calls required for a proper
187   implementation of ulimit().  The `ulimit' builtin will not be available.
188
189   Configure will fail to notice that many things like uid_t are indeed
190   typedef'd in <sys/types.h>, because it uses egrep for this purpose
191   and minix has no egrep. You could try making a link /usr/bin/egrep -->
192   /usr/bin/grep. Better is to install the GNU version of grep in
193   /usr/local/bin and make the link /usr/local/bin/egrep -->/usr/local/bin/grep.
194   (These must be hard links, of course, since Minix does not support
195   symbolic links.)
196
197   You will see many warnings of the form:
198   warning: unknown s_type: 98
199   I have no idea what this means, but it doesn't seem to matter.
200
20110. If you do not have /usr/ccs/bin in your PATH when building on SunOS 5.x
202    (Solaris 2), the configure script will be unable to find `ar' and
203    `ranlib' (of course, ranlib is unnecessary).  Make sure your $PATH
204    includes /usr/ccs/bin on SunOS 5.x.  This generally manifests itself
205    with libraries not being built and make reporting errors like
206    `cr: not found' when library construction is attempted.
207
20811. Building a statically-linked bash on Solaris 2.5.x, 2.6, 7, or 8 is
209    complicated.
210
211    It's not possible to build a completely statically-linked binary, since
212    part of the C library depends on dynamic linking.  The following recipe
213    assumes that you're using gcc and the Solaris ld (/usr/ccs/bin/ld) on
214    Solaris 2.5.x or 2.6:
215
216        configure --enable-static-link
217        make STATIC_LD= LOCAL_LIBS='-Wl,-B,dynamic -ldl -Wl,-B,static'
218
219    This should result in a bash binary that depends only on libdl.so:
220
221        thor(2)$ ldd bash
222                libdl.so.1 =>    /usr/lib/libdl.so.1
223
224    If you're using the Sun C Compiler (Sun WorkShop C Compiler version
225    4.2 was what I used), you should be able to get away with using
226
227        configure --enable-static-link
228        make STATIC_LD=  LOCAL_LIBS='-B dynamic -ldl -B static'
229
230    If you want to completely remove any dependence on /usr, perhaps
231    to put a copy of bash in /sbin and have it available when /usr is
232    not mounted, force the build process to use the shared dl.so library
233    in /etc/lib.
234
235    For gcc, this would be something like
236
237        configure --enable-static-link
238        make STATIC_LD= LOCAL_LIBS='-Wl,-B,dynamic -Wl,-R/etc/lib -ldl -Wl,-B,static'
239
240    For Sun's WS4.2 cc
241
242        configure --enable-static-link
243        make STATIC_LD=  LOCAL_LIBS='-B dynamic -R/etc/lib -ldl -B static'
244
245    seems to work, at least on Solaris 2.5.1:
246
247        thor(2)$ ldd bash
248                libdl.so.1 =>    /etc/lib/libdl.so.1
249
250    On Solaris 7 (Solaris 8, using the version of gcc on the free software
251    CD-ROM), the following recipe appears to work for gcc:
252
253        configure --enable-static-link
254        make STATIC_LD='-Wl,-Bstatic' LOCAL_LIBS='-Wl,-Bdynamic -Wl,-R/etc/lib -ldl -Wl,-Bstatic'
255
256        thor.ins.cwru.edu(2)$ ldd bash
257                libdl.so.1 =>    /etc/lib/libdl.so.1
258
259    Make the analogous changes if you are running Sun's C Compiler.
260
261    I have received word that adding -L/etc/lib (or the equivalent
262    -Wl,-L/etc/lib) might also be necessary, in addition to the -R/etc/lib.
263
26412. Configuring bash to build it in a cross environment.  Currently only
265    two native versions can be compiled this way, cygwin32 and x86 BeOS.
266    For BeOS, you would configure it like this:
267
268        export RANLIB=i586-beos-ranlib
269        export AR=i586-beos-ar
270        export CC=i586-beos-gcc
271        configure i586-beos
272
273    Similarly for cygwin32.
274
27513. Bash-2.05 has reverted to the bash-2.03 behavior of honoring the current
276    locale setting when processing ranges within pattern matching bracket
277    expressions ([A-Z]).  This is what POSIX.2 and SUSv2 specify.
278
279    The behavior of the matcher in bash-2.05 depends on the current LC_COLLATE
280    setting.  Setting this variable to `C' or `POSIX' will result in the
281    traditional behavior ([A-Z] matches all uppercase ASCII characters).
282    Many other locales, including the en_US locale (the default on many US
283    versions of Linux) collate the upper and lower case letters like this:
284
285        AaBb...Zz
286
287    which means that [A-Z] matches every letter except `z'.
288
289    The portable way to specify upper case letters is [:upper:] instead of
290    A-Z; lower case may be specified as [:lower:] instead of a-z.
291
292    Look at the manual pages for setlocale(3), strcoll(3), and, if it is
293    present, locale(1).  If you have locale(1), you can use it to find
294    your current locale information even if you do not have any of the
295    LC_ variables set.
296
297    My advice is to put
298
299        export LC_COLLATE=C
300
301    into /etc/profile and inspect any shell scripts run from cron for
302    constructs like [A-Z].  This will prevent things like
303
304        rm [A-Z]*
305
306    from removing every file in the current directory except those beginning
307    with `z' and still allow individual users to change the collation order.
308    Users may put the above command into their own profiles as well, of course.
309
31014. Building on Interix (nee OpenNT), which Microsoft bought from Softway
311    Systems and has seemingly abandoned (thanks to Kevin Moore for this item).
312
313        1.  cp cross-build/opennt.cache config.cache
314
315        2.  If desired, edit pathnames.h to set the values of SYS_PROFILE and
316            DEFAULT_HOSTS_FILE appropriately.
317
318        3.  export CONFIG_SHELL=$INTERIX_ROOT/bin/sh
319
320        4.  ./configure --prefix=$INTERIX_ROOT/usr/local (or wherever you
321            want it).
322
323        5. make; make install; enjoy
324
32515.  Configure with `CC=xlc' if you don't have gcc on AIX 4.2 and later
326     versions.  `xlc' running in `cc' mode has trouble compiling error.c.
Note: See TracBrowser for help on using the repository browser.