Exemplo n.º 1
0
def install_nginx():
    """
    Install NGINX and make it use certs.
    """
    if system.distrib_id() == 'Debian':
        require_file(url='http://nginx.org/packages/keys/nginx_signing.key')
        deb.add_apt_key('nginx_signing.key')
        su_delete('nginx_signing.key')

        url = 'http://nginx.org/packages/debian/'
        distrib = 'squeeze'
        if system.distrib_release().startswith('7'):
            distrib = 'wheezy'
        require.deb.source('nginx', url, distrib, 'nginx')

        require.deb.package('nginx')
        contents = PROXIED_SITE_TEMPLATE % {
            'server_name': 'cozy',
            'port': 443,
            'proxy_url': 'http://127.0.0.1:9104'
        }
        require.files.file('/etc/nginx/conf.d/cozy.conf', contents=contents,
                use_sudo=True)
        service.restart('nginx')

    else:
        require.deb.ppa("ppa:nginx/stable")

        require.nginx.site("cozy",
            template_contents=PROXIED_SITE_TEMPLATE,
            enabled=True,
            port=443,
            proxy_url='http://127.0.0.1:9104'
        )
    print(green("Nginx successfully installed."))
Exemplo n.º 2
0
def uninstall_couchdb():
    """
    Install CouchDB 1.3.0
    """
    require_file(url='http://apache.crihan.fr/dist/couchdb/source/' +
                 '1.3.0/apache-couchdb-1.3.0.tar.gz')
    run('tar -xzvf apache-couchdb-1.3.0.tar.gz')
    with cd('apache-couchdb-1.3.0'):
        sudo('./configure')
        sudo('make uninstall')
        sudo('make distclean')
    su_delete('/usr/local/share/couchdb')
    su_delete('/usr/local/lib/couchdb')
    su_delete('/usr/local/var/lib/couchdb')
    su_delete('/usr/local/var/log/couchdb')
    su_delete('/usr/local/var/run/couchdb')
    su_delete('/usr/local/share/doc/couchdb')
    su_delete('/usr/local/bin/couchjs')
    su_delete('/usr/local/bin/couchdb')
    su_delete('apache-couchdb-1.3.0')
    su_delete('apache-couchdb-1.3.0.tar.gz')
    su_delete('/etc/supervisor/conf.d/couchdb.conf')
    su_delete('/etc/cozy/couchdb.login')
    supervisor.update_config()
    print(green("CouchDB 1.3.0 successfully uninstalled"))
Exemplo n.º 3
0
def require_keymap(keymap):
    """
    Check a keymap
    """
    conf = 'KEYMAP=%s' % keymap
    config_file = '/etc/vconsole.conf'
    require_file(config_file, conf)
Exemplo n.º 4
0
def install_node08():
    '''
    Install Node 0.8.18 (0.18.21 for ARM hardwares)
    '''

    if not is_arm():
        require.nodejs.installed_from_source('0.8.18')
        print(green('Node 0.8.18 successfully installed'))
    else:
        version = '0.8.21'
        folder = 'node-v%s-linux-arm-pi' % version
        filename = folder + '.tar.gz'
        require.files.directory('/opt/node', use_sudo=True)
        archive_path = 'http://nodejs.org/dist/v%s/%s' % (version, filename)
        require_file(url=archive_path)
        run('tar -xzf %s' % filename)
        sudo('cp -r %s/* /opt/node' % folder)
        sudo('ln -s /opt/node/bin/node  /usr/local/bin/node')
        sudo('ln -s /opt/node/bin/npm  /usr/local/bin/npm')
        su_delete(folder)
        su_delete(filename)
        result = run('node -v')
        if '0.8.21' in result:
            print(green('Node 0.8.21 successfully installed'))
        else:
            print(red('Something went wrong while installing Node 0.8.21'))
Exemplo n.º 5
0
def require_keymap(keymap):
    """
    Check a keymap
    """
    conf = 'KEYMAP=%s' % keymap
    config_file = '/etc/vconsole.conf'
    require_file(config_file, conf)
Exemplo n.º 6
0
def uninstall_couchdb():
    '''
    Uninstall CouchDB 1.3.0 or 1.5.0
    '''
    version = get_couchdb_version()
    require_file(
        url='http://apache.crihan.fr/dist/couchdb/source/' +
        '%s/apache-couchdb-%s.tar.gz' % (version, version))
    run('tar -xzvf apache-couchdb-%s.tar.gz' % version)
    with cd('apache-couchdb-%s' % version):
        sudo('./configure')
        sudo('make uninstall')
        sudo('make distclean')
    su_delete('/usr/local/share/couchdb')
    su_delete('/usr/local/lib/couchdb')
    su_delete('/usr/local/var/lib/couchdb')
    su_delete('/usr/local/var/log/couchdb')
    su_delete('/usr/local/var/run/couchdb')
    su_delete('/usr/local/share/doc/couchdb')
    su_delete('/usr/local/bin/couchjs')
    su_delete('/usr/local/bin/couchdb')
    su_delete('apache-couchdb-%s' % version)
    su_delete('apache-couchdb-%s.tar.gz' % version)
    su_delete('/etc/supervisor/conf.d/couchdb.conf')
    su_delete('/etc/cozy/couchdb.login')
    supervisor.update_config()
    print(green('CouchDB %s successfully uninstalled' % version))
Exemplo n.º 7
0
def uninstall_couchdb():
    '''
    Install CouchDB 1.3.0
    '''
    require_file(
        url='http://apache.crihan.fr/dist/couchdb/source/' +
        '1.3.0/apache-couchdb-1.3.0.tar.gz')
    run('tar -xzvf apache-couchdb-1.3.0.tar.gz')
    with cd('apache-couchdb-1.3.0'):
        sudo('./configure')
        sudo('make uninstall')
        sudo('make distclean')
    su_delete('/usr/local/share/couchdb')
    su_delete('/usr/local/lib/couchdb')
    su_delete('/usr/local/var/lib/couchdb')
    su_delete('/usr/local/var/log/couchdb')
    su_delete('/usr/local/var/run/couchdb')
    su_delete('/usr/local/share/doc/couchdb')
    su_delete('/usr/local/bin/couchjs')
    su_delete('/usr/local/bin/couchdb')
    su_delete('apache-couchdb-1.3.0')
    su_delete('apache-couchdb-1.3.0.tar.gz')
    su_delete('/etc/supervisor/conf.d/couchdb.conf')
    su_delete('/etc/cozy/couchdb.login')
    supervisor.update_config()
    print(green('CouchDB 1.3.0 successfully uninstalled'))
Exemplo n.º 8
0
def uptodate_index(quiet=True, max_age=86400):
    """
    Require an up-to-date package index.

    This will update the package index (using ``apt-get update``) if the last
    update occured more than *max_age* ago.

    *max_age* can be specified either as an integer (a value in seconds),
    or as a dictionary whose keys are units (``seconds``, ``minutes``,
    ``hours``, ``days``, ``weeks``, ``months``) and values are integers.
    The default value is 1 hour.

    Examples: ::

        from fabtools import require

        # Update index if last time was more than 1 day ago
        require.deb.uptodate_index(max_age={'day': 1})

        # Update index if last time was more than 1 hour and 30 minutes ago
        require.deb.uptodate_index(max_age={'hour': 1, 'minutes': 30})

    """

    from fabtools.require import file as require_file
    require_file('/etc/apt/apt.conf.d/15fabtools-update-stamp', contents='''\
APT::Update::Post-Invoke-Success {"touch /var/lib/apt/periodic/fabtools-update-success-stamp 2>/dev/null || true";};
''', use_sudo=True)

    if system.time() - last_update_time() > _to_seconds(max_age):
        update_index(quiet=quiet)
Exemplo n.º 9
0
def uptodate_index(quiet=True, max_age=86400):
    """
    Require an up-to-date package index.

    This will update the package index (using ``apt-get update``) if the last
    update occured more than *max_age* ago.

    *max_age* can be specified either as an integer (a value in seconds),
    or as a dictionary whose keys are units (``seconds``, ``minutes``,
    ``hours``, ``days``, ``weeks``, ``months``) and values are integers.
    The default value is 1 hour.

    Examples: ::

        from fabtools import require

        # Update index if last time was more than 1 day ago
        require.deb.uptodate_index(max_age={'day': 1})

        # Update index if last time was more than 1 hour and 30 minutes ago
        require.deb.uptodate_index(max_age={'hour': 1, 'minutes': 30})

    """

    from fabtools.require import file as require_file
    require_file('/etc/apt/apt.conf.d/15fabtools-update-stamp',
                 contents='''\
APT::Update::Post-Invoke-Success {"touch /var/lib/apt/periodic/fabtools-update-success-stamp 2>/dev/null || true";};
''',
                 use_sudo=True)

    if system.time() - last_update_time() > _to_seconds(max_age):
        update_index(quiet=quiet)
Exemplo n.º 10
0
def install_node08():
    '''
    Install Node 0.8.18 (0.18.21 for ARM hardwares)
    '''

    if not is_arm():
        require.nodejs.installed_from_source('0.8.18')
        print(green('Node 0.8.18 successfully installed'))
    else:
        version = '0.8.21'
        folder = 'node-v%s-linux-arm-pi' % version
        filename = folder + '.tar.gz'
        require.files.directory('/opt/node', use_sudo=True)
        archive_path = 'http://nodejs.org/dist/v%s/%s' % (version, filename)
        require_file(url=archive_path)
        run('tar -xzf %s' % filename)
        sudo('cp -r %s/* /opt/node' % folder)
        sudo('ln -s /opt/node/bin/node  /usr/local/bin/node')
        sudo('ln -s /opt/node/bin/npm  /usr/local/bin/npm')
        su_delete(folder)
        su_delete(filename)
        result = run('node -v')
        if '0.8.21' in result:
            print(green('Node 0.8.21 successfully installed'))
        else:
            print(red('Something went wrong while installing Node 0.8.21'))
Exemplo n.º 11
0
def test_flag_is_set_when_watched_file_is_modified(watched_file):

    from fabtools.files import watch
    from fabtools.require import file as require_file

    with watch('watched') as f:
        require_file('watched', contents='bbb')

    assert f.changed
Exemplo n.º 12
0
def test_flag_is_set_when_watched_file_is_modified(watched_file):

    from fabtools.files import watch
    from fabtools.require import file as require_file

    with watch('watched') as f:
        require_file('watched', contents='bbb')

    assert f.changed
Exemplo n.º 13
0
def test_run_query_without_supplying_the_password(mysql_server, mysql_user):

    from fabtools.mysql import query

    try:
        require_file('.my.cnf', contents="[mysql]\npassword=foo")
        with settings(mysql_user='******'):
            query('select 2;')
    finally:
        run('rm -f .my.cnf')
Exemplo n.º 14
0
def default_locale(name):
    """
    Require the locale to be the default.
    """
    from fabtools.require import file as require_file

    # Ensure the locale is available
    locale(name)

    # Make it the default
    contents = 'LANG="%s"\n' % name
    require_file('/etc/default/locale', contents, use_sudo=True)
Exemplo n.º 15
0
def test_run_query_without_supplying_the_password(mysql_server, mysql_user):

    from fabtools.mysql import query

    username, password = mysql_user

    try:
        require_file('.my.cnf', contents="[mysql]\npassword={0}".format(password))
        with settings(mysql_user=username):
            query('select 2;', use_sudo=False)
    finally:
        run('rm -f .my.cnf')
Exemplo n.º 16
0
def test_callback_is_called_when_watched_file_is_modified(watched_file):

    from fabtools.files import watch
    from fabtools.require import file as require_file

    try:
        with watch('watched', callback=partial(require_file, 'modified1')):
            require_file('watched', contents='bbb')

        assert is_file('modified1')

    finally:
        run('rm -f modified1')
Exemplo n.º 17
0
def test_require_file_from_url():
    """
    Require that a file exists, whose contents should come from a URL
    """
    from fabtools.require import file as require_file

    try:
        require_file(url='http://www.google.com/robots.txt')

        assert is_file('robots.txt')

    finally:
        run('rm -f robots.txt')
Exemplo n.º 18
0
def test_callback_is_called_when_watched_file_is_modified(watched_file):

    from fabtools.files import watch
    from fabtools.require import file as require_file

    try:
        with watch('watched', callback=partial(require_file, 'modified1')):
            require_file('watched', contents='bbb')

        assert is_file('modified1')

    finally:
        run('rm -f modified1')
Exemplo n.º 19
0
def test_require_file_from_url():
    """
    Require that a file exists, whose contents should come from a URL
    """
    from fabtools.require import file as require_file

    try:
        require_file(url='http://www.google.com/robots.txt')

        assert is_file('robots.txt')

    finally:
        run('rm -f robots.txt')
Exemplo n.º 20
0
def uninstall_node08():
    """
    Uninstall node 0.8.9
    """

    sudo("npm uninstall npm")
    require_file(url='http://nodejs.org/dist/v0.8.9/node-v0.8.9.tar.gz')
    sudo("tar -xzf node-v0.8.9.tar.gz")
    with cd('node-v0.8.9'):
        sudo('./configure')
        sudo("make uninstall")
        sudo("make distclean")
    su_delete("node-v0.8.9*")
    print(green("Node 0.8.9 successfully uninstalled"))
Exemplo n.º 21
0
def installed_from_source(version=VERSION):
    """
    Require Redis to be installed from source.

    The compiled binaries will be installed in ``/opt/redis-{version}/``.
    """
    from fabtools.require import directory as require_directory
    from fabtools.require import file as require_file
    from fabtools.require import user as require_user
    from fabtools.require.deb import packages as require_deb_packages
    from fabtools.require.rpm import packages as require_rpm_packages

    family = distrib_family()

    if family == 'debian':
        require_deb_packages([
            'build-essential',
        ])

    elif family == 'redhat':
        require_rpm_packages([
            'gcc',
            'make',
        ])

    require_user('redis', home='/var/lib/redis', system=True)
    require_directory('/var/lib/redis', owner='redis', use_sudo=True)

    dest_dir = '/opt/redis-%(version)s' % locals()
    require_directory(dest_dir, use_sudo=True, owner='redis')

    if not is_file('%(dest_dir)s/redis-server' % locals()):

        with cd('/tmp'):

            # Download and unpack the tarball
            tarball = 'redis-%(version)s.tar.gz' % locals()
            url = _download_url(version) + tarball
            require_file(tarball, url=url)
            run('tar xzf %(tarball)s' % locals())

            # Compile and install binaries
            with cd('redis-%(version)s' % locals()):
                run('make')

                for filename in BINARIES:
                    run_as_root(
                        'cp -pf src/%(filename)s %(dest_dir)s/' % locals())
                    run_as_root(
                        'chown redis: %(dest_dir)s/%(filename)s' % locals())
Exemplo n.º 22
0
def install_from_source(version=DEFAULT_VERSION):
    """
    Install Node JS from source.

    ::

        import fabtools

        # Install Node.js
        fabtools.nodejs.install_nodejs()

    .. note:: This function may not work for old versions of Node.js.

    """

    from fabtools.require.deb import packages as require_deb_packages
    from fabtools.require.rpm import packages as require_rpm_packages
    from fabtools.require import file as require_file

    family = distrib_family()

    if family == 'debian':
        require_deb_packages([
            'build-essential',
            'libssl-dev',
            'python',
        ])

    elif family == 'redhat':
        require_rpm_packages([
            'gcc',
            'gcc-c++',
            'make',
            'openssl-devel',
            'python',
        ])

    filename = 'node-v%s.tar.gz' % version
    foldername = filename[0:-7]

    require_file(url='http://nodejs.org/dist/v%(version)s/%(filename)s' % {
        'version': version,
        'filename': filename,
    })
    run('tar -xzf %s' % filename)
    with cd(foldername):
        run('./configure')
        run('make -j%d' % (cpus() + 1))
        run_as_root('make install')
    run('rm -rf %(filename)s %(foldername)s' % locals())
Exemplo n.º 23
0
def test_file_changes_ownership():

    from fabtools.files import owner
    from fabtools.require.files import file as require_file

    try:
        run('touch foo')
        assert owner('foo') == env.user

        require_file('foo', use_sudo=True)
        assert owner('foo') == 'root'

    finally:
        run_as_root('rm -f foo')
Exemplo n.º 24
0
def uninstall_node08():
    """
    Uninstall node 0.8.9
    """

    sudo("npm uninstall npm")
    require_file(url='http://nodejs.org/dist/v0.8.9/node-v0.8.9.tar.gz')
    sudo("tar -xzf node-v0.8.9.tar.gz")
    with cd('node-v0.8.9'):
        sudo('./configure')
        sudo("make uninstall")
        sudo("make distclean")
    su_delete("node-v0.8.9*")
    print(green("Node 0.8.9 successfully uninstalled"))
Exemplo n.º 25
0
def test_require_file():
    """
    Require that a file exists, whose contents should come from a URL
    """
    from fabtools.require import file as require_file

    try:
        require_file('foo')

        assert is_file('foo')
        assert run('cat foo') == ''

    finally:
        run('rm -f foo')
Exemplo n.º 26
0
def test_require_file():
    """
    Require that a file exists, whose contents should come from a URL
    """
    from fabtools.require import file as require_file

    try:
        require_file('foo')

        assert is_file('foo')
        assert run('cat foo') == ''

    finally:
        run('rm -f foo')
Exemplo n.º 27
0
def uninstall_node08():
    '''
    Uninstall node 0.8.18
    '''

    sudo('npm uninstall npm')
    require_file(url='http://nodejs.org/dist/v0.8.9/node-v0.8.18.tar.gz')
    sudo('tar -xzf node-v0.8.18.tar.gz')
    with cd('node-v0.8.18'):
        sudo('./configure')
        sudo('make uninstall')
        sudo('make distclean')
    su_delete('node-v0.8.18*')
    print(green('Node 0.8.18 successfully uninstalled'))
Exemplo n.º 28
0
def test_file_changes_ownership():

    from fabtools.files import owner
    from fabtools.require.files import file as require_file

    try:
        run('touch foo')
        assert owner('foo') == env.user

        require_file('foo', use_sudo=True)
        assert owner('foo') == 'root'

    finally:
        run_as_root('rm -f foo')
Exemplo n.º 29
0
def install_couchdb():
    '''
    Install CouchDB 1.3.0 or 1.5.0
    '''
    packages = [
        'erlang',
        'libicu-dev',
        'libcurl4-openssl-dev',
        'curl'
    ]

    if system.distrib_id() == 'Debian' \
            and system.distrib_release().startswith('6'):
        packages.append('libmozjs-dev')
    else:
        packages.append('libmozjs185-dev')
    require.deb.packages(packages)

    version = get_couchdb_version()

    require_file(
        url='http://apache.crihan.fr/dist/couchdb/source/' +
        '%s/apache-couchdb-%s.tar.gz' % (version, version))
    run('tar -xzvf apache-couchdb-%s.tar.gz' % version)
    with cd('apache-couchdb-%s' % version):
        run('./configure; make')
        result = sudo('make install')
        installed = result.find('You have installed Apache CouchDB,' +
                                ' time to relax.')
        if installed == -1:
            print_failed('couchdb')
    su_delete('apache-couchdb-%s' % version)
    su_delete('rm -rf apache-couchdb-%s.tar.gz' % version)

    require.users.user('couchdb', home='/usr/local/var/lib/couchdb')
    sudo('chown -R couchdb:couchdb /usr/local/etc/couchdb')
    sudo('chown -R couchdb:couchdb /usr/local/var/lib/couchdb')
    sudo('chown -R couchdb:couchdb /usr/local/var/log/couchdb')
    sudo('chown -R couchdb:couchdb /usr/local/var/run/couchdb')
    sudo('chmod 0770 /usr/local/etc/couchdb')
    sudo('chmod 0770 /usr/local/var/lib/couchdb')
    sudo('chmod 0770 /usr/local/var/log/couchdb')
    sudo('chmod 0770 /usr/local/var/run/couchdb')

    require.supervisor.process(
        'couchdb', user='******',
        command='couchdb', autostart='true',
        environment='HOME=/usr/local/var/lib/couchdb')
    print(green('CouchDB %s successfully installed' % version))
Exemplo n.º 30
0
def test_empty_file_has_correct_permissions():

    from fabtools.files import owner, group, mode
    from fabtools.require.files import file as require_file

    try:
        run_as_root('touch foo')
        require_file('bar', use_sudo=True)

        assert owner('foo') == owner('bar')
        assert group('foo') == group('bar')
        assert mode('foo') == mode('bar')

    finally:
        run_as_root('rm -f foo bar')
Exemplo n.º 31
0
def test_empty_file_has_correct_permissions():

    from fabtools.files import owner, group, mode
    from fabtools.require.files import file as require_file

    try:
        run_as_root('touch foo')
        require_file('bar', use_sudo=True)

        assert owner('foo') == owner('bar')
        assert group('foo') == group('bar')
        assert mode('foo') == mode('bar')

    finally:
        run_as_root('rm -f foo bar')
Exemplo n.º 32
0
def allow_sudo_user(setup_package):
    """
    Fix sudo config if needed

    Some Vagrant boxes come with a too restrictive sudoers config
    and only allow the vagrant user to run commands as root.
    """
    from fabtools.require import file as require_file
    require_file(
        '/etc/sudoers.d/fabtools',
        contents="vagrant ALL=(ALL) NOPASSWD:ALL\n",
        owner='root',
        mode='440',
        use_sudo=True,
    )
Exemplo n.º 33
0
def test_file_with_contents_has_correct_permissions():

    from fabtools.files import owner, group, mode
    from fabtools.require.files import file as require_file

    try:
        run_as_root('echo "something" > foo')
        require_file('bar', contents='something', use_sudo=True)

        assert owner('foo') == owner('bar')
        assert group('foo') == group('bar')
        assert mode('foo') == mode('bar')

    finally:
        run_as_root('rm -f foo bar')
Exemplo n.º 34
0
def test_file_with_contents_has_correct_permissions():

    from fabtools.files import owner, group, mode
    from fabtools.require.files import file as require_file

    try:
        run_as_root('echo "something" > foo')
        require_file('bar', contents='something', use_sudo=True)

        assert owner('foo') == owner('bar')
        assert group('foo') == group('bar')
        assert mode('foo') == mode('bar')

    finally:
        run_as_root('rm -f foo bar')
Exemplo n.º 35
0
def default_locale(name):
    """
    Require the locale to be the default.
    """
    from fabtools.require import file as require_file

    # Ensure the locale is available
    locale(name)

    # Make it the default
    contents = 'LANG="%s"\n' % name
    if distrib_id() == "Archlinux":
        config_file = '/etc/locale.conf'
    else:
        config_file = '/etc/default/locale'
    require_file(config_file, contents, use_sudo=True)
Exemplo n.º 36
0
def test_require_file_from_string():
    """
    Require that a file exists, whose contents should be this string
    """
    from fabtools.require import file as require_file

    try:
        bar_contents = "This is the contents of the bar file"

        require_file('bar', contents=bar_contents)

        assert is_file('bar')
        assert run('cat bar') == bar_contents

    finally:
        run('rm -f bar')
Exemplo n.º 37
0
def default_locale(name):
    """
    Require the locale to be the default.
    """
    from fabtools.require import file as require_file

    # Ensure the locale is available
    locale(name)

    # Make it the default
    contents = 'LANG="%s"\n' % name
    if distrib_id() == "Archlinux":
        config_file = '/etc/locale.conf'
    else:
        config_file = '/etc/default/locale'
    require_file(config_file, contents, use_sudo=True)
Exemplo n.º 38
0
def test_install_dependencies_from_package_json_file(nodejs, testdir):

    from fabtools.nodejs import install_dependencies, package_version, uninstall_package

    with cd(testdir):
        require_file(
            "package.json",
            contents=json.dumps({"name": "nodetest", "version": "1.0.0", "dependencies": {"underscore": "1.4.2"}}),
        )

        install_dependencies()

        assert is_file("node_modules/underscore/underscore.js")
        assert package_version("underscore", local=True) == "1.4.2"

        uninstall_package("underscore", local=True)
Exemplo n.º 39
0
def test_require_file_from_string():
    """
    Require that a file exists, whose contents should be this string
    """
    from fabtools.require import file as require_file

    try:
        bar_contents = "This is the contents of the bar file"

        require_file('bar', contents=bar_contents)

        assert is_file('bar')
        assert run('cat bar') == bar_contents

    finally:
        run('rm -f bar')
Exemplo n.º 40
0
def install_couchdb():
    """
    Install CouchDB 1.3.0
    """
    packages = [
        'erlang', 'libicu-dev', 'libmozjs185-dev', 'libcurl4-openssl-dev',
        'curl'
    ]

    # Uncomment thess lines when fabtools 0.14.0 will be out.
    #if system.distrib_id() == "Debian" \
    #and system.distrib_release().startswith('6.0'):
    #    packages.append('libmozjs-dev')
    #packages.append('libmozjs-dev')
    #else:
    #packages.append('libmozjs185-dev')
    require.deb.packages(packages)

    require_file(url='http://apache.crihan.fr/dist/couchdb/source/' +
                 '1.3.0/apache-couchdb-1.3.0.tar.gz')
    run('tar -xzvf apache-couchdb-1.3.0.tar.gz')
    with cd('apache-couchdb-1.3.0'):
        run('./configure; make')
        result = sudo('make install')
        installed = result.find(
            "You have installed Apache CouchDB, time to relax.")
        if installed == -1:
            print_failed("couchdb")
    run('rm -rf apache-couchdb-1.3.0')
    run('rm -rf apache-couchdb-1.3.0.tar.gz')

    require.users.user("couchdb", home='/usr/local/var/lib/couchdb')
    sudo('chown -R couchdb:couchdb /usr/local/etc/couchdb')
    sudo('chown -R couchdb:couchdb /usr/local/var/lib/couchdb')
    sudo('chown -R couchdb:couchdb /usr/local/var/log/couchdb')
    sudo('chown -R couchdb:couchdb /usr/local/var/run/couchdb')
    sudo('chmod 0770 /usr/local/etc/couchdb')
    sudo('chmod 0770 /usr/local/var/lib/couchdb')
    sudo('chmod 0770 /usr/local/var/log/couchdb')
    sudo('chmod 0770 /usr/local/var/run/couchdb')

    require.supervisor.process('couchdb',
                               user='******',
                               command='couchdb',
                               autostart='true',
                               environment='HOME=/usr/local/var/lib/couchdb')
    print(green("CouchDB 1.3.0 successfully installed"))
Exemplo n.º 41
0
def install_couchdb():
    """
    Install CouchDB 1.3.0
    """
    packages = [
        'erlang',
        'libicu-dev',
        'libmozjs185-dev',
        'libcurl4-openssl-dev',
        'curl'
    ]

    # Uncomment thess lines when fabtools 0.14.0 will be out.
    #if system.distrib_id() == "Debian" \
    #and system.distrib_release().startswith('6.0'):
    #    packages.append('libmozjs-dev')
    #packages.append('libmozjs-dev')
    #else:
    #packages.append('libmozjs185-dev')
    require.deb.packages(packages)

    require_file(url='http://apache.crihan.fr/dist/couchdb/source/' +
        '1.3.0/apache-couchdb-1.3.0.tar.gz')
    run('tar -xzvf apache-couchdb-1.3.0.tar.gz')
    with cd('apache-couchdb-1.3.0'):
        run('./configure; make')
        result = sudo('make install')
        installed = result.find("You have installed Apache CouchDB, time to relax.")
        if installed == -1:
            print_failed("couchdb")
    run('rm -rf apache-couchdb-1.3.0')
    run('rm -rf apache-couchdb-1.3.0.tar.gz')

    require.users.user("couchdb", home='/usr/local/var/lib/couchdb')
    sudo('chown -R couchdb:couchdb /usr/local/etc/couchdb')
    sudo('chown -R couchdb:couchdb /usr/local/var/lib/couchdb')
    sudo('chown -R couchdb:couchdb /usr/local/var/log/couchdb')
    sudo('chown -R couchdb:couchdb /usr/local/var/run/couchdb')
    sudo('chmod 0770 /usr/local/etc/couchdb')
    sudo('chmod 0770 /usr/local/var/lib/couchdb')
    sudo('chmod 0770 /usr/local/var/log/couchdb')
    sudo('chmod 0770 /usr/local/var/run/couchdb')

    require.supervisor.process('couchdb', user='******',
        command='couchdb', autostart='true',
        environment='HOME=/usr/local/var/lib/couchdb')
    print(green("CouchDB 1.3.0 successfully installed"))
Exemplo n.º 42
0
def uninstall_node08():
    '''
    Uninstall node 0.8.18
    '''

    sudo('npm uninstall npm')
    version = '0.8.18'
    folder = 'node-v%s' % version
    filename = folder + '.tar.gz'
    require_file(url='http://nodejs.org/dist/v%s/%s' % (version, filename))
    sudo('tar -xzf %s' % filename)

    with cd('%s' % folder):
        sudo('./configure')
        sudo('make uninstall')
        sudo('make distclean')
    su_delete('%s*' % folder)
    print(green('Node 0.8.18 successfully uninstalled'))
Exemplo n.º 43
0
def uninstall_node08():
    '''
    Uninstall node 0.8.18
    '''

    sudo('npm uninstall npm')
    version = '0.8.18'
    folder = 'node-v%s' % version
    filename = folder + '.tar.gz'
    require_file(url='http://nodejs.org/dist/v%s/%s' % (version, filename))
    sudo('tar -xzf %s' % filename)

    with cd('%s' % folder):
        sudo('./configure')
        sudo('make uninstall')
        sudo('make distclean')
    su_delete('%s*' % folder)
    print(green('Node 0.8.18 successfully uninstalled'))
Exemplo n.º 44
0
def installed_from_source(version=VERSION):
    """
    Require Redis to be installed from source.

    The compiled binaries will be installed in ``/opt/redis-{version}/``.
    """
    from fabtools.require import directory as require_directory
    from fabtools.require import file as require_file
    from fabtools.require import user as require_user
    from fabtools.require.deb import packages as require_deb_packages
    from fabtools.require.rpm import packages as require_rpm_packages

    family = distrib_family()

    if family == "debian":
        require_deb_packages(["build-essential"])

    elif family == "redhat":
        require_rpm_packages(["gcc", "make"])

    require_user("redis", home="/var/lib/redis", system=True)
    require_directory("/var/lib/redis", owner="redis", use_sudo=True)

    dest_dir = "/opt/redis-%(version)s" % locals()
    require_directory(dest_dir, use_sudo=True, owner="redis")

    if not is_file("%(dest_dir)s/redis-server" % locals()):

        with cd("/tmp"):

            # Download and unpack the tarball
            tarball = "redis-%(version)s.tar.gz" % locals()
            url = _download_url(version) + tarball
            require_file(tarball, url=url)
            run("tar xzf %(tarball)s" % locals())

            # Compile and install binaries
            with cd("redis-%(version)s" % locals()):
                run("make")

                for filename in BINARIES:
                    run_as_root("cp -pf src/%(filename)s %(dest_dir)s/" % locals())
                    run_as_root("chown redis: %(dest_dir)s/%(filename)s" % locals())
Exemplo n.º 45
0
def sysctl(key, value, persist=True):
    """
    Require a kernel parameter to have a specific value.
    """
    if get_sysctl(key) != value:
        set_sysctl(key, value)

    if persist:

        from fabtools.require import file as require_file

        filename = '/etc/sysctl.d/60-%s.conf' % key
        with watch(filename, use_sudo=True) as config:
            require_file(filename,
                         contents='%(key)s = %(value)s\n' % locals(),
                         use_sudo=True)
        if config.changed:
            if distrib_family() == 'debian':
                run_as_root('service procps start')
Exemplo n.º 46
0
def test_install_dependencies_from_package_json_file(nodejs, testdir):

    from fabtools.nodejs import install_dependencies, package_version, uninstall_package

    with cd(testdir):
        require_file('package.json', contents=json.dumps({
            'name': 'nodetest',
            'version': '1.0.0',
            'dependencies': {
                'underscore': '1.4.2'
            }
        }))

        install_dependencies()

        assert is_file('node_modules/underscore/underscore.js')
        assert package_version('underscore', local=True) == '1.4.2'

        uninstall_package('underscore', local=True)
Exemplo n.º 47
0
def test_install_dependencies_from_package_json_file(nodejs, testdir):

    from fabtools.nodejs import install_dependencies, package_version, uninstall_package

    with cd(testdir):
        require_file('package.json', contents=json.dumps({
            'name': 'nodetest',
            'version': '1.0.0',
            'dependencies': {
                'underscore': '1.4.2'
            }
        }))

        install_dependencies()

        assert is_file('node_modules/underscore/underscore.js')
        assert package_version('underscore', local=True) == '1.4.2'

        uninstall_package('underscore', local=True)
Exemplo n.º 48
0
def sysctl(key, value, persist=True):
    """
    Require a kernel parameter to have a specific value.
    """
    if get_sysctl(key) != value:
        set_sysctl(key, value)

    if persist:

        from fabtools.require import file as require_file

        filename = '/etc/sysctl.d/60-%s.conf' % key
        with watch(filename, use_sudo=True) as config:
            require_file(filename,
                         contents='%(key)s = %(value)s\n' % locals(),
                         use_sudo=True)
        if config.changed:
            if distrib_family() == 'debian':
                run_as_root('service procps start')
Exemplo n.º 49
0
def install_nginx():
    '''
    Install NGINX and make it use certs.
    '''
    if system.distrib_id() == 'Debian':
        require_file(url='http://nginx.org/packages/keys/nginx_signing.key')
        deb.add_apt_key('nginx_signing.key')
        su_delete('nginx_signing.key')

        url = 'http://nginx.org/packages/debian/'
        distrib = 'squeeze'
        if system.distrib_release().startswith('7'):
            distrib = 'wheezy'
        require.deb.source('nginx', url, distrib, 'nginx')

        require.deb.package('nginx')
        contents = PROXIED_SITE_TEMPLATE % {
            'server_name': 'cozy',
            'port': 443,
            'proxy_url': 'http://127.0.0.1:9104'
        }
        require.files.file(
            '/etc/nginx/conf.d/cozy.conf',
            contents=contents,
            use_sudo=True)

    else:
        require.deb.ppa('ppa:nginx/stable')

        require.nginx.site(
            'cozy',
            template_contents=PROXIED_SITE_TEMPLATE,
            enabled=True,
            port=443,
            proxy_url='http://127.0.0.1:9104'
        )
    if files.exists('/etc/nginx/conf.d/default.conf'):
        su_delete('/etc/nginx/conf.d/default.conf')
    if files.exists('/etc/nginx/conf.d/example_ssl.conf'):
        su_delete('/etc/nginx/conf.d/example_ssl.conf')
    service.restart('nginx')
    print(green('Nginx successfully installed.'))
Exemplo n.º 50
0
def test_require_file_from_local_file():
    """
    Require that a file exists, whose contents should be this local file
    """
    from fabtools.require import file as require_file

    try:
        baz_contents = "This is the contents of the bar file"
        fd, filename = mkstemp()
        tmp_file = os.fdopen(fd, 'w')
        tmp_file.write(baz_contents)
        tmp_file.close()

        require_file('baz', source=filename)

        assert is_file('baz')
        assert run('cat baz') == baz_contents

    finally:
        os.remove(filename)
        run('rm -f baz')
Exemplo n.º 51
0
def install_node10():
    '''
    install node 0.10.26
    '''

    if is_pi():
        version = '0.10.26'
        require_file(
            'http://nodejs.org/dist/v0.10.21/node-v%s-linux-arm-pi.tar.gz' % version)
        run('tar -xzvf node-v%s-linux-arm-pi.tar.gz' % version)
        delete_if_exists('/opt/node')
        sudo('mkdir /opt/node')
        sudo('mv node-v%s-linux-arm-pi/* /opt/node' % version)
        sudo('ln -s /usr/local/bin/node /opt/node/bin/node')
        sudo('ln -s /usr/bin/node /opt/node/bin/node')
        sudo('ln -s /usr/local/bin/npm /opt/npm/bin/npm')
        sudo('ln -s /usr/bin/npm /opt/npm/bin/npm')

    else:
        require.nodejs.installed_from_source('0.10.26')

    print(green('node 0.10.26 successfully installed'))
Exemplo n.º 52
0
def source(name, uri, distribution, *components):
    """
    Require a package source.

    ::

        from fabtools import require

        # Official MongoDB packages
        require.deb.source('mongodb', 'http://downloads-distro.mongodb.org/repo/ubuntu-upstart', 'dist', '10gen')

    """

    from fabtools.require import file as require_file

    path = '/etc/apt/sources.list.d/%(name)s.list' % locals()
    components = ' '.join(components)
    source_line = 'deb %(uri)s %(distribution)s %(components)s\n' % locals()
    with watch(path) as config:
        require_file(path=path, contents=source_line, use_sudo=True)
    if config.changed:
        puts('Added APT repository: %s' % source_line)
        update_index()