(debian-policy.info)Site-specific programs


Next: The system-wide mail directory Prev: File System Structure Up: File system hierarchy
Enter node , (file) or (file)node

9.1.2 Site-specific programs
----------------------------

As mandated by the FHS, packages must not place any files in
‘/usr/local’, either by putting them in the file system archive to be
unpacked by ‘dpkg’ or by manipulating them in their maintainer scripts.

However, the package may create empty directories below ‘/usr/local’ so
that the system administrator knows where to place site-specific files.
These are not directories `in' ‘/usr/local’, but are children of
directories in ‘/usr/local’.  These directories (‘/usr/local/*/dir/’)
should be removed on package removal if they are empty.

Note that this applies only to directories `below' ‘/usr/local’, not
`in' ‘/usr/local’.  Packages must not create sub-directories in the
directory ‘/usr/local’ itself, except those listed in FHS, section 4.5.
However, you may create directories below them as you wish.  You must
not remove any of the directories listed in 4.5, even if you created
them.

If ‘/etc/staff-group-for-usr-local’ does not exist, ‘/usr/local’ and all
subdirectories created by packages should have permissions 0755 and be
owned by ‘root:root’.  If ‘/etc/staff-group-for-usr-local’ exists,
‘/usr/local’ and subdirectories should have permissions 2775
(group-writable and set-group-id) and be owned by ‘root:staff’.

Since ‘/usr/local’ can be mounted read-only from a remote server,
‘/usr/local/*/dir/’ directories must be created and removed by the
‘postinst’ and ‘prerm’ maintainer scripts and not be included in the
‘.deb’ archive.  These scripts must not fail if either of these
operations fail.

For example, the ‘emacsen-common’ package could contain something like

     if [ ! -e /usr/local/share/emacs ]; then
         if mkdir /usr/local/share/emacs 2>/dev/null; then
             if test -e /etc/staff-group-for-usr-local ; then
                 if chown root:staff /usr/local/share/emacs; then
                     chmod 2775 /usr/local/share/emacs || true
                 fi
             elif chown root:root /usr/local/share/emacs; then
                 chmod 0755 /usr/local/share/emacs || true
             fi
         fi
     fi

in its ‘postinst’ script, and

     rmdir /usr/local/share/emacs/site-lisp 2>/dev/null || true
     rmdir /usr/local/share/emacs 2>/dev/null || true

in the ‘prerm’ script.  (Note that this form is used to ensure that if
the script is interrupted, the directory ‘/usr/local/share/emacs’ will
still be removed.)

If you do create a directory in ‘/usr/local’ for local additions to a
package, you should ensure that settings in ‘/usr/local’ take precedence
over the equivalents in ‘/usr’.

However, because ‘/usr/local’ and its contents are for exclusive use of
the local administrator, a package must not rely on the presence or
absence of files or directories in ‘/usr/local’ for normal operation.


automatically generated by info2www version 1.2.2.9