[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[RFS] mpapt package manager and libraries



Hi,

I recently decided to write a package manager frontend (with shell-like
interface) - mpapt. And now I am looking for a sponsor for it.

Project web page with manuals, screenshots, library usage examples and .deb
packages and sources repository[1] is at http://mpapt.alioth.debian.org.
Sources are at svn.debian.org (e.x. http://svn.debian.org/viewcvs/mpapt).

[1] deb or deb-src http://mpapt.alioth.debian.org/ testing/ or unstable/ in
sources.list

All the packages are lintian clean and sbuild correctly (at least for i386)
for testing and unstable. libmpapt is valgrind clean. mpapt is pychecked
and pmap does not show anything suspicious for it. Libraries are on LGPL
and mpapt is on GPL. 


Formal (.deb) descriptions are at the end of the letter and here is a more
detailed one:

While working on mpapt I found libapt-pkg to be hard to use directly for
simple tasks like package searching or information printing and even harder
to be interfaced to script languages (I wanted to use Python in user
interface module). 

So I started from writing c++ wrapper library - libmpapt. It basically
offers two things. The first one is a package abstraction class -
MPAptPackage. Its objects correspond to unique name and version pairs and
are hiding libapt-pkg complexity by providing methods to access package
most important information fields (name(), maintainer(), files() etc.). The
second one is MPAptBuffer - container class which can search for packages
satisfying specified criteria (including regular expressions matching) and
keep them for later use (mainly information retrieval) in dedicated vector.

Then (using SWIG) I interfaced libmpapt to Python (to use it) and Perl
(just because I could :)

And finally I wrote mpapt. It has two modes of operations - interactive
shell-like interface and command (passed as a runtime parameter) execution.
mpapt has tab-completion and commands history. Offers ability to define
command aliases, shell command execution, mpapt command output redirection
(to any shell command), `cmd` substitution and other things I'd expect to
be present in a well-behaving shell. 

mpapt commands can be split into three categories:

    - package information retrieval: "query" to find packages matching
      defined criteria and "buffer" to print package information. They use
      libmpapt and of course don't need any privileges (apt cache is in
      read only mode)

    - package manipulation: "rm", "get", "upgrade" etc. They simply call
      sudo apt-get with appropriate parameters and package names (names can
      be taken from buffer, like in "get -b 1" command which will install
      package indexed in the buffer with number 1). They need user to be
      able to execute sudo apt-get and to be present in special "mpapt"
      group to log changes in /var/log/mpapt.log file.

    - mpapt configuration: "set" to manipulate program config (saved in
      /etc/mpapt.conf and ~/.mpapt.conf) and "alias" to define command
      aliases. They again need no privileges.

Every command has its own parameters, and "query" and "buffer" ones use
special format to define search expressions and printed output. It's
described in manual pages accessible at mpapt web pages.


Formal .deb packages descriptions:


Package: mpapt
Description: Command-line package management frontend with shell-like interface 
 mpapt is a command-line tool to query and manage debian packages. It works
 in batch or shell-like mode with tab-completion, commands history, ability
 to define command aliases and other useful functions.  It can search for
 packages matching specified criteria (including regular expressions
 matching). Performs operations like package installing, removing,
 upgrading etc. Offers user defined package displaying output format with
 ability to pass it to any shell command.  Can log all actions that change
 package states, execute arbitrary command, and much more.


Package: libmpapt1
Description: Package searching wrapper library for libapt-pkg
 This library offers simplified access to apt-cache data and can be used to
 perform database search for packages satisfying specified criteria
 (including regular expressions matching). It hides libapt-pkg complexity
 with special classes to perform the queries and access package most
 important information fields. It is constructed in the way allowing it to
 be interfaced to other languages like Python or Perl. For more information
 see README file.

Package: libmpapt1-utils
Description: libmpapt utility programs
 This package contains utility programs used to create and read libmpapt
 file database files.

Package: libmpapt1-dev
Description: Development files for libmpapt package searching library
 This package contains the header files and libraries for developing with
 libmpapt package searching library.


Package: libmpapt1-perl
Description: Perl interface to libmpapt package searching library
 This is an interface to libmpapt package searching library for Perl. It
 offers simplified access to apt-cache data and can be used to perform
 database search for packages satisfying specified criteria (including
 regular expressions matching).


Package: python2.3-libmpapt1
Description: Python interface to libmpapt package searching library
 This is an interface to libmpapt package searching library for Python.  It
 offers simplified access to apt-cache data and can be used to perform
 database search for packages satisfying specified criteria (including
 regular expressions matching).
 .
 This package is built for Python 2.3.x.

Package: python-libmpapt1
Description: Python interface to libmpapt package searching library [dummy package] 
 This is an interface to libmpapt package searching library for Python.  It
 offers simplified access to apt-cache data and can be used to perform
 database search for packages satisfying specified criteria (including
 regular expressions matching).
 .
 This package is an empty dummy package that always depends on a package
 built for Debian's default Python version.


Regards,

-- 
Marcin Pawlik



Reply to: