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

[RFS] mpapt package manager and libraries



Hi,

I recently decided to write yet another 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 and pmap does
not show anything suspicious for mpapt. Libraries are on LGPL and mpapt
is on GPL. Everything is not well tested yet and they are my first
"serious" debian packages but mpapt usage should be safe because it only
performs read only searches and printing (for the remaining operations
calling apt-get).


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
      open read only)

    - 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: