
			Making and Installing lsof 4

********************************************************************
| The latest release of lsof is always available via anonymous ftp |
| from lsof.itap.purdue.edu.  Look in pub/tools/unix/lsof.         |
********************************************************************

				Contents

	Pre-built Lsof Binaries
	Making Lsof
	    Other Configure Script Options
	    Environment Variables
	    Security
	    Run-time Warnings
	    Device Access Warnings
	    NFS Blocks
	    Caches -- Name and Device
	    Raw Sockets
	    Other Compile-time Definitions
	    The AFSConfig Script
	    The Inventory Script
	    The Customize Script
	    Cautions
	    Warranty
	    License
	    Bug Reports
	    The 00FAQ File
	    The lsof-l Mailing List
	    Field Output Example Scripts
	    Field Output C Library
	Testing Lsof
	Dialect Notes
	    AFS
	    AIX
	    Apple Darwin
	    Auspex LFS (no longer maintained)
	    BSDI BSD/OS
	    DEC OSF/1, Digital UNIX, Tru64 UNIX
	    FreeBSD
	    HP-UX
	    IPv6
	    Linux
	    NetBSD
	    NEXTSTEP and OPENSTEP
	    OpenBSD
	    Pyramid DC/OSx and Reliant UNIX (no longer available)
	    Caldera OpenUNIX
	    SCO OpenServer
	    SCO|Caldera UnixWare
	    Solaris 2.x, 7, 8, 9 and 10
	    Ultrix (no longer available)
	    Veritas VxFS and VxVM
	User-contributed Dialect Support
	Dialects No Longer Supported
	Installing Lsof
	    Setuid-root Lsof Dialects
	    Setgid Lsof Dialects
	Porting lsof 4 to a New UNIX Dialect
	Quick Start to Using lsof
	Cross-configuring Lsof
	Environment Variables Affecting the Configure Script


=======================
Pre-built Lsof Binaries
=======================

Avoid using pre-built lsof binaries if you can; build your own
instead.

I do not support lsof binaries built and packaged by third parties nor
lsof binaries built from anything but the latest lsof revision.  (See
the Bug Reports section for more information on the details of lsof
support.)

One important reasone for those support restrictions is that when lsof
is built its Configure script tunes lsof to the features available on
the building system, often embodied in supporting header files and
libraries.  If the building system doesn't have support for a
particular feature, lsof won't be built to support the feature on any
system.

The Veritas VxFS file system is a good example of a feature that
requires build-time support.

UNIX dialect version differences --  Solaris 8 versus 9, AIX 4.3.3
vesus 5.2, etc. -- can also render a pre-built lsof binary useless
on a different version.  So can kernel bit size.

There are so many potential pitfalls to using an lsof binary
improperly that I strongly recommend lsof be used only where it is
built.


===========
Making Lsof
===========

	$ cd <lsof source directory>
	$ ./Configure <your dialect's abbreviation>
	$ make

(Consult the 00FAQ and 00XCONFIG files of the lsof distribution
for information about using make command invocations and environment
variables to override lsof default Makefile strings.)

This lsof distribution can be used with many UNIX dialects.  However,
it must be configured specifically for each dialect.  Configuration
is done in three ways: 1) by changing definitions in the machine.h
header file of the UNIX dialect of interest; 2) by defining
environment variable values prior to calling Configure (see the
00XCONFIG file, the Environment Variabls and Environment Variables
Affecting the Configure Script sections of this file); and 3) by
running the Configure shell script found in the top level of the
distribution directory.

You may not need to change any machine.h definitions, but you might
want to look at them anyway.  Pay particular attention to the
definitions that are discussed in the Security section of this
file.  Please read that section.

The Configure script calls three other scripts in the lsof
distribution: AFSConfig; Inventory; and Customize.  The AFSConfig
script is called for selected dialects (AIX, HP-UX, NEXTSTEP, and
Solaris) to locate AFS header files and determine the AFS version.
See The AFSConfig Script section of this file for more information.

The Inventory script checks the completeness of the lsof distribution.
Configure calls Inventory after it has accepted the dialect
abbreviation, but before it configures the top-level directory for
the dialect.  See The Inventory Script section of this file for
more information.

Configure calls the Customize script after it has configured the
top-level lsof directory for the declared dialect.  Customize helps
you modify some of the important compile-time definitions of
machine.h.  See the The Customize Script section.

You should also think about where you will install lsof and its
man page, and whom you will let execute lsof.  Please read the
Installing Lsof section of this file for information on installation
considerations.

Once you have inspected the machine.h file for the dialect for
which you want to build lsof, and made any changes you need, run
the Configure script, supplying it with the abbreviation for the
dialect.  (See the following table.)  Configure selects the
appropriate options for the dialect and runs the Mksrc shell script
in the dialect sub-directory to construct the appropriate source
files in the top-level distribution directory.

Configure may also run the MkKernOpts script in the dialect
sub-directory to propagate kernel build options to the dialect
Makefile.  This is done for only a few dialects -- e.g., DC/OSx,
and Reliant UNIX.

Configure creates a dialect-specific Makefile.  You may want to
inspect or edit this Makefile to make it conform to local conventions.
If you want the Makefile to install lsof and its man page, you will
have to create an appropriate install rule.

Lsof may be configured using UNIX dialect abbreviations from the
following table.  Alternative abbreviations are indicated by a
separating `|'.   For example, for SCO OpenServer you can use either
the ``osr'' or the ``sco'' abbreviation:

	$ Configure osr
    or
	$ Configure sco

 Abbreviations		UNIX Dialect
 -------------		------------

    aix			IBM AIX 5.[23] and 5.3-ML1 using IBM's C Compiler
    aixgcc		IBM AIX 5.[12] and 5.3-ML1 using gcc
    darwin		Apple Darwin 7.x and 8.x for Power Macintosh systems
    decosf		DEC OSF/1, Digital UNIX, Tru64 UNIX 4.0 and 5.1
    digital_unix	Digital UNIX, DEC OSF/1, Tru64 UNIX 4.0 and 5.1
    du			Digital UNIX, DEC OSF/1, Tru64 UNIX 4.0 and 5.1
    freebsd		FreeBSD 4.x, 4.1x, 5.x and [67].x
    hpux		HP-UX 11.00, 11.11 and 11.23, using HP's C
			Compiler, both /dev/kmem-based and PSTAT-based
    hpuxgcc		HP-UX 11.00, 11.11 and 11.23, using gcc, both
			/dev/kmem-based and PSTAT-based
    linux		Linux 2.1.72 and above for x86-based systems
    netbsd		NetBSD 1.[456], 2.x and 3.x
    next		NEXTSTEP 3.[13]
    nextstep		NEXTSTEP 3.[13]
    ns			NEXTSTEP 3.[13]
    nxt			NEXTSTEP 3.[13]
    openbsd		OpenBSD 2.[89] and 3.[0-9]
    openstep		OPENSTEP 4.x
    os			OPENSTEP 4.x
    osr			SCO OpenServer Release 5.0.6, using the C compiler
			from the SCO developer's kit
    osrgcc		SCO OpenServer Release 5.0.6, using gcc
    osr6		SCO Openserver 6.0.0, using the SCO C compiler
    sco			SCO OpenServer Release 5.0.6, using the C compiler
			from the SCO developer's kit
    scogcc		SCO OpenServer Release 5.0.6, using gcc
    solaris		Solaris 2.x, 7, 8, 9 and 10 using gcc
    solariscc		Solaris 2.x, 7, 8, 9 and 10 using Sun's cc
    tru64		Tru64 UNIX, DEC OSF/1, Digital UNIX 4.0 and 5.1
    unixware		SCO|Caldera UnixWare 7.1.4
    uw			SCO|Caldera UnixWare 7.1.4

If you have an earlier version of a dialect not named in the above
list, lsof may still work on your system.  I have no way of testing
that myself.  Try configuring for the named dialect -- e.g., if
you're using Solaris 2.1, try configuring for Solaris 2.5.1.

After you have configured lsof for your UNIX dialect and have
selected options via the Customize script (See the The Customize
Script section.) , use the make command to build lsof -- e.g.,

	$ make


Other Configure Script Options
==============================

There are three other useful options to the Configure script besides
the dialect abbreviation:

	-clean          may be specified to remove all traces of
			a dialect configuration, including the
			Makefile, symbolic links, and library files.

	-h              may be specified to obtain a list of
	-help		Configure options, including dialect
			abbreviations.

	-n              may be specified to stop the Configure
			script from calling the Customize and
			Inventory scripts.

			Caution: -n also suppresses the AFSConfig
			step.



Environment Variables
=====================

Lsof configuration, building, and execution may be affected by
environment variable settings.  See the Definitions That Affect
Compilation section in the 00PORTING file, the General Environment
Variables section in the 00XCONFIG file, the Dialect-Specific
Environment Variables section in the 00XCONFIG file, and the
Environment Variables Affecting the Configure Script section of
this file for more information.

Note in the General Environment Variables section of the 00XCONFIG
file that there are five environment variables that can be used to
pre-define values in lsof's -v output: LSOF_BLDCMT, LSOF_HOST,
LSOF_LOGNAME, LSOF_SYSINFO, and LSOF_USER.


Security
========

If the symbol HASSECURITY is defined, a security mode is enabled,
and lsof will allow only the root user to list all open files.
Non-root users may list only open files whose processes have the
same user ID as the real user ID of the lsof process (the one that
its user logged on with).

However, if HASNOSOCKSECURITY is also defined, anyone may list
anyone else's open socket files, provided their listing is enabled
with the "-i" option.

Lsof is distributed with the security mode disabled -- HASSECURITY
is not defined.  (When HASSECURITY is not defined, the definition
of HASNOSOCKSECURITY has no meaning.)  You can enable the security
mode by defining HASSECURITY in the Makefile or in the machine.h
header file for the specific dialect you're using -- e.g.
dialects/aix/machine.h.

The Customize script, run by Configure when it has finished its
work, gives you the opportunity to define HASSECURITY and
HASNOSOCKSECURITY.  (See the The Customize Script section.)

The lsof -h output indicates the state HASSECURITY and HASNOSOCKSECURITY
had when lsof was built, reporting:

    "Only root can list all files;"
	if HASSECURITY was defined and HASNOSOCKSECURITY wasn't
	defined;

    "Only root can list all files, but anyone can list socket files."
	if HASSECURITY and HASNOSOCKSECURITY were both defined;

    "Anyone can list all files;"
	if HASSECURITY wasn't defined.  (The definition of
	HASNOSOCKSECURITY doesn't matter when HASSECURITY isn't
	defined.)

You should carefully consider the implications of using the default
security mode.  When lsof is compiled in the absence of the
HASSECURITY definition, anyone who can execute lsof may be able to
see the presence of all open files.  This may allow the lsof user
to observe open files -- e.g., log files used to track intrusions
-- whose presence you would rather not disclose.

All pre-compiled binaries on lsof.itap.purdue.edu and mirrored from
it were constructed without the HASSECURITY definition.

As distributed, lsof writes a user-readable and user-writable device
cache file in the home directory of the real user ID executing
lsof.  There are other options for constructing the device cache file
path, and they each have security implications.

The 00DCACHE file in the lsof distribution discusses device cache
file path construction in great detail.   It tells how to disable
the various device cache file path options, or how to disable the
entire device cache file feature by removing the HASDCACHE definition
from the dialect's machine.h file.  There is also information on
the device cache file feature in the 00FAQ file.  (The 00DCACHE
and 00FAQ files are part of the lsof distribution package.)

The Customize script, run by Configure after it has finished its
work, gives you the opportunity to change the compile-time options
related to the device cache file.  (See The Customize Script
section.)

Since lsof may need setgid or setuid-root permission (See the Setgid
Lsof Dialects and Setuid-root Lsof Dialects sections.), its security
should always be viewed with skepticism.  Lest the setgid and
setuid-root permissions allow lsof to read kernel name list or
memory files, declared with the -k and -m options, that the lsof
user can't normally access, lsof uses access(2) to establish its
real user's authority to read such files when it can't surrender
its power before opening them.  This change was added at the
suggestion of Tim Ramsey.

Lsof surrenders setgid permission on most dialects when it has
gained access to the kernel's memory devices.  There are exceptions
to this rule, and some lsof implementations need to run setuid-root.
(The Setgid Lsof Dialects and Setuid-root Lsof Dialects sections
contains a list of lsof implementations and the permissions
recommended in the distribution's Makefiles.)

The surrendering of setgid permission is controlled by the WILLDROPGID
definition in the dialect machine.h header files.

In the end you must judge for yourself and your installation the
risks that lsof presents and restrict access to it according to
your circumstances and judgement.


Run-time Warnings
=================

Lsof can issue warning messages when it runs -- e.g., about the
state of the device cache file, about an inability to access an
NFS file system, etc.  Issuance of warnings are enabled by default
in the lsof distribution.

Issuance or warnings may be disabled by default by defining
WARNINGSTATE in the dialect's machine.h.  The Customize script may
also be used to change the default warning message issuance state.
(See The Customize Script section.)

The ``-w'' option description of the ``-h'' option (help) output
will indicate the default warning issuance state.  Whatever the
state may be, it can be reversed with ``-w''.


Device Access Warnings
======================

When lsof encounters a /dev (or /devices) directory, one of its
sub-directories, or one of their files that it cannot access with
opendir(3) or stat(2), it issues a warning message and continues.
Lsof will be more likely to issue such a warning when it has been
installed with setgid(<some group name>) permission; it won't have
trouble if it has been installed with setuid(root) permission or
is being run under the root login.

The lsof caller can inhibit or enable the warning with the -w
option, depending on the issuance state of run-time warnings.  (See
the Run-time Warnings section.)

The warning messages do not appear when lsof obtains device
information from a device cache file that it has built and believes
to be current or when warning message issuance is disabled by
default.  (See the "Caches -- Name and Device" section for more
information on the device cache file.)

The lsof builder can inhibit the warning by disabling the definition
of WARNDEVACCESS in the dialect's machine.h or disable all warnings
by defining WARNINGSTATE.  WARNDEVACCESS is defined by default for
most dialects.  However, some dialects have some device directory
elements that are private -- e.g., HP-UX -- and it is more convenient
for the lsof user if warning messages about them are inhibited.

Output from lsof's -h option indicates the status of WARNDEVACCESS.
If it was defined when lsof was compiled, this message will appear:

    /dev warnings = enabled

If WARNDEVACCESS was not defined when lsof was compiled, this
message will appear instead:

    /dev warnings = disabled

The Customize script, run by Configure after it has finished its
work, gives you the opportunity to change the WARNDEVACCESS
definition.  (See The Customize Script section.)


NFS Blocks
==========

Lsof is susceptible to NFS blocks when it tries to lstat() mounted
file systems and when it does further processing -- lstat() and
readlink() -- on its optional file and file system arguments.

Lsof tries to avoid being stopped completely by NFS blocks by doing
the lstat() and readlink() functions in a child process, which
returns the function response via a pipe.  The lsof parent limits
the wait for data to arrive in the pipe with a SIGALRM, and, if
the alarm trips, terminates the child process with a SIGINT and a
SIGKILL.

This is as reliable and portable a method for breaking NFS deadlocks
as I have found, although it still fails under some combinations
of NFS version, UNIX dialect, and NFS file system mount options.
It generally succeeds when the "intr" or "soft" mount options are
used; it generally fails when the "hard" mount option is used.

When lsof cannot kill the child process, a second timeout causes
it to stop waiting for the killed child to complete.  While the
second timeout allows lsof to complete, it may leave behind a hung
child process.  Unless warnings are inhibited by default or with
the -w option, lsof reports the possible hung child.

NFS block handling was updated with suggestions made by Andreas
Stolcke.  Andreas suggested using the alternate device numbers that
appear in the mount tables of some dialects when it is not possible
to stat(2) the mount points.

The -b option was added to direct lsof to avoid the stat(2) and
readlink(2) calls that might block on NFS mount points and always
use the alternate device numbers.  If warning message issuance is
enabled and you don't want warning messages about what lsof is
doing, use the -w option, too.

The -O option directs lsof to avoid doing the potentially blocking
operations in child processes.  Instead, when -O is specified, lsof
does them directly.  While this consumes far less system overhead,
it can cause lsof to hang, so I advise you to use -O sparingly.


Caches -- Name and Device
==========================

Robert Ehrlich suggested that lsof obtain path name components for
open files from the kernel's name cache.  Where possible, lsof
dialect implementations do that.  The -C option inhibits kernel
name cache examination.

Since AFS apparently does not use the kernel's name cache, where
lsof supports AFS it is unable to identify AFS files with path name
components.

Robert also suggested that lsof cache the information it obtains
via stat(2) for nodes in /dev (or /devices) to reduce subsequent
running time.  Lsof does that, too.

In the default distribution the device cache file is stored in
.lsof_hostname, mode 0600, in the home directory of the login of
the user ID that executes lsof.  The suffix, hostname, is the first
component of the host's name returned by gethostname(2).  If lsof
is executed by a user ID whose home directory is NFS-mounted from
several hosts, the user ID's home directory may collect several
device cache files, one for each host from which it was executed.

Lsof senses accidental or malicious damage to the device cache file
with extensive integrity checks, including the use of a 16 bit CRC.
It also tries to sense changes in /dev (or /devices) that indicate
the device cache file is out of date.

There are other options for forming the device cache file path.
Methods the lsof builder can use to control and employ them are
documented in the separate 00DCACHE file of the lsof distribution.


Raw Sockets
===========

On many UNIX systems raw sockets use a separate network control
block structure.  Display of files for applications using raw
sockets -- ping, using ICMP, for example -- need special support
for displaying their information.  This support is so dialect-specific
and information to provide it so difficult to find that not all
dialect revisions of lsof handle raw sockets completely.


Other Compile-time Definitions
==============================

The machine.h and dlsof.h header files for each dialect contains
definitions that affect the compilation of lsof.  Check the
Definitions That Affect Compilation section of the 00PORTING file
of the lsof distribution for their descriptions.  (Also see The
Customize Script section.)


The AFSConfig Script
====================

Lsof supports AFS on some combinations of UNIX dialect and AFS
version.  See the AFS section of this document for a list of
supported combinations.

When configuring for dialects where AFS is supported, the Configure
script calls the AFSConfig script to determine the location of AFS
header files and the AFS version.  Configure will not call AFSConfig,
even for the selected dialects, unless the file /usr/vice/etc/ThisCell
exists.

The AFS header file location is recorded in the AFSHeaders file;
version, AFSVersion.  Once these values have been recorded, Configure
can be told to skip the calling of AFSConfig by specifying its
(Configure's) -n option.


The Inventory Script
====================

The lsof distribution contains a script, called Inventory, that
checks the distribution for completeness.  It uses the file 00MANIFEST
in the distribution as a reference point.

After the Configure script has accepted the dialect abbreviation,
it normally calls the Inventory script to make sure the distribution
is complete.

After Inventory has run, it creates the file ".ck00MAN" in the
top-level directory to record for itself the fact that the inventory
has been check.  Should Inventory be called again, it senses this
file and asks the caller if another check is in order, or if the
check should be skipped.

The -n option may be supplied to Configure to make it bypass the
calling of the Inventory script.  (The option also causes Configure
to avoid calling the Customize script.)

The lsof power user may want to define (touch) the file ".neverInv".
Configure avoids calling the Inventory script when ".neverInv"
exists.


The Customize Script
====================

Normally when the Configure script has finished its work, it calls
another shell script in the lsof distribution called Customize.
(You can tell Configure to bypass Customize with its -n option.)

Customize leads you through the specification of these important
compile-time definitions for the dialect's machine.h header file:

	HASDCACHE		device cache file control
	    HASENVDC		device cache file environment
				variable name
	    HASPERSDC		personal device cache file path
				format
	    HASPERSDCPATH	name of environment variable that
				provides an additional component
				of the personal device cache file
				path
	    HASSYSDC		system-wide device cache file path
	HASKERNIDCK		the build-time to run-time kernel
				identity check
	HASSECURITY		the security option
	HASNOSOCKSECURITY	the open socket listing option whe
				HASSECURITY is defined
	WARNDEVACCESS		/dev (or /devices) warning message
				control
	WARNINGSTATE		warning message issuance state

The Customize script accompanies its prompting for entry of new
values for these definitions with brief descriptions of each of
them.  More information on these definitions may be found in this
file or in the 00DCACHE and 00FAQ files of the lsof distribution.

You don't need to run Customize after Configure.  You can run it
later or you can edit machine.h directly.

The -n option may be supplied to Configure to make it bypass the
calling of the Customize script.  (The option also causes Configure
to avoid calling the Inventory script.)

The lsof power user may want to define (touch) the file ".neverCust".
Configure avoids calling the Customize script when ".neverCust"
exists.

Customize CAUTION: the Customize script works best when it is
applied to a newly configured lsof source base -- i.e., the machine.h
header file has not been previously modified by the Customize
script.  If you have previously configured lsof, and want to rerun
the Customize script, I recommend you clean out the previous
configuration and create a new one:

	$ Configure -clean
	$ Configure <dialect_abbreviation>
	...
	Customize in response to the Customize script prompts.


Cautions
========

Lsof is a tool that is closely tied to the UNIX operating system
version.  It uses header files that describe kernel structures and
reads kernel structures that typically change from OS version to
OS version, and even within a version as vendor patches are applied.

DON'T TRY TO USE AN LSOF BINARY, COMPILED FOR ONE UNIX OS VERSION,
ON ANOTHER.  VENDOR PATCHES INFLUENCE THE VERSION IDENTITY.

On some UNIX dialects lsof versions may be even more restricted by
architecture type.

The bottom line is use lsof where you built it.  If you intend to
use a common lsof binary on multiple systems, make sure all systems
run exactly the same OS version and have exactly the same patches.


Warranty
========

Lsof is provided as-is without any warranty of any kind, either
expressed or implied, including, but not limited to, the implied
warranties of merchantability and fitness for a particular purpose.
The entire risk as to the quality and performance of lsof is with
you.  Should lsof prove defective, you assume the cost of all
necessary servicing, repair, or correction.


License
=======

Lsof has no license.  Its use and distribution are subject to these
terms and conditions, found in each lsof source file.  (The copyright
year in or format of the notice may vary slightly.)

    /*
     * Copyright 2002 Purdue Research Foundation, West Lafayette,
     * Indiana 47907.  All rights reserved.
     *
     * Written by Victor A. Abell
     *
     * This software is not subject to any license of the American
     * Telephone and Telegraph Company or the Regents of the
     * University of California.
     *
     * Permission is granted to anyone to use this software for
     * any purpose on any computer system, and to alter it and
     * redistribute it freely, subject to the following
     * restrictions:
     *
     * 1. Neither the authors nor Purdue University are responsible
     *    for any consequences of the use of this software.
     *
     * 2. The origin of this software must not be misrepresented,
     *    either by explicit claim or by omission.  Credit to the
     *    authors and Purdue University must appear in documentation
     *    and sources.
     *
     * 3. Altered versions must be plainly marked as such, and must
     *    not be misrepresented as being the original software.
     *
     * 4. This notice may not be removed or altered.
     */


Bug Reports
===========

Now that the obligatory disclaimer is out of the way, let me hasten to
add that I accept lsof bug reports and try hard to respond to them.  I
will also consider and discuss requests for new features, ports to new
dialects, or ports to new OS versions.

PLEASE DON'T SEND BUG REPORTS ABOUT LSOF TO THE UNIX DIALECT OR DIALECT
OPTION VENDOR.

At worst such bug reports will confuse the vendor; at best, the vendor
will forward the bug report to me.

PLEASE DON'T SEND BUG REPORTS ABOUT LSOF BINARIES BUILT OR DISTRIBUTED
BY SOMEONE ELSE, BECAUSE I CAN'T SUPPORT THEM.

I do support binaries I built, obtained ONLY from lsof.itap.purdue.edu.
Before reporting a problem with a lsof.itap.purdue.edu binary, please
verify the correctness of the signatures found in its associated
CHECKSUMS file.

Before you send me a bug report, please do these things:

    *  Make sure you try the latest lsof revision.

       +  Download the latest revision from:

	    ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof

       +  Verify the signatures of what you have downloaded;

       +  While connected to lsof.itap.purdue.edu, check for patches:

	    ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/patches

       +  If patches exist, install them in the latest revision
	  you just downloaded.  Then build the latest revision and
	  see if it fixes your bug.

    *  If you're having trouble compiling lsof with gcc, try the
       UNIX dialect vendor's compiler.  I don't have access to gcc on
       all test systems, so my support for it is hit-and-miss, and so
       is my ability to respond to gcc compilation problem reports.

    *  Check the lsof frequently asked questions file, 00FAQ,
       to see if there's a question and answer relevant to your
       problem.

    *  Make sure you're running the lsof you think you are by
       checking the path to it with which(1).  When in doubt, use an
       absolute path to lsof.  Make sure that lsof binary has
       sufficient permissions to do what you ask, including internal
       permissions given it (e.g., restrictions on what files lsof may
       report for whom) during its build.

When you send a bug report, make sure you include output from your
running of lsof's Configure script.  If you were able to compile a
running lsof, please also include:

    *  Output from which(1) that shows the absolute path to the
       lsof binary in question;

    *  Output from running lsof with its -h and -v options at
       lsof's absolute path;

    *  Output from "ls -l" directed to lsof's absolute path.

If you weren't able to compile a running lsof, please send me: the
compiler error output; identification of the lsof revision you're using
(contents of the lsof version.c file); identification of your system
(full uname output or output from whatever other tool identifies the
system); and compiler identification (e.g., gcc -v output).

Either set of output will help me understand how lsof was configured
and what UNIX dialect and lsof revision is involved.

Please send all bug reports, requests, etc. to me via e-mail at
<abe@purdue.edu>.  Make sure "lsof" appears in the "Subject:" line so
my e-mail filter won't classify your letter as Spam.


The 00FAQ File
==============

The lsof distribution contains an extensive frequently asked
questions file on lsof features and problems.  I recommend you
consult it before sending me e-mail.  Use your favorite editor or
pager to search 00FAQ -- e.g., supplying as a search argument some
fixed text from an lsof error message.


The lsof-l Mailing List
=======================

Information about lsof, including notices about the availability
of new revisions, may be found in mailings of the lsof-l listserv.
For more information about it, including instructions on how to
subscribe, read the 00LSOF-L file of the lsof distribution.


Field Output Example Scripts
============================

Example AWK and Perl 4 or 5 scripts for post-processing lsof field
output are locate in the scripts sub-directory of the lsof distribution.
The scripts sub-directory contains a 00README file with information
about the scripts.


Field Output C Library
======================

The lsof test suite (See "Testing Lsof."), checks basic lsof
operations using field output.  The test suite has its own library
of C functions for common test program operations, including
processing of field output.  The library or selections of its
functions could be adapted for use by C programs that want to
process lsof field output.  See the library in the file LTlib.c
in the tests/ sub-directory


Testing Lsof
============

Lsof has an automated test suite in the tests/ sub-directory that
can be used to test some basic lsof features -- once lsof has been
configured and made.  Tests are arranged in three groups: basic
tests that should run on all dialects; standard tests that should
run on all dialects; and optional tests that may not run on all
dialects or may need special resources to run.  See 00TEST for more
information.)

CAUTION!!!  Before you attempt to use the test suite make sure that
the lsof you want to test can access the necessary kernel resources
-- e.g., /dev/mem, /dev/kmem, /proc, etc.  Usually you want to test
the lsof you just built, so this is an important check.  (See
00TEST.)

To run the basic and standard tests, using the lsof in the parent
directory of tests/, do this:

	$ cd tests
	$ make test
    or	$ make std
    or	$ make standard

The basic and standard tests may be run as silently as possible,
using the lsof in the parent directory of tests/, with:

	$ cd tests
	$ make auto

This is the "automatic" test mode, designed for use by scripts that
build lsof.  The caller is expected to test the make exit code to
determine if the tests succeeded.  The caller should divert standard
output and standard error to /dev/null to suppress make's error
exit message.

The optional tests may be run, using the lsof in the parent directory
of tests/, with:

	$ cd tests
	$ make opt
    or	$ make optional

It's possible to excute individual tests, too.  See the 00TEST file
of this distribution for more informaiton on the tests, what they
do, and how to run and possibly customize each test.

It's possible to run the tests, using an lsof other than the one
in the parent directory of /tests, too.  See 00TEST for information
about using the LT_LSOF_PATH environment variable to do that.


=============
Dialect Notes
=============


AFS
===

Lsof recognizes AFS files on the following combinations of UNIX
dialect and AFS versions:

	AIX 4.1.4 (AFS 3.4a)
	Linux 1.2.13 (AFS 3.3)
	NEXTSTEP 3.2 (AFS 3.3) (untested on recent lsof revisions)
	Solaris 2.6 (AFS 3.4a)
	Ultrix 4.2 RISC (AFS 3.2b) (no longer available)

Lsof has not been tested under other combinations -- e.g. HP-UX
10.10 and AFS 3.4a -- and probably won't even compile there.  Often
when a UNIX dialect version or AFS version changes, the new header
files come into conflict, causing compiler objections.


AIX
===

Specify the aix Configure abbreviation for AIX 4.1.[45], 4.2[.1],
4.3[.123], 5L, and 5.[123].

Specify aixgcc on AIX above 4.1 to use the gcc compiler.  (Gcc can't be
used to compile lsof on AIX 4.1 and below because of kernel structure
alignment differences between it and xlc.)  Gcc results sometimes
depend on the version of the gcc compiler that is used.

Compilation of lsof with gcc on AIX 4.3[.123], 5L, and 5.[123] has been
sparsely tested with varying degrees of success: it has been reported
to succeed on AIX 4.3.3 and 32 bit Power AIX 5.1; to fail on ia64 AIX
5.1 and 64 bit Power AIX 5.1; and to succeed on 32 and 64 bit Power AIX
5.2.  Lsof compilation with gcc hasn't been tested on AIX 5.3.

At revision 4.61 and above lsof is configured and built to match the
bit size of the kernel of Power architecture AIX 5.1 systems.  Lsof
binaries built for 32 and 64 bit kernels are not interchangeable.  See
00FAQ for more information.

The Configure script uses /usr/bin/oslevel to determine the AIX version
for AIX less than 5 and ``uname -rv'' for AIX 5 and higher.  If
/usr/bin/oslevel isn't executable on AIX less than 5, the Configure
script issues a warning message and uses ``uname -rv'' to determine the
AIX version.

When Configure must use ``uname -rv'' on AIX less than 5 to determine
the AIX version, the result will lack a correct third component --
e.g., the `4' of ``4.1.4''.  If your AIX less than 5 system lacks lacks
an executable oslevel, I suggest you edit the Configure-produced
Makefile and complete the _AIXV definition in the CFGF string.

By default lsof avoids using the kernel's readx() function, causing
it to be unable to report information on some text and library file
references.  The ``-X'' option allows the lsof user to ask for the
information readx() supplies.

Lsof avoids readx() to avoid the possibility of triggering a kernel
problem, known as the Stale Segment ID kernel bug.  Kevin Ruderman
reported this bug to me.  The bug shows up when the kernel's
dir_search() function hangs, hanging the application process that
called it so completely that the application process can neither
be killed nor stopped.  The hang is the consequence of another
process (perhaps lsof) making legitimate use of the kernel's readx()
function to access the kernel memory that dir_search() is examining.
IBM has indicated they have no plans to fix the bug.

A fuller discussion of this bug may be found in the 00FAQ file of
the lsof distribution.  There you will find a description of the
Stale Segment ID bug, the APAR on it, and a discussion of the
sequence of events that exposes it.

I added the ``-X'' function so you can tell lsof to use readx(),
but if you use ``-X'', you should be alert to its possibly serious
side effects.  Although readx() is normally disabled, its state is
controlled with the HASXOPT, HASXOPT_ROOT, and HASXOPT_VALUE
definitions in dialects/aix/machine.h, and you can change its
default state by changing those definitions.  You can also change
HASXOPT_ROOT via the Customize script.

You can also compile lsof with readx() use permanently enabled or
disabled -- see the comments about the definitions in the
dialects/aix/machine.h header file.  You may want to permanently
disable lsof's use of readx() if you plan to make lsof publicly
executable.  You can also restrict -X to processes whose real UID
is root by defining HASXOPT_ROOT.

I have never seen lsof cause the Stale Segment ID bug to occur and
haven't had a report that it has, but I believe there is a possibility
it could.

AFS support for AIX was added with help help from Bob Cook and Jan
Tax who provided test systems.

Henry Grebler and David J. Wilson helped with lsof for AIX 4.2.

Bill Pemberton provided an AIX 4.3 test system.  Andrew Kephart
and Tom Weaver provided AIX 4.3 technical assistance.   Niklas
Edmundsson did 4.3.1 testing.  Doug Crabill provided an AIX 4.3.2
test system.  Jeff W. Stewart provided an AIX 4.3.3 test system.

The SMT file type for AIX 4.1.[45], 4.2[.1], and 4.3[.12] is my
fabrication.  See the 00FAQ file more information on it.

Loc Le and Nasser Momtaheni of IBM provided test systems for AIX 5L and
5.1.  Lsof for AIX 5L and 5.1 needs setuid-root permission to process
the -X option on systems whose architecture type is ia64.

Dale Talcott of Purdue provided AIX 5.1 and 5.2 test systems.  Dale and
John Jackson of Purdue provided an AIX 5.3 test system.


Apple Darwin
============

The Apple Darwin port was provided by Allan Nathanson for version
1.2.  Allan also arranged for access to a test system for maintenance
and regression testing.  Dale Talcott provided a test system, too.

Allan supplied patches for updates to 1.4, 5.x, 6.x, 7.x and 8.x.


BSDI BSD/OS
===========

As of lsof revision 4.77 support for BSDI BSD/OS has been
discontinued.  Lsof revision 4.76 with BSDI BSD/OS support may be found
on lsof.itap.purdue.edu in pub/tools/unix/lsof/src.


DEC OSF/1, Digital UNIX, Tru64 UNIX
===================================

Robert Benites, Dean Brock, Angel Li, Dwight McKay, Berkley Shands,
Ron Young and Steve Wilson have kindly provided test systems.
Jeffrey Mogul has provided technical assistance.  Dave Morrison
and Lawrence MacIntyre did Digital UNIX V3.2 testing.

Lsof supports the ADVFS/MSFS layered file system product.  Lsof
can locate all the open files of an ADVFS/MSFS file system when
its path is specified, provided the file system is listed in
/etc/fstab with an ``advfs'' type.  (This /etc/fstab caveat applies
only to Digital UNIX 2.0.)  At Digital UNIX 4.0 and Tru64 UNIX,
using code provided by David Brock, lsof 4.20 and above can locate
ADVFS file paths.

Testing of lsof on DEC OSF/1 and Digital UNIX 4.0 ended with lsof
revision 4.74.  Hence, the lsof documentation has dropped the claim
that it works there.  For a distribution of lsof 4.74 that was tested
on DEC OSF/1 and Digital UNIX 4.0, check pub/tools/unix/lsof/OLD/src
on the lsof ftp home, lsof.itap.purdue.edu.

Lsof revisions past 4.74 have only been tested on Tru64 UNIX 5.1.


FreeBSD
=======

Bill Bormann of Purdue University provided access to several FreeBSD
test systems.  Ade Barkah, John Clear, Ralph Forsythe, Michael
Haro, Kurt Jaeger, and William McVey have also provided FreeBSD
test systems.

The FreeBSD distribution header files are augmented by header files
in the dialects/freebsd/include directory.

David O'Brien maintains the lsof FreeBSD port package.


HP-UX
=====

Lsof has two HP-UX bases: /dev/kmem for HP-UX 11.0 and earlier;
and PSTAT for HP-UX 11.11 and later.  The lsof Configure script
will pick the appropriate base.

To use the CCITT x.25 socket support for HP-UX, you must have the
x.25 header files in /etc/conf/x25

Pasi Kaara helped with the HP-UX port, especially with its CCITT
x.25 socket support.

Richard Allen provided HP-UX 10.x and 11.x test systems, as did
Mark Bixby, and Elias Halldor Agustsson.   Marc Winkler helped test
the 10.20 port.  Richard J. Rauenzahn provided a 64 bit HP-UX 11
test system and an HP-UX 11.11 development system.

AFS support for HP-UX was added thanks to help from Chaskiel Moses
Grundman, who provided a test system.

The /dev/kmem-based HP-UX 11.00 support is extremely fragile.  It
depends on privately developed kernel structure definitions.  (See
.../dialects/hpux/hpux11 for the header files making the definitions.)
Those header files and their definitions will not be updated by
HP-UX 11.00 patches, making it likely that any patch changing a
kernel structure critical to lsof will break lsof in some way.

It's possible to build a 64 bit lsof for 64 bit HP-UX 11.00 with
gcc, but you must have a gcc compiler capable of producing 64 bit
executables.  See the 00FAQ file for more information.

The PSTAT-based lsof for HP-UX 11.11 and later is much more solid.
I am indebted to the vision of HP for providing an lsof kernel API
through the PSTAT implementation.  Specifically I appreciate the
help of HP staff members Carl Davidson, Louis Huemiller, Rich
Rauenzahn, and Sailu Yallapragada that made PSTAT-based HP-UX lsof
possible.


IPv6
====

Lsof has IPv6 support that has been tested for these UNIX dialects:
AIX 4.3.x; Apple Darwin 5.[12] and 6.0; the INRIA and KAME FreeBSD IPv6
implementations; PSTAT-based HP-UX; /proc-based Linux; the INRIA and
KAME NetBSD implementations; and Solaris 8 and 9.  Lsof has IPv6
support that hasn't been tested for: OpenBSD (KAME); OpenUNIX 8; Tru64
Unix 5.[01]; and UnixWare 7.1.[34].

Please let me know if your UNIX dialect has IPv6 support and I'll
see if it can be supported by lsof.


Linux
=====

Tim Korb, Steve Logue, Joseph J. Nuspl Jr., and Jonathan Sergent
have provided Linux test systems.

Michael Shields helped add and test automatic handling of ELF/COFF
form names in /System.map, Marty Leisner and Keith Parks have helped
test many lsof revisions.  Marty has provided valuable suggestions,
Linux hints, and code, too.

The 00FAQ file gives some Linux tips, including information on
coping with system map file problems.

To determine the state of the Linux 2.1.x C library lseek() function,
the lsof Configure script runs a test program that must have
permission to read /dev/kmem.  The test determines if the lseek()
function properly handles kernel offsets, which appear to be negative
because their high order bit is set.  If the lseek() test reveals
a faulty lseek(), Configure activates the use of a private lseek()
function for kernel offset positioning.  See the Linux problems
section of the 00FAQ file of the lsof distribution for more
information.


NetBSD
======

Greg Earle  and Paul Kranenburg have assisted with the NetBSD ports.
Paul has provided test systems.  Ray Phillips provided a NetBSA
Alpha test system.  Andrew Brown also provided a test system.

The NetBSD dialect version of lsof is compiled using the dialect
sources it shares with OpenBSD in the n+obsd dialect sub-directory.


NEXTSTEP and OPENSTEP
=====================

Virtual memory header files that allow lsof to display text references
were derived from the contents of /usr/include/vm of NEXTSTEP 2.0.
NeXT did not ship the virtual memory header files with other NEXTSTEP
or OPENSTEP versions.

You may use the RC_FLAGS environment variable to declare compiler
options outside the Makefile.  A common use of this variable is to
define the architecture types to be included in a "fat" executable.
See the comments in dialects/next/Makefile for an example.


OpenBSD
=======

David Mazieres has provided OpenBSD test systems.  The OpenBSD
dialect version of lsof is compiled using the dialect sources it
shares with NetBSD in the n+obsd dialect sub-directory.

Kenneth Stailey has provided OpenBSD testing and advice.

John Dzubera (Zube) reports, "lsof 4.33 compiles and runs on OpenBSD
2.3 for the pmax architecture (decstation 3100)."

I have not tested lsof on OpenBSD 3.8, but David Mazieres reports
revision 4.76 worked on OpenBSD 3.8.


Pyramid DC/OSx and Reliant UNIX
===============================

As of lsof revision 4.52 support for all Pyramid dialects has been
discontinued.  Lsof revision 4.51 with Pyramid support may be
obtained upon request.  Send the request to abe@purdue.edu.

These two UNIX dialects are very similar and share dialect-specific
source files from the pyramid sub-directory.

The Reliant Unix Pyramid C compiler issues warning messages that
I haven't found a convenient way to suppress.  You can ignore
warning messages about casts and conversions that lose bits.  The
message "warning: undefining __STDC__" is intentionally caused by
the lsof MkKernOpts configuration script to suppress warning messages
about cast and conversion problems in standard system header files,
such as <stdio.h> and <string.h>.

Bruce Beare and Kevin Smith provided test systems.


Caldera OpenUNIX
================

Larry Rosenman provided an OpenUNIX 8 test system.  Matthew Thurmaier
provided technical assistance, along with these people from Caldera:
Jack Craig, Robert Lipe, and Bela Lubkin.

Robert Lipe supplied changes to lsof for OpenUNIX 8.0.1.  Those
changes were also incorporated in UnixWare 7.1.3 when it became
the release name for OpenUNIX 8.0.1.

Support for lsof on OpenUNIX ended at lsof revision 4.74.  The last
lsof revision, 4.74, tested on OpenUNIX, may be found at the lsof
"home" ftp site, lsof.itap.purdue.edu, in pub/tools/unix/lsof/OLD/src.


SCO OpenServer
==============

Dion Johnson, Bela Lubkin, and Nathan Peterson of SCO gave me copies
of SCO OpenServer and the SCO OpenServer Development System 3.0
and provided technical advice for the lsof port.

Hugh Dickins, Bela Lubkin, Craig B. Olofson, and Nathan Peterson
provided version 5.0 and gave technical advice for porting lsof to
it.  Bela provided the 5.0.4 changes.  D. Chris Daniels provided
a 5.0.4 test system, Lee Penn provided one for 5.0.5, and John
Dubois for 5.0.6.

The <netdb.h> header file was accidentally omitted from some SCO
OpenServer Development System releases.  The Configure script will
sense its absence and substitute an equivalent from the BSD
distribution.  The BSD <netdb.h> and the <sys/cdefs.h> header file
it includes are located in the dialects/os/include sub-directory
tree.

To compile lsof from its distribution sources you must have the
TCP/IP and NSF headers in /usr/include.  While those are optional
OpenServer packages, I have access to no system that doesn't have
them, so I'm unable to build lsof for such a configuration.  However,
it should be possible to modify the lsof Configure script and
sources so lsof would compile and work without those optional
packages.

If you have an OpenServer system configured without the TCP/IP and
NFS packages, and want to tackle the job of building lsof for it,
contact me via e-mail at <abe@purdue.edu>.  I'll identify the
Configure script, header file, and source file changes you will
need to make.  (Caution: this is not a simple task, or I would have
already done it.)

The optional osrgcc and scogcc Configure abbreviations construct
Makefiles for compiling lsof with gcc.

The UnixWare 7.1.4 sources are used for OpenServer Release 6.0.0.
Hence there is a separate Configure abbreviation for it, "osr6".
Richard of SCO provided a test system and technical assistance.


SCO|Caldera UnixWare
============

D. Chris Daniels, John Hughes, Ken Laing, Andrew Merril, Lee Penn, and
Matthew Thurmaier provided test systems.  Bela Lubkin provided
technical assistance.  Larry Rosenman provided 7.1.[34] test systems.


Solaris 2.x, 7, 8, 9 and 10
===========================

SEE THE CAUTIONS SECTION OF THIS DOCUMENT.

The latest Solaris revision of lsof 4 might work under Solaris
2.[1-4] and 2.5[.1] and 7 but hasn't been tested there.  I have no
test systems for those Solaris versions.

Lsof will compile with gcc and the Sun C compiler under Solaris.
If you want to use the Sun compiler, use the solariscc Configure
abbreviation.  If you use a gcc version less than 2.8 on Solaris,
make sure the gcc-specific includes have been updated for your
version of Solaris -- i.e., run the gcc fixincludes script.

Solaris 7, 8, 9 and 10 support for 64 bit kernels depends on a Sun
WorkShop or Forte C compiler version that supports the "-xarch=v9"
flag -- usually 5.0 or greater.  Gcc versions 2.95 and above *may*
be configured and built for 64 bit support, but it takes some extra
work, the resulting compiler may be fragile, and the gcc developers
discourage it.  I've built 64 bit capable gcc compilers for Solaris
7, 8 and 9 from gcc versions 2.95 through 3.0.1 and produced working
lsof executables with them.  More information on 64 bit gcc for
Solaris may be found in the 00FAQ file.

Solaris 10 ZFS support is questionable, because Sun does not distribute
the ZFS kernel structure definition header files.  The lsof Configure
script and source code use some risky work-arounds.  ZFS file system
support was made possible with help from Horst Scheuermann.

Dave Curry and Steve Kirsch provided resources for Solaris 2.x
ports.  Casper Dik and Gerry Singleton consulted and provided
valuable assistance.

Henry Katz, Joseph Kowalski, Charles Stephens, Mike Sullivan, and
Mike Tracy provided technical assistance.

AFS support was added to Solaris lsof with help from Curt Freeland,
Heidi Hornstein, Michael L. Lewis, Terry McCoy, Phillip Moore, and
Sushila R. Subramanian.

Casper Dik provided valuable assistance for the Solaris 8 support.

Sun has graciously provided me access to BETA versions of Solaris
2.5, 2.6, 7, 8, and 9.

John Dzubera provided Solaris 7 and 8 test systems.

Mike Miscevic provided  Solaris 10 test systems.


Ultrix
======

As of lsof revision 4.52 support for Ultrix is no longer available,
because I no longer have an Ultrix test system.

Terry Friedrichsen, Dwight McKay, and Jeffrey Mogul helped me with
this port.

DECnet support was added to Ultrix lsof with the help of John
Beacom, who kindly provided a test system.  The Configure script
decides that DECnet support is available if /usr/lib/libdnet.a and
/usr/include/netdnet/dn.h exist and are readable.


Veritas VxFS and VxVM
=====================

Lsof supports some versions of Veritas VxFS and VxVM on some UNIX
dialects.  Consult the lsof Configure script for the specific
dialect, and consult the lsof dialect-specific source files for
the UNIX dialect of interest.  Veritas support will usually be
found in a source file named dnode[1-9].c.

Since Veritas rarely has a version number that can be extracted
with shell commands, lsof doesn't use it.  Instead, when lsof
supports Veritas, the Configure script will form compile-time
definitions starting with HASVXFS.   Check the lsof 00PORTING
documentation file for more information.

Lsof Veritas support requires that the supporting Veritas header
files be installed -- e.g., in /usr/include/sys/fs.  (The location
will depend in the dialect's header file conventions.)

Some information on lsof support for Veritas extensions may be
found in the lsof 00DIST file.

Chris Kordish and Andy Thomas have provided Solaris VxFS test
systems.


================================
User-contributed Dialect Support
================================

There are some user-contributed dialect versions of lsof; more
information on them can be found at:

	ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/contrib

Check the 00INDEX file there for details.


============================
Dialects No Longer Supported
============================

Because I don't have access to test systems, these UNIX dialects
are no longer supported by lsof:

	CDC EP/IX
	/dev/kmem-based Linux
	MIPS RISC/os
	Motorola V/88
	Pyramid DC/OSx
	Pyramid Reliant UNIX
	Sequent DYNIX
	SGI IRIX
	SunOS 4.x
	Ultrix
	UnixWare below 7.0

Remnants of the support lsof once provided for these dialects may
be found in:

	ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/OLD/binaries
and
	ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/OLD/dialects


===============
Installing Lsof
===============

The distributed Makefiles do not have actions that will install
lsof.  I've come to the conclusion there is no standard for installing
lsof or its man page, so I no longer distribute make rules for
installing them.  You should adjust the Makefile for your local
preferences.

The Makefile does have an install rule that will cause lsof to
compile by virtue of its dependency clause.  Some Makefiles also
have a dependency that causes the production of a man page that is
ready to install.  However, the actions of the install rule will
not cause the lsof executable or its man page to be installed in
any UNIX system-wide directory.

Instead, after the compilation and optional man page production
are completed, the install rule will produce a brief description
of what actions you might add to the install rule.  The description
will suggest the possible modes, ownerships, permissions, and
destinations your install rule might employ to install the lsof
executable and man page.

As you form your install rule, keep in mind that lsof usually needs
some type of special permission to do its job.  That may be permission
to read memory devices such as /dev/kmem, /dev/mem, or /dev/swap,
or it may be authorization to read entries in the /proc file system.

Memory device access can usually be provided by setting the modes
of the lsof executable so that it's effective group identifier when
it runs is the same as the group that has permission to read the
memory devices -- i.e., it is setgid-group.  The privileged group
is usually kmem, sys, or system.

Don't overlook using ACLs -- e.g., on AIX or Solaris 8 -- to give
lsof permission to access memory devices.  ACLs, coupled to a
separate group like kmem, can be safer than giving lsof setgid
authorization to a commonly used system group.

When lsof needs to read /proc file system entries, it must be
installed with modes that make its effective user identifier root
when it runs -- i.e., it must be setuid-root.  If lsof must be
installed setuid-root (only the AIX 5L, PSTAT-based HPUX, and
/proc-based Linux, ports need such power.), then access to memory
devices is automatic (or not needed in the case of /proc-based
Linux).

Your choice of permissions for lsof may also be affected by your
desire to allow anyone to use it or your need to restrict its usage
to specific individuals.  You will have to be guided by local policy
and convention in this case.

The next two sections, Setgid Lsof Dialect Versions and Setuid-root
Lsof Dialect Versions, list recommended install permissions.

The system directory where you install the lsof executable is also
open to choice.  A traditional place for a tool like lsof is
/usr/local/etc, but recent changes in directory structure organization
suggest that somewhere in /opt may be more suitable.

Bear one other factor in mind when choosing a location for the lsof
executable -- it usually is a shared executable, requiring access
to shared libraries.  Thus, locations like /sbin or /usr/sbin are
probably unsuitable.

Once you've chosen a location for the executable you may find that
the location for the man page follows -- e.g., if the executable
goes in /usr/local/etc, then the man page goes in /usr/local/man.
If the executable location doesn't imply a location for the man
page, you'll have to let local custom guide you.


Setuid-root Lsof Dialect Versions
=================================

These dialect versions should be installed with setuid-root
permission -- i.e., the lsof binary should be owned by root and
its setuid execution bit (04000) should be set.

	AIX 5L and above for full use of the -X option
	Apple Darwin 8.x for Power Macintosh systems
	PSTAT-based HP-UX 11.11 and 11.23
	/proc-based Linux (generally 2.1.72 and above)


Setgid Lsof Dialect Versions
============================

These dialect versions should be installed with setgid permission,
owned by the group that can read kernel memory devices such as
/dev/drum, /dev/kmem, /dev/ksyms, /dev/mem, /dev/swap.  ACLs may
be another mechanism (e.g., under AIX or Solaris 8) you can use to
grant read permission to the kernel memory devices.

	AIX 4.1.[45], 4.2[.1], and 4.3[.123]
	Apple Darwin 7.x for Power Macintosh systems
	DEC OSF/1, Digital UNIX, Tru64 UNIX 2.0, 3.2, 4.0, and 5.[01]
	FreeBSD 2.1.6, 2.2[.x], 3.x, 4.x, 5.x and [67].x
	/dev/kmem-based 11.00
	NetBSD 1.[456], 2.x and 3.x
	NEXTSTEP 3.[13]
	OpenBSD 2.[89] and 3.[0-9]
	OPENSTEP 4.x
	Caldera OpenUNIX 8
	SCO OpenServer 5.0.[46]
	SCO UnixWare 7.0 and 7.1.[0134]
	Solaris 2.6, 8, 9 and 10
	Ultrix 4.2 (no longer available)

====================================
Porting lsof 4 to a New UNIX Dialect
====================================

If you're brave enough to consider this, look at the 00PORTING
file.  Please contact me before you start.  I might be able to help
you or even do the port myself.

Don't overlook the contrib/ directory in pub/tools/unix/lsof on my
ftp server, lsof.itap.purdue.edu.  It contains user-contributed ports
of lsof to dialects I don't distribute, because I can't test new
revisions of lsof on them.


=========================
Quick Start to Using lsof
=========================

For information on how to get started quickly using lsof, consult
the 00QUICKSTART file of the lsof distribution.  It cuts past the
formal density of the lsof man page to provide quick examples of
using lsof to solve common open file display problems.


======================
Cross-configuring Lsof
======================

Using environment variables it is possible to Configure (and possibly
build) lsof for one UNIX dialect on a different one -- e.g., you
are running Configure on a Linux 2.3 system and you want to Configure
and build lsof for Linux 2.4.

See the 00XCONFIG file of the lsof distribution for a discussion
of how to do this.


====================================================
Environment Variables Affecting the Configure Script
====================================================

Configure script actions can be modified by introducing values to
the script via environment variables.  In many cases the environment
variable values take the place of test operations the Configure
script makes.

For more information on environment variables that can affect
Configure, consult the 00XCONFIG file of the lsof distribution.
See the General Environment Variables sections for descriptions of
ones that affect all dialects.  Consult the Dialect-Specific
Environment Variables section for ones that might affect the dialect
you are trying to configure.


Vic Abell <abe@purdue.edu>
April 24, 2007
