aboutsummaryrefslogtreecommitdiff
path: root/security/bro/Makefile
blob: d9819793becfcc3556e65ca742e06e743d30c71d (plain) (blame)
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
# Created by: David O'Brien <obrien@FreeBSD.org>
# $FreeBSD$

PORTNAME=	bro
PORTVERSION=	2.5.5
CATEGORIES=	security
MASTER_SITES=	https://www.bro.org/downloads/
DISTFILES=	${DISTNAME}${EXTRACT_SUFX}

MAINTAINER=	leres@FreeBSD.org
COMMENT=	System for detecting network intruders in real-time

LICENSE=	BSD3CLAUSE

BROKEN_powerpc64=	Does not build: error: zero-size array 'names'

LIB_DEPENDS=	libGeoIP.so:net/GeoIP

USES=		bison cmake:outsource compiler:c++11-lang gettext-runtime ninja perl5 python shebangfix ssl

CMAKE_ARGS+=	-DPYTHON_EXECUTABLE:PATH=${PYTHON_CMD}
CXXFLAGS+=	-std=c++11 -Wall

STAGEDIR2=	${STAGEDIR}-caf

SHEBANG_FILES=	aux/broctl/aux/trace-summary/trace-summary

SUB_FILES=	pkg-message
NO_MTREE=	yes

CMAKE_ARGS+=	-GNinja \
		-D CMAKE_INSTALL_PREFIX:PATH=${PREFIX} \
		-D BRO_ROOT_DIR:PATH=${PREFIX} \
		-D PY_MOD_INSTALL_DIR:PATH=${PREFIX}/lib/broctl \
		-D BRO_SCRIPT_INSTALL_PATH:PATH=${PREFIX}/share/bro \
		-D BRO_ETC_INSTALL_DIR:PATH=${PREFIX}/etc \
		-D BRO_MAN_INSTALL_PATH=${MANPREFIX}/man \
		-D ENABLE_PERFTOOLS:BOOL=false \
		-D ENABLE_PERFTOOLS_DEBUG:BOOL=false \
		-D BinPAC_SKIP_INSTALL:BOOL=true \
		-D INSTALL_AUX_TOOLS:BOOL=true \
		-D BUILD_SHARED_LIBS:BOOL=true \
		-D CMAKE_EXE_LINKER_FLAGS="${OPENSSL_LDFLAGS}"

BROUSER?=	bro
BROGROUP?=	bro
PLIST_SUB+=	ARCH=${ARCH} \
		BROUSER=${BROUSER} \
		BROGROUP=${BROGROUP} \
		LCASE_OPSYS=${OPSYS:tl}

USERS=		${BROUSER}
GROUPS=		${BROGROUP}

OPTIONS_DEFINE=	BROCCOLI BROCTL BROKER DEBUG IPSUMDUMP LBL_CF LBL_HF \
		NETMAP PERFTOOLS
OPTIONS_DEFAULT=BROCCOLI BROCTL IPSUMDUMP LBL_CF LBL_HF NETMAP
OPTIONS_SUB=	yes

BROCCOLI_DESC=	Build support for libbroccoli communications
BROCTL_DESC=	BroControl support (implies BROCCOLI and IPSUMDUMP)
BROKER_DESC=	Enable the Broker communication library
IPSUMDUMP_DESC=	Enables traffic summaries
LBL_CF_DESC=	Unix time to formated time/date filter support
LBL_HF_DESC=	Address to hostname filter support
NETMAP_DESC=	Native Netmap Packet IOSource for Bro 
PERFTOOLS_DESC=	Use Perftools to improve memory & CPU usage

BROCTL_IMPLIES=		BROCCOLI IPSUMDUMP

BROCCOLI_LIB_DEPENDS=	libbroccoli.so:security/broccoli
BROCTL_BUILD_DEPENDS=	${LOCALBASE}/bin/bash:shells/bash \
			${PYTHON_PKGNAMEPREFIX}sqlite3>0:databases/py-sqlite3@${PY_FLAVOR} \
			swig3.0:devel/swig30
BROCTL_RUN_DEPENDS=	${LOCALBASE}/bin/bash:shells/bash \
			${PYTHON_PKGNAMEPREFIX}sqlite3>0:databases/py-sqlite3@${PY_FLAVOR}
BROCTL_CMAKE_BOOL=	INSTALL_BROCTL
BROCTL_USE=		LDCONFIG=yes
IPSUMDUMP_BUILD_DEPENDS=ipsumdump:net/ipsumdump
IPSUMDUMP_RUN_DEPENDS=	ipsumdump:net/ipsumdump
BROKER_BUILD_DEPENDS=	swig3.0:devel/swig30
BROKER_CMAKE_BOOL=	ENABLE_BROKER
BROKER_CMAKE_ON+=	-DCAF_ROOT_DIR=${STAGEDIR2}${PREFIX}
BROKER_GH_TUPLE=	actor-framework:actor-framework:0.14.6:actor_framework
BROKER_USE=		GITHUB=nodefault
DEBUG_CMAKE_BOOL=	ENABLE_DEBUG
LBL_HF_RUN_DEPENDS=	${LOCALBASE}/bin/hf:sysutils/lbl-hf
LBL_CF_RUN_DEPENDS=	${LOCALBASE}/bin/cf:sysutils/lbl-cf
NETMAP_GH_TUPLE=	bro:bro-netmap:cf88debf487b31ab30dc3b5bac64783b4e49997e:bro_netmap
NETMAP_USE=		GITHUB=nodefault
PERFTOOLS_CMAKE_BOOL=	ENABLE_PERFTOOLS
PERFTOOLS_RUN_DEPENDS=	${LOCALBASE}/bin/perftools-pprof:devel/google-perftools
PYTHON_BUILD_DEPENDS=	swig3.0:devel/swig30

.include <bsd.port.options.mk>

.if ${PORT_OPTIONS:MBROCTL}
USE_RC_SUBR=	bro
.endif

CMAKE_ARGS2=		-GNinja \
			-D CMAKE_INSTALL_PREFIX:PATH=${STAGEDIR2}${PREFIX} \
			-D CAF_BUILD_STATIC_ONLY:BOOL=yes \
			-D CAF_LOG_LEVEL:STRING=0 \
			-D CAF_NO_EXAMPLES:BOOL=yes \
			-D CAF_NO_OPENCL:BOOL=yes \
			-D CAF_NO_UNIT_TESTS:BOOL=yes

CONFIGURE_WRKSRC2=	${WRKDIR}/.build-caf
BUILD_WRKSRC2=		${CONFIGURE_WRKSRC2}
INSTALL_WRKSRC2=	${CONFIGURE_WRKSRC2}

# Build the version of caf this version of bro requires
pre-configure-BROKER-on:
	${MKDIR} ${CONFIGURE_WRKSRC2}
	(cd ${CONFIGURE_WRKSRC2} && \
	    ${SETENV} ${CONFIGURE_ENV} \
	    ${CMAKE_BIN} ${CMAKE_ARGS2} ${WRKSRC_actor_framework})
	${MKDIR} ${STAGEDIR2}
	(cd ${BUILD_WRKSRC2} && \
	    ${SETENV} ${MAKE_ENV:NDESTDIR=*} \
	    ${MAKE_CMD} ${MAKE_FLAGS} ${MAKEFILE} ${_MAKE_JOBS} install)
	${LN} -s libcaf_core_static.a ${STAGEDIR2}${PREFIX}/lib/libcaf_core.a
	${LN} -s libcaf_io_static.a ${STAGEDIR2}${PREFIX}/lib/libcaf_io.a

post-install-BROCTL-on:
	${MKDIR} ${STAGEDIR}${PREFIX}/logs
	${MKDIR} ${STAGEDIR}${PREFIX}/spool/tmp
	${MKDIR} ${STAGEDIR}${PREFIX}/spool/installed-scripts-do-not-touch/auto
	${MKDIR} ${STAGEDIR}${PREFIX}/spool/installed-scripts-do-not-touch/site
.for F in broctl.cfg networks.cfg node.cfg
	${MV} ${STAGEDIR}${PREFIX}/etc/${F} ${STAGEDIR}${PREFIX}/etc/${F}.example
.endfor

pre-install-BROCTL-on:
	${MKDIR} ${STAGEDIR}${PREFIX}/etc/rc.d

post-build-NETMAP-on:
	${LN} -s ../.build ${WRKSRC}/build
	(cd ${WRKSRC_bro_netmap} && ./configure --bro-dist=${WRKSRC} \
	    --install-root=${STAGEDIR}${PREFIX}/lib/bro/plugins && \
	    make && make install)

.include <bsd.port.options.mk>

.if ${OPSYS} == FreeBSD && ${OSVERSION} >= 1200000
BUILD_DEPENDS+=		${NONEXISTENT}:security/openssl:stage
CXXFLAGS+=		-I${WRKDIR}/openssl/include
OPENSSL_LDFLAGS+=	-L${WRKDIR}/openssl/lib

# Don't use COPYTREE_SHARE here as it hard links files, and the original files
# are owned by root, which creates problems of its own.
pre-configure:
	@cd `${MAKE} -V STAGEDIR -C ${PORTSDIR}/security/openssl`${PREFIX} \
	    && ${FIND} -E . ! -name *.so* | ${CPIO} -dump ${WRKDIR}/openssl >/dev/null 2>&1
.endif

.include <bsd.port.mk>