1 Platform-Specific Configuration and Operation Notes
2 ===================================================
4 1. configure --without-gnu-malloc on:
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)
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
15 linux (optional, but don't do it if you're using Doug Lea's malloc)
18 other OSF/1 machines (KSR/1, HP, IBM AIX/ESA)
20 sparc SVR4, SVR4.2 (ICL reference port)
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)
27 BSD/OS 2.1, 3.x if you want to use loadable builtins
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
33 If you are using GNU libc, especially on a linux system
35 (Configuring --without-gnu-malloc will still result in lib/malloc/libmalloc.a
36 being built and linked against, but there is only a stub file in the archive.)
38 2. Configure using shlicc2 on BSD/OS 2.1 and BSD/OS 3.x to use loadable
41 3. Bash cannot be built in a directory separate from the source directory
42 using configure --srcdir=... unless the version of `make' you're using
43 does $VPATH handling right. The script support/mkclone can be used to
44 create a `build tree' using symlinks to get around this.
46 4. I've had reports that username completion (as well as tilde expansion
47 and \u prompt expansion) does not work on IRIX 5.3 when linking with
48 -lnsl. This is only a problem when you're running NIS, since
49 apparently -lnsl supports only /etc/passwd and not the NIS functions
50 for retrieving usernames and passwords. Editing the Makefile after
51 configure runs and removing the `-lnsl' from the assignment to `LIBS'
54 5. There is a problem with the `makewhatis' script in older (pre-7.0)
55 versions of Red Hat Linux. Running `makewhatis' with bash-2.0 or
56 later versions results in error messages like this:
58 /usr/sbin/makewhatis: cd: manpath: No such file or directory
59 /usr/sbin/makewhatis: manpath/whatis: No such file or directory
60 chmod: manpath/whatis: No such file or directory
61 /usr/sbin/makewhatis: cd: catpath: No such file or directory
62 /usr/sbin/makewhatis: catpath/whatis: No such file or directory
63 chmod: catpath/whatis: No such file or directory
65 The problem is with `makewhatis'. Red Hat (and possibly other
66 Linux distributors) uses a construct like this in the code:
68 eval path=$"$pages"path
70 to do indirect variable expansion. This `happened to work' in
71 bash-1.14 and previous versions, but that was more an accident
72 of implementation than anything else -- it was never supported
73 and certainly is not portable.
75 Bash-2.0 has a new feature that gives a new meaning to $"...".
76 This is explained more completely in item 1 in the COMPAT file.
78 The three lines in the `makewhatis' script that need to be changed
81 eval $topath=$"$topath":$name
83 eval path=$"$pages"path
85 eval path=$"$pages"path
87 The portable way to write this code is
89 eval $topath="\$$topath":$name
90 eval path="\$$pages"path
91 eval path="\$$pages"path
93 You could also experiment with another new bash feature: ${!var}.
94 This does indirect variable expansion, making the use of eval
97 6. There is a problem with syslogd on many Linux distributions (Red Hat
98 and Slackware are two that I have received reports about). syslogd
99 sends a SIGINT to its parent process, which is waiting for the daemon
100 to finish its initialization. The parent process then dies due to
101 the SIGINT, and bash reports it, causing unexpected console output
102 while the system is booting that looks something like
104 starting daemons: syslogd/etc/rc.d/rc.M: line 29: 38 Interrupt ${NET}/syslogd
106 Bash-2.0 reports events such as processes dying in scripts due to
107 signals when the standard output is a tty. Bash-1.14.x and previous
108 versions did not report such events.
110 This should probably be reported as a bug to whatever Linux distributor
111 people see the problem on. In my opinion, syslogd should be changed to
112 use some other method of communication, or the wrapper function (which
113 appeared to be `daemon' when I looked at it some time ago) or script
114 (which appeared to be `syslog') should catch SIGINT, since it's an
115 expected event, and exit cleanly.
117 7. Several people have reported that `dip' (a program for SLIP/PPP
118 on Linux) does not work with bash-2.0 installed as /bin/sh.
120 I don't run any Linux boxes myself, and do not have the dip
121 code handy to look at, but the `problem' with bash-2.0, as
122 it has been related to me, is that bash requires the `-p'
123 option to be supplied at invocation if it is to run setuid
126 This means, among other things, that setuid or setgid programs
127 which call system(3) (a horrendously bad practice in any case)
128 relinquish their setuid/setgid status in the child that's forked
131 The following is an *unofficial* patch to bash-2.0 that causes it
132 to not require `-p' to run setuid or setgid if invoked as `sh'.
133 It has been reported to work on Linux. It will make your system
134 vulnerable to bogus system(3) calls in setuid executables.
136 --- ../bash-2.0.orig/shell.c Wed Dec 18 14:16:30 1996
137 +++ shell.c Fri Mar 7 13:12:03 1997
140 posix_initialize (posixly_correct);
142 - if (running_setuid && privileged_mode == 0)
143 + if (running_setuid && privileged_mode == 0 && act_like_sh == 0)
144 disable_priv_mode ();
146 /* Need to get the argument to a -c option processed in the
148 8. Some people have asked about binding all of the keys in a PC-keyboard-
149 style numeric keypad to readline functions. Here's something I
150 received from the gnu-win32 list that may help. Insert the following
151 lines into ~/.inputrc:
154 "\e[1~":beginning-of-line
156 "\e[2~":kill-whole-line
162 "\e[5~":history-search-forward
164 "\e[6~":history-search-backward
166 9. Hints for building under Minix 2.0 (Contributed by Terry R. McConnell,
167 <tmc@barnyard.syr.edu>)
169 The version of /bin/sh distributed with Minix is not up to the job of
170 running the configure script. The easiest solution is to swap /bin/sh
171 with /usr/bin/ash. Then use chmem(1) to increase the memory allocated
172 to /bin/sh. The following settings are known to work:
174 text data bss stack memory
175 63552 9440 3304 65536 141832 /bin/sh
177 If you have problems with make or yacc it may be worthwhile first to
178 install the GNU versions of these utilities before attempting to build
179 bash. (As of this writing, all of these utilities are available for the
180 i386 as pre-built binaries via anonymous ftp at math.syr.edu in the
181 pub/mcconnell/minix directory. Note that the GNU version of yacc is called
184 Unless you want to see lots of warnings about old-style declarations,
185 do LOCAL_CFLAGS=-wo; export LOCAL_CFLAGS before running configure.
186 (These warnings are harmless, but annoying.)
188 configure will insist that you supply a host type. For example, do
189 ./configure --host=i386-pc-minix.
191 Minix does not support the system calls required for a proper
192 implementation of ulimit(). The `ulimit' builtin will not be available.
194 Configure will fail to notice that many things like uid_t are indeed
195 typedef'd in <sys/types.h>, because it uses egrep for this purpose
196 and minix has no egrep. You could try making a link /usr/bin/egrep -->
197 /usr/bin/grep. Better is to install the GNU version of grep in
198 /usr/local/bin and make the link /usr/local/bin/egrep -->/usr/local/bin/grep.
199 (These must be hard links, of course, since Minix does not support
202 You will see many warnings of the form:
203 warning: unknown s_type: 98
204 I have no idea what this means, but it doesn't seem to matter.
206 10. If you do not have /usr/ccs/bin in your PATH when building on SunOS 5.x
207 (Solaris 2), the configure script will be unable to find `ar' and
208 `ranlib' (of course, ranlib is unnecessary). Make sure your $PATH
209 includes /usr/ccs/bin on SunOS 5.x. This generally manifests itself
210 with libraries not being built and make reporting errors like
211 `cr: not found' when library construction is attempted.
213 11. Building a statically-linked bash on Solaris 2.5.x, 2.6, or 7 is
216 It's not possible to build a completely statically-linked binary, since
217 part of the C library depends on dynamic linking. The following recipe
218 assumes that you're using gcc and the Solaris ld (/usr/ccs/bin/ld) on
219 Solaris 2.5.x or 2.6:
221 configure --enable-static-link
222 make STATIC_LD= LOCAL_LIBS='-Wl,-B,dynamic -ldl -Wl,-B,static'
224 This should result in a bash binary that depends only on libdl.so:
227 libdl.so.1 => /usr/lib/libdl.so.1
229 If you're using the Sun C Compiler (Sun WorkShop C Compiler version
230 4.2 was what I used), you should be able to get away with using
232 configure --enable-static-link
233 make STATIC_LD= LOCAL_LIBS='-B dynamic -ldl -B static'
235 If you want to completely remove any dependence on /usr, perhaps
236 to put a copy of bash in /sbin and have it available when /usr is
237 not mounted, force the build process to use the shared ld.so library
240 For gcc, this would be something like
242 configure --enable-static-link
243 make STATIC_LD= LOCAL_LIBS='-Wl,-B,dynamic -Wl,-R/etc/lib -ldl -Wl,-B,static'
247 configure --enable-static-link
248 make STATIC_LD= LOCAL_LIBS='-B dynamic -R/etc/lib -ldl -B static'
250 seems to work, at least on Solaris 2.5.1:
253 libdl.so.1 => /etc/lib/libdl.so.1
255 On Solaris 7 (and presumably Solaris 8, though I do not run that), the
256 following recipe appears to work for gcc:
258 configure --enable-static-link
259 make STATIC_LD='-Wl,-Bstatic' LOCAL_LIBS='Wl,-Bdynamic -Wl,-R/etc/lib -ldl -Wl,-Bstatic'
261 thor.ins.cwru.edu(2)$ ldd bash
262 libdl.so.1 => /etc/lib/libdl.so.1
264 Make the analogous changes if you are running Sun's C Compiler.
266 12. Configuring bash to build it in a cross environment. Currently only
267 two native versions can be compiled this way, cygwin32 and x86 BeOS.
268 For BeOS, you would configure it like this:
270 export RANLIB=i586-beos-ranlib
271 export AR=i586-beos-ar
272 export CC=i586-beos-gcc
275 Similarly for cygwin32.
277 13. Bash-2.05 has reverted to the bash-2.03 behavior of honoring the current
278 locale setting when processing ranges within pattern matching bracket
279 expressions ([A-Z]). This is what POSIX.2 and SUSv2 specify.
281 The behavior of the matcher in bash-2.05 depends on the current LC_COLLATE
282 setting. Setting this variable to `C' or `POSIX' will result in the
283 traditional behavior ([A-Z] matches all uppercase ASCII characters).
284 Many other locales, including the en_US locale (the default on many US
285 versions of Linux) collate the upper and lower case letters like this:
289 which means that [A-Z] matches every letter except `z'.
291 The portable way to specify upper case letters is [:upper:] instead of
292 A-Z; lower case may be specified as [:lower:] instead of a-z.
294 Look at the manual pages for setlocale(3), strcoll(3), and, if it is
295 present, locale(1). If you have locale(1), you can use it to find
296 your current locale information even if you do not have any of the
303 into /etc/profile and inspect any shell scripts run from cron for
304 constructs like [A-Z]. This will prevent things like
308 from removing every file in the current directory except those beginning
309 with `z' and still allow individual users to change the collation order.
310 Users may put the above command into their own profiles as well, of course.