1.5.1
by Matthias Klose
Import upstream version 4.3~rc1 |
1 |
Platform-Specific Configuration and Operation Notes
|
2 |
===================================================
|
|
3 |
||
4 |
1. 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; machines running Openstep |
|
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 |
Haiku OS |
|
24 |
||
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) |
|
27 |
||
28 |
BSD/OS 2.1, 3.x if you want to use loadable builtins |
|
29 |
||
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 |
||
34 |
2. Configure using shlicc2 on BSD/OS 2.1 and BSD/OS 3.x to use loadable
|
|
35 |
builtins |
|
36 |
||
37 |
3. Bash cannot be built in a directory separate from the source directory
|
|
38 |
using configure --srcdir=... unless the version of `make' you're using |
|
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 |
||
42 |
4. 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 |
||
50 |
5. 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: |
|
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 |
||
93 |
6. 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 |
||
113 |
7. 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 |
||
144 |
8. 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 |
||
162 |
9. 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. |
|
201 |
||
202 |
10. 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 |
|
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 |
||
209 |
11. Building a statically-linked bash on Solaris 2.5.x, 2.6, 7, or 8 is
|
|
210 |
complicated. |
|
211 |
||
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 |
|
214 |
assumes that you're using gcc and the Solaris ld (/usr/ccs/bin/ld) on |
|
215 |
Solaris 2.5.x or 2.6: |
|
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 |
|
233 |
not mounted, force the build process to use the shared dl.so library |
|
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 |
||
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: |
|
253 |
||
254 |
configure --enable-static-link |
|
255 |
make STATIC_LD='-Wl,-Bstatic' LOCAL_LIBS='-Wl,-Bdynamic -Wl,-R/etc/lib -ldl -Wl,-Bstatic' |
|
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 |
||
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 |
||
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 |
||
269 |
12. 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. |
|
279 |
||
280 |
13. 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 |
||
315 |
14. 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). |
|
327 |
||
328 |
5. make; make install; enjoy
|
|
329 |
||
330 |
15. 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.
|
|
332 |
||
333 |
16. 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. |
|
335 |
||
336 |
17. 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. |
|
339 |
||
340 |
18. 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 |
||
343 |
19. 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 |
||
348 |
20. 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. |