| VMS Installation instructions | |
| written by Richard Levitte | |
| <richard@levitte.org> | |
| Intro: | |
| ====== | |
| This file is divided in the following parts: | |
| Requirements - Mandatory reading. | |
| Checking the distribution - Mandatory reading. | |
| Compilation - Mandatory reading. | |
| Logical names - Mandatory reading. | |
| Test - Mandatory reading. | |
| Installation - Mandatory reading. | |
| Backward portability - Read if it's an issue. | |
| Possible bugs or quirks - A few warnings on things that | |
| may go wrong or may surprise you. | |
| TODO - Things that are to come. | |
| Requirements: | |
| ============= | |
| To build and install OpenSSL, you will need: | |
| * DEC C or some other ANSI C compiler. VAX C is *not* supported. | |
| [Note: OpenSSL has only been tested with DEC C. Compiling with | |
| a different ANSI C compiler may require some work] | |
| Checking the distribution: | |
| ========================== | |
| There have been reports of places where the distribution didn't quite get | |
| through, for example if you've copied the tree from a NFS-mounted Unix | |
| mount point. | |
| The easiest way to check if everything got through as it should is to check | |
| for one of the following files: | |
| [.CRYPTO]OPENSSLCONF.H_IN | |
| [.CRYPTO]OPENSSLCONF_H.IN | |
| They should never exist both at once, but one of them should (preferably | |
| the first variant). If you can't find any of those two, something went | |
| wrong. | |
| The best way to get a correct distribution is to download the gzipped tar | |
| file from ftp://ftp.openssl.org/source/, use GUNZIP to uncompress it and | |
| use VMSTAR to unpack the resulting tar file. | |
| GUNZIP is available in many places on the net. One of the distribution | |
| points is the WKU software archive, ftp://ftp.wku.edu/vms/fileserv/ . | |
| VMSTAR is also available in many places on the net. The recommended place | |
| to find information about it is http://www.free.lp.se/vmstar/ . | |
| Compilation: | |
| ============ | |
| I've used the very good command procedures written by Robert Byer | |
| <byer@mail.all-net.net>, and just slightly modified them, making | |
| them slightly more general and easier to maintain. | |
| You can actually compile in almost any directory separately. Look | |
| for a command procedure name xxx-LIB.COM (in the library directories) | |
| or MAKExxx.COM (in the program directories) and read the comments at | |
| the top to understand how to use them. However, if you want to | |
| compile all you can get, the simplest is to use MAKEVMS.COM in the top | |
| directory. The syntax is the following: | |
| @MAKEVMS <option> <rsaref-p> <debug-p> [<compiler>] | |
| <option> must be one of the following: | |
| ALL Just build "everything". | |
| CONFIG Just build the "[.CRYPTO]OPENSSLCONF.H" file. | |
| BUILDINF Just build the "[.INCLUDE]BUILDINF.H" file. | |
| SOFTLINKS Just copies some files, to simulate Unix soft links. | |
| BUILDALL Same as ALL, except CONFIG, BUILDINF and SOFTLINKS aren't done. | |
| RSAREF Just build the "[.xxx.EXE.RSAREF]LIBRSAGLUE.OLB" library. | |
| CRYPTO Just build the "[.xxx.EXE.CRYPTO]LIBCRYPTO.OLB" library. | |
| SSL Just build the "[.xxx.EXE.SSL]LIBSSL.OLB" library. | |
| SSL_TASK Just build the "[.xxx.EXE.SSL]SSL_TASK.EXE" program. | |
| TEST Just build the "[.xxx.EXE.TEST]" test programs for OpenSSL. | |
| APPS Just build the "[.xxx.EXE.APPS]" application programs for OpenSSL. | |
| <rsaref-p> must be one of the following: | |
| RSAREF compile using the RSAREF Library | |
| NORSAREF compile without using RSAREF | |
| Note 0: The RSAREF library IS NO LONGER NEEDED. The RSA patent | |
| expires September 20, 2000, and RSA Security chose to make | |
| the algorithm public domain two weeks before that. | |
| Note 1: If you still want to use RSAREF, the library is NOT INCLUDED | |
| and you have to download it. RSA Security doesn't carry it | |
| any more, but there are a number of places where you can find | |
| it. You have to get the ".tar-Z" file as the ".zip" file | |
| doesn't have the directory structure stored. You have to | |
| extract the file into the [.RSAREF] directory as that is where | |
| the scripts will look for the files. | |
| Note 2: I have never done this, so I've no idea if it works or not. | |
| <debug-p> must be one of the following: | |
| DEBUG compile with debugging info (will not optimize) | |
| NODEBUG compile without debugging info (will optimize) | |
| <compiler> must be one of the following: | |
| DECC For DEC C. | |
| GNUC For GNU C. | |
| You will find the crypto library in [.xxx.EXE.CRYPTO], called LIBCRYPTO.OLB, | |
| where xxx is VAX or AXP. You will find the SSL library in [.xxx.EXE.SSL], | |
| named LIBSSL.OLB, and you will find a bunch of useful programs in | |
| [.xxx.EXE.APPS]. However, these shouldn't be used right off unless it's | |
| just to test them. For production use, make sure you install first, see | |
| Installation below. | |
| Note 1: Some programs in this package require a TCP/IP library. | |
| Note 2: if you want to compile the crypto library only, please make sure | |
| you have at least done a @MAKEVMS CONFIG, a @MAKEVMS BUILDINF and | |
| a @MAKEVMS SOFTLINKS. A lot of things will break if you don't. | |
| Logical names: | |
| ============== | |
| There are a few things that can't currently be given through the command | |
| line. Instead, logical names are used. | |
| Currently, the logical names supported are: | |
| OPENSSL_NO_ASM with value YES, the assembler parts of OpenSSL will | |
| not be used. Instead, plain C implementations are | |
| used. This is good to try if something doesn't work. | |
| OPENSSL_NO_'alg' with value YES, the corresponding crypto algorithm | |
| will not be implemented. Supported algorithms to | |
| do this with are: RSA, DSA, DH, MD2, MD4, MD5, RIPEMD, | |
| SHA, DES, MDC2, CR2, RC4, RC5, IDEA, BF, CAST, HMAC, | |
| SSL2. So, for example, having the logical name | |
| OPENSSL_NO_RSA with the value YES means that the | |
| LIBCRYPTO.OLB library will not contain an RSA | |
| implementation. | |
| Test: | |
| ===== | |
| Testing is very simple, just do the following: | |
| @[.TEST]TESTS | |
| If a test fails, try with defining the logical name OPENSSL_NO_ASM (yes, | |
| it's an ugly hack!) and rebuild. Please send a bug report to | |
| <openssl-bugs@openssl.org>, including the output of "openssl version -a" | |
| and of the failed test. | |
| Installation: | |
| ============= | |
| Installation is easy, just do the following: | |
| @INSTALL <root> | |
| <root> is the directory in which everything will be installed, | |
| subdirectories, libraries, header files, programs and startup command | |
| procedures. | |
| N.B.: INSTALL.COM builds a new directory structure, different from | |
| the directory tree where you have now build OpenSSL. | |
| In the [.VMS] subdirectory of the installation, you will find the | |
| following command procedures: | |
| OPENSSL_STARTUP.COM | |
| defines all needed logical names. Takes one argument that | |
| tells it in what logical name table to insert the logical | |
| names. If you insert if it SYS$MANAGER:SYSTARTUP_VMS.COM, the | |
| call should look like this: | |
| @openssldev:[openssldir.VMS]OPENSSL_STARTUP "/SYSTEM" | |
| OPENSSL_UTILS.COM | |
| sets up the symbols to the applications. Should be called | |
| from for example SYS$MANAGER:SYLOGIN.COM | |
| The logical names that are set up are the following: | |
| SSLROOT a dotted concealed logical name pointing at the | |
| root directory. | |
| SSLCERTS Initially an empty directory, this is the default | |
| location for certificate files. | |
| SSLMISC Various scripts. | |
| SSLPRIVATE Initially an empty directory, this is the default | |
| location for private key files. | |
| SSLEXE Contains the openssl binary and a few other utility | |
| programs. | |
| SSLINCLUDE Contains the header files needed if you want to | |
| compile programs with libcrypto or libssl. | |
| SSLLIB Contains the OpenSSL library files (LIBCRYPTO.OLB | |
| and LIBSSL.OLB) themselves. | |
| OPENSSL Same as SSLINCLUDE. This is because the standard | |
| way to include OpenSSL header files from version | |
| 0.9.3 and on is: | |
| #include <openssl/header.h> | |
| For more info on this issue, see the INSTALL. file | |
| (the NOTE in section 4 of "Installation in Detail"). | |
| You don't need to "deleting old header files"!!! | |
| Backward portability: | |
| ===================== | |
| One great problem when you build a library is making sure it will work | |
| on as many versions of VMS as possible. Especially, code compiled on | |
| OpenVMS version 7.x and above tend to be unusable in version 6.x or | |
| lower, because some C library routines have changed names internally | |
| (the C programmer won't usually see it, because the old name is | |
| maintained through C macros). One obvious solution is to make sure | |
| you have a development machine with an old enough version of OpenVMS. | |
| However, if you are stuck with a bunch of Alphas running OpenVMS version | |
| 7.1, you seem to be out of luck. Fortunately, the DEC C header files | |
| are cluttered with conditionals that make some declarations and definitions | |
| dependent on the OpenVMS version or the C library version, *and* you | |
| can use those macros to simulate older OpenVMS or C library versions, | |
| by defining the macros _VMS_V6_SOURCE, __VMS_VER and __CTRL_VER with | |
| correct values. In the compilation scripts, I've provided the possibility | |
| for the user to influence the creation of such macros, through a bunch of | |
| symbols, all having names starting with USER_. Here's the list of them: | |
| USER_CCFLAGS - Used to give additional qualifiers to the | |
| compiler. It can't be used to define macros | |
| since the scripts will do such things as well. | |
| To do such things, use USER_CCDEFS. | |
| USER_CCDEFS - Used to define macros on the command line. The | |
| value of this symbol will be inserted inside a | |
| /DEFINE=(...). | |
| USER_CCDISABLEWARNINGS - Used to disable some warnings. The value is | |
| inserted inside a /DISABLE=WARNING=(...). | |
| So, to maintain backward compatibility with older VMS versions, do the | |
| following before you start compiling: | |
| $ USER_CCDEFS := _VMS_V6_SOURCE=1,__VMS_VER=60000000,__CRTL_VER=60000000 | |
| $ USER_CCDISABLEWARNINGS := PREOPTW | |
| The USER_CCDISABLEWARNINGS is there because otherwise, DEC C will complain | |
| that those macros have been changed. | |
| Note: Currently, this is only useful for library compilation. The | |
| programs will still be linked with the current version of the | |
| C library shareable image, and will thus complain if they are | |
| faced with an older version of the same C library shareable image. | |
| This will probably be fixed in a future revision of OpenSSL. | |
| Possible bugs or quirks: | |
| ======================== | |
| I'm not perfectly sure all the programs will use the SSLCERTS: | |
| directory by default, it may very well be that you have to give them | |
| extra arguments. Please experiment. | |
| TODO: | |
| ===== | |
| There are a few things that need to be worked out in the VMS version of | |
| OpenSSL, still: | |
| - Description files. ("Makefile's" :-)) | |
| - Script code to link an already compiled build tree. | |
| - A VMSINSTALlable version (way in the future, unless someone else hacks). | |
| - shareable images (DLL for you Windows folks). | |
| There may be other things that I have missed and that may be desirable. | |
| Please send mail to <openssl-users@openssl.org> or to me directly if you | |
| have any ideas. | |
| -- | |
| Richard Levitte <richard@levitte.org> | |
| 2000-02-27 |