summaryrefslogtreecommitdiff
path: root/INSTALL.md
blob: 909082a1537688b9478ef3f5841e8c537f3ea475 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# Installing and Building XMap

## Installing via Package Manager

XMap operates on GNU/Linux, macOS, and BSD.

**Installing with the most OS package managers is not integrated yet.**

| OS                                        |      |
| ----------------------------------------- | ---- |
| Fedora 19+ or EPEL 6+                     | `-`  |
| Debian 8+ or Ubuntu 14.04+                | `-`  |
| Gentoo                                    | `-`  |
| macOS (using [Homebrew](https://brew.sh)) | `-`  |
| Arch Linux                                | `-`  |

## Installing via Docker

```sh
docker pull liii/xmap:latest
```

## Building from Source

### Installing XMap Dependencies

XMap has the following dependencies:

- [CMake](http://www.cmake.org/) - Cross-platform, open-source build system
- [GMP](http://gmplib.org/) - Free library for arbitrary precision arithmetic
- [gengetopt](http://www.gnu.org/software/gengetopt/gengetopt.html) - Command line option parsing for C programs
- [libpcap](http://www.tcpdump.org/) - Famous user-level packet capture library
- [flex](http://flex.sourceforge.net/) and [byacc](http://invisible-island.net/byacc/) - Output filter lexer and parser generator
- [json-c](https://github.com/json-c/json-c/) - JSON implementation in C
- [libunistring](https://www.gnu.org/software/libunistring/) - Unicode string library for C
- [libdnet](https://github.com/dugsong/libdnet) - (macOS Only) Gateway and route detection

In addition, the following optional packages enable optional XMap functionality:

- [hiredis](https://github.com/redis/hiredis) - RedisDB support in C

Install the required dependencies with the following commands.

* On Debian-based systems (including Ubuntu):
   ```sh
   sudo apt-get install build-essential cmake libgmp3-dev gengetopt libpcap-dev flex byacc libjson-c-dev pkg-config libunistring-dev
   ```

* On RHEL- and Fedora-based systems (including CentOS):
   ```sh
   sudo yum install cmake gmp-devel gengetopt libpcap-devel flex byacc json-c-devel libunistring-devel
   ```

* On macOS systems (using [Homebrew](http://brew.sh/)):
  ```sh
  brew install pkg-config cmake gmp gengetopt json-c byacc libdnet libunistring
  ```

### Building and Installing XMap

Once these prerequisites are installed, XMap can be compiled by running:
  ```sh
  cmake .
  make -j4
  ```

### Development Notes

- Enabling development turns on debug symbols, and turns off optimizations.
  Release builds should be built with `-DENABLE_DEVELOPMENT=OFF`.

- Enabling `log_trace` can have a major performance impact and should not be used
  except during early development. Release builds should be built with `-DENABLE_LOG_TRACE=OFF`.

- Redis support is not enabled by default. If you want to use XMap with Redis,
  you will first need to install hiredis. Then run cmake with `-DWITH_REDIS=ON`.
  Debian/Ubuntu has packaged hiredis as `libhiredis-dev`; Fedora and RHEL/CentOS
  have packaged it as `hiredis-devel`.

- Building packages for some systems like Fedora and RHEL requires a user-definable
  directory (buildroot) to put files. The way to respect this prefix is to run cmake
  with `-DRESPECT_INSTALL_PREFIX_CONFIG=ON`.

- Manpages (and their HTML representations) are generated from the `.ronn` source
  files in the repository, using the [ronn](https://github.com/rtomayko/ronn) tool.
  This does not happen automatically as part of the build process; to regenerate the
  man pages you'll need to run `make manpages`. This target assumes that `ronn` is
  in your PATH.

- Building with some versions of CMake may fail with `unable to find parser.h`.
  If this happens, try updating CMake. If it still fails, don't clone XMap into a
  path that contains the string `.com`, and try again.

- XMap may be installed to an alternative directory, with the `CMAKE_INSTALL_PREFIX`
  option. For example, to install it in `$HOME/opt` run
    ```sh
    cmake -DCMAKE_INSTALL_PREFIX=$HOME/opt .
    make -j4
    make install
    ```