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