BootstrapClamd.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. from jinja2 import Environment, FileSystemLoader
  2. from modules.BootstrapBase import BootstrapBase
  3. from pathlib import Path
  4. import os
  5. import sys
  6. import time
  7. class BootstrapClamd(BootstrapBase):
  8. def bootstrap(self):
  9. # Skip Clamd if set
  10. if self.isYes(os.getenv("SKIP_CLAMD", "")):
  11. print("SKIP_CLAMD is set, skipping ClamAV startup...")
  12. time.sleep(365 * 24 * 60 * 60)
  13. sys.exit(1)
  14. # Connect to MySQL
  15. self.connect_mysql()
  16. print("Cleaning up tmp files...")
  17. tmp_files = Path("/var/lib/clamav").glob("clamav-*.tmp")
  18. for tmp_file in tmp_files:
  19. try:
  20. self.remove(tmp_file)
  21. print(f"Removed: {tmp_file}")
  22. except Exception as e:
  23. print(f"Failed to remove {tmp_file}: {e}")
  24. self.create_dir("/run/clamav")
  25. self.create_dir("/var/lib/clamav")
  26. # Setup Jinja2 Environment and load vars
  27. self.env = Environment(
  28. loader=FileSystemLoader([
  29. '/service_config/custom_templates',
  30. '/service_config/config_templates'
  31. ]),
  32. keep_trailing_newline=True,
  33. lstrip_blocks=True,
  34. trim_blocks=True
  35. )
  36. extra_vars = {
  37. }
  38. self.env_vars = self.prepare_template_vars('/service_config/overwrites.json', extra_vars)
  39. print("Set Timezone")
  40. self.set_timezone()
  41. print("Render config")
  42. self.render_config("/service_config")
  43. # Fix permissions
  44. self.set_owner("/var/lib/clamav", "clamav", "clamav", recursive=True)
  45. self.set_owner("/run/clamav", "clamav", "clamav", recursive=True)
  46. self.set_permissions("/var/lib/clamav", 0o755)
  47. for item in Path("/var/lib/clamav").glob("*"):
  48. self.set_permissions(item, 0o644)
  49. self.set_permissions("/run/clamav", 0o750)
  50. # Copying to /etc/clamav to expose file as-is to administrator
  51. self.copy_file("/var/lib/clamav/whitelist.ign2", "/etc/clamav/whitelist.ign2")