docker_start.sh 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. #!/bin/bash
  2. # Set the crowdsec config file
  3. CS_CONFIG_FILE="/etc/crowdsec/config.yaml"
  4. if [ "$CONFIG_FILE" != "" ]; then
  5. CS_CONFIG_FILE="$CONFIG_FILE"
  6. fi
  7. # TLS defaults
  8. CERT_FILE="${CERT_FILE:-/etc/ssl/cert.pem}"
  9. KEY_FILE="${KEY_FILE:-/etc/ssl/key.pem}"
  10. # Plugins directory default
  11. PLUGIN_DIR="${PLUGIN_DIR:-/usr/local/lib/crowdsec/plugins/}"
  12. #Check & prestage databases
  13. if [ ! -e "/var/lib/data/GeoLite2-ASN.mmdb" ] && [ ! -e "/var/lib/data/GeoLite2-City.mmdb" ]; then
  14. mkdir -p /var/lib/crowdsec/data
  15. cp /staging/var/lib/crowdsec/data/*.mmdb /var/lib/crowdsec/data/
  16. fi
  17. #Check & prestage /etc/crowdsec
  18. if [ ! -e "/etc/crowdsec/local_api_credentials.yaml" ] && [ ! -e "/etc/crowdsec/config.yaml" ]; then
  19. mkdir -p /etc/crowdsec
  20. cp -r /staging/etc/* /etc/
  21. fi
  22. # regenerate local agent credentials (ignore if agent is disabled)
  23. if [ "$DISABLE_AGENT" == "" ] ; then
  24. echo "Regenerate local agent credentials"
  25. cscli -c "$CS_CONFIG_FILE" machines delete ${CUSTOM_HOSTNAME:-localhost}
  26. if [ "$LOCAL_API_URL" != "" ] ; then
  27. cscli -c "$CS_CONFIG_FILE" machines add ${CUSTOM_HOSTNAME:-localhost} --auto --url $LOCAL_API_URL
  28. else
  29. cscli -c "$CS_CONFIG_FILE" machines add ${CUSTOM_HOSTNAME:-localhost} --auto
  30. fi
  31. if [ "$AGENT_USERNAME" != "" ] && [ "$AGENT_PASSWORD" != "" ] && [ "$LOCAL_API_URL" != "" ] ; then
  32. echo "set up lapi credentials for agent"
  33. CONFIG_PATH=$(yq eval '.api.client.credentials_path' "$CS_CONFIG_FILE" )
  34. echo "url: $LOCAL_API_URL" > $CONFIG_PATH
  35. echo "login: $AGENT_USERNAME" >> $CONFIG_PATH
  36. echo "password: $AGENT_PASSWORD" >> $CONFIG_PATH
  37. fi
  38. fi
  39. # Check if lapi needs to automatically register an agent
  40. echo "Check if lapi need to register automatically an agent"
  41. if [ "$DISABLE_LOCAL_API" == "" ] && [ "$AGENT_USERNAME" != "" ] && [ "$AGENT_PASSWORD" != "" ] ; then
  42. if [ "$LOCAL_API_URL" != "" ] ; then
  43. cscli -c "$CS_CONFIG_FILE" machines add $AGENT_USERNAME --password $AGENT_PASSWORD --url $LOCAL_API_URL
  44. else
  45. cscli -c "$CS_CONFIG_FILE" machines add $AGENT_USERNAME --password $AGENT_PASSWORD
  46. fi
  47. echo "Agent registered to lapi"
  48. fi
  49. # registration to online API for signal push
  50. if [ "$DISABLE_ONLINE_API" == "" ] && [ "$CONFIG_FILE" == "" ] ; then
  51. CONFIG_EXIST=$(yq eval '.api.server.online_client | has("credentials_path")' "$CS_CONFIG_FILE")
  52. if [ "$CONFIG_EXIST" != "true" ]; then
  53. yq eval '.api.server.online_client = {"credentials_path": "/etc/crowdsec/online_api_credentials.yaml"}' "$CS_CONFIG_FILE" > /etc/crowdsec/config2.yaml
  54. mv /etc/crowdsec/config2.yaml "$CS_CONFIG_FILE"
  55. cscli -c "$CS_CONFIG_FILE" capi register > /etc/crowdsec/online_api_credentials.yaml
  56. echo "registration to online API done"
  57. fi
  58. fi
  59. # crowdsec sqlite database permissions
  60. if [ "$GID" != "" ]; then
  61. IS_SQLITE=$(yq eval '.db_config.type == "sqlite"' "$CS_CONFIG_FILE")
  62. DB_PATH=$(yq eval '.db_config.db_path' "$CS_CONFIG_FILE")
  63. if [ "$IS_SQLITE" == "true" ]; then
  64. chown :$GID $DB_PATH
  65. echo "sqlite database permissions updated"
  66. fi
  67. fi
  68. if [ "$USE_TLS" != "" ]; then
  69. yq -i eval ".api.server.tls.cert_file = \"$CERT_FILE\"" "$CS_CONFIG_FILE"
  70. yq -i eval ".api.server.tls.key_file = \"$KEY_FILE\"" "$CS_CONFIG_FILE"
  71. yq -i eval '... comments=""' "$CS_CONFIG_FILE"
  72. fi
  73. if [ "$PLUGIN_DIR" != "/usr/local/lib/crowdsec/plugins/" ]; then
  74. yq -i eval ".config_paths.plugin_dir = \"$PLUGIN_DIR\"" "$CS_CONFIG_FILE"
  75. fi
  76. ## Install collections, parsers, scenarios & postoverflows
  77. cscli -c "$CS_CONFIG_FILE" hub update
  78. cscli -c "$CS_CONFIG_FILE" collections upgrade crowdsecurity/linux || true
  79. cscli -c "$CS_CONFIG_FILE" parsers upgrade crowdsecurity/whitelists || true
  80. cscli -c "$CS_CONFIG_FILE" parsers install crowdsecurity/docker-logs || true
  81. if [ "$COLLECTIONS" != "" ]; then
  82. cscli -c "$CS_CONFIG_FILE" collections install $COLLECTIONS
  83. fi
  84. if [ "$PARSERS" != "" ]; then
  85. cscli -c "$CS_CONFIG_FILE" parsers install $PARSERS
  86. fi
  87. if [ "$SCENARIOS" != "" ]; then
  88. cscli -c "$CS_CONFIG_FILE" scenarios install $SCENARIOS
  89. fi
  90. if [ "$POSTOVERFLOWS" != "" ]; then
  91. cscli -c "$CS_CONFIG_FILE" postoverflows install $POSTOVERFLOWS
  92. fi
  93. ## Remove collections, parsers, scenarios & postoverflows
  94. if [ "$DISABLE_COLLECTIONS" != "" ]; then
  95. cscli -c "$CS_CONFIG_FILE" collections remove $DISABLE_COLLECTIONS
  96. fi
  97. if [ "$DISABLE_PARSERS" != "" ]; then
  98. cscli -c "$CS_CONFIG_FILE" parsers remove $DISABLE_PARSERS
  99. fi
  100. if [ "$DISABLE_SCENARIOS" != "" ]; then
  101. cscli -c "$CS_CONFIG_FILE" scenarios remove $DISABLE_SCENARIOS
  102. fi
  103. if [ "$DISABLE_POSTOVERFLOWS" != "" ]; then
  104. cscli -c "$CS_CONFIG_FILE" postoverflows remove $DISABLE_POSTOVERFLOWS
  105. fi
  106. ARGS=""
  107. if [ "$CONFIG_FILE" != "" ]; then
  108. ARGS="-c $CONFIG_FILE"
  109. fi
  110. if [ "$DSN" != "" ]; then
  111. ARGS="$ARGS -dsn ${DSN}"
  112. fi
  113. if [ "$TYPE" != "" ]; then
  114. ARGS="$ARGS -type $TYPE"
  115. fi
  116. if [ "$TEST_MODE" == "true" ] || [ "$TEST_MODE" == "TRUE" ]; then
  117. ARGS="$ARGS -t"
  118. fi
  119. if [ "$DISABLE_AGENT" == "true" ] || [ "$DISABLE_AGENT" == "TRUE" ]; then
  120. ARGS="$ARGS -no-cs"
  121. fi
  122. if [ "$DISABLE_LOCAL_API" == "true" ] || [ "$DISABLE_LOCAL_API" == "TRUE" ]; then
  123. ARGS="$ARGS -no-api"
  124. fi
  125. if [ "$LEVEL_TRACE" == "true" ] || [ "$LEVEL_TRACE" == "TRUE" ]; then
  126. ARGS="$ARGS -trace"
  127. fi
  128. if [ "$LEVEL_DEBUG" == "true" ] || [ "$LEVEL_DEBUG" == "TRUE" ]; then
  129. ARGS="$ARGS -debug"
  130. fi
  131. if [ "$LEVEL_INFO" == "true" ] || [ "$LEVEL_INFO" == "TRUE" ]; then
  132. ARGS="$ARGS -info"
  133. fi
  134. exec crowdsec $ARGS