BootstrapClamd.py 1.8 KB

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