예제 #1
0
def get_couchdb_version():
    if system.distrib_id() == 'Ubuntu' \
            and (system.distrib_release() == '13.10'
                 or system.distrib_release() == '14.04'):
        version = '1.5.0'
    else:
        version = '1.3.0'

    return version
예제 #2
0
def get_couchdb_version():
    '''
    Return proper CouchDB version depending on distribution.
    '''
    version = '1.6.1'
    if system.distrib_id() == 'Debian' \
       and (system.distrib_release().startswith('6') or
            system.distrib_release().startswith('7')):
        version = '1.5.1'

    return version
예제 #3
0
def get_couchdb_version():
    '''
    Return proper CouchDB version depending on distribution.
    '''
    version = '1.6.0'
    if system.distrib_id() == 'Debian' \
       and (system.distrib_release().startswith('6') or
            system.distrib_release().startswith('7')):
        version = '1.5.0'

    return version
예제 #4
0
파일: rpm.py 프로젝트: 26lights/fabtools
def repository(name):
    """
    Require a repository. Aimed for 3rd party repositories.

    *Name* currently only supports EPEL and RPMforge.

    Example::

        from fabtools import require

        # RPMforge packages for CentOS 6
        require.rpm.repository('rpmforge')


    """
    name = name.lower()
    epel_url = 'http://download.fedoraproject.org/pub/epel'
    rpmforge_url = 'http://packages.sw.be/rpmforge-release/rpmforge-release'
    rpmforge_version = '0.5.2-2'
    arch = get_arch()
    try:
        release = int(str(distrib_release()))
    except ValueError:
        release = int(float(str(distrib_release())))
    if release == 6:
        epel_version = '6-8'
    elif release == 5:
        epel_version = '5-4'
    if name == 'rpmforge' and arch == 'i386':
        arch = 'i686'
    supported = {
        'rpmforge': {
            '%(arch)s' % locals(): {
                '6': '%(rpmforge_url)s-%(rpmforge_version)s.el6.rf.i686.rpm' % locals(),
                '5': '%(rpmforge_url)s-%(rpmforge_version)s.el5.rf.x86_64.rpm' % locals(),
            },
        },
        'epel': {
            '%(arch)s' % locals(): {
                '6': '%(epel_url)s/6/%(arch)s/epel-release-%(epel_version)s.noarch.rpm' % locals(),
                '5': '%(epel_url)s/5/%(arch)s/epel-release-%(epel_version)s.noarch.rpm' % locals(),
            }
        },
    }
    keys = {
        'rpmforge': 'http://apt.sw.be/RPM-GPG-KEY.dag.txt',
        'epel': '%(epel_url)s/RPM-GPG-KEY-EPEL-%(release)s' % locals(),
    }
    repo = supported[name][str(arch)][str(release)]
    key = keys[name]
    with settings(hide('warnings'), warn_only=True):
        run_as_root('rpm --import %(key)s' % locals())
        run_as_root('rpm -Uh %(repo)s' % locals())
예제 #5
0
파일: apache.py 프로젝트: zeus911/fabtools
def _choose(old_style, new_style):
    family = distrib_family()
    if family == 'debian':
        distrib = distrib_id()
        at_least_trusty = (distrib == 'Ubuntu' and V(distrib_release()) >= V('14.04'))
        at_least_jessie = (distrib == 'Debian' and V(distrib_release()) >= V('8.0'))
        if at_least_trusty or at_least_jessie:
            return new_style
        else:
            return old_style
    else:
        raise UnsupportedFamily(supported=['debian'])
예제 #6
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."))
예제 #7
0
def get_couchdb_version():
    if system.distrib_id() == 'Ubuntu' \
            and system.distrib_release() == '13.10':
        version = '1.5.0'
    else:
        version = '1.3.0'

    return version
예제 #8
0
def install_couchdb():
    '''
    Install CouchDB 1.3.0 or 1.5.0 depending on the target distribution.
    '''

    # Check if controller is already installed, .
    with settings(warn_only=True):
        result = run('curl -X GET http://127.0.0.1:5984/')
        is_installed = result.find('Welcome')
        if is_installed != -1:
            print(green("CouchDB is already installed"))
            return True

    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('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))
예제 #9
0
def install_couchdb():
    '''
    Install CouchDB 1.3.0 or 1.5.0 depending on the target distribution.
    '''

    # Check if controller is already installed, .
    with settings(warn_only=True):
        result = run('curl -X GET http://127.0.0.1:5984/')
        is_installed = result.find('Welcome')
        if is_installed != -1:
            print(green("CouchDB is already installed"))
            return True

    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('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))
예제 #10
0
def install_nginx():
    '''
    Install NGINX and make it use certs.
    '''
    if system.distrib_id() == 'Debian':
        if not is_arm():
            key_url = 'http://nginx.org/packages/keys/nginx_signing.key'
            require.file(url=key_url)
            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'
            elif system.distrib_release().startswith('8'):
                distrib = 'jessie'
            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'
        )
    delete_if_exists('/etc/nginx/conf.d/default.conf')
    delete_if_exists('/etc/nginx/conf.d/example_ssl.conf')
    delete_if_exists('/etc/nginx/sites-enabled/default')
    service.restart('nginx')
    print(green('Nginx successfully installed.'))
예제 #11
0
def install_nginx():
    '''
    Install NGINX and make it use certs.
    '''
    if system.distrib_id() == 'Debian':
        if not is_arm():
            key_url = 'http://nginx.org/packages/keys/nginx_signing.key'
            require.file(url=key_url)
            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'
            elif system.distrib_release().startswith('8'):
                distrib = 'jessie'
            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')
    delete_if_exists('/etc/nginx/conf.d/default.conf')
    delete_if_exists('/etc/nginx/conf.d/example_ssl.conf')
    delete_if_exists('/etc/nginx/sites-enabled/default')
    service.restart('nginx')
    print(green('Nginx successfully installed.'))
예제 #12
0
def ppa(name, auto_accept=True, keyserver=None):
    """
    Require a `PPA`_ package source.

    Example::

        from fabtools import require

        # Node.js packages by Chris Lea
        require.deb.ppa('ppa:chris-lea/node.js', keyserver='my.keyserver.com')

    .. _PPA: https://help.launchpad.net/Packaging/PPA
    """
    assert name.startswith('ppa:')

    user, repo = name[4:].split('/', 2)

    # For ubuntu based distribution with their own version system
    # e.g. Elementary OS Luna version returned by lsb_release is 0.2.1
    # which raise ValueError exception on float() call
    try:
        release = float(distrib_release())
    except ValueError:
        release = 12.04

    if release >= 12.04:
        repo = repo.replace('.', '_')
        auto_accept = '--yes' if auto_accept else ''
    else:
        auto_accept = ''

    if not isinstance(keyserver, basestring) and keyserver:
        keyserver = keyserver[0]
    if keyserver:
        keyserver = '--keyserver ' + keyserver
    else:
        keyserver = ''

    distrib = distrib_codename()
    source = '/etc/apt/sources.list.d/%(user)s-%(repo)s-%(distrib)s.list' % locals()

    if not is_file(source):
        if release >= 14.04:
            # add-apt-repository moved to software-properties-common in 14.04
            package('software-properties-common')
        else:
            package('python-software-properties')
        run_as_root('add-apt-repository %(auto_accept)s %(keyserver)s %(name)s' % locals(), pty=False)
        update_index()
예제 #13
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))
예제 #14
0
def capabilities():
    """Test capabilities functions in new distrition
    For openwrt:
      mv /etc/banner /etc/banner.disable
      fab -s "/bin/ash -l -c" capabilities
    """

    print("SYSTEM")
    print("======")
    print("Distribution: %s" % system.distrib_id())
    print("Release: %s" % system.distrib_release())
    print("Codename: %s" % system.distrib_codename())
    print("Desc: %s" % system.distrib_desc())
    print("Arch: %s" % system.get_arch())
    print("Hostname: %s" % system.get_hostname())
예제 #15
0
def capabilities():
    """Test capabilities functions in new distrition
    For openwrt:
      mv /etc/banner /etc/banner.disable
      fab -s "/bin/ash -l -c" capabilities
    """

    print ("SYSTEM")
    print ("======")
    print("Distribution: %s" % system.distrib_id())
    print("Release: %s" % system.distrib_release())
    print("Codename: %s" % system.distrib_codename())
    print("Desc: %s" % system.distrib_desc())
    print("Arch: %s" % system.get_arch())
    print("Hostname: %s" % system.get_hostname())
예제 #16
0
파일: deb.py 프로젝트: ssteinerx/fabtools
def ppa(name, auto_accept=True, keyserver=None):
    """
    Require a `PPA`_ package source.

    Example::

        from fabtools import require

        # Node.js packages by Chris Lea
        require.deb.ppa('ppa:chris-lea/node.js', keyserver='my.keyserver.com')

    .. _PPA: https://help.launchpad.net/Packaging/PPA
    """
    assert name.startswith('ppa:')

    user, repo = name[4:].split('/', 2)

    release = float(distrib_release())
    if release >= 12.04:
        repo = repo.replace('.', '_')
        auto_accept = '--yes' if auto_accept else ''
    else:
        auto_accept = ''

    if not isinstance(keyserver, basestring) and keyserver:
        keyserver = keyserver[0]
    if keyserver:
        keyserver = '--keyserver ' + keyserver
    else:
        keyserver = ''

    distrib = distrib_codename()
    source = '/etc/apt/sources.list.d/%(user)s-%(repo)s-%(distrib)s.list' % locals(
    )

    if not is_file(source):
        if release >= 14.04:
            # add-apt-repository moved to software-properties-common in 14.04
            package('software-properties-common')
        else:
            package('python-software-properties')
        run_as_root(
            'add-apt-repository %(auto_accept)s %(keyserver)s %(name)s' %
            locals(),
            pty=False)
        update_index()
예제 #17
0
def install_couchdb():
    """
    Install CouchDB 1.3.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)

    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")
    su_delete('apache-couchdb-1.3.0')
    su_delete('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"))
예제 #18
0
def install_couchdb():
    '''
    Install CouchDB 1.3.0 or 1.5.0 depending on the target distribution.
    '''

    # Check if controller is already installed, .
    with settings(warn_only=True):
        result = run('curl -X GET http://127.0.0.1:5984/')
        is_installed = result.find('Welcome')
        if is_installed != -1:
            print(green("CouchDB is already installed"))
            return True

    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('apache-couchdb-%s.tar.gz' % version)
예제 #19
0
def ppa(name, auto_accept=True, keyserver=None):
    """
    Require a `PPA`_ package source.

    Example::

        from fabtools import require

        # Node.js packages by Chris Lea
        require.deb.ppa('ppa:chris-lea/node.js', keyserver='my.keyserver.com')

    .. _PPA: https://help.launchpad.net/Packaging/PPA
    """
    assert name.startswith('ppa:')

    user, repo = name[4:].split('/', 2)

    release = float(distrib_release())
    if release >= 12.04:
        repo = repo.replace('.', '_')
        auto_accept = '--yes' if auto_accept else ''
    else:
        auto_accept = ''

    if not isinstance(keyserver, basestring) and keyserver:
        keyserver = keyserver[0]
    if keyserver:
        keyserver = '--keyserver ' + keyserver
    else:
       keyserver = ''

    distrib = distrib_codename()
    source = '/etc/apt/sources.list.d/%(user)s-%(repo)s-%(distrib)s.list' % locals()

    if not is_file(source):
        package('python-software-properties')
        run_as_root('add-apt-repository %(auto_accept)s %(keyserver)s %(name)s' % locals(), pty=False)
        update_index()
예제 #20
0
def repository(name):
    """
    Require a repository. Aimed for 3rd party repositories.

    *Name* currently only supports EPEL and RPMforge.

    Example::

        from fabtools import require

        # RPMforge packages for CentOS 6
        require.rpm.repository('rpmforge')


    """
    name = name.lower()
    epel_url = 'http://download.fedoraproject.org/pub/epel'
    rpmforge_url = 'http://packages.sw.be/rpmforge-release/rpmforge-release'
    rpmforge_version = '0.5.2-2'
    arch = get_arch()
    try:
        release = int(str(distrib_release()))
    except ValueError:
        release = int(float(str(distrib_release())))
    if release == 6:
        epel_version = '6-8'
    elif release == 5:
        epel_version = '5-4'
    if name == 'rpmforge' and arch == 'i386':
        arch = 'i686'
    supported = {
        'rpmforge': {
            '%(arch)s' % locals(): {
                '6':
                '%(rpmforge_url)s-%(rpmforge_version)s.el6.rf.i686.rpm' %
                locals(),
                '5':
                '%(rpmforge_url)s-%(rpmforge_version)s.el5.rf.x86_64.rpm' %
                locals(),
            },
        },
        'epel': {
            '%(arch)s' % locals(): {
                '6':
                '%(epel_url)s/6/%(arch)s/epel-release-%(epel_version)s.noarch.rpm'
                % locals(),
                '5':
                '%(epel_url)s/5/%(arch)s/epel-release-%(epel_version)s.noarch.rpm'
                % locals(),
            }
        },
    }
    keys = {
        'rpmforge': 'http://apt.sw.be/RPM-GPG-KEY.dag.txt',
        'epel': '%(epel_url)s/RPM-GPG-KEY-EPEL-%(release)s' % locals(),
    }
    repo = supported[name][str(arch)][str(release)]
    key = keys[name]
    with settings(hide('warnings'), warn_only=True):
        run_as_root('rpm --import %(key)s' % locals())
        run_as_root('rpm -Uh %(repo)s' % locals())
예제 #21
0
def repository(name):
    """
    Require a repository. Aimed for 3rd party repositories.

    *Name* currently only supports EPEL and RPMforge.

    Example::

        from fabtools import require

        # RPMforge packages for CentOS 6
        require.rpm.repository('rpmforge')


    """
    name = name.lower()
    epel_url = 'http://download.fedoraproject.org/pub/epel'
    rpmforge_url = 'http://packages.sw.be/rpmforge-release/rpmforge-release'
    rpmforge_version = '0.5.2-2'
    arch = get_arch()
    try:
        release = int(str(distrib_release()))
    except ValueError:
        release = int(float(str(distrib_release())))
    if release == 6:
        epel_version = '6-8'
    elif release == 5:
        epel_version = '5-4'
    if name == 'rpmforge' and release == 6 and arch == 'i386':
        arch = 'i686'
    supported = {
        'rpmforge': {
            '%(arch)s' % locals(): {
                '6': '%(rpmforge_url)s-%(rpmforge_version)s.el6.rf.%(arch)s.rpm' % locals(),
                '5': '%(rpmforge_url)s-%(rpmforge_version)s.el5.rf.%(arch)s.rpm' % locals(),
            },
        },
        'rpmfusion-free': {
            '%(arch)s' % locals(): {
                '5': 'http://download1.rpmfusion.org/free/el/updates/5/i386/rpmfusion-free-release-5-1.noarch.rpm',
                '6': 'http://download1.rpmfusion.org/free/el/updates/6/i386/rpmfusion-free-release-6-1.noarch.rpm',
            }
        },
        'epel': {
            '%(arch)s' % locals(): {
                '6': '%(epel_url)s/6/%(arch)s/epel-release-%(epel_version)s.noarch.rpm' % locals(),
                '5': '%(epel_url)s/5/%(arch)s/epel-release-%(epel_version)s.noarch.rpm' % locals(),
            }
        },
    }
    rpmfusion_extra = ''
    if release == 6:
      rpmfusion_extra = '-6'
    keys = {
        'rpmforge': 'http://apt.sw.be/RPM-GPG-KEY.dag.txt',
        'rpmfusion-free': "http://rpmfusion.org/keys?action=AttachFile&do=view&target=RPM-GPG-KEY-rpmfusion-free-el%(rpmfusion_extra)s" % locals(),
        'epel': '%(epel_url)s/RPM-GPG-KEY-EPEL-%(release)s' % locals(),
    }
    repo = supported[name][str(arch)][str(release)]
    key = keys[name]
    with settings(hide('running', 'warnings', 'stderr', 'stdout'), warn_only=True):
        run_as_root('rpm --import %(key)s' % locals())
        run_as_root('rpm -Uh %(repo)s' % locals())