X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=README.os390;h=8dd0483b2f2ce394f2f3d7f0b578469ddab519ba;hb=8fada4f68b93131e799325ac5c6f8a949351407d;hp=b5ddaffaccbc93dfda41f3660fb8292461d56675;hpb=9d116dd7c895b17badf4ad422ae44da0c4df7bc2;p=p5sagit%2Fp5-mst-13.2.git diff --git a/README.os390 b/README.os390 index b5ddaff..8dd0483 100644 --- a/README.os390 +++ b/README.os390 @@ -1,12 +1,29 @@ -This is a fully ported perl for OS/390 Release 3. It may work on -other versions, but that's the one we've tested it on. -If you've downloaded the binary distribution, it needs to be -installed below /usr/local. Source code distributions have an -automated `make install` step that means you do not need to extract -the source code below /usr/local (though that is where it will be -installed by default). You may need to worry about the networking -configuration files discussed in the last bullet below. +This document is written in pod format hence there are punctuation +characters in odd places. Do not worry, you've apparently got +the ASCII->EBCDIC translation worked out correctly. You can read +more about pod in pod/perlpod.pod or the short summary in the +INSTALL file. + +=head1 NAME + +README.os390 - building and installing Perl for OS/390. + +=head1 SYNOPSIS + +This document will help you Configure, build, test and install Perl +on OS/390 Unix System Services. + +=head1 DESCRIPTION + +This is a fully ported Perl for OS/390 Version 2 Release 3, 5, 6, 7, +8, and 9. It may work on other versions or releases, but those are +the ones we've tested it on. + +You may need to carry out some system configuration tasks before +running the Configure script for Perl. + +=head2 Unpacking Gunzip/gzip for OS/390 is discussed at: @@ -16,68 +33,329 @@ to extract an ASCII tar archive on OS/390, try this: pax -o to=IBM-1047,from=ISO8859-1 -r < latest.tar -GNU make for OS/390, which may be required for the build of perl, -is available from: +=head2 Setup and utilities + +Be sure that your yacc installation is in place including any necessary +parser template files. If you have not already done so then be sure to: + + cp /samples/yyparse.c /etc + +This may also be a good time to ensure that your /etc/protocol file +and either your /etc/resolv.conf or /etc/hosts files are in place. +The IBM document that described such USS system setup issues was +SC28-1890-07 "OS/390 UNIX System Services Planning", in particular +Chapter 6 on customizing the OE shell. + +GNU make for OS/390, which is required for the build of perl (as well as +building CPAN modules and extensions), is available from: http://www.mks.com/s390/gnu/index.htm -Once you've unpacked the distribution, run Configure (see INSTALL for -full discussion of the Configure options), and then run make, then -"make test" then "make install" (this last step may require UID=0 -privileges) +Some people have reported encountering "Out of memory!" errors while +trying to build Perl using GNU make binaries. If you encounter such +trouble then try to download the source code kit and build GNU make +from source to eliminate any such trouble. You might also find GNU make +(as well as Perl and Apache) in the red-piece/book "Open Source Software +for OS/390 UNIX", SG24-5944-00 from IBM. + +There is a syntax error in the /usr/include/sys/socket.h header file +that IBM supplies with USS V2R7, V2R8, and possibly V2R9. The problem with +the header file is that near the definition of the SO_REUSEPORT constant +there is a spurious extra '/' character outside of a comment like so: + + #define SO_REUSEPORT 0x0200 /* allow local address & port + reuse */ / + +You could edit that header yourself to remove that last '/', or you might +note that Language Environment (LE) APAR PQ39997 describes the problem +and PTF's UQ46272 and UQ46271 are the (R8 at least) fixes and apply them. +If left unattended that syntax error will turn up as an inability for Perl +to build its "Socket" extension. + +For successful testing you may need to turn on the sticky bit for your +world readable /tmp directory if you have not already done so (see man chmod). + +=head2 Configure + +Once you've unpacked the distribution, run "sh Configure" (see INSTALL +for a full discussion of the Configure options). There is a "hints" file +for os390 that specifies the correct values for most things. Some things +to watch out for include: + +=over 4 + +=item * + +A message of the form: + + (I see you are using the Korn shell. Some ksh's blow up on Configure, + mainly on older exotic systems. If yours does, try the Bourne shell instead.) + +is nothing to worry about at all. + +=item * + +Some of the parser default template files in /samples are needed in /etc. +In particular be sure that you at least copy /samples/yyparse.c to /etc +before running Perl's Configure. This step ensures successful extraction +of EBCDIC versions of parser files such as perly.c. This has to be done +before running Configure the first time. If you failed to do so then the +easiest way to re-Configure Perl is to delete your misconfigured build root +and re extract the source from the tar ball. If for some reason you do not +want to do that then, after ensuring that /etc/yyparse.c is properly in place +run the following commands from within the Perl build directory: + + rm -f y.tab.c y.tab.h + yacc -d perly.y + mv -f y.tab.c perly.c + chmod u+w perly.c + sed -e '/^#include "perl\.h"/a\ + \ + #define yydebug PL_yydebug\ + #define yynerrs PL_yynerrs\ + #define yyerrflag PL_yyerrflag\ + #define yychar PL_yychar\ + #define yyval PL_yyval\ + #define yylval PL_yylval' \ + -e '/YYSTYPE *yyval;/D' \ + -e '/YYSTYPE *yylval;/D' \ + -e '/int yychar,/,/yynerrs;/D' \ + -e 's/int yydebug = 0;/yydebug = 0;/' \ + -e 's/[^_]realloc(/PerlMem_realloc(/g' \ + -e 's/fprintf *( *stderr *,/PerlIO_printf(Perl_debug_log,/g' \ + -e 's/y\.tab/perly/g' perly.c >perly.tmp + mv -f perly.tmp perly.c + mv -f y.tab.h perly.h + cd x2p + rm -f y.tab.c y.tab.h + yacc a2p.y + mv -f y.tab.c a2p.c + chmod u+w a2p.c + sed -e 's/fprintf *( *stderr *,/PerlIO_printf(Perl_debug_log,/g' \ + -e 's/y\.tab/a2p/g' a2p.c >a2p.tmp + mv -f a2p.tmp a2p.c + mv -f y.tab.h a2p.h + cd .. + +There, easy huh? If you find typing all that in difficult then perhaps +you should reconsider the rm -rf of the perl build directory and +re extraction of the source tar ball. + +=item * + +This port doesn't support dynamic loading. Although OS/390 has support +for DLLs via dllload(), there are some differences that cause problems +for Perl. (We need a volunteer to write a ext/DynaLoader/dl_dllload.xs +file). + +=item * + +A message of the form: + + shmat() found. + and it returns (void *). + *** WHOA THERE!!! *** + The recommended value for $d_shmatprototype on this machine was "define"! + Keep the recommended value? [y] + +is nothing to worry about at all. + +=item * + +Do not turn on the compiler optimization flag "-O". There is +a bug in either the optimizer or perl that causes perl to +not work correctly when the optimizer is on. + +=item * + +Some of the configuration files in /etc used by the +networking APIs are either missing or have the wrong +names. In particular, make sure that there's either +an /etc/resolv.conf or an /etc/hosts, so that +gethostbyname() works, and make sure that the file +/etc/proto has been renamed to /etc/protocol (NOT +/etc/protocols, as used by other Unix systems). + +=back + +=head2 Build, test, install + +Simply put: + + sh Configure + make + make test + +if everything looks ok (see the next section for test/IVP diagnosis) then: + + make install -There is a "hints" file for os390 that specifies the correct values -for most things. Some things to watch out for are +this last step may or may not require UID=0 privileges depending +on how you answered the questions that Configure asked and whether +or not you have write access to the directories you specified. - - this port doesn't support dynamic loading. Although - OS/390 has support for DLLs, there are some differences - that cause problems for perl. +=head2 build anomalies - - You may see a "WHOA THERE!!!" message for $d_shmatprototype - it is OK to keep the recommended "define". +"Out of memory!" messages during the build of Perl are most often fixed +by re building the GNU make utility for OS/390 from a source code kit. - - Don't turn on the compiler optimization flag "-O". There's - a bug in either the optimizer or perl that causes perl to - not work correctly when the optimizer is on. +Another memory limiting item to check is your MAXASSIZE parameter in your +'SYS1.PARMLIB(BPXPRMxx)' data set (note too that as of V2R8 address space +limits can be set on a per user ID basis in the USS segment of a RACF +profile). People have reported successful builds of Perl with MAXASSIZE +parameters as small as 503316480 (and it may be possible to build Perl +with a MAXASSIZE smaller than that). - - Some of the configuration files in /etc used by the - networking APIs are either missing or have the wrong - names. In particular, make sure that there's either - an /etc/resolv.conf or and /etc/hosts, so that - gethostbyname() works, and make sure that the file - /etc/proto has been renamed to /etc/protocol (NOT - /etc/protocols, as used by other Unix systems). +Within USS your /etc/profile or $HOME/.profile may limit your ulimit +settings. Check that the following command returns reasonable values: + + ulimit -a + +To conserve memory you should have your compiler modules loaded into the +Link Pack Area (LPA/ELPA) rather than in a link list or step lib. + +If the c89 compiler complains of syntax errors during the build of the +Socket extension then be sure to fix the syntax error in the system +header /usr/include/sys/socket.h. + +=head2 testing anomalies + +The `make test` step runs a Perl Verification Procedure, usually before +installation. You might encounter STDERR messages even during a successful +run of `make test`. Here is a guide to some of the more commonly seen +anomalies: + +=over 4 + +=item * + +A message of the form: + + comp/cpp.............ERROR CBC3191 ./.301989890.c:1 The character $ is not a + valid C source character. + FSUM3065 The COMPILE step ended with return code 12. + FSUM3017 Could not compile .301989890.c. Correct the errors and try again. + ok + +indicates that the t/comp/cpp.t test of Perl's -P command line switch has +passed but that the particular invocation of c89 -E in the cpp script does +not suppress the C compiler check of source code validity. + +=item * + +A message of the form: + + io/openpid...........CEE5210S The signal SIGHUP was received. + CEE5210S The signal SIGHUP was received. + CEE5210S The signal SIGHUP was received. + ok + +indicates that the t/io/openpid.t test of Perl has passed but done so +with extraneous messages on stderr from CEE. + +=item * + +A message of the form: + + lib/ftmp-security....File::Temp::_gettemp: Parent directory (/tmp/) is not safe + (sticky bit not set when world writable?) at lib/ftmp-security.t line 100 + File::Temp::_gettemp: Parent directory (/tmp/) is not safe (sticky bit not + set when world writable?) at lib/ftmp-security.t line 100 + ok + +indicates a problem with the permissions on your /tmp directory within the HFS. +To correct that problem issue the command: + + chmod a+t /tmp + +from an account with write access to the directory entry for /tmp. + +=back + +=head2 Usage Hints When using perl on OS/390 please keep in mind that the EBCDIC and ASCII -character sets are different. Perl builtin functions that may behave -differently under EBCDIC are mentioned in the perlport.pod document. +character sets are different. See perlebcdic.pod for more on such character +set issues. Perl builtin functions that may behave differently under +EBCDIC are also mentioned in the perlport.pod document. -OpenEdition (UNIX System Services) does not (yet) support the #! means -of script invokation. -See: +Open Edition (UNIX System Services) from V2R8 onward does support +#!/path/to/perl script invocation. There is a PTF available from +IBM for V2R7 that will allow shell/kernel support for #!. USS +releases prior to V2R7 did not support the #! means of script invocation. +If you are running V2R6 or earlier then see: head `whence perldoc` for an example of how to use the "eval exec" trick to ask the shell to -have perl run your scripts for you. +have Perl run your scripts on those older releases of Unix System Services. -perl-mvs mailing list: The Perl Institute (http://www.perl.org/) -maintains a mailing list of interest to all folks building and/or -using perl on EBCDIC platforms. To subscibe, send a message of: +=head2 Modules and Extensions + +Pure pure (that is non xs) modules may be installed via the usual: + + perl Makefile.PL + make + make test + make install + +You can also build xs based extensions to Perl for OS/390 but will need +to follow the instructions in ExtUtils::MakeMaker for building +statically linked perl binaries. In the simplest configurations building +a static perl + xs extension boils down to: + + perl Makefile.PL + make + make perl + make test + make install + make -f Makefile.aperl inst_perl MAP_TARGET=perl + +In most cases people have reported better results with GNU make rather +than the system's /bin/make program, whether for plain modules or for +xs based extensions. + +=head1 AUTHORS + +David Fiander and Peter Prymmer with thanks to Dennis Longnecker +and William Raffloer for valuable reports, LPAR and PTF feedback. +Thanks to Mike MacIsaac and Egon Terwedow for SG24-5944-00. + +=head1 SEE ALSO + +L, L, L, L. + + http://www.mks.com/s390/gnu/index.htm + + http://www.redbooks.ibm.com/abstracts/sg245944.html + + http://www.s390.ibm.com/products/oe/bpxa1ty1.html#opensrc + + http://www.s390.ibm.com/products/oe/portbk/bpxacenv.html + + http://www.xray.mpe.mpg.de/mailing-lists/perl-mvs/ + +=head2 Mailing list + +The Perl Institute (http://www.perl.org/) maintains a perl-mvs +mailing list of interest to all folks building and/or +using perl on all EBCDIC platforms (not just OS/390). +To subscribe, send a message of: subscribe perl-mvs -to majordomo@perl.org. +to majordomo@perl.org. There is a web archive of the mailing list at: + + http://www.xray.mpe.mpg.de/mailing-lists/perl-mvs/ + +=head1 HISTORY + +This document was originally written by David Fiander for the 5.005 +release of Perl. + +This document was podified for the 5.005_03 release of Perl 11 March 1999. + +Updated 12 November 2000 for the 5.7.1 release of Perl. -Regression tests: as the 5.005 kit was was being assembled -the following "failures" were known to appear on some machines -during `make test` (mostly due to ASCII vs. EBCDIC conflicts), -your results may differ: +=cut -comp/cpp..........FAILED at test 0 -op/pack...........FAILED at test 58 -op/stat...........Out of memory! -op/taint..........FAILED at test 73 -lib/errno.........FAILED at test 1 -lib/posix.........FAILED at test 19 -lib/searchdict....FAILED at test 1