Source code for fabtools.require.deb

"""
Debian packages
===============

This module provides high-level tools for managing Debian/Ubuntu packages
and repositories.

"""
from __future__ import with_statement

from fabric.utils import puts

from fabtools.deb import (
    install,
    is_installed,
    uninstall,
    update_index,
)
from fabtools.files import is_file, watch
from fabtools.system import distrib_codename
from fabtools.utils import run_as_root


[docs]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()
[docs]def ppa(name): """ Require a `PPA`_ package source. Example:: from fabtools import require # Node.js packages by Chris Lea require.deb.ppa('ppa:chris-lea/node.js') .. _PPA: https://help.launchpad.net/Packaging/PPA """ assert name.startswith('ppa:') user, repo = name[4:].split('/', 2) distrib = distrib_codename() source = '%(user)s-%(repo)s-%(distrib)s.list' % locals() if not is_file(source): package('python-software-properties') run_as_root('add-apt-repository %s' % name, pty=False) update_index()
[docs]def package(pkg_name, update=False): """ Require a deb package to be installed. Example:: from fabtools import require require.deb.package('foo') """ if not is_installed(pkg_name): install(pkg_name, update)
[docs]def packages(pkg_list, update=False): """ Require several deb packages to be installed. Example:: from fabtools import require require.deb.packages([ 'foo', 'bar', 'baz', ]) """ pkg_list = [pkg for pkg in pkg_list if not is_installed(pkg)] if pkg_list: install(pkg_list, update)
[docs]def nopackage(pkg_name): """ Require a deb package to be uninstalled. Example:: from fabtools import require require.deb.nopackage('apache2') """ if is_installed(pkg_name): uninstall(pkg_name)
[docs]def nopackages(pkg_list): """ Require several deb packages to be uninstalled. Example:: from fabtools import require require.deb.nopackages([ 'perl', 'php5', 'ruby', ]) """ pkg_list = [pkg for pkg in pkg_list if is_installed(pkg)] if pkg_list: uninstall(pkg_list)

Project Versions

This Page