Survey of the state of the art in dependencies management
Summary
External software that provides non-trivial dependency management logic
These may be package management tools, or tools for checking repository integrity. They all have the following features:- Conflicts
- Disjunctive dependencies
- A complete, or would-be-complete resolution engine.
- APT
- RPM
- Smart
- URPMI
- Gentoo
- Ipkg
- rpmlint
- slapt-get
- mongoose
- swup
- Flink
Others
Papers
- Decentralized Software Evolution (1998)
- Dynamic updating of component-based applications
- Ignominy: tool for analysing software dependencies and for reducing complexity in large software systems see also the dedicated Ignominy web page for more papers and links to the source code
Major Linux/Unix distributions and tools
RPM
rpmlint
The rpmlint tool is a static RPM checker developed at Mandriva.Smart
The Smart is a multi-distribution package management tool written in Python.Yum
The Yellow Dog Updater, Modified is a RPM package manager. Its working logic is provided by the RPM library.URPMI
The URPMI tool is used in Mandriva Linux.Debian APT
The Debian APT system is being extensively studied in WP2. Related tools that might be interesting from a dependency point of view:- equivs: Tool for creating fake packages providing dependencies.
This package provides a tool to create Debian packages that only contain dependency information. If a package P is not installed on the system, packages that depend on P cannot normally be installed. However, if equivalent functionality to P is known to be installed, this tool can be used to trick the Debian package management system into believing that package P is actually installed.Other related tools:
- Search tools
- ara
- madison-lite: display versions of Debian packages in an archive
- dpkg-www: powerful WEB based Debian package browser
- Interfaces for apt and dpkg
- gnome-apt: gui for apt (same code)
- gdeb: graphical package inspection tool - allows to view a .deb
- feta: simpler interface to APT, dpkg, and other package tools
- synaptic: graphical package manager
- dselect: user tool to manage Debian packages
- tasksel: Tool for selecting tasks for installation on Debian system
- wajig: simplified Debian package management front end
- aptitude: terminal-based apt frontend
- Miscellaneous
- fai: FAI is a non-interactive system to install a Debian GNU/Linux operating system unattended on a PC cluster.
- pkgsync: automated package list synchronization
- dak: Debian's archive maintenance scripts
- auto-apt: package search by file and on-demand package installation tool
- cron-apt: automatic update of packages using apt-get
- Installation tracking:
- installwatch:
- checkinstall: installation tracker
- cruft: cruft is a program to look over your system for anything that shouldn't be there, but is; or for anything that should be there, but isn't.
Gentoo
See Gentoo.FreeBSD ports
See FreeBSD Porter's Handbook, particularly part 5.7 (dependencies).- Library dependencies are specified using a list of regular-expressions -> possibility of using them for disjunctive dependencies ?
- Tools
- Directives
- @conflicts
Declare$ a conflict with the pkgcflname package, as the two packages contain references to the same files, and so cannot co-exist on the same system.
- @pkgdep
Declare a dependency on the pkgname package. The pkgname package must be installed before this package may be installed, and this package must be deinstalled before the pkgname package is deinstalled. Multiple @pkgdep directives may be used if the package depends on multiple other packages.
The ports building technology does not tolerate circular dependencies.CVS access:
% cvs -d :pserver:anoncvs@anoncvs.fr.FreeBSD.org:/home/ncvs login Password:anoncvs % cvs -d :pserver:anoncvs@anoncvs.fr.FreeBSD.org:/home/ncvs co src/usr.sbin/pkg_install
Other distributions and tools
Slackware TGZ
Slackware .tgz packages are gzip-compressed tar files that are meant to be packet at the root directory, except that they contain an /install directory which contans a "slack-desc" file which is just a human-readable description, and eventually configuration and removal scripts. There is no dependency data.Uludag
Uludag is a Linux distribution developed by the Turkish Institute for Scientific Research and seems to somewhat follow the recommendations from the Trove project in that there are different databases for persons and softwares. They are using their own packaging format, metadata, installer and dependency management software. The metadata is in XML. The software is written in Python and is called PISI (Packages Installed Successfully as Intended). The dependency information is reduced to a simple "Depends" field. As a consequence, the installability problem becomes trivial. The distribution being not yet ready, the feasibility of this approach remains unknown. They have an interesting technical report which formalizes the dependency algorithm in their subversion repository. The algorithm is the well-known topological sorting algorithm.Progeny
Progeny This company provides custom Linux distributions for servers. Ian Murdock (from DebIAN) works there.The platform is delivered via APT repositories.
The Itsy package management system a.k.a. Ipkg
Ipkg is a dpkg-replacement mostly for iPaq handhelds. It aims to be lightweight. It is very Debian-inspired, the control files have the same syntax. The dependency fields are the Debian dependency fields. The tool is written in C and supports complex dependency resolution à la APT.iPkg is a very lightweight package management system. It was designed for Linux installations with severe storage limitations such as handheld computers. iPKG is more than just an embedded Linux flash image builder, (although it does that fairly well). It also allows for dynamic installation/removal of packages on a running system. iPKG is itsy in several ways:To get the source:
- The control programs themselves are small, (currently about 13kB)
- The installed meta-data tries to be only what is absolutely essential, (currently about 38kB for a 16MB compressed flash iPAQ distribution)
- The available packages are small. (The idea is that the package tree should be as fine-grain as possible. Much of this still needs some work)
cvs -d :pserver:anoncvs@cvs.handhelds.org:/cvs login Password: anoncvs cvs -d :pserver:anoncvs@cvs.handhelds.org:/cvs co familiar cd familiar/dist/ipkg/C
General metadata stuff
Trove
Trove This old proposal by Eric S. Raymond is more focused on software archive maintenance issues and does not even mention dependency problems. It proposes to use the same dependency fields as in Debian.Dublin core metadata
The Dublin Core Metadata Initiative This large bureaucratic mammoth proposes nothing less than:The Dublin Core Metadata Initiative (DCMI) is an organization dedicated to promoting the widespread adoption of interoperable metadata standards and developing specialized metadata vocabularies for describing resources that enable more intelligent information discovery systems.
Conary
ConaryWiki An interesting package management system that is based on an enhanced source control system including local changesets (describing local modifications to configuration files) and shadows (which allows creation of a branch in the source control system that follows the evolutions of its parents). Used in rPath linux. ~~Conary can be described as a packaging system that works like a source control system.~~RPM-metadata
RPM-metadata at Duke University They propose a XML format for describing all the package metadata. From a dependency viewpoint, their DTD is based on RPM and provides the following fields :- Package:
- Requires: Entry list
- Provides: Entry list
- Obsoletes: Entry list
- Conflicts: Entry list
- Entry:
- Name: string;
- Flags: flags;
- Body: Version list
- Version:
- | No_version
- | Version(epoch, version, release)
Package management softwares with no dependency information
LUAU
The Lib Update/AutoUpdateLuau is a system for retrieving software updates and status messages from package maintainers individually
Does not provide automatic dependency tracking and downloading
Oasis
coverpages.orgThe Solution Installation Schema specification defines "the schema of an XML document describing the characteristics of an installable unit (IU) of software that are relevant for its deployment, configuration and maintenance. The XML schema is referred to as the Installable Unit Deployment Descriptor or IUDD schema.See Installable Unit Package Format Specification Version 1.0 To check: no dependency information ?
OSGi Bundles
Overview of the Open Service Gateway Initiative (OSGi) is available at OSGi. OSGi gateway defines a service framework that requires services be packaged into bundles and download to the gateway device. A service bundle is a JAR that contains the following:The service framework also maintains the relationship between services implementations, and the dependencies between services and bundles. Similar to the J2EE application server, the OSGi gateway service framework defines a hosting environment that fits in the solution installation architecture. OSGi bundles to the OSGi gateway is what the J2EE applications to the J2EE application server. Thus OSGi bundles can be encapsulated in an installable unit package defined by this document, and deployed through an OSGi gateway touch point.
- Contains the resources implementing zero or more services. These resources may be class files for the Java programming language, as well as any other data (such as HTML help files, icons, and so on).
- States static dependencies on other resources, such as Java packages. If any dependencies are stated, the framework takes the appropriate actions to make the required resource available.
- Optionally contains classes that help the framework install, configure, activate and update a service.
- Declares which class should be used to start or stop a service.
Linux-Pack (previously Slack-Pack)
Linux-Pack started as an apt-get/urpmi clone for Slackware. Very amateurish.GODI
GODI is a framework to download, compile, install, and package O'Caml software ... Currently, GODI knows two kinds of dependencies: strict dependencies, and build dependencies.
Encap
Encap is a tool that install each piece of software in its own directory under /usr/encap/ and then creates symbolic links from /usr/local/bin, /usr/local/man, etc.Language-specific modules
Java archives
Ocaml Findlib
CTAN
The Comprehensive Tex Archive Network is a searchable on-line archive of TeX-related files : TeX sources, documentation, fonts, packages. The entries are categorized, there is author, description, location and related packages metadata, but no dependency information.CPAN
Comprehensive Perl Archive Network. This is intended for developers - dependencies are to be resolved by hand, with "use" statements. The archive stores no dependency information.Python Cheese Shop
This archive of Python modules does the same thing for Python that CTAN and CPAN do for TeX and Perl. There is no dependency information.ESP package manager
The Easy Software Package manager is a meta-packager that allows easy creation of binary packages for various Unix and Linux flavours. It has its own package description format, which could be interesting. It aims to provide all the features of all the package formats. It thus supports various kinds of dependencies. However, as it only creates packages, it has no dependency resolution of any kind. Their manual page has a nice table summarizing the features of the different packaging formats. The software is GPL licensed.Ruby
- libneedle dependency injector for ruby
Needle is a dependency-injection/inversion-of-control container for Ruby, which takes advantage of Ruby's dynamic nature to provide a rich and powerful interface for managing dependencies.
- Rubygems:
RubyGems is an advanced package management tool for Ruby libraries. It supports remote searching, downloading, and installation while handling library dependencies and supporting coexisting versions.
Other platforms
Distribution systems for mobile phones
MacOS
OS/2
Windows Installshield
Deliver
J2EE
Platform Package Formats
Grid Services Deployment
Eclipse
Sources:
citeseer
ACM
Sciencedirect
alltheweb
Google Scholar
gnu.org
Freshmeat
Did the following searches:- System (440)
- Software distribution (214) OK
- Software distribution tools (186) OK
- Systems administration (1604)"
- Search "package" OK
- Search "dependency", "dependencies" OK
- Installation/Setup (357)
- Archiving (1011)
- Clustering/Distributed networks (282)
- Utilities
- Software development
- Information management
- Database
- Symbolic Link Managers
- Ports-like systems
- Linuxports
- Gentoo
- Source Mage
- conary
- gentoo
- slackpkg
- poldek: A full-featured console frontend to RPM.
- apt-build: An apt-get frontend for compiling software optimised.
- apt-proxy: A simple apt-get proxy cache.
- stash: A script that eases the installation of software into a user's home directory.
- Porthole: A frontend to the Gentoo Portage system.
- Source Mage GNU/Linux a.k.a. sorcery
Sorcery has full-tree problem resolution, where it doesn't just stop compiling everything if one compile breaks, it stops compiling only those that depend on it. Gentoo kills the entire compile. … Source Mage has a rich provider and conflicts logic and optional dependency system that is competitive with gentoo (for the most part identical in power except their triggers replacement, "cdepends" is not yet in CVS). … Again, it's all written in bash, and we consider Sorcery an example of the power of bash for high-level application development.Example of the DEPENDS file of abiword-common:
depends libpng "with-libpng" && depends gtk+2 && ... optional_depends imagemagick \ "" \ "" \ "to manipulte images" && optional_depends psiconv \ "" \ "" \ "to import Psion files" && ...
Categories
- Functions
- Storage management
- Database
- Symbolic-link
- Storage management
- Compilation
- Options management
- Dependency management
- Virtual packages
- Disjunctive dependencies
- Dependency on compilation options
- Binary constraints
- Binary installation
List
- depot
Depot is a software management tool providing a simple, yet flexible, mechanism for maintaining third party and locally developed software in large heterogeneous computing environments. Depot integrates separately maintained software packages, known as collections, into a common directory hierarchy consisting of a union of all the collections. This common directory is defined as the software environment. A set of configuration options manages interactions and intersections between collections in the environment. Depot facilitates the introduction, update, and removal of collections in a software environment. Custom environments and complete test environments can be easily created for individual machines or for sets of machines. Collections with unexpected problems can be replaced with previous versions or simply removed. Individual collections or files can be moved from remote filesystems to the local disks of workstations without the worry that the files may become stale. All this is achieved with minimal wasted disk space and administrative overhead.
- stowES
- reflect: A symlink-style package management tool similar to stow.
- XStow: A replacement of GNU Stow written in C++.
- KPortage: A graphical frontend for the Gentoo Linux portage system.
- SlackIns: A pkgtool interface for Slackware.
- pkgusage: Keeps track of when you last used your RPM or DEB packages.
- apt-iselect: An interactive wrapper for apt-cache search and apt-get install.
- apt-best: A program to find the most popular Debian packages.
- UniPKG: A modular package manager.
UniPKG (Universal PaCkaGe manager) is a modular package manager. It supports the RPM, DEB, and Slackware TGZ package formats and doesn't depend of any distribution-specific tools. It is completely self-sufficient, as formats such as cpio were reimplemented. … Note that UniPKG doesn't handle dependencies (it is not supposed to), however, a dependency-handling utility similar to apt-get is planned in far future.
- opt_depot
- relink: is a package management tool for organization and management of software packages. It should run on any UNIX platform that runs PERL. Similar tools include: rpm(REDHAT/Mandrake), pkgadd(Slackware/SUN), stow(GNU) and depot(CMU). NO DEPENDENCY MANAGEMENT
- LFS
- Linuxports: FreeBSD-like ports for Linux
- univSrcPkg
- alien
- encap
- graft: Graft provides a mechanism for managing multiple packages under a single directory hierarchy. It was inspired by both Depot (Carnegie Mellon University) and Stow (Bob Glickstein).
- gar: FreeBSD-like ports collection
The GAR system is a similar system to the BSD ports collection. It's a mechanism for automating the compilation and installation of third-party source code. It appears in the form of a tree of directories containing Makefiles and other ancillary bookkeeping files (such as installation manifests and checksum lists).
- garstow: slight modification of gar
- Package Installation Manager: a script that assists with uninstalling applications that don't provide the facility themselves. It operates in a manner similar to GNU Stow.
- GNU stow:
GNU Stow is a program for managing the installation of software packages, keeping them separate (/usr/local/stow/emacs vs. /usr/local/stow/perl, for example) while making them appear to be installed in the same place (/usr/local).
/package reuses the filesystem as the database:
- Downloading or creating files in /package/admin/daemontools-0.76 automatically registers them as being part of the admin/daemontools package, version 0.76. We don't need special database-editing tools; we simply use standard tools for handling the filesystem.
- A source package is compiled in its package directory. It doesn't need to be separately installed. Exception: Adding programs to the commands-available-to-users list means creating symbolic links in a central directory, /command, as well as in /usr/local/bin for compatibility.
- slapt-get: An APT like system for Slackware package management. Written in C. Clean code, but resolution is interleaved with resolution. Handles disjunctive dependencies. Handles conflicts, suggests, but does not seem to do complete resolution.
- rpmgraph: A tool that creates a graph of installed RPMs.
- NRH-up2date: A server for RedHat's up2date utility.
- BitRock InstallBuilder: Build easy-to-use installers on Linux, OS X, Windows, AIX, HPUX, Solaris, BSD.
- toast: A simple source-and-symlinks package manager for both root and non-root users.
toast is a simple package manager for Unix. It automatically locates and downloads source code, determines how to compile it, installs each package in its own directory tree, and makes the resulting binaries available through an encap/GNU stow-like symlink tree. It also supports binary packages. It is often used to install and manage software in a non-root user's home directory.
- WPKG: A Samba add-on that will help distribute software and updates to many clients. Homepage
- make_uninstall: A program that creates records of make install for later easy removal.
- JDistro: A Java desktop, shared runtime, and software distribution system.
- WDFink: WDFink is a GUI wrapper for the Fink project.
- fink: A source-retrieving package manager for Mac OS X.
To achieve these goals, Fink relies on the excellent package management tools produced by the Debian project - dpkg, dselect and apt-get
- AutoRPM: An RPM auto-installer and/or FTP mirrorer.
- APT-RPM: The APT package tool for RPM based distributions.
- apt4rpm: Creates an apt, yum, or metadata repository from a random RPM directory.
- autopackage: A framework for producing powerful, distribution-neutral packages.
autopackage allows developers to produce "install anywhere" packages for 3rd party Linux software. The resulting packages support both graphical and terminal frontends, support dependency checking and resolution, and use deep desktop integration … Automatically verifies and resolves dependencies no matter how the software was installed.
- gnome-pkgtool: GUI for Slackware's pkgtool
- gnupdate
- gpkg: The gpkg tool is the command-line GNUpdate package management tool. It provides functionality similar to the rpm, dpkg, and apt-get tools.
- libpackman: (stalled) The libpackman (Package Management) library provides a single API for accessing multiple package formats and package databases. NO DEPENDENCY RESOLUTION
- epkg: epkg is a package manager which uses the Encap Package Management System
- swpkg: ~~'swpkg' is a collection of tools for building, installing, and maintaining software packages. It is based on a fairly simple philosophy intended to simplify the management of third party software and their inter-dependencies.
- GDPM: GNOME Debian Package Manager. Calls APT.
- mpkg: A FreeBSD-like ports collection for DEC OSF/1, Linux, Solaris.
- Darwin pkg: A port of the FreeBSD software package system to the Darwin OS.
- Sencap: Simple ENCAP software manager. OK
- Spkgtool: The Scrudgeware Package Tool. Encap + Ports
- spkg: A Slackware package management utility.
- darwinports: see OpenDarwin
- xpkg: Package management system of the OpenDarwin project. (Work in progress)
xpkg is a package management system much like dpkg and rpm. It tries to improve on other package systems by handling virtual packages, complicated dependencies, and transferring ACLs and EAs.
package { requires : item list provides : item list } item { name : string major : int minor : in }
- syspkg: A powerful multi-OS, multi-platform packaging mechanism.
# Comments and newlines are accepted. Errant entries are tossed out. # You cannot put a comment after a variable, however. archive=file-x.x.x.tar.gz url=http://www.site.com/directory/ # 'distdir' is for specifying the directory in which the tarball is in. distdir=../archives # 'expand' is the directory in which the tarball will expand to, for packages # such as netcat. expand=file-x.x.x dist=file-x.x.x pkgname=file pkgvers=x.x.x pkgdep=anotherpackage >= x.x.x pkgdep=yetanother == x.x.x pkgdep=onemore pkgdesc=This is a sample description. You can specify multiple 'pkgdesc=' pkgdesc=lines like this. # 'make' works just as well as build. build=make install=make install clean=make clean file=/usr/bin/program
syspkg is a powerful multi-platform packaging system for most Unix variants. Originally designed for the upcoming Linux distribution 0sys, it is able to handle the most critical aspects of package management: Viewing package files (and/or directories), handling versions, removal, and dependencies. It is also a great way to manage packages built from source with minimal effort. Dependencies can be against packages, or packages of a certain version (greater-than, less- than, or equal-to).
- Open Package Library a.k.a. libpackage: A package management library, in development.
- EPOR: EPOR is an extensible package organiser for Unix-like systems.
It's written to trace filesystem changes (something being installed) and save this information in a simple text database (this, as any other provided feature, is customisable via the embedded Guile interpreter). Database entries contain information supplied by the command line (package name, version, etc.) and traced by filesystem changes (new directories, files, etc.). This is achieved using the "LD_PRELOAD method''.
- Perl2RPM: Scripts which automatically build RPMs of Perl modules.
- Splack Linux: A port of Slackware to SPARC.
- PAR Packaging and Deployment tool: A packager for Perl programs.
- NSBD: Not-So-Bad Distribution (automated free software distribution) by Bell Labs. Focused on secure package installation (limiting rights of installation scripts, cryptographically signing packages in a web of trust, etc.)
- syncopt: Yet another approach to the standard sysadmin problem of keeping multiple machines' software installations up to date.
- apteryx: A simple wrapper for apt-cache and apt-get.
- slackcurrent: A script for updating Slackware installations.
- Kemerge: A graphical KDE Gentoo emerge tool.
- openbechede: An OpenBSD packages tool (install/remove/update/system upgrade).
- gslapt: A GTK version of slapt-get.
- UPMS: A universal package managment system for any FHS-compliant Linux distribution.
- apt-cacher: A CGI script proxy for apt-get.
- PKGsummon: A utility for management of slackware packages.
- slackselect: A Slackware package manager.
- XPKGTOOL: A Slackware Package Manager for X.
- Ports Manipulator: A ports collection manipulator for BSD.
- pkgutils: Package management utilities for Linux, used by the CRUX distribution. Written in C++. No dependency management, only storage management with conflict detection on files.
- CruxPorts4Slack: A ports system for Slackware.
- cpan2tgz: a utility to create Slackware packages from CPAN Perl module distributions, inspired by Erick Calder's cpan2rpm.
- mongoose: The Mongoose Package Manager is a full featured packager, supporting installation from source, advanced dependency resolution, and optional features. Written in C++. Slotted à la Gentoo.
- klik: klik provides an easy way to download and use software for most major distributions. Used Debian APT technology.
- RPM SuperVisor: Eases administration for RPM-based systems.
- spill: symbolic link manager
- slaktool-scripts: A set of scripts to improve slackware package management. It's a part of the slaktool project.
Slaktool is a project to improve the Slackware package manager with all the features of the more advanced package managers while retaining the classic .tgz formatWritten in shell script.
- UniPackage: A non-distribution-specific, dependency free package system.
UniPackage packages are tar.bz2 archives which contain a self-contained "AppDir" which can be moved anywhere in the filesystem without disturbing the application's installation. … The issue of dependencies is avoided by bundling all required libraries in the AppDir.
- swup: an advanced tool for installing, upgrading, and querying software packages, independent of the package format. It handles dependencies between software packages. Being actively developed. Written in Python. Seems to have complete resolution logic.
- Zero Install: A system for running software without needing to install it.
- yum4sol: A Solaris port of the YUM package updater.
- yumtk: yumtk is a GUI front-end for yum
- aduva: Aduva Manager is a package manager with automatic download and dependency checking
- tinypackage: a lightweight package manager for UNIX systems. No dependency management.
- aptsh: Aptsh is a pseudo-shell for systems with the APT package managing tool
- Upgrade-oldest: A tool to upgrade the oldest Debian packages.
Upgrade-oldest selectively upgrades a Debian system by upgrading the packages with the oldest and most significant version numbers. It can be limited to certain sections, and the level of version differece necessary to trigger an upgrade can be controlled.
- Pdbv Package DataBase View: Pdbv outputs a HTML view of a RPM or dpkg database.
- AutoUpdate: Automatically upgrades RPM-based systems via (S)FTP or HTTP(S).
- debfoster: Efficiently manages package dependencies on Debian systems.
Most Debian application packages depend on other packages, containing libraries or other utilities. When the application package is removed, the dependencies will still linger on the system. Debfoster can detect such "orphaned" dependencies and will clean them up. It can be used as a front-end to apt or standalone.
- pkgusage: Keeps track of when you last used your RPM or DEB packages.
- syncopt: A Flexible and Simple Approach to Package Install
- sptools: Tools for managing slashpackage installations.
- oblisk: Open Binary Linux Install System Kit
OBLISK aims to make any package install on any modern GNU/Linux system. OBLISK packages are sent in an appdir-like package and can be run entirely in place, but also have an installer, which makes it possible for them to be installed to /usr or any other path.
- rpm-analyzer: Helps you analyze rpm dependencies. Actually, it does no analysis at all. It just allows the user to browse the hdlist using treeview lists.
- Emerde: A port of Gentoo's Portage system for other distributions.
Emerde is the port of Gentoo's portage system that installs, removes, updates, maintains your system rapidly and easily. Furthermore on Slackware distribution it cooperates with the Slackware's db and allows to install .tgz files directly, using dependences checking.
- Red Hat Update: A replacement for up2date.
- lt package manager: A light package management tool. Symbolic link manager.
Sourceforge
Usenet
Version 1.68 last modified by Berke on 23/03/2006 at 14:46
Document data
Attachments:
No attachments for this document
Comments: 0