summarylogtreecommitdiffstats
path: root/PKGBUILD
blob: ae7106deb336b19301cb88551d03e973bd3fd1ef (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
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
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
# Maintainer: karras <karras@0x539.ch>

# Package for installing the Wazuh agent but it is built from scratch instead
# of copying files from the official RPM/DEB packages.
pkgname=wazuh-agent-src
pkgver=4.14.8
pkgrel=1
pkgdesc="Wazuh agent for endpoints providing threat prevention, detection, and response capabilities"
arch=('x86_64')
url="https://github.com/wazuh/wazuh"
license=('GPL-2.0-only')
provides=('wazuh-agent')
conflicts=('wazuh-agent')
makedepends=(
  'autoconf'
  'automake'
  'base-devel'
  'brotli'
  'cmake'
  'curl'
  'expect'
  'fakeroot'
  'gawk'
  'gcc'
  'gnupg'
  'inetutils'
  'libsigsegv'
  'libtool'
  'make'
  'nodejs'
  'perl'
  'perl-base'
  'python'
  'sudo'
  'wget'
)
optdepends=(
  'lsb-release: for detecting the Linux distribution'
)
source=(
  "https://github.com/wazuh/wazuh/archive/v${pkgver}.tar.gz"
  wazuh-agent-src.sysusers
  wazuh-agent-src.tmpfiles
  ossec.conf
)
sha512sums=(
  '5d09ac784ad2bbca9bc21c4bded967187430bb5eb8bb8399728faeb48f50a7f631855346656ae3d7f4c965c18f66e4aeb06c09b92fe0c32ea180eebaa622d0f2'
  '13e8779f5e54fc444124d29d3c26f8ceda11bfd40c4ff995a68492a8ebd6cc3ecf906e7f109bf9860bef1e8dff390fb0a3e2c61e4c597f47dc9f0f36b39f1099'
  '1a4e31e0a18371dc4fec65a388b3a8c54d3e69e2413c1584394a1c2108ade261d81e63a31dff081003a3e8913b461b0aa18c4d9f070ea2fe5921f3372238b3fd'
  'e239572016b45a1514b0b35cbb7c3525de62c4395069277c7568616acda082c83a40f5760fef70dded262a1d611b65965037a0ec3884e0142c758424016e3563'
)
backup=(
  "opt/wazuh-agent/etc/client.keys"
  "opt/wazuh-agent/etc/local_internal_options.conf"
  "opt/wazuh-agent/etc/ossec.conf"
)

build() {
  cd "${srcdir}/wazuh-${pkgver}/src"
  # We ignore Wazuh's instructions to rely on the install.sh script since it
  # wants to be executed as root, which is undesired for Arch packages.
  #
  # Wazuh previously did not compile with GCC 15 (CC=gcc-14 CXX=g++-14) but
  # that now seems to work?
  # https://github.com/wazuh/wazuh/issues/29931.
  make TARGET=agent deps
  make TARGET=agent installdir=/opt/wazuh-agent CC=gcc CXX=g++ build
}

package() {
  # Add the systemd sysusers and tmpfiles configs
  install -Dm644 wazuh-agent-src.sysusers "${pkgdir}/usr/lib/sysusers.d/wazuh-agent.conf"
  install -Dm644 wazuh-agent-src.tmpfiles "${pkgdir}/usr/lib/tmpfiles.d/wazuh-agent.conf"

  # Since the Makefile has no "install" target and users are instructed to run
  # install.sh, we have to mimic it line-by-line and copy the files
  # individually. :-(
  installdir="${pkgdir}/opt/wazuh-agent"
  ossec_control_src='./init/wazuh-client.sh'

  cd "${srcdir}/wazuh-${pkgver}/src"

  # Populate agent main directory
  install -d -m 0750 ${installdir}/

  # Poulate agent version config
  install -m 440 ../VERSION.json ${installdir}/VERSION.json

  # Populate agent log directory
  install -d -m 0770 ${installdir}/logs
  install -d -m 0750 ${installdir}/logs/wazuh
  install -m 0660 /dev/null ${installdir}/logs/ossec.log
  install -m 0660 /dev/null ${installdir}/logs/ossec.json
  install -m 0660 /dev/null ${installdir}/logs/active-responses.log

  # Populate agent lib directory
  install -d -m 0750 ${installdir}/lib
  install -m 0750 libwazuhext.so ${installdir}/lib
  install -m 0750 libwazuhshared.so ${installdir}/lib
  install -m 0750 shared_modules/dbsync/build/lib/libdbsync.so ${installdir}/lib
  install -m 0750 shared_modules/rsync/build/lib/librsync.so ${installdir}/lib
  install -m 0750 data_provider/build/lib/libsysinfo.so ${installdir}/lib
  install -m 0750 syscheckd/build/lib/libfimdb.so ${installdir}/lib
  install -m 0750 syscheckd/build/lib/libfimebpf.so ${installdir}/lib
  install -m 0750 external/libbpf-bootstrap/build/libbpf/libbpf.so ${installdir}/lib
  install -m 0750 external/libbpf-bootstrap/build/modern.bpf.o ${installdir}/lib
  install -m 0750 wazuh_modules/syscollector/build/lib/libsyscollector.so ${installdir}/lib
  install -m 0750 libstdc++.so.6 ${installdir}/lib
  install -m 0750 libgcc_s.so.1 ${installdir}/lib

  # Populate agent bin directory
  install -d -m 0750 ${installdir}/bin
  install -m 0750 wazuh-logcollector ${installdir}/bin
  install -m 0750 syscheckd/build/bin/wazuh-syscheckd ${installdir}/bin
  install -m 0750 wazuh-execd ${installdir}/bin
  install -m 0750 manage_agents ${installdir}/bin
  install -m 0750 ${ossec_control_src} ${installdir}/bin/wazuh-control
  install -m 0750 wazuh-modulesd ${installdir}/bin/
  install -m 0750 wazuh-agentd ${installdir}/bin
  install -m 0750 agent-auth ${installdir}/bin

  # Populate agent queue directory
  install -d -m 0750 ${installdir}/queue
  install -d -m 0770 ${installdir}/queue/alerts
  install -d -m 0770 ${installdir}/queue/sockets
  install -d -m 0750 ${installdir}/queue/diff
  install -d -m 0750 ${installdir}/queue/fim
  install -d -m 0750 ${installdir}/queue/fim/db
  install -d -m 0750 ${installdir}/queue/syscollector
  install -m 0640 wazuh_modules/syscollector/norm_config.json ${installdir}/queue/syscollector
  install -d -m 0750 ${installdir}/queue/syscollector/db
  install -d -m 0750 ${installdir}/queue/logcollector
  install -d -m 0750 ${installdir}/queue/rids

  # Populate agent var directory
  install -d -m 0750 ${installdir}/var
  install -d -m 0770 ${installdir}/var/run
  install -d -m 0770 ${installdir}/var/upgrade
  install -d -m 0770 ${installdir}/var/selinux
  install -d -m 0770 ${installdir}/var/incoming

  # Populate agent tmp directory
  install -d -m 1770 ${installdir}/tmp

  # Populate agent etc directory
  install -d -m 0770 ${installdir}/etc
  install -m 0640 ../etc/internal_options.conf ${installdir}/etc/
  install -m 0640 ../etc/local_internal_options.conf ${installdir}/etc/local_internal_options.conf
  install -m 0640 /dev/null ${installdir}/etc/client.keys

  # We ship our own modified ossec.conf for better transparency since
  # install.sh by default uses a templating mechanism
  install -m 0660 ${srcdir}/ossec.conf ${installdir}/etc/ossec.conf

  install -m 0640 ../etc/wpk_root.pem ${installdir}/etc/
  install -d -m 0770 ${installdir}/etc/shared
  install -m 0660 ../ruleset/rootcheck/db/*.txt ${installdir}/etc/shared/

  # Adopt local timezone, if configured
  if [ -f /etc/localtime ]
  then
       install -m 0640 /etc/localtime ${installdir}/etc
  fi
  if [ -f /etc/TIMEZONE ]; then
       install -m 0640 /etc/TIMEZONE ${installdir}/etc/
  fi

  # Populate agent ruleset directory
  install -d -m 0750 ${installdir}/ruleset
  install -d -m 0750 ${installdir}/ruleset/sca
  install -m 0640 ../ruleset/sca/generic/sca_distro_independent_linux.yml ${installdir}/ruleset/sca

  # Populate agent wodles directory
  install -d -m 0750 ${installdir}/wodles
  install -d -m 0770 ${installdir}/var/wodles
  install -m 0750 ../wodles/__init__.py ${installdir}/wodles/__init__.py
  install -m 0750 ../wodles/utils.py ${installdir}/wodles/utils.py
  install -d -m 0750 ${installdir}/wodles/aws
  install -d -m 0750 ${installdir}/wodles/aws/buckets_s3
  install -d -m 0750 ${installdir}/wodles/aws/services
  install -d -m 0750 ${installdir}/wodles/aws/subscribers
  install -m 0750 ../wodles/aws/aws_s3.py ${installdir}/wodles/aws/aws-s3
  install -m 0750 ../wodles/aws/__init__.py ${installdir}/wodles/aws/__init__.py
  install -m 0750 ../wodles/aws/aws_tools.py ${installdir}/wodles/aws/aws_tools.py
  install -m 0750 ../wodles/aws/wazuh_integration.py ${installdir}/wodles/aws/wazuh_integration.py
  install -m 0750 ../wodles/aws/buckets_s3/aws_bucket.py ${installdir}/wodles/aws/buckets_s3/aws_bucket.py
  install -m 0750 ../wodles/aws/buckets_s3/cloudtrail.py ${installdir}/wodles/aws/buckets_s3/cloudtrail.py
  install -m 0750 ../wodles/aws/buckets_s3/config.py ${installdir}/wodles/aws/buckets_s3/config.py
  install -m 0750 ../wodles/aws/buckets_s3/guardduty.py ${installdir}/wodles/aws/buckets_s3/guardduty.py
  install -m 0750 ../wodles/aws/buckets_s3/__init__.py ${installdir}/wodles/aws/buckets_s3/__init__.py
  install -m 0750 ../wodles/aws/buckets_s3/load_balancers.py ${installdir}/wodles/aws/buckets_s3/load_balancers.py
  install -m 0750 ../wodles/aws/buckets_s3/server_access.py ${installdir}/wodles/aws/buckets_s3/server_access.py
  install -m 0750 ../wodles/aws/buckets_s3/umbrella.py ${installdir}/wodles/aws/buckets_s3/umbrella.py
  install -m 0750 ../wodles/aws/buckets_s3/vpcflow.py ${installdir}/wodles/aws/buckets_s3/vpcflow.py
  install -m 0750 ../wodles/aws/buckets_s3/waf.py ${installdir}/wodles/aws/buckets_s3/waf.py
  install -m 0750 ../wodles/aws/services/aws_service.py ${installdir}/wodles/aws/services/aws_service.py
  install -m 0750 ../wodles/aws/services/cloudwatchlogs.py ${installdir}/wodles/aws/services/cloudwatchlogs.py
  install -m 0750 ../wodles/aws/services/__init__.py ${installdir}/wodles/aws/services/__init__.py
  install -m 0750 ../wodles/aws/services/inspector.py ${installdir}/wodles/aws/services/inspector.py
  install -m 0750 ../wodles/aws/subscribers/__init__.py ${installdir}/wodles/aws/subscribers/__init__.py
  install -m 0750 ../wodles/aws/subscribers/sqs_queue.py ${installdir}/wodles/aws/subscribers/sqs_queue.py
  install -m 0750 ../wodles/aws/subscribers/s3_log_handler.py ${installdir}/wodles/aws/subscribers/s3_log_handler.py
  install -m 0750 ../wodles/aws/subscribers/sqs_message_processor.py ${installdir}/wodles/aws/subscribers/sqs_message_processor.py
  install -d -m 0750 ${installdir}/wodles/gcloud
  install -d -m 0750 ${installdir}/wodles/gcloud/pubsub
  install -d -m 0750 ${installdir}/wodles/gcloud/buckets
  install -m 0750 ../wodles/gcloud/gcloud.py ${installdir}/wodles/gcloud/gcloud
  install -m 0750 ../wodles/gcloud/integration.py ${installdir}/wodles/gcloud/integration.py
  install -m 0750 ../wodles/gcloud/tools.py ${installdir}/wodles/gcloud/tools.py
  install -m 0750 ../wodles/gcloud/exceptions.py ${installdir}/wodles/gcloud/exceptions.py
  install -m 0750 ../wodles/gcloud/buckets/bucket.py ${installdir}/wodles/gcloud/buckets/bucket.py
  install -m 0750 ../wodles/gcloud/buckets/access_logs.py ${installdir}/wodles/gcloud/buckets/access_logs.py
  install -m 0750 ../wodles/gcloud/pubsub/subscriber.py ${installdir}/wodles/gcloud/pubsub/subscriber.py
  install -d -m 0750 ${installdir}/wodles/docker
  install -m 0750 ../wodles/docker-listener/DockerListener.py ${installdir}/wodles/docker/DockerListener
  install -d -m 0750 ${installdir}/wodles/azure
  install -d -m 0750 ${installdir}/wodles/azure/azure_services
  install -d -m 0750 ${installdir}/wodles/azure/db
  install -m 0750 ../wodles/azure/azure-logs.py ${installdir}/wodles/azure/azure-logs
  install -m 0750 ../wodles/azure/azure_utils.py ${installdir}/wodles/azure/azure_utils.py
  install -m 0750 ../wodles/azure/azure_services/__init__.py ${installdir}/wodles/azure/azure_services/__init__.py
  install -m 0750 ../wodles/azure/azure_services/analytics.py ${installdir}/wodles/azure/azure_services/analytics.py
  install -m 0750 ../wodles/azure/azure_services/graph.py ${installdir}/wodles/azure/azure_services/graph.py
  install -m 0750 ../wodles/azure/azure_services/storage.py ${installdir}/wodles/azure/azure_services/storage.py
  install -m 0750 ../wodles/azure/db/__init__.py ${installdir}/wodles/azure/db/__init__.py
  install -m 0750 ../wodles/azure/db/orm.py ${installdir}/wodles/azure/db/orm.py
  install -m 0750 ../wodles/azure/db/utils.py ${installdir}/wodles/azure/db/utils.py

  # Populate agent active-response directory
  install -d -m 0750 ${installdir}/active-response
  install -d -m 0750 ${installdir}/active-response/bin
  install -m 0750 active-response/*.sh ${installdir}/active-response/bin/
  install -m 0750 active-response/*.py ${installdir}/active-response/bin/
  # Mimic outcome of src/init/fw-check.sh
  install -m 0750 default-firewall-drop ${installdir}/active-response/bin/firewall-drop
  install -m 0750 default-firewall-drop ${installdir}/active-response/bin/
  install -m 0750 pf ${installdir}/active-response/bin/
  install -m 0750 npf ${installdir}/active-response/bin/
  install -m 0750 ipfw ${installdir}/active-response/bin/
  install -m 0750 firewalld-drop ${installdir}/active-response/bin/
  install -m 0750 disable-account ${installdir}/active-response/bin/
  install -m 0750 host-deny ${installdir}/active-response/bin/
  install -m 0750 ip-customblock ${installdir}/active-response/bin/
  install -m 0750 restart-wazuh ${installdir}/active-response/bin/
  install -m 0750 route-null ${installdir}/active-response/bin/
  install -m 0750 kaspersky ${installdir}/active-response/bin/
  install -m 0750 wazuh-slack ${installdir}/active-response/bin/

  # Populate agent agentless directory
  install -d -m 0750 ${installdir}/agentless
  install -m 0750 agentlessd/scripts/* ${installdir}/agentless/
  install -d -m 0770 ${installdir}/.ssh

  # Populate agent backup directory
  install -d -m 0750 ${installdir}/backup

  # Add the systemd service file
  install -Dm644 ./init/templates/wazuh-agent.service "${pkgdir}/usr/lib/systemd/system/wazuh-agent.service"
  sed -i 's/WAZUH_HOME_TMP/\/opt\/wazuh-agent/g' "${pkgdir}/usr/lib/systemd/system/wazuh-agent.service"

  # Add the license file
  install -Dm644 ../LICENSE -t "${pkgdir}/usr/share/licenses/wazuh-agent/"
}