diff options
-rw-r--r-- | .gitignore | 3 | ||||
-rw-r--r-- | INSTALL | 3 | ||||
-rw-r--r-- | Makefile | 5 | ||||
-rwxr-xr-x | configure | 245 |
4 files changed, 254 insertions, 2 deletions
@@ -33,6 +33,9 @@ fuzzing/ # Ignore if someone adapts Makefile Makefile +# Ignore build config generated by configure +Config + # Other documentation ignores *.md *.ps @@ -55,8 +55,9 @@ repository root directory: $ cd netsniff-ng/ -The installation (deinstallation) process done by make is fairly simple: +The installation (deinstallation) process is fairly simple: + $ ./configure $ make # make install @@ -2,6 +2,8 @@ # Copyright 2012 - 2013 Daniel Borkmann <borkmann@gnumaniacs.org> # Subject to the GNU GPL, version 2. +include Config + VERSION = 0 PATCHLEVEL = 5 SUBLEVEL = 8 @@ -14,7 +16,7 @@ TOOLS ?= netsniff-ng trafgen astraceroute flowtop ifpps bpfc curvetun mausezahn PREFIX ?= # Disable if you don't want it -CCACHE ?= ccache +CCACHE ?= $(CONFIG_CCACHE) # Location of installation paths. SBINDIR = $(PREFIX)/usr/sbin @@ -203,6 +205,7 @@ install_all: $(foreach tool,$(TOOLS),$(tool)_install) install_allbutcurvetun: $(foreach tool,$(filter-out curvetun,$(TOOLS)),$(tool)_install) install_allbutmausezahn: $(foreach tool,$(filter-out mausezahn,$(TOOLS)),$(tool)_install) clean mostlyclean: $(foreach tool,$(TOOLS),$(tool)_clean) + $(Q)$(call RM,Config) realclean distclean clobber: $(foreach tool,$(TOOLS),$(tool)_distclean) $(Q)$(call RMDIR,$(ETCDIRE)) mrproper: clean distclean diff --git a/configure b/configure new file mode 100755 index 0000000..a5e8e21 --- /dev/null +++ b/configure @@ -0,0 +1,245 @@ +#!/bin/bash +# This isn't a configure generated by autoconf! + +MISSING_PKG_CONFIG=0 +MISSING_DEFS=0 +MISSING_NACL=0 + +[ -z $CC ] && CC=cc + +TMPDIR=$(mktemp -d config.XXXXXX) +trap 'status=$?; rm -rf $TMPDIR; exit $status' EXIT HUP INT QUIT TERM + +check_pkg_config() +{ + echo -n "[*] Checking pkg-config ... " + + if [ "x$(which pkg-config)" == "x" ] ; then + echo "[NO]" + MISSING_PKG_CONFIG=1 + else + echo "[YES]" + fi +} + +check_ccache() +{ + echo -n "[*] Checking ccache ... " + + if [ "x$(which ccache)" == "x" ] ; then + echo "[NO]" + echo "CONFIG_CCACHE=" >> Config + else + echo "[YES]" + echo "CONFIG_CCACHE=ccache" >> Config + fi +} + +check_nacl() +{ + echo -n "[*] Checking nacl ... " + + cat > $TMPDIR/nacltest.c << EOF +#include "crypto_hash_sha512.h" +#include "crypto_verify_32.h" +#include "crypto_hash_sha512.h" +#include "crypto_box_curve25519xsalsa20poly1305.h" +#include "crypto_scalarmult_curve25519.h" +#include "crypto_auth_hmacsha512256.h" + +int main(void) { } +EOF + + if [ -z $NACL_INC_DIR ] ; then + NACL_INC_DIR="/usr/include/nacl" + fi + + if [ -z $NACL_LIB_DIR ] ; then + NACL_LIB_DIR="/usr/lib" + fi + + LDFLAGS="-L $NACL_LIB_DIR" + CFLAGS="-I $NACL_INC_DIR" + + $CC $CFLAGS $LDFLAGS -o $TMPDIR/nacltest $TMPDIR/nacltest.c >> $TMPDIR/config.log 2>&1 + if [ ! -x $TMPDIR/nacltest ] ; then + echo "[NO]" + MISSING_NACL=1 + else + echo "[YES]" + echo "CONFIG_NACL_INC_DIR:=$NACL_INC_DIR" >> Config + echo "CONFIG_NACL_LIB_DIR:=$NACL_LIB_DIR" >> Config + fi + +} + +check_libnl() +{ + echo -n "[*] Checking libnl ... " + + cat > $TMPDIR/libnltest.c << EOF +#include <libnl3/netlink/genl/genl.h> +#include <libnl3/netlink/genl/family.h> +#include <libnl3/netlink/genl/ctrl.h> +#include <libnl3/netlink/msg.h> +#include <libnl3/netlink/attr.h> +#include <libnl3/netlink/version.h> + +#if LIBNL_VER_NUM < LIBNL_VER(3,0) +# error incompatible libnl version +#endif + +void main(void) +{ + struct nl_sock *sock = nl_socket_alloc(); + struct nl_cache *nl_cache; + int ret = genl_connect(sock); + + ret = genl_ctrl_alloc_cache(sock, &nl_cache); +} +EOF + + $CC -W -Wall \ + $(pkg-config --cflags libnl-3.0) \ + $(pkg-config --cflags libnl-genl-3.0) \ + -o $TMPDIR/libnltest \ + $TMPDIR/libnltest.c \ + $(pkg-config --libs libnl-3.0) \ + $(pkg-config --libs libnl-genl-3.0) \ + >> $TMPDIR/config.log 2>&1 + if [ ! -x $TMPDIR/libnltest ] ; then + echo "[NO]" + MISSING_DEFS=1 + else + echo "[YES]" + fi +} + +check_tpacket() +{ + echo -n "[*] Checking tpacket ... " + + cat > $TMPDIR/tpackettest.c << EOF +#include <stdio.h> +#include <linux/if_packet.h> + +struct tpacket3_hdr *hdr; + +void main(void) +{ + printf("%d\n", hdr->tp_status); +} +EOF + + $CC -o $TMPDIR/tpackettest $TMPDIR/tpackettest.c >> $TMPDIR/config.log 2>&1 + if [ ! -x $TMPDIR/tpackettest ] ; then + echo "[NO]" + MISSING_DEFS=1 + else + echo "[YES]" + fi +} + +check_ncurses() +{ + echo -n "[*] Checking ncurses ... " + + cat > $TMPDIR/ncursestest.c << EOF +#include <curses.h> + +void main(void) +{ + WINDOW *screen = initscr(); +} +EOF + + $CC $(pkg-config --cflags ncurses) -o $TMPDIR/ncursestest $TMPDIR/ncursestest.c $(pkg-config --libs ncurses) >> $TMPDIR/config.log 2>&1 + if [ ! -x $TMPDIR/ncursestest ] ; then + echo "[NO]" + MISSING_DEFS=1 + else + echo "[YES]" + fi +} + +check_libgeoip() +{ + echo -n "[*] Checking libGeoIP ... " + + cat > $TMPDIR/geoiptest.c << EOF +#include <GeoIP.h> +#include <GeoIPCity.h> + +void main(void) +{ + GeoIP *geoip; +} +EOF + + $CC -o $TMPDIR/geoiptest $TMPDIR/geoiptest.c >> $TMPDIR/config.log 2>&1 + if [ ! -x $TMPDIR/geoiptest ] ; then + echo "[NO]" + MISSING_DEFS=1 + else + echo "[YES]" + fi + +} + +check_libnf_ct() +{ + echo -n "[*] Checking libnetfilter-conntrack ... " + + cat > $TMPDIR/nfcttest.c << EOF +#include <libnetfilter_conntrack/libnetfilter_conntrack.h> +#include <libnetfilter_conntrack/libnetfilter_conntrack_tcp.h> +#include <libnetfilter_conntrack/libnetfilter_conntrack_dccp.h> +#include <libnetfilter_conntrack/libnetfilter_conntrack_sctp.h> + +void main(void) +{ + struct nfconntrack *ct; +} +EOF + + $CC -o $TMPDIR/nfcttest $TMPDIR/nfcttest.c >> $TMPDIR/config.log 2>&1 + if [ ! -x $TMPDIR/nfcttest ] ; then + echo "[NO]" + MISSING_DEFS=1 + else + echo "[YES]" + fi + +} +echo "# This file is autogenerated by the configure script" > Config +check_pkg_config + +if [ "$MISSING_PKG_CONFIG" == "1" ] ; then + echo "[!] pkg-config is not installed on your system or not in the PATH" + exit 1 +fi + +check_ccache +check_nacl +check_libnl +check_tpacket +check_ncurses +check_libgeoip + +if [ "$MISSING_DEFS" == "1" ] ; then + echo "[!] Some libraries or header definitions are missing or too old." + echo " Please refer to the INSTALL file for the libraries needed to" + echo " build netsniff-ng." + exit 1 +fi + +if [ "$MISSING_NACL" == "1" ] ; then + echo "[!] The NaCl crypto library is currently not present on your" + echo " system or could not be found. Either install it from your" + echo " distro or build it manually using 'make nacl' and make sure" + echo " that the NACL_INC_DIR and NACL_LIB_DIR variables are set" + echo " appropriately." + exit 1 +fi + +exit 0 |