Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Numbered Headings

System Preparation

Requirements

To build all of the Moonshot components, you need various packages installed. To install all of these, see below.

Get the required packages on macOS El Capitan

To get all of the requirements on El Capitan, you will need to install Xcode, the Xcode command-line extensions, and several GNU tools:

  1. Install Xcode from the Mac App Store.

  2. Open a Terminal, then install the Xcode Command Line Tools. You will be prompted with a dialog to install the Command Line Tools after a 130MB download.

    Code Block
    languagebash
    $ xcode-select --install
  3. Install the GNU tools that are required for Moonshot by following the instructions at How to install Autoconf, Automake and related tools on Mac OS X from source?

  4. Install GNU GetText:

    Code Block
    languagebash
    $ curl -O -L http://ftpmirror.gnu.org/gettext/gettext-latest.tar.gz
    $ tar -xzf gettext-latest.tar.gz
    $ cd gettext-*
    $ ./configure
    $ make && sudo install
  5. Install MacPorts by downloading the latest install package from MacPorts.org, then update it:

    Code Block
    languagebash
    $ sudo port -v selfupdate
  6. Install Makedepend from MacPorts:

    Code Block
    languagebash
    $ sudo port install makedepend
  7. Update CPAN and install JSON:

    Code Block
    languagebash
    $ sudo cpan install JSON

Download and build the required external dependencies:

Boost

  1. Build Boost:

    Code Block
    languagebash
    $ tar -zvf boost_1_64_0.tar.gz
    $ cd boost_1_64_0
    $ ./bootstrap.sh
    $ ./b2
  2. Note down the location at the end of the Boost build. You will need it later in this process.

OpenSSL

  1. Create a directory called openssl.
  2. Download the OpenSSL build tree from Apple's OpenSource site. Some scripts that Apple provides will be needed, but we will not build it.

    Code Block
    languagebash
    $ cd openssl && curl -OL https://opensource.apple.com/tarballs/OpenSSL098/OpenSSL098-59.60.1.tar.gz
  3. Download the latest OpenSSL build from the OpenSSL website. We will build this version.

    Code Block
    languagebash
    $ curl -OL https://www.openssl.org/source/old/1.0.2/openssl-1.0.2l.tar.gz
  4. Extract OpenSSL098-59.60.1.tar.gz, copy its 'bin' directory into the openssl directory, then delete the extracted source.
  5. Edit the extract_source.sh script in the bin directory:
    1. Comment out the IDEA removal and patch lines (lines 39-49).
    2. Add the following parameters to each of the three ./Configure lines: no-ssl2 enable-ec_nistp_64_gcc_128
    3. Change the --openssldir parameter to your appropriate directory. We recommend /usr/local/moonshot/bin
    4. Change the --prefix parameter from /usr to /usr/local/moonshot
    5. Comment out the line 'rm -f Makefile'
    6. Find the line 'rm -f x86_64.h i386.h', and insert the following below it: ln -s crypto/idea/idea.h include/openssl/idea.h
  6. From the openssl directory, run the following:

    Code Block
    languagebash
    openssl $ bin/extract_source.sh .
  7. In the src directory, edit the Makefile file:
    1. Add the -DNO_IDEA parameter to the CFLAG line
    2. Add the -DNO_IDEA parameter to the DEPFLAG line
  8. Run the following commands:

    Code Block
    languagebash
    openssl/src $ make depend
    openssl/src $ make
    openssl/src $ sudo make install_sw

Heimdal

Heimdal requires OpenSSL. Once OpenSSL has built successfully, build Heimdal.

  1. Download Heimdal:

    Code Block
    languagebash
    $ curl -OL https://github.com/heimdal/heimdal/releases/download/heimdal-7.3.0/heimdal-7.3.0.tar.gz
  2. Extract Heimdal:

    Code Block
    languagebash
    $ tar -xvf heimdal-7.3.0.tar.gz
     
  3. Build Heimdal:

    Code Block
    languagebash
    $ cd heimdal-7.3.0
    heimdal-7.3.0$ ./autogen.sh
    heimdal-7.3.0$ ./configure.sh --prefix=/usr/local/heimdal --with-openssl=/usr/local/moonshot
    heimdal-7.3.0$ make
    heimdal-7.3.0$ sudo make install

Xerces-C

  1. Download Xerces from the Apache project site:

    Code Block
    languagebash
    $ curl -OL http://www-us.apache.org/dist//xerces/c/3/sources/xerces-c-3.1.4.tar.gz
  2. Extract Xerces:

    Code Block
    languagebash
    $ tar -xzf xerces-c-3.1.4.tar.gz
  3. Build Xerces:

    Code Block
    languagebash
    $ cd xerces-c-3.1.4
    xerces-c-3.1.4$ LDFLAGS=" -Wl,-rpath,/usr/local/moonshot/lib " ./configure --prefix=/usr/local/moonshot --disable-static --enable-netaccessor-socket --enable-transcoder-macosunicodeconverter
    xerces-c-3.1.4$ make
    xerces-c-3.1.4$ sudo make install

XML-Security-C

  1. Download XML-Security from the Apache project site:

    Code Block
    languagebash
    $ curl -OL http://www-us.apache.org/dist/santuario/c-library/xml-security-c-1.7.3.tar.gz
  2. Extract XML-Security:

    Code Block
    languagebash
    $ tar -zxf xml-security-c-1.7.3.tar.gz
  3. Build XML-Security:

    Code Block
    languagebash
    $ cd xml-security-c-1.7.3
    xml-security-c-1.7.3$ LDFLAGS=" -Wl,-rpath,/usr/local/moonshot/lib " ./configure --with-openssl=/usr/local/moonshot --without-xalan \
    --prefix=/usr/local/moonshot --with-xerces=/usr/local/moonshot
    xml-security-c-1.7.3$ make
    xml-security-c-1.7.3$ sudo make install

LibConfuse

  1. Clone the latest Libconfuse repository:

    Code Block
    languagebash
    $ git clone --recursive https://github.com/martinh/libconfuse
  2. Build Libconfuse:

    Code Block
    languagebash
    $ cd libconfuse
    libconfuse$ ./autogen.sh
    libconfuse$ LDFLAGS=" -L/usr/local/moonshot/lib -Wl,-rpath,/usr/local/moonshot/lib " ./configure --prefix=/usr/local/moonshot
    libconfuse$ make
    libconfuse$ sudo make install

LibEvent

  1. Clone the latest Libevent repository:

    Code Block
    languagebash
    $ git clone --recursive https://github.com/libevent/libevent
  2. Build Libevent:

    Code Block
    languagebash
    $ cd libevent
    libevent$ ./autogen.sh
    libevent$ CFLAGS=" -I/usr/local/moonshot/include " LDFLAGS=" -L/usr/local/moonshot/lib -Wl,-rpath,/usr/local/moonshot/lib " ./configure \
    --prefix=/usr/local/moonshot
    libevent$ make
    libevent$ sudo make install

Checkout the Moonshot source

The Moonshot source code is all stored in a GIT repository. To fetch it, issue the following command.

Code Block
languagebash
$ git clone --recursive http://www.project-moonshot.org/git/moonshot.git

Build Moonshot

To build Moonshot, simply enter the moonshot directory of the git repo that you just checked out, and run the builder script. In the --prefix option, you can specify where the code will be installed to. Note that you will need to build as a user who has permission to install in the target directory, because the builder script installs during the build, instead of doing an install after the build has finished (so you can't build first as an underprivileged user and install as a superuser as you would normally do).

Code Block
languagebash
$ cd moonshot && ./builder --prefix=/opt/moonshot

You probably know this, but if you stuck your installation into an unusual location, you may need to do the following (as root) - where, here, /opt/moonshot is the install path you used for the prefix option above:

Code Block
# echo /opt/moonshot/lib >/etc/ld.so.conf.d/moonshot.conf
# ldconfig

(TODO: document /etc/init.d/ stuff?)