prompt: You will be provided with a partial code base and an issue statement explaining a problem to resolve.
  <issue>
  Certbot's Apache plugin doesn't work on Scientific Linux
  See https://community.letsencrypt.org/t/noinstallationerror-cannot-find-apache-executable-apache2ctl/97980.
  
  This should be fixable by adding an override in https://github.com/certbot/certbot/blob/master/certbot-apache/certbot_apache/entrypoint.py#L17.
  
  </issue>
  <code>
  [start of certbot-apache/certbot_apache/entrypoint.py]
  1 """ Entry point for Apache Plugin """
  2 # Pylint does not like disutils.version when running inside a venv.
  3 # See: https://github.com/PyCQA/pylint/issues/73
  4 from distutils.version import LooseVersion  # pylint: disable=no-name-in-module,import-error
  5 
  6 from certbot import util
  7 
  8 from certbot_apache import configurator
  9 from certbot_apache import override_arch
  10 from certbot_apache import override_fedora
  11 from certbot_apache import override_darwin
  12 from certbot_apache import override_debian
  13 from certbot_apache import override_centos
  14 from certbot_apache import override_gentoo
  15 from certbot_apache import override_suse
  16 
  17 OVERRIDE_CLASSES = {
  18     "arch": override_arch.ArchConfigurator,
  19     "darwin": override_darwin.DarwinConfigurator,
  20     "debian": override_debian.DebianConfigurator,
  21     "ubuntu": override_debian.DebianConfigurator,
  22     "centos": override_centos.CentOSConfigurator,
  23     "centos linux": override_centos.CentOSConfigurator,
  24     "fedora_old": override_centos.CentOSConfigurator,
  25     "fedora": override_fedora.FedoraConfigurator,
  26     "ol": override_centos.CentOSConfigurator,
  27     "red hat enterprise linux server": override_centos.CentOSConfigurator,
  28     "rhel": override_centos.CentOSConfigurator,
  29     "amazon": override_centos.CentOSConfigurator,
  30     "gentoo": override_gentoo.GentooConfigurator,
  31     "gentoo base system": override_gentoo.GentooConfigurator,
  32     "opensuse": override_suse.OpenSUSEConfigurator,
  33     "suse": override_suse.OpenSUSEConfigurator,
  34 }
  35 
  36 
  37 def get_configurator():
  38     """ Get correct configurator class based on the OS fingerprint """
  39     os_name, os_version = util.get_os_info()
  40     os_name = os_name.lower()
  41     override_class = None
  42 
  43     # Special case for older Fedora versions
  44     if os_name == 'fedora' and LooseVersion(os_version) < LooseVersion('29'):
  45         os_name = 'fedora_old'
  46 
  47     try:
  48         override_class = OVERRIDE_CLASSES[os_name]
  49     except KeyError:
  50         # OS not found in the list
  51         os_like = util.get_systemd_os_like()
  52         if os_like:
  53             for os_name in os_like:
  54                 if os_name in OVERRIDE_CLASSES.keys():
  55                     override_class = OVERRIDE_CLASSES[os_name]
  56         if not override_class:
  57             # No override class found, return the generic configurator
  58             override_class = configurator.ApacheConfigurator
  59     return override_class
  60 
  61 
  62 ENTRYPOINT = get_configurator()
  63
  [end of certbot-apache/certbot_apache/entrypoint.py]
  </code>
  
  I need you to solve this issue by generating a single patch file that I can apply directly to this repository using git apply. Please respond with a single patch file in the following format.
  <patch>
  diff --git a/file.py b/file.py
  --- a/file.py
  +++ b/file.py
  @@ -1,27 +1,35 @@
   def euclidean(a, b):
  -    while b:
  -        a, b = b, a % b
  -    return a
  +    if b == 0:
  +        return a
  +    return euclidean(b, a % b)
   
   
   def bresenham(x0, y0, x1, y1):
       points = []
       dx = abs(x1 - x0)
       dy = abs(y1 - y0)
  -    sx = 1 if x0 < x1 else -1
  -    sy = 1 if y0 < y1 else -1
  -    err = dx - dy
  +    x, y = x0, y0
  +    sx = -1 if x0 > x1 else 1
  +    sy = -1 if y0 > y1 else 1
   
  -    while True:
  -        points.append((x0, y0))
  -        if x0 == x1 and y0 == y1:
  -            break
  -        e2 = 2 * err
  -        if e2 > -dy:
  -            err -= dy
  -            x0 += sx
  -        if e2 < dx:
  -            err += dx
  -            y0 += sy
  +    if dx > dy:
  +        err = dx / 2.0
  +        while x != x1:
  +            points.append((x, y))
  +            err -= dy
  +            if err < 0:
  +                y += sy
  +                err += dx
  +            x += sx
  +    else:
  +        err = dy / 2.0
  +        while y != y1:
  +            points.append((x, y))
  +            err -= dx
  +            if err < 0:
  +                x += sx
  +                err += dy
  +            y += sy
  +
  +    points.append((x, y))
       return points
  
  </patch>
golden_diff: diff --git a/certbot-apache/certbot_apache/entrypoint.py b/certbot-apache/certbot_apache/entrypoint.py
  --- a/certbot-apache/certbot_apache/entrypoint.py
  +++ b/certbot-apache/certbot_apache/entrypoint.py
  @@ -31,6 +31,8 @@
       "gentoo base system": override_gentoo.GentooConfigurator,
       "opensuse": override_suse.OpenSUSEConfigurator,
       "suse": override_suse.OpenSUSEConfigurator,
  +    "scientific": override_centos.CentOSConfigurator,
  +    "scientific linux": override_centos.CentOSConfigurator,
   }
  
verification_info: {"golden_diff": "diff --git a/certbot-apache/certbot_apache/entrypoint.py b/certbot-apache/certbot_apache/entrypoint.py\n--- a/certbot-apache/certbot_apache/entrypoint.py\n+++ b/certbot-apache/certbot_apache/entrypoint.py\n@@ -31,6 +31,8 @@\n     \"gentoo base system\": override_gentoo.GentooConfigurator,\n     \"opensuse\": override_suse.OpenSUSEConfigurator,\n     \"suse\": override_suse.OpenSUSEConfigurator,\n+    \"scientific\": override_centos.CentOSConfigurator,\n+    \"scientific linux\": override_centos.CentOSConfigurator,\n }\n", "issue": "Certbot's Apache plugin doesn't work on Scientific Linux\nSee https://community.letsencrypt.org/t/noinstallationerror-cannot-find-apache-executable-apache2ctl/97980.\r\n\r\nThis should be fixable by adding an override in https://github.com/certbot/certbot/blob/master/certbot-apache/certbot_apache/entrypoint.py#L17.\n", "before_files": [{"content": "\"\"\" Entry point for Apache Plugin \"\"\"\n# Pylint does not like disutils.version when running inside a venv.\n# See: https://github.com/PyCQA/pylint/issues/73\nfrom distutils.version import LooseVersion  # pylint: disable=no-name-in-module,import-error\n\nfrom certbot import util\n\nfrom certbot_apache import configurator\nfrom certbot_apache import override_arch\nfrom certbot_apache import override_fedora\nfrom certbot_apache import override_darwin\nfrom certbot_apache import override_debian\nfrom certbot_apache import override_centos\nfrom certbot_apache import override_gentoo\nfrom certbot_apache import override_suse\n\nOVERRIDE_CLASSES = {\n    \"arch\": override_arch.ArchConfigurator,\n    \"darwin\": override_darwin.DarwinConfigurator,\n    \"debian\": override_debian.DebianConfigurator,\n    \"ubuntu\": override_debian.DebianConfigurator,\n    \"centos\": override_centos.CentOSConfigurator,\n    \"centos linux\": override_centos.CentOSConfigurator,\n    \"fedora_old\": override_centos.CentOSConfigurator,\n    \"fedora\": override_fedora.FedoraConfigurator,\n    \"ol\": override_centos.CentOSConfigurator,\n    \"red hat enterprise linux server\": override_centos.CentOSConfigurator,\n    \"rhel\": override_centos.CentOSConfigurator,\n    \"amazon\": override_centos.CentOSConfigurator,\n    \"gentoo\": override_gentoo.GentooConfigurator,\n    \"gentoo base system\": override_gentoo.GentooConfigurator,\n    \"opensuse\": override_suse.OpenSUSEConfigurator,\n    \"suse\": override_suse.OpenSUSEConfigurator,\n}\n\n\ndef get_configurator():\n    \"\"\" Get correct configurator class based on the OS fingerprint \"\"\"\n    os_name, os_version = util.get_os_info()\n    os_name = os_name.lower()\n    override_class = None\n\n    # Special case for older Fedora versions\n    if os_name == 'fedora' and LooseVersion(os_version) < LooseVersion('29'):\n        os_name = 'fedora_old'\n\n    try:\n        override_class = OVERRIDE_CLASSES[os_name]\n    except KeyError:\n        # OS not found in the list\n        os_like = util.get_systemd_os_like()\n        if os_like:\n            for os_name in os_like:\n                if os_name in OVERRIDE_CLASSES.keys():\n                    override_class = OVERRIDE_CLASSES[os_name]\n        if not override_class:\n            # No override class found, return the generic configurator\n            override_class = configurator.ApacheConfigurator\n    return override_class\n\n\nENTRYPOINT = get_configurator()\n", "path": "certbot-apache/certbot_apache/entrypoint.py"}]}