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
```
|