2022-03-09 13:45:36 +00:00
|
|
|
#!/usr/bin/env bash
|
|
|
|
|
|
|
|
set -eu
|
|
|
|
script_name=$0
|
|
|
|
|
|
|
|
die() {
|
|
|
|
echo >&2 "$@"
|
|
|
|
exit 1
|
|
|
|
}
|
|
|
|
|
|
|
|
about() {
|
|
|
|
die "usage: $0 [make | load | clean]"
|
|
|
|
}
|
|
|
|
|
|
|
|
#shellcheck disable=SC1007
|
|
|
|
THIS_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
|
|
|
|
cd "${THIS_DIR}"
|
|
|
|
#shellcheck disable=SC1090
|
|
|
|
. ./.environment.sh
|
|
|
|
|
|
|
|
# you have not removed set -u above, have you?
|
|
|
|
|
|
|
|
[ -z "${TEST_DIR-}" ] && die "\$TEST_DIR must be defined."
|
|
|
|
[ -z "${LOCAL_DIR-}" ] && die "\$LOCAL_DIR must be defined."
|
|
|
|
[ -z "${BIN_DIR-}" ] && die "\$BIN_DIR must be defined."
|
|
|
|
[ -z "${CONFIG_DIR-}" ] && die "\$CONFIG_DIR must be defined."
|
|
|
|
[ -z "${DATA_DIR-}" ] && die "\$DATA_DIR must be defined."
|
|
|
|
[ -z "${LOCAL_INIT_DIR-}" ] && die "\$LOCAL_INIT_DIR must be defined."
|
|
|
|
[ -z "${PLUGIN_DIR-}" ] && die "\$PLUGIN_DIR must be defined."
|
|
|
|
|
|
|
|
if [ ! -e "${BIN_DIR}/cscli" ]; then
|
|
|
|
die "${BIN_DIR}/cscli is missing. Please run 'make bats-build' to create it."
|
|
|
|
fi
|
|
|
|
|
|
|
|
# fails if config_dir or data_dir are not subpaths of local_dir
|
|
|
|
REL_CONFIG_DIR=${CONFIG_DIR#$LOCAL_DIR}
|
|
|
|
REL_CONFIG_DIR=${REL_CONFIG_DIR#/}
|
|
|
|
REL_DATA_DIR=${DATA_DIR#$LOCAL_DIR}
|
|
|
|
REL_DATA_DIR=${REL_DATA_DIR#/}
|
|
|
|
|
|
|
|
remove_init_data() {
|
|
|
|
rm -rf -- "${CONFIG_DIR:?}"/* "${DATA_DIR:?}"/*
|
|
|
|
}
|
|
|
|
|
2022-03-17 11:28:45 +00:00
|
|
|
config_generate() {
|
|
|
|
cp ../config/acquis.yaml "${CONFIG_DIR}/"
|
|
|
|
cp ../config/profiles.yaml "${CONFIG_DIR}/"
|
|
|
|
cp ../config/simulation.yaml "${CONFIG_DIR}/"
|
|
|
|
cp ../config/local_api_credentials.yaml "${CONFIG_DIR}/"
|
|
|
|
cp ../config/online_api_credentials.yaml "${CONFIG_DIR}/"
|
|
|
|
|
|
|
|
cp ../plugins/notifications/http/http.yaml "${CONFIG_DIR}/notifications/"
|
|
|
|
cp ../plugins/notifications/email/email.yaml "${CONFIG_DIR}/notifications/"
|
|
|
|
cp ../plugins/notifications/slack/slack.yaml "${CONFIG_DIR}/notifications/"
|
|
|
|
cp ../plugins/notifications/splunk/splunk.yaml "${CONFIG_DIR}/notifications/"
|
|
|
|
cp ../plugins/notifications/dummy/dummy.yaml "${CONFIG_DIR}/notifications/"
|
|
|
|
|
|
|
|
yq '
|
|
|
|
.common.daemonize=false |
|
|
|
|
del(.common.pid_dir) |
|
|
|
|
.common.log_dir=strenv(LOG_DIR) |
|
|
|
|
.config_paths.config_dir=strenv(CONFIG_DIR) |
|
|
|
|
.config_paths.data_dir=strenv(DATA_DIR) |
|
|
|
|
.config_paths.simulation_path=strenv(CONFIG_DIR)+"/simulation.yaml" |
|
|
|
|
.config_paths.hub_dir=strenv(CONFIG_DIR)+"/hub/" |
|
|
|
|
.config_paths.index_path=strenv(CONFIG_DIR)+"/hub/.index.json" |
|
|
|
|
.config_paths.notification_dir=strenv(CONFIG_DIR)+"/notifications/" |
|
|
|
|
.config_paths.plugin_dir=strenv(PLUGIN_DIR) |
|
|
|
|
.crowdsec_service.acquisition_path=strenv(CONFIG_DIR)+"/acquis.yaml" |
|
|
|
|
.db_config.db_path=strenv(DATA_DIR)+"/crowdsec.db" |
|
|
|
|
.api.client.credentials_path=strenv(CONFIG_DIR)+"/local_api_credentials.yaml" |
|
|
|
|
.api.server.profiles_path=strenv(CONFIG_DIR)+"/profiles.yaml" |
|
|
|
|
.api.server.console_path=strenv(CONFIG_DIR)+"/console.yaml" |
|
|
|
|
.api.server.online_client.credentials_path=strenv(CONFIG_DIR)+"/online_api_credentials.yaml"
|
|
|
|
' <../config/config.yaml >"${CONFIG_DIR}/config.yaml"
|
|
|
|
}
|
|
|
|
|
2022-03-09 13:45:36 +00:00
|
|
|
make_init_data() {
|
|
|
|
remove_init_data
|
|
|
|
|
|
|
|
mkdir -p "${CONFIG_DIR}/notifications"
|
|
|
|
|
2022-03-17 11:28:45 +00:00
|
|
|
config_generate
|
2022-03-09 13:45:36 +00:00
|
|
|
|
|
|
|
mkdir -p "${CONFIG_DIR}/hub"
|
|
|
|
"${BIN_DIR}/cscli" machines add githubciXXXXXXXXXXXXXXXXXXXXXXXX --auto
|
|
|
|
"${BIN_DIR}/cscli" capi register
|
|
|
|
"${BIN_DIR}/cscli" hub update
|
|
|
|
"${BIN_DIR}/cscli" collections install crowdsecurity/linux
|
|
|
|
mkdir -p "${CONFIG_DIR}/patterns"
|
|
|
|
cp -ax "../config/patterns" "${CONFIG_DIR}/"
|
|
|
|
|
|
|
|
"${TEST_DIR}/instance-crowdsec" start
|
|
|
|
"${BIN_DIR}/cscli" lapi status
|
|
|
|
"${TEST_DIR}/instance-crowdsec" stop
|
|
|
|
|
|
|
|
tar -C "${LOCAL_DIR}" --create --file "${LOCAL_INIT_DIR}/init-config-data.tar" "$REL_CONFIG_DIR" "$REL_DATA_DIR"
|
|
|
|
|
|
|
|
remove_init_data
|
|
|
|
}
|
|
|
|
|
|
|
|
load_init_data() {
|
|
|
|
if [ ! -f "${LOCAL_INIT_DIR}/init-config-data.tar" ]; then
|
|
|
|
die "Initial data not found; did you run '$script_name make' ?"
|
|
|
|
fi
|
|
|
|
|
|
|
|
remove_init_data
|
|
|
|
|
|
|
|
tar -C "${LOCAL_DIR}" --extract --file "${LOCAL_INIT_DIR}/init-config-data.tar"
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
# ---------------------------
|
|
|
|
|
|
|
|
[ $# -lt 1 ] && about
|
|
|
|
|
|
|
|
./assert-crowdsec-not-running
|
|
|
|
|
|
|
|
case "$1" in
|
|
|
|
make)
|
|
|
|
make_init_data
|
|
|
|
;;
|
|
|
|
load)
|
|
|
|
load_init_data
|
|
|
|
;;
|
|
|
|
clean)
|
|
|
|
remove_init_data
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
about
|
|
|
|
;;
|
|
|
|
esac;
|
|
|
|
|