Пример #1
0
def sh_pip_install(pkgs, cmd_path='pip', sudo=True):
    args = [
        cmd_path,
        'install',
        #'--use-mirrors',  # unavailable on deb6 pip
    ]

    if env.pypi_package_download_cache:
        cache_dir = env.pypi_package_download_cache.format(
            username=users.get_username()
        )
        if not os.path.exists(cache_dir):
            os.makedirs(cache_dir)

        extra = ['--download-cache={0}'.format(cache_dir)]
        args.extend(extra)

    pkgs = list(set(pkgs))  # remove duplicate packages, pip complains

    args.extend(pkgs)
    args = ' '.join(args)

    if sudo:
        env.sudo(args)
    else:
        env.run(args)
Пример #2
0
def start_services():
    zcpenv = ZcpEnv.get()

    cfg = join(zcpenv.fakeroot, 'etc', 'zarafa', 'licensed.cfg')
    env.run('{0} -c {1}'.format(zcpenv.zarafa_licensed_bin, cfg))

    cfg = join(zcpenv.fakeroot, 'etc', 'zarafa', 'server.cfg')
    env.sudo('{0} -c {1}'.format(zcpenv.zarafa_server_bin, cfg))
Пример #3
0
def stop():
    ldap_env = LdapEnv.get()

    if ldap_env.is_tmp_daemon:
        pid = ldap_env.get_pid()
        if pid:
            proc.sh_kill_wait(pid, 'slapd', sudo=True)
    else:
        env.sudo('service slapd stop')
Пример #4
0
def start():
    ldap_env = LdapEnv.get()

    if ldap_env.is_tmp_daemon:
        args = ldap_env.slapd_args
        args = ' '.join(args)
        with warn_only():
            proc.run_cmd(args, sudo=True)
    else:
        env.sudo('service slapd start')
Пример #5
0
def populate_database():
    puth('Populating database')
    with fs.mkstemp() as fp:
        content = ldif.get_base_structure()
        open(fp, 'wt').write(content)

        env.sudo('ldapadd -x -D {0} -w {1} -f {2}'.format(
            env.ldap_admin_dn,
            env.ldap_admin_pw,
            fp))
Пример #6
0
def load_module_refint():
    with fs.mkstemp() as fp:
        content = ldif.get_mod_refint()
        open(fp, 'wt').write(content)
        env.sudo('ldapadd -Y EXTERNAL -H ldapi:/// -f {0}'.format(fp))

    with fs.mkstemp() as fp:
        content = ldif.get_overlay_refint()
        open(fp, 'wt').write(content)
        env.sudo('ldapadd -Y EXTERNAL -H ldapi:/// -f {0}'.format(fp))
Пример #7
0
def sh_yum_install(pkgs):
    rest_pkgs = []
    for pkg in pkgs:
        if re.match('''^(['"]).*(['"])$''', pkg):
            env.sudo('yum -y groupinstall {0}'.format(pkg))
        else:
            rest_pkgs.append(pkg)

    if rest_pkgs:
        pkgs = ' '.join(rest_pkgs)
        env.sudo('yum -y install {0}'.format(pkgs))
Пример #8
0
def _create_linux_user(username, site_url, group):
    """ Create a new linux user to env.run programs and own project files and folders on the webserver. """
    # Bash command id user returns error code 1 if user does not exist and code 0 if user exists.
    # To avoid Fabric raising an exception on an expected shell error,
    # return code ($?) is echoded to stdout and passed to python as a string.
    user_exists = env.run('id {linux_user}; echo $?'.format(linux_user=username,))
    user_exists = user_exists.split()[-1] == '0'
    if not user_exists:
        # Create user and add to the default linux user group.
        env.sudo('useradd --shell /bin/bash -g {linux_group} -M -c "runs gunicorn for {site_url}" {linux_user}'.format(
            linux_group=group, site_url=site_url, linux_user=username)
        )
Пример #9
0
def reload():
    """
    Reload supervisor config
    Restart supervisor website
    Reload nginx config (without restart)
    Start nginx
    """
    _dynamic_env()
    env.sudo('supervisorctl reread', shell=False)
    env.sudo('supervisorctl add %(server_name)s' % env, shell=False)
    env.sudo('supervisorctl restart %(server_name)s' % env, shell=False)
    with warn_only():
        env.sudo('nginx', shell=False)
    env.sudo('nginx -s reload', shell=False)
Пример #10
0
def create_database():
    ldap_env = LdapEnv.get()

    if not fs.sh_dir_exists(ldap_env.database_path, sudo=True):
        puth('Creating database directory {0}'.format(ldap_env.database_path))
        fs.sh_makedirs(ldap_env.database_path,
                       user=ldap_env.ldap_user,
                       group=ldap_env.ldap_group,
                       sudo=True)

    with fs.mkstemp() as fp:
        content = ldif.get_database()
        open(fp, 'wt').write(content)

        puth('Creating database config for {0}'.format(env.ldap_database_name))
        env.sudo('ldapadd -Y EXTERNAL -H ldapi:/// -f {0}'.format(fp))
Пример #11
0
def detect_database_dn():
    content = env.sudo(
        'ldapsearch -Y EXTERNAL -H ldapi:/// -b "{0}" "(olcSuffix={1})" "dn" -LLL'
        .format(env.ldap_config_dn, env.ldap_dit_dn),
        capture=True)

    return text.safefind('(?m)^dn: (.*?),.*$', content)
Пример #12
0
def detect_database_dn():
    content = env.sudo(
        'ldapsearch -Y EXTERNAL -H ldapi:/// -b "{0}" "(olcSuffix={1})" "dn" -LLL'.format(
        env.ldap_config_dn,
        env.ldap_dit_dn),
        capture=True)

    return text.safefind('(?m)^dn: (.*?),.*$', content)
Пример #13
0
def get_database():
    ldap_env = LdapEnv.get()

    indexes = ''
    for fname, vals in sorted(env.ldap_indexes.items()):
        indexes += 'olcDbIndex: {0} {1}\n'.format(fname, vals)

    pw_hash = env.sudo('slappasswd -s {0}'.format(env.ldap_admin_pw), capture=True)
    context = {
        '__DB_PATH__': ldap_env.database_path,
        '__DIT_DN__': env.ldap_dit_dn,
        '__DIT_ADMIN_DN__': env.ldap_admin_dn,
        '__ADMIN_PW__': pw_hash,
        '__LDAP_INDEXES__': indexes,
    }

    return get_ldap_tmpl('database.ldif', context)
Пример #14
0
def get_database():
    ldap_env = LdapEnv.get()

    indexes = ''
    for fname, vals in sorted(env.ldap_indexes.items()):
        indexes += 'olcDbIndex: {0} {1}\n'.format(fname, vals)

    pw_hash = env.sudo('slappasswd -s {0}'.format(env.ldap_admin_pw),
                       capture=True)
    context = {
        '__DB_PATH__': ldap_env.database_path,
        '__DIT_DN__': env.ldap_dit_dn,
        '__DIT_ADMIN_DN__': env.ldap_admin_dn,
        '__ADMIN_PW__': pw_hash,
        '__LDAP_INDEXES__': indexes,
    }

    return get_ldap_tmpl('database.ldif', context)
Пример #15
0
def yum():
    env.sudo('yum -y update')
    env.sudo('yum -y groupinstall "Development tools"')
    env.sudo('yum -y install zlib-devel')
    env.sudo('yum -y install python27-devel python27-tools')
    env.sudo('yum -y install python27-pip')
    env.sudo('yum -y install ibxml2-devel libxslt-devel geos')
    env.sudo('yum -y install freetype-devel freetype-demos libjpeg* pngquant lcms2* libtiff* openjpeg* libwebp-devel tcl-devel tk-devel')
    env.sudo('yum install -y gcc openssl-devel libyaml-devel libffi-devel readline-devel zlib-devel gdbm-devel ncurses-devel')
    # Adding extra packages
    env.sudo('yum-config-manager --enable epel')
    env.sudo('yum -y install postgresql94-libs postgresql94-devel')
    env.sudo('yum -y install nginx')
    env.sudo('curl -sL https://rpm.nodesource.com/setup_5.x | bash -')
    env.sudo('yum -y install nodejs')
    #env.sudo('yum -y install uwsgi uwsgi-plugin-python')
    env.sudo('npm i -g bower gulp yo')
Пример #16
0
def reload():
    '''Reload apache'''
    setup_vhost()
    fs.sh_rm('/etc/apache2/sites-enabled/000-default', sudo=True)
    env.sudo('service apache2 restart')
Пример #17
0
def reload():
    '''Reload apache'''
    setup_vhost()
    fs.sh_rm('/etc/apache2/sites-enabled/000-default', sudo=True)
    env.sudo('service apache2 restart')
Пример #18
0
def run_cmd(cmd, sudo=False, capture=True):
    if sudo:
        return env.sudo(cmd, capture=capture)
    else:
        return env.run(cmd, capture=capture)
Пример #19
0
def reboot():
    """ Restart all services connected to website """
    site_url = env.host
    _enable_site(site_url, start=False)
    env.sudo('service nginx restart; service supervisorctl restart')
    _enable_site(site_url)
Пример #20
0
def load_schema():
    puth('Loading schema')
    with fs.mkstemp() as fp:
        content = ldif.get_zarafa_schema()
        open(fp, 'wt').write(content)
        env.sudo('ldapadd -Y EXTERNAL -H ldapi:/// -f {0}'.format(fp))
Пример #21
0
def setup_local_zcp():
    zcpenv = ZcpEnv.get()

    puts('Setting up MAPI_CONFIG_PATH')
    sys_mapi_config_path = '/etc/mapi'
    if fs.sh_dir_exists(sys_mapi_config_path):
        warn('{0} directory exists, cannot set up symlink'.format(
            sys_mapi_config_path))

    else:
        local_mapi_config_path = join(zcpenv.repo_basedir, 'provider',
                                      'client')
        fs.sh_ln(local_mapi_config_path, sys_mapi_config_path, sudo=True)

    puts('Setting up LD_LIBRARY_PATH')
    ld_conf = '/etc/ld.so.conf.d'
    with fs.mkstemp() as fp:
        dest = join(ld_conf, 'zarafa.conf')

        paths = [
            join(zcpenv.repo_basedir, 'provider', 'client', '.libs'),
        ]
        paths = '\n'.join(paths) + '\n'
        open(fp, 'wt').write(paths)

        fs.sh_copyfile(fp, dest, sudo=True)
        fs.sh_chmod(dest, 644, sudo=True)

        env.sudo('ldconfig')

    puts('Setting up PYTHONPATH')
    pyhome = dirname(os.__file__)
    pkg_dir_dir = join(pyhome, 'dist-packages')
    with fs.mkstemp() as fp:
        dest = join(pkg_dir_dir, 'MAPI.pth')

        paths = [
            join(zcpenv.repo_basedir, 'swig', 'python'),
            join(zcpenv.repo_basedir, 'swig', 'python', '.libs'),
        ]
        paths = '\n'.join(paths) + '\n'
        open(fp, 'wt').write(paths)

        fs.sh_copyfile(fp, dest, sudo=True)
        fs.sh_chmod(dest, 644, sudo=True)

    puts('Setting up ZARAFA_SOCKET')
    src = join(zcpenv.fakeroot, 'var', 'run', 'zarafa')
    if not os.path.exists(src):
        warn('Path does not exist: {0}'.format(src))

    else:
        dest = '/var/run/zarafa'
        if fs.sh_exists(dest):
            fs.sh_rm(dest, sudo=True)
        fs.sh_ln(src, dest, sudo=True)

    puts('Setting up ssl client cert')
    src = join('etc', 'zarafa', 'ssl', 'client.pem')
    destdir = '/etc/zarafa/sslkeys'
    dest = join(destdir, 'client.pem')

    if not fs.sh_exists(dest):
        fs.sh_makedirs(destdir, sudo=True)
        fs.sh_copyfile(src, dest, sudo=True)
Пример #22
0
 def sudo(self, *args, **kwargs):
     '''Pass the custom env var to sudo.'''
     return env.sudo(context={self.key: self.value}, *args, **kwargs)
Пример #23
0
def run_cmd(cmd, sudo=False, capture=True):
    if sudo:
        return env.sudo(cmd, capture=capture)
    else:
        return env.run(cmd, capture=capture)
Пример #24
0
 def sudo(self, *args, **kwargs):
     '''Pass the custom env var to sudo.'''
     return env.sudo(context={self.key: self.value}, *args, **kwargs)
Пример #25
0
def copy_nginx_conf():
    """
    update nginx settings for the site and make them available in sites-available
    """
    env.sudo('cp /srv/%(name)s/adomattic/conf/%(conf_path)s/nginx/%(conf_path)s.conf /etc/nginx/sites-available/%(conf_path)s.conf' % env)