pkgng - New version of FreeBSD's pkg_install

Table of Contents:

    1. Available commands of pkgng
    2. Available subcommands of pkgng
    3. General behaviour
    4. New scripts
	4.1. During new install
	4.2. During package deletion
	4.3. During upgrade of a package
    5. Additional resources


1. Available commands of pkgng:
-------------------------------

- pkg:

	- One command to rule them all (see section 2)

- pkg_*:

	- These will be shell scripts, which goal is to be 100% compatible with
	  pkg_install. They will call `pkg' with the appropriate options (not sure
	  it will be really done in the end).

2. Available subcommands of pkgng:
----------------------------------

- add:

	- Installs a package if a local package is given
	- Manages ftp/http downloads of packages through libfetch and
	  tries to install them.
	- In the two previous cases, if a package does not have it's 
	  dependencies installed, `pkgng' will try to fetch/find them in the same
	  place as the original package was.
	- It will manage a completely new repository format. 
	  `pkg add <foo>' will check in the database of the repository for 
	  package <foo> and try to install it as well as it's dependencies.
	  Dependencies will be computed before beginning the fetch/install
	  process to ensure that everything will be OK.

- register:

	- Take a plist in argument considering the files are already installed
	  and register the package into the database. Register will display the
	  package message.

- repo:

	- Takes only one argument and generates two database files (maybe more for
	  the time we will be willing to work with UPDATING and MOVED).
	  The first repo contains all information about a package, except for
	  the files (which will be in the second one) + it will compute and 
	  add a sha256 sum for each package.
	- The database will be a sqlite file compressed with the xz format.
	- The database will be signed so we can trust the sha256 of the
	  packages, and if a package has the expected hash, it is considered
	  trusted.

- search:

	- Will search the remote repository to provide information
	  to the users.

- info: 

	- Will provide any information to the users about an installed package
	  or a package archive.

- create:
    
	- Will create the package in the new format (+MANIFEST) in txz (tar.xz).
	- Options for creating tbz, tgz and plain tar will be provided.
	- It should be able to create a package for a "fakeroot" directory
	  taking a plist or a manifest in arguments (the plist is for
	  compatibility with bsd.ports.mk)

- delete:

	- Will delete a package. To be able to remove the empty directories
	  cleanly it will delete every directory (found in the path of the 
	  files), which are not in the package +MTREE (mtree contains the 
	  official hier(7)).

- upgrade:

	- Will compute the remote repository to check if there are new upgrades
	  available and apply them.

- update:

	- Will fetch the remote repository sqlite database file.

- lint: 

	- Will check for the given package and warn the user about possible problems:
	* bad prefix
	* setuids
	* etc

3. General behaviour:
---------------------

The manifest contains compatibility keywords: exec, unexec which will be
executed as they are in pkg_install, but will display a warning to show the user
exec/unexec is deprecated.

If install and deinstall scripts are present they will be executed as they were in
pkg_install, and the user will be warned that they are deprecated.

4. New scripts
----------------------

The new package format will have the following (optional) shell scripts:

    4.1. During new install
    -----------------------
    
    - pre-install
    - post-install

    4.2. During package deletion
    ----------------------------

    - pre-uninstall
    - post-uninstall

    4.3. During upgrade of a package
    --------------------------------

    - pre-upgrade
    - post-upgrade

5. Additional resources
-----------------------

The wiki page where it all started (outdated):
    - http://wiki.freebsd.org/Pkg_install2_specs

