diff options
Diffstat (limited to 'ipapython')
-rw-r--r-- | ipapython/platform/fedora16/service.py | 30 | ||||
-rw-r--r-- | ipapython/platform/redhat/service.py | 64 |
2 files changed, 88 insertions, 6 deletions
diff --git a/ipapython/platform/fedora16/service.py b/ipapython/platform/fedora16/service.py index bceb87cd5..297e68332 100644 --- a/ipapython/platform/fedora16/service.py +++ b/ipapython/platform/fedora16/service.py @@ -21,7 +21,7 @@ import os import time from ipapython import ipautil, dogtag -from ipapython.platform import base, redhat +from ipapython.platform import base from ipapython.platform.base import systemd from ipapython.platform.fedora16 import selinux from ipapython.ipa_log_manager import root_logger @@ -78,20 +78,38 @@ class Fedora16Service(systemd.SystemdService): # If we wouldn't do this, our instances will not be started as systemd would # not have any clue about instances (PKI-IPA and the domain we serve) at all. # Thus, hook into dirsrv.restart(). + + class Fedora16DirectoryService(Fedora16Service): - def enable(self, instance_name=""): - super(Fedora16DirectoryService, self).enable(instance_name) + + def tune_nofile_platform(self, num=8192, fstore=None): + """ + Increase the number of files descriptors available to directory server + from the default 1024 to 8192. This will allow to support a greater + number of clients out of the box. + + This is a part of the implementation that is systemd-specific. + + Returns False if the setting of the nofile limit needs to be skipped. + """ + dirsrv_systemd = "/etc/sysconfig/dirsrv.systemd" + if os.path.exists(dirsrv_systemd): # We need to enable LimitNOFILE=8192 in the dirsrv@.service # Since 389-ds-base-1.2.10-0.8.a7 the configuration of the # service parameters is performed via # /etc/sysconfig/dirsrv.systemd file which is imported by systemd # into dirsrv@.service unit - replacevars = {'LimitNOFILE':'8192'} - ipautil.inifile_replace_variables(dirsrv_systemd, 'service', replacevars=replacevars) + replacevars = {'LimitNOFILE': str(num)} + ipautil.inifile_replace_variables(dirsrv_systemd, + 'service', + replacevars=replacevars) selinux.restore_context(dirsrv_systemd) - ipautil.run(["/bin/systemctl", "--system", "daemon-reload"],raiseonerr=False) + ipautil.run(["/bin/systemctl", "--system", "daemon-reload"], + raiseonerr=False) + + return True def restart(self, instance_name="", capture_output=True, wait=True): if len(instance_name) > 0: diff --git a/ipapython/platform/redhat/service.py b/ipapython/platform/redhat/service.py index 61511b489..6e8097ca8 100644 --- a/ipapython/platform/redhat/service.py +++ b/ipapython/platform/redhat/service.py @@ -25,6 +25,7 @@ from ipapython.ipa_log_manager import root_logger from ipapython.platform import base from ipalib import api + class RedHatService(base.PlatformService): def __wait_for_open_ports(self, instance_name=""): """ @@ -107,11 +108,74 @@ class RedHatHTTPDService(RedHatService): time.sleep(5) self.start(instance_name, capture_output, wait) + +class RedHatDirectoryService(RedHatService): + + # This has been moved from dsinstance.py here to platform-level + # to continue support sysV services + + def tune_nofile_platform(self, num=8192, fstore=None): + """ + Increase the number of files descriptors available to directory server + from the default 1024 to 8192. This will allow to support a greater + number of clients out of the box. + + This is a part of the implementation that is sysV-specific. + + Returns False if the setting of the nofile limit needs to be skipped. + """ + + DS_USER = 'dirsrv' + + # check limits.conf + need_limits = True + + with open("/etc/security/limits.conf", "r") as f: + for line in f: + sline = line.strip() + if not sline.startswith(DS_USER) or sline.find('nofile') == -1: + continue + + # ok we already have an explicit entry for user/nofile + need_limits = False + + # check sysconfig/dirsrv + need_sysconf = True + + with open("/etc/sysconfig/dirsrv", "r") as f: + for line in f: + sline = line.strip() + if not sline.startswith('ulimit') or sline.find('-n') == -1: + continue + + # ok we already have an explicit entry for file limits + need_sysconf = False + + #if sysconf or limits are set avoid messing up and defer to the admin + if need_sysconf and need_limits: + if fstore: + fstore.backup_file("/etc/security/limits.conf") + + with open("/etc/security/limits.conf", "a+") as f: + f.write('%s\t\t-\tnofile\t\t%s\n' % (DS_USER, str(num))) + + with open("/etc/sysconfig/dirsrv", "a+") as f: + f.write('ulimit -n %s\n' % str(num)) + + else: + root_logger.info("Custom file limits are already set! Skipping\n") + return False + + return True + + def redhat_service(name): if name == 'sshd': return RedHatSSHService(name) elif name == 'httpd': return RedHatHTTPDService(name) + elif name == 'dirsrv': + return RedHatDirectoryService(name) return RedHatService(name) class RedHatServices(base.KnownServices): |