Source code for fabtools.opkg

"""
opkg packages
=============

This module provides tools to manage opkg packages
and repositories.

"""
from __future__ import with_statement

from fabric.api import hide, run, settings

from fabtools.utils import run_as_root


MANAGER = 'opkg'


[docs]def update_index(quiet=True): """ Update opkg package definitions. """ options = "--verbosity=0" if quiet else "" run_as_root("%s %s update" % (MANAGER, options))
[docs]def upgrade(): """ Upgrade all packages. """ manager = MANAGER cmd = 'upgrade' run_as_root("%(manager)s %(cmd)s" % locals(), pty=False)
[docs]def is_installed(pkg_name): """ Check if a package is installed. """ manager = MANAGER with settings(hide('running', 'stdout', 'stderr', 'warnings'), warn_only=True): res = run("%(manager)s status %(pkg_name)s" % locals()) return len(res) > 0
[docs]def install(packages, update=False, options=None): """ Install one or more packages. If *update* is ``True``, the package definitions will be updated first, using :py:func:`~fabtools.opkg.update_index`. Extra *options* may be passed to ``opkg`` if necessary. Example:: import fabtools # Update index, then install a single package fabtools.opkg.install('build-essential', update=True) # Install multiple packages fabtools.opkg.install([ 'mc', 'htop', ]) """ manager = MANAGER if update: update_index() if options is None: options = [] if not isinstance(packages, basestring): packages = " ".join(packages) options.append("--verbosity=0") options = " ".join(options) cmd = '%(manager)s install %(options)s %(packages)s' % locals() run_as_root(cmd, pty=False)
[docs]def uninstall(packages, options=None): """ Remove one or more packages. Extra *options* may be passed to ``opkg`` if necessary. """ manager = MANAGER command = "remove" if options is None: options = [] if not isinstance(packages, basestring): packages = " ".join(packages) options = " ".join(options) cmd = '%(manager)s %(command)s %(options)s %(packages)s' % locals() run_as_root(cmd, pty=False)