| Installing OpenSSL on Unix | 
 | -------------------------- | 
 |  | 
 | [For instructions for compiling OpenSSL on Windows systems, see | 
 | INSTALL.W32]. | 
 |  | 
 | To install OpenSSL, you will need: | 
 |  | 
 |   * Perl | 
 |   * C compiler | 
 |   * A supported operating system | 
 |  | 
 | Quick Start | 
 | ----------- | 
 |  | 
 | If you want to just get on with it, do: | 
 |  | 
 |   sh config                      [if this fails, go to step 1b below] | 
 |   make -f Makefile.ssl links | 
 |   make | 
 |   make rehash | 
 |   make test | 
 |   make install | 
 |  | 
 | This will build and install OpenSSL in the default location, which is | 
 | /usr/local/ssl. If you want to install it anywhere else, do this | 
 | after running ./Configure <system>: | 
 |  | 
 |   perl util/ssldir.pl /new/install/path | 
 |  | 
 | If anything goes wrong, follow the detailed instructions below. If | 
 | your operating system is not (yet) supported by OpenSSL, see the | 
 | section on porting to a new system. | 
 |  | 
 | Installation in Detail | 
 | ---------------------- | 
 |  | 
 |  1a. Configure OpenSSL for your operation system automatically | 
 |  | 
 |      Run | 
 |  | 
 |        sh config | 
 |  | 
 |      This guesses at your operating system (and compiler, if | 
 |      necessary) and configures OpenSSL based on this guess. Check the | 
 |      first line of output to see if it guessed correctly. If it did | 
 |      not get it correct or you want to use a different compiler then | 
 |      go to step 1b. Otherwise go to step 2. | 
 |  | 
 |  1b. Configure OpenSSL for your operating system manually | 
 |  | 
 |      OpenSSL knows about a range of different operating system, hardware | 
 |      and compiler combinations. To see the ones it knows about, run | 
 |  | 
 |        ./Configure | 
 |  | 
 |      Pick a suitable name from the list that matches your system. For | 
 |      most operating systems there is a choice between using "cc" or | 
 |      "gcc". | 
 |  | 
 |      When you have identified your system (and if necessary compiler) | 
 |      use this name as the argument to ./Configure. For example, a | 
 |      "linux-elf" user would run: | 
 |  | 
 |        ./Configure linux-elf | 
 |  | 
 |      If your system is not available, you will have to edit the Configure | 
 |      program and add the correct configuration for your system. | 
 |  | 
 |      Configure configures various files by converting an existing .org | 
 |      file into the real file. If you edit any files, remember that if | 
 |      a corresponding .org file exists them the next time you run | 
 |      ./Configure your changes will be lost when the file gets | 
 |      re-created from the .org file. The files that are created from | 
 |      .org files are: | 
 |  | 
 |        Makefile.ssl | 
 |        crypto/des/des.h | 
 |        crypto/des/des_locl.h | 
 |        crypto/md2/md2.h | 
 |        crypto/rc4/rc4.h | 
 |        crypto/rc4/rc4_enc.c | 
 |        crypto/rc2/rc2.h | 
 |        crypto/bf/bf_locl.h | 
 |        crypto/idea/idea.h | 
 |        crypto/bn/bn.h | 
 |  | 
 |   2. Set the install directory | 
 |  | 
 |      If the install directory will be the default of /usr/local/ssl, | 
 |      skip to the next stage. Otherwise, run | 
 |  | 
 |        perl util/ssldir.pl /new/install/path | 
 |  | 
 |      This configures the installation location into the "install" | 
 |      target of the top-level Makefile, and also updates some defines | 
 |      in an include file so that the default certificate directory is | 
 |      under the proper installation directory. It also updates a few | 
 |      utility files used in the build process. | 
 |  | 
 |   3. Build OpenSSL | 
 |  | 
 |      Now run | 
 |  | 
 |        make | 
 |  | 
 |      This will build the OpenSSL libraries (libcrypto.a and libssl.a) | 
 |      and the OpenSSL binary ("openssl"). The libraries will be built | 
 |      in the top-level directory, and the binary will be in the "apps" | 
 |      directory. | 
 |  | 
 |   4. After a successful build, the libraries should be tested. Run | 
 |  | 
 |        make rehash | 
 |        make test | 
 |  | 
 |      (The first line makes the test certificates in the "certs" | 
 |      directory accessable via an hash name, which is required for some | 
 |      of the tests). | 
 |  | 
 |   5. If everything tests ok, install OpenSSL with | 
 |  | 
 |        make install | 
 |  | 
 |      This will create the installation directory (if it does not | 
 |      exist) and then create the following subdirectories: | 
 |  | 
 |        bin            Contains the openssl binary and a few other utility | 
 |                       programs. It also contains symbolic links so | 
 |                       that openssl commands can be accessed directly | 
 |                       (e.g. so that "s_client" can be used instead of | 
 |                       "openssl s_client"). | 
 |        certs          Initially empty, this is the default location | 
 |                       for certificate files. | 
 |        include        Contains the header files needed if you want to | 
 |                       compile programs with libcrypto or libssl. | 
 |        lib            Contains the library files themselves and the | 
 |                       OpenSSL configuration file "openssl.cnf". | 
 |        private        Initially empty, this is the default location | 
 |                       for private key files. | 
 |  | 
 | ---------------------------------------------------------------------- | 
 |  | 
 | Additional Compilation Notes | 
 | ---------------------------- | 
 |  | 
 | These notes come from SSLeay 0.9.1 and cover some more advanced | 
 | facilities (such as building a single makefile for use on Windows | 
 | systems). | 
 |  | 
 |  | 
 | # Installation of SSLeay. | 
 | # It depends on perl for a few bits but those steps can be skipped and | 
 | # the top level makefile edited by hand | 
 |  | 
 | # When bringing the SSLeay distribution back from the evil intel world | 
 | # of Windows NT, do the following to make it nice again under unix :-) | 
 | # You don't normally need to run this. | 
 | sh util/fixNT.sh	# This only works for NT now - eay - 21-Jun-1996 | 
 |  | 
 | # If you have perl, and it is not in /usr/local/bin, you can run | 
 | perl util/perlpath.pl /new/path | 
 | # and this will fix the paths in all the scripts.  DO NOT put | 
 | # /new/path/perl, just /new/path. The build | 
 | # environment always run scripts as 'perl perlscript.pl' but some of the | 
 | # 'applications' are easier to usr with the path fixed. | 
 |  | 
 | # Edit crypto/cryptlib.h, tools/c_rehash, and Makefile.ssl | 
 | # to set the install locations if you don't like | 
 | # the default location of /usr/local/ssl | 
 | # Do this by running | 
 | perl util/ssldir.pl /new/ssl/home | 
 | # if you have perl, or by hand if not. | 
 |  | 
 | # If things have been stuffed up with the sym links, run | 
 | make -f Makefile.ssl links | 
 | # This will re-populate lib/include with symlinks and for each | 
 | # directory, link Makefile to Makefile.ssl | 
 |  | 
 | # Setup the machine dependent stuff for the top level makefile | 
 | # and some select .h files | 
 | # If you don't have perl, this will bomb, in which case just edit the | 
 | # top level Makefile.ssl | 
 | ./Configure 'system type' | 
 |  | 
 | # The 'Configure' command contains default configuration parameters | 
 | # for lots of machines.  Configure edits 5 lines in the top level Makefile | 
 | # It modifies the following values in the following files | 
 | Makefile.ssl		CC CFLAG EX_LIBS BN_MULW | 
 | crypto/des/des.h	DES_LONG | 
 | crypto/des/des_locl.h	DES_PTR | 
 | crypto/md2/md2.h	MD2_INT | 
 | crypto/rc4/rc4.h	RC4_INT | 
 | crypto/rc4/rc4_enc.c	RC4_INDEX | 
 | crypto/rc2/rc2.h	RC2_INT | 
 | crypto/bf/bf_locl.h	BF_INT | 
 | crypto/idea/idea.h	IDEA_INT | 
 | crypto/bn/bn.h		BN_LLONG (and defines one of SIXTY_FOUR_BIT, | 
 | 				  SIXTY_FOUR_BIT_LONG, THIRTY_TWO_BIT, | 
 | 				  SIXTEEN_BIT or EIGHT_BIT) | 
 | Please remember that all these files are actually copies of the file with | 
 | a .org extention.  So if you change crypto/des/des.h, the next time | 
 | you run Configure, it will be runover by a 'configured' version of | 
 | crypto/des/des.org.  So to make the changer the default, change the .org | 
 | files.  The reason these files have to be edited is because most of | 
 | these modifications change the size of fundamental data types. | 
 | While in theory this stuff is optional, it often makes a big | 
 | difference in performance and when using assember, it is importaint | 
 | for the 'Bignum bits' match those required by the assember code. | 
 | A warning for people using gcc with sparc cpu's.  Gcc needs the -mv8 | 
 | flag to use the hardware multiply instruction which was not present in | 
 | earlier versions of the sparc CPU.  I define it by default.  If you | 
 | have an old sparc, and it crashes, try rebuilding with this flag | 
 | removed.  I am leaving this flag on by default because it makes | 
 | things run 4 times faster :-) | 
 |  | 
 | # clean out all the old stuff | 
 | make clean | 
 |  | 
 | # Do a make depend only if you have the makedepend command installed | 
 | # This is not needed but it does make things nice when developing. | 
 | make depend | 
 |  | 
 | # make should build everything | 
 | make | 
 |  | 
 | # fix up the demo certificate hash directory if it has been stuffed up. | 
 | make rehash | 
 |  | 
 | # test everything | 
 | make test | 
 |  | 
 | # install the lot | 
 | make install | 
 |  | 
 | # It is worth noting that all the applications are built into the one | 
 | # program, ssleay, which is then has links from the other programs | 
 | # names to it. | 
 | # The applicatons can be built by themselves, just don't define the | 
 | # 'MONOLITH' flag.  So to build the 'enc' program stand alone, | 
 | gcc -O2 -Iinclude apps/enc.c apps/apps.c libcrypto.a | 
 |  | 
 | # Other useful make options are | 
 | make makefile.one | 
 | # which generate a 'makefile.one' file which will build the complete | 
 | # SSLeay distribution with temp. files in './tmp' and 'installable' files | 
 | # in './out' | 
 |  | 
 | # Have a look at running | 
 | perl util/mk1mf.pl help | 
 | # this can be used to generate a single makefile and is about the only | 
 | # way to generate makefiles for windows. | 
 |  | 
 | # There is actually a final way of building SSLeay. | 
 | gcc -O2 -c -Icrypto -Iinclude crypto/crypto.c | 
 | gcc -O2 -c -Issl -Iinclude ssl/ssl.c | 
 | # and you now have the 2 libraries as single object files :-). | 
 | # If you want to use the assember code for your particular platform | 
 | # (DEC alpha/x86 are the main ones, the other assember is just the | 
 | # output from gcc) you will need to link the assember with the above generated | 
 | # object file and also do the above compile as | 
 | gcc -O2 -DBN_ASM -c -Icrypto -Iinclude crypto/crypto.c | 
 |  | 
 | This last option is probably the best way to go when porting to another | 
 | platform or building shared libraries.  It is not good for development so | 
 | I don't normally use it. | 
 |  | 
 | To build shared libararies under unix, have a look in shlib, basically  | 
 | you are on your own, but it is quite easy and all you have to do | 
 | is compile 2 (or 3) files. | 
 |  | 
 | For mult-threading, have a read of doc/threads.doc.  Again it is quite | 
 | easy and normally only requires some extra callbacks to be defined | 
 | by the application. | 
 | The examples for solaris and windows NT/95 are in the mt directory. | 
 |  | 
 | have fun | 
 |  | 
 | eric 25-Jun-1997 | 
 |  | 
 | IRIX 5.x will build as a 32 bit system with mips1 assember. | 
 | IRIX 6.x will build as a 64 bit system with mips3 assember.  It conforms | 
 | to n32 standards. In theory you can compile the 64 bit assember under | 
 | IRIX 5.x but you will have to have the correct system software installed. |