aboutsummaryrefslogtreecommitdiff
path: root/INSTALL.md
diff options
context:
space:
mode:
authorThomas White <taw@physics.org>2021-06-21 10:10:38 +0200
committerThomas White <taw@physics.org>2021-06-21 10:10:38 +0200
commit20bfa2400d57ec87506b56d27ac86f5a7872fa43 (patch)
treefa7c7c9e6dbb33dca24213e5fdce5c4da84a5643 /INSTALL.md
parent75e2344a59f9b25354e51d754262476ff68b148e (diff)
Move installation documentation to INSTALL.md
Diffstat (limited to 'INSTALL.md')
-rw-r--r--INSTALL.md196
1 files changed, 196 insertions, 0 deletions
diff --git a/INSTALL.md b/INSTALL.md
new file mode 100644
index 00000000..25e07ba6
--- /dev/null
+++ b/INSTALL.md
@@ -0,0 +1,196 @@
+Installation instructions
+=========================
+
+CrystFEL installation is supported on GNU/Linux (including on Windows via
+[Windows Subsystem for Linux](https://docs.microsoft.com/en-us/windows/wsl/))
+and Mac OS X. A native installation on Windows is reported as possible, but is
+not supported.
+
+
+Supported installations at facilities
+-------------------------------------
+
+Before starting, check the [list of facility installations](https://www.desy.de/~twhite/crystfel/facilities.html)
+to find out if there's already a CrystFEL installation available at your site.
+
+If you want to use CrystFEL on a facility computer system, we recommend leaving
+the installation to facility IT staff. This means that a single installation
+can be shared and maintained. In addition, installing software from source, on
+a system where you don't have administrative access, can be quite difficult.
+Please feel free to tell the IT staff to get in touch with us for assistance,
+and also to make sure that the installation is documented on the list of
+supported facility installations.
+
+
+Dependencies
+------------
+
+Here are the mandatory dependencies - you cannot install CrystFEL without these:
+
+* Either [CMake](https://cmake.org/) 3.12 or later or [Meson](https://mesonbuild.com/) 0.50.0 or later (Meson is preferred)
+* [HDF5](https://www.hdfgroup.org/downloads/hdf5/) 1.8.0 or later (1.10.0 or later is required for many recent data formats which use the 'virtual data set' feature)
+* [GNU Scientific Library (GSL)](https://www.gnu.org/software/gsl/)
+* [Bison](https://www.gnu.org/software/bison/) 2.6 or later
+* [Flex](https://www.gnu.org/software/flex/)
+* [Zlib](https://www.zlib.net/) (1.2.3.5 or later preferred for better decompression speed)
+
+The following dependencies are "optional", in the sense that you can install
+CrystFEL without them. However, a CrystFEL installation without these will lack
+important features such as the graphical user interface. The following list is
+roughly in order of importance:
+
+* GTK3 (required for GUI)
+* Cairo (required for GUI)
+* Pango (required for GUI)
+* gdk-pixbuf (required for GUI)
+* [libccp4](ftp://ftp.ccp4.ac.uk/opensource/) (required for MTZ import/export)
+* [FFTW3](http://fftw.org/) (required for `asdf` indexing)
+* [FDIP](https://stash.desy.de/users/gevorkov/repos/fastdiffractionimageprocessing/) (for `peakFinder9` peak search algorithm)
+* NCurses (for integration diagnostics: `indexamajig --int-diag`)
+
+Apart from FDIP, all of the dependencies mentioned above (including libccp4 -
+yes, really!) should be available from your Linux distribution's package
+manager, or from [Homebrew](https://brew.sh/) on Mac OS. You should not need
+to download and install any of them separately from source, and we emphatically
+recommend against trying to do so.
+
+Processing data relies on indexing 'engines'. By default, you will have access
+to the [TakeTwo](https://journals.iucr.org/d/issues/2016/08/00/rr5128/) indexing
+algorithm. Provided that FFTW is available, you will also have access to the
+`asdf` algorithm. The more of the following are additionally installed, the
+better your experience will be:
+
+* [XGandalf](https://stash.desy.de/users/gevorkov/repos/xgandalf)
+* [PinkIndexer](https://stash.desy.de/users/gevorkov/repos/pinkindexer)
+* [Mosflm](https://www.mrc-lmb.cam.ac.uk/mosflm/mosflm/)
+* [DirAx](http://www.crystal.chem.uu.nl/distr/dirax/)
+* [XDS](http://xds.mpimf-heidelberg.mpg.de/)
+
+The indexing engines have their own installation instructions. XGandalf and
+PinkIndexer need to be installed before compiling CrystFEL, but the others can
+be installed at any time afterwards.
+
+Note that you only need the Mosflm binary, not the full `iMosflm` user interface.
+[Download it here](https://www.mrc-lmb.cam.ac.uk/mosflm/mosflm/ver730/pre-built/mosflm-linux-64-noX11.zip).
+
+You probably have CCP4 installed already, with its own copy of `mosflm`.
+However, you should keep your CCP4 installation separate from CrystFEL. The
+reason is that CCP4 comes with its own private copies of all its dependencies,
+and it becomes very difficult to make the build process for CrystFEL (or
+anything else) find the right versions of everything. Do not 'source' the CCP4
+setup file before trying to install CrystFEL, and make sure that the setup file
+is not automatically referenced in your shell setup files (`.bashrc` and
+others).
+
+Here are the commands to install all the basic dependencies (including the
+optional dependencies, but not the indexing engines) on Fedora 22 or later:
+```
+$ sudo dnf group install 'Development Tools'
+$ sudo dnf install hdf5-devel gsl-devel gtk3-devel cairo-devel pango-devel gdk-pixbuf2-devel meson cmake
+$ sudo dnf install fftw-devel ncurses-devel zeromq-devel msgpack-devel libccp4-devel
+```
+
+Here are the commands for Ubuntu and Debian:
+```
+$ sudo apt install build-essential
+$ sudo apt install libhdf5-dev libgsl-dev gtk3-devel cairo-devel pango-devel gdk-pixbuf2-devel meson cmake
+$ sudo apt install fftw-devel ncurses-devel libmsgpack-dev libzmq3-dev libccp4-dev
+```
+
+For Mac OS X, first install [Homebrew](https://brew.sh/), which will also cause
+[Xcode](https://developer.apple.com/xcode/) to be installed. Then:
+```
+$ brew install gsl hdf5 flex bison argp-standalone pkg-config doxygen gtk+3 cairo pango gdk-pixbuf fftw meson cmake
+$ export PATH="$(brew --prefix)/opt/bison/bin:$(brew --prefix)/opt/flex/bin:$PATH"
+$ export LDFLAGS="-L$(brew --prefix)/opt/bison/lib -L$(brew --prefix)/opt/flex/lib -L$(brew --prefix)/opt/argp-standalone/lib -largp $LDFLAGS"
+$ export CFLAGS="-I$(brew --prefix)/opt/flex/include -I$(brew --prefix)/opt/argp-standalone/include/ $CFLAGS"
+```
+The `export` commands ensure that the libraries installed via Homebrew can be
+found by CrystFEL's build system.
+
+
+Building and installing using Meson (recommended)
+-------------------------------------------------
+
+The actual compilation and installation step is very easy. Here are the
+commands:
+```
+$ meson build
+$ ninja -C build
+$ sudo ninja -C build install
+```
+
+
+Building and installing using CMake (deprecated)
+------------------------------------------------
+
+Compiling and installing using CMake is also simple:
+```
+$ mkdir build
+$ cd build
+$ cmake ..
+$ make
+$ sudo make install
+```
+
+
+Starting up
+-----------
+
+Run `indexamajig` for a basic check that the installation has succeeded. It
+should complain that `You need to provide the input filename (use -i)`.
+Alternatively, run `crystfel` to start the graphical user interface, provided
+that GTK3 was available during installation.
+
+Refer to the tutorial to see where to go from here!
+
+
+Notes about strange problems
+----------------------------
+The following problems are usually only encountered when installing dependencies
+manually, in non-standard locations and with multiple conflicting parallel
+installations of certain dependencies.
+
+* If you get an error about an incorrect number of parameters for `getpgrp`,
+ check that HDF5 was installed using CMake, not autotools (`./configure`).
+
+ The compiler flags generated by `h5cc -show` include all kinds of stuff that
+ shouldn't be there, such as `-D_BSD_SOURCE` which changes some function
+ prototypes (e.g. `getpgrp`). Meson uses this method as a fallback if
+ `pkg-config` fails to locate HDF5, breaking the CrystFEL build because
+ CrystFEL calls `getpgrp` and relies on a certain function signature.
+ Therefore, you need to make sure that HDF5 is discovered using `pkg-config`,
+ not `h5cc`. However, HDF5 only installs its `pkg-config` file when built
+ using CMake, not autotools. This problem does not occur when building
+ CrystFEL with CMake, because CMake extracts the include paths from the `h5cc`
+ output.
+
+* The following error means that CrystFEL was accidentally compiled with headers
+ from a new HDF5 version (1.10 or higher) but linked with an older one (1.8 or
+ lower):
+ ```
+ libcrystfel/libcrystfel.so.0.9.1: undefined reference to `H5P_CLS_LINK_CREATE_ID_g'
+ libcrystfel/libcrystfel.so.0.9.1: undefined reference to `H5Oget_info_by_idx1'
+ ```
+ This can happen if there are headers in the include path corresponding to an
+ HDF5 installation different to the one found during the configuration step of
+ CrystFEL's build process.
+
+ The solution is to make sure that HDF5 is found consistently: make sure that
+ the `pkg-config` file (`libhdf5.pc`) exists and is found correctly (set
+ `PKG_CONFIG_PATH`). If not using `pkg-config`, make sure that `PATH` is set
+ so that the location of the correct version of `h5cc` comes first.
+
+* If, after fixing the above problem, you still get an error about
+ `H5Oget_info_by_idx` (note: no `1` at the end), there could be some residual
+ `ccache` files causing problems. The (somewhat drastic) fix is simply to
+ `rm -rf ~/.ccache`.
+
+* If the build process complains about FFTW and `-fPIC`, make sure that your
+ installation of FFTW was configured with `./configure --enable-shared`:
+ ```
+ /usr/bin/ld: /usr/lib/libfftw3.a(mapflags.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC
+ /usr/lib/libfftw3.a: could not read symbols: Bad value
+ ```
+ This is because CrystFEL uses the FFTW shared library via `libcrystfel`, which
+ is itself a shared library.