pseudo -- an analogue to sudo and an alternative to fakeroot

The official home for pseudo's git repository is:

	https://git.yoctoproject.org/pseudo

OVERVIEW:

The pseudo utility offers a way to run commands in a virtualized "root"
environment, allowing ordinary users to run commands which give the illusion
of creating device nodes, changing file ownership, and otherwise doing
things necessary for creating distribution packages or filesystems.

To configure, run the provided configure script.  Note that this is
NOT an autoconf script.

Configure options:
	    --prefix=/path/to/install/dir
	    --with-sqlite=/path/to/sqlite/dir
	    --bits={32,64}
	    --suffix=<text>
	    --enable-static-sqlite
	    --with-sqlite-lib
	    --libdir=...
	    --enable-memory-db
	    --enable-force-async
	    --with-sqlite-lib=...
	    --enable-static-sqlite
	    --with-static-sqlite=...
	    --with-rpath=...|--without-rpath
	    --cflags=''

There is no default prefix.  The default for sqlite is /usr, and for
bits is 32.  You need a reasonably modern sqlite3 -- it has to have
sqlite3_clear_bindings(), which at least one default sqlite3 install
did not.  (But that was dated 2006, so I'm not sure this will affect
most readers.)

The suffix value can be used to append a particular text string to file
names (such as libpseudo<suffix>.so).  This was used in the WR environment
to create libpseudo-<host_libc_md5sum>.so, to ensure that libpseudo was
rebuilt if the host libc changed.

This code is not particularly portable, but works on Linux and also
on 64-bit Intel Darwin systems.

Limited user documentation is provided in the given man page files (these
are not currently installed, merely provided in the source directory), and
some documentation on internals is provided in the doc/ directory.

The memory-db option uses an in-memory SQLite database, which is flushed
to disk on failures. It's disabled by default with SQLite 3.6 and earlier
due to performance weirdness.

The --enable-force-async option causes wrappers for fsync() and friends to
all return "success" instantly unless PSEUDO_ALLOW_FSYNC was set in the
environment when the client initialized (usually after a fork or exec).


FUTURE DIRECTIONS:

* The chroot() functionality is incomplete, though now sufficient for
  the real-world use cases we've tried.
* I have no intention of converting to autoconf.  It is the wrong tool
  for the job.

Please feel free to send bug feedback, change requests, or general
commentary.


ACKNOWLEDGEMENTS:

Peter Seebach:
My various coworkers, both engineering and management, made this possible.
While I did most of the actual typing, this code has benefitted greatly
from detailed code reviews, excellent reproducers for bugs, and the
consistent support of the whole group for the project.  It's been a great
deal of fun, and I'm pretty happy that we're finally ready to make it
available for other people to look at.


MAINTAINERS:

Richard Purdie
Mark Hatle


CONTACT:

Patches should be directed at the yocto-patches mailing list at yocto-patches
at lists.yoctoproject.org with [pseudo] in the subject line.  Bugs should be
filed with the Yocto project at https://bugzilla.yoctoproject.org/.

The repository can be configured to do this correctly with:

  git config format.subjectprefix "pseudo] [PATCH"
  git config sendemail.to yocto-patches@lists.yoctoproject.org
