build: flowtop: Only build ioops with GeoIP support enabled
[netsniff-ng.git] / INSTALL
blob830f6a15c6982dedcb0be296054f98ac515e858f
1 Currently only operating systems running on Linux kernels with the option
2 CONFIG_PACKET_MMAP enabled. This feature can be found even back to the days of
3 2.4 kernels. Most operating systems ship pre-compiled kernels that have this
4 config option enabled and even the latest kernel versions got rid of this
5 option and have this functionality already built-in. However, we recommend a
6 kernel >= 2.6.31, because the TX_RING is officially integrated since then. In
7 any case, if you have the possibility, consider getting the latest kernel from
8 Linus' Git repository, tweak and compile it, and run this one!
10 A note for distribution package maintainers can be found at the end of the file.
12 What additional tools next to your build-chain are required?
14  - ccache (optional)
15  - gpg (optional)
17  - pkg-config:             all
18  - flex, bison:            bpfc, trafgen
20 What libraries are required?
22  - libncurses:             ifpps, flowtop
23  - libnacl or libsodium:   curvetun
24  - libnetfilter-conntrack: flowtop
25  - libpcap:                mausezahn, netsniff-ng (tcpdump-like filters)
26  - liburcu:                flowtop
27  - libnl3:                 netsniff-ng, trafgen
28  - libcli:                 mausezahn
29  - libnet:                 mausezahn
31 The following libraries can optionally be used to provide additional
32 functionality for certain tools:
34  - libGeoIP >=1.4.8:       astraceroute, flowtop, netsniff-ng
35  - libz:                   astraceroute, flowtop, netsniff-ng
37 What additional tools are recommended, but not mandatory after the build?
39  - cpp:                    trafgen
40  - ntpd:                   curvetun
41  - gnuplot:                ifpps
42  - setcap:                 all
44 It is common, that these libraries are shipped as distribution packages
45 for an easy installation. We try to keep this as minimal as possible.
47 One-liner installation for *all* dependencies on Debian:
49   $ sudo apt-get install ccache flex bison libnl-3-dev \
50   libnl-genl-3-dev libgeoip-dev libnetfilter-conntrack-dev \
51   libncurses5-dev liburcu-dev libnacl-dev libpcap-dev \
52   zlib1g-dev libcli-dev libnet1-dev
54 One-liner installation for *all* dependencies on Fedora:
56   $ sudo yum install ccache flex bison ccache libnl3-devel \
57   GeoIP-devel libnetfilter_conntrack-devel ncurses-devel \
58   userspace-rcu-devel nacl-devel libpcap-devel zlib-devel \
59   libcli-devel libnet-devel
61 After downloading the netsniff-ng toolkit, you should change to the
62 repository root directory:
64   $ cd netsniff-ng/
66 The installation (deinstallation) process is fairly simple:
68   $ ./configure
69   $ make
70   # make install
72   (# make uninstall)
74 In order to remove all build files from the source tree:
76   $ make clean
78 In any case "make help" will give you some pointers of what can be done.
79 To bring the source tree into a pristine state, there are two options.
80 The first one will remove all build and build config file, the latter will
81 also remove any manually added files:
83   $ make distclean
84   ($ make mrproper)
86 You can also build/install/uninstall only a particular tool, e.g.:
88   $ make trafgen
89   # make trafgen_install
91   (# make trafgen_uninstall)
93 If you want to build all tools, but {curvetun,mausezahn} (i.e. because you
94 don't need the tunneling software and the NaCl build process lasts quite long):
96   $ make allbutcurvetun               (allbutmausezahn)
97   # make install_allbutcurvetun       (install_allbutmausezahn)
99   (# make uninstall)
101 In order to build curvetun, libnacl must be built first. A helper script
102 called nacl_build.sh is there to facilitate this process. If you want to
103 build NaCl in the directory ~/nacl, the script should be called this way:
105   $ cd curvetun
106   $ ./nacl_build.sh ~/nacl
108 There's also an abbreviation for this by simply typing:
110   $ make nacl
112 This gives an initial output such as "Building NaCl for arch amd64 on host
113 fuuubar (grab a coffee, this takes a while) ...". If the automatically
114 detected architecture (such as amd64) is not the one you intend to compile
115 for, then edit the (cc="gcc") variable within the nacl_build.sh script to
116 your cross compiler. Yes, we know, the build system of NaCl is a bit of a
117 pain, so you might check for a pre-built package from your distribution in
118 case you are not cross compiling.
120 If NaCl already has been built on the target, it is quicker to use
121 nacl_path.sh this way:
123   $ cd curvetun
124   $ ./nacl_path.sh ~/nacl/build/include/x86 ~/nacl/build/lib/x86
126 Instead of libnacl you can also use libsodium which itself is a portable,
127 cross-compilable, API compatible drop-in replacement for libnacl.
129 In order to use libsodium you need to provide some little help when running
130 the configure script, so it will be able to detect the needed header files.
131 Additionally you need to configure the build to not link against libnacl
132 but against libsodium.
134 In the case libsodium was installed into /usr/local you run the netsniff-ng
135 configure script this way:
137   $ NACL_INC_DIR=/usr/local/include/sodium NACL_LIB=sodium ./configure
139 Alternatively you can use pkg-config for determining the include dir by
140 setting the NACL_INC_DIR variable for the configure script like this:
142   $ NACL_INC_DIR=$(pkg-config --variable=includedir libsodium )/sodium
144 When done, netsniff-ng's build infrastructure will read those evironment
145 variables in order to get the needed paths to NaCl.
147 If you're unsure with any make targets, check out: make help
149 In order to run the toolkit as a normal user, set the following privilege
150 separation after the build/installation:
152   $ sudo setcap cap_net_raw,cap_ipc_lock,cap_sys_admin,cap_net_admin=eip {toolname}
154 For cross-compiling netsniff-ng, the process is fairly simple. Assuming you
155 want to build netsniff-ng for the Microblaze architecture, update the PATH
156 variable first, e.g.:
158   $ export PATH=<cc-tools-path>/microblazeel-unknown-linux-gnu/bin:$PATH
160 And then, build the toolkit like this:
162   $ make CROSS_COMPILE=microblazeel-unknown-linux-gnu- \
163          CROSS_LD_LIBRARY_PATH=<cc-lib-search-path>
165 Note that some adaptations might be necessary regarding the CFLAGS, since not
166 all might be supported by a different architecture. Probably the most simple
167 way would be to run make CFLAGS="-O2 -Wall".
169 For power users we have a set of zsh auto completion files, have a look at all
170 file with ending *.zsh. There's also a BPF vim syntax highlighting file in the
171 tree called bpf.vim.
173 For doing a debug build of the toolkit with less optimizations and non-stripped
174 symbols, do:
176   $ make DEBUG=1
178 For debugging the build system, actual commands are verbosly shown if every
179 make target is executed with:
181   $ make Q=
183 Concerning packaging the toolkit for a Linux distribution, by default,
184 netsniff-ng has some architecture-specific tuning options enabled that don't
185 belong into a package binary of a distribution. Hence, you might want to build
186 the toolkit with:
188   $ make DISTRO=1
190 A hardening option is also available via HARDENING=1 if needed. You can then
191 build and install the toolkit into prefixed path like:
193   $ make PREFIX=<path-prefix-for-package>
194   $ make PREFIX=<path-prefix-for-package> install
196 Additionally to setting the PREFIX you can set DESTDIR if you want to install
197 the toolkit outside of your current root filesystem but into an alternative
198 path. This is particularly useful when cross-compiling because most likely
199 you want to install into a dedicated sandbox or into a mounted root filesystem
200 for the target architecture and not into the build hosts root filesystem.
202   $ make PREFIX=<path-prefix-for-package> DESTDIR=<alternative-rootfs> install
204 Thanks for maintaining netsniff-ng in your distribution. Further questions will
205 be answered on the public mailing list.
207 Last but not least, there is one small utility for advanced users that we have
208 not integrated into the main build process. This is a minimal BPF JIT image
209 disassembler for the Linux kernel. You can also find this tool in the Linux
210 kernel Git tree under 'tools/net/bpf_jit_disasm.c' or within the netsniff-ng
211 Git tree simply under 'bpf_jit_disasm.c'. To build it, execute:
213     $ gcc -Wall -O2 bpf_jit_disasm.c -o bpf_jit_disasm -lopcodes -lbfd -ldl
215 The rest is described in the file header comment itself, i.e. how to get to the
216 BPF JIT code.