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)
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))
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')
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')
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))
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))
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))
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) )
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)
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))
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)
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)
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)
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')
def reload(): '''Reload apache''' setup_vhost() fs.sh_rm('/etc/apache2/sites-enabled/000-default', sudo=True) env.sudo('service apache2 restart')
def run_cmd(cmd, sudo=False, capture=True): if sudo: return env.sudo(cmd, capture=capture) else: return env.run(cmd, capture=capture)
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)
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))
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)
def sudo(self, *args, **kwargs): '''Pass the custom env var to sudo.''' return env.sudo(context={self.key: self.value}, *args, **kwargs)
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)