I want to install the ABC commercial application on a FreeBSD system. The installation script of the packed kit wants to create the ABC application directory with its own structure (ABC/bin, ABC/var, ABC/etc, etc). Where should I tell the script to make that directory? I want to make that application available for all of the system users, so my home directory is not an option.

Does the "/usr/local/ABC" directory comply with the hier specifications?

Man hier says:
......
Within local/, the general layout sketched out by
hier for /usr should be used. Exceptions are the
man directory (directly under local/ rather than
under local/share/), ports documentation (in
share/doc/<port>/), and /usr/local/etc (mimics
/etc)
.......

There's no provision for "/usr/ABC" in hier, so "/usr/local/ABC" is illegitimate, too. Did I miss something?

Mail te maintainer for the ABC port.
Since we don't know what the ABC port stands for, neither do we know your OS version, or eventual error messages from your instlation, how do you expect anyone to help?
Further, if an author decides to put his own hierarchy under a given sub-tree, he might have reasons.
Formerly, under Linux, they used to use the /opt entry for these special setups.

ABC is a pure hypothetical example. I simply want to know where to put an application directory if the *BSD hier does not mention such a case and the FHS /opt directory is subject of dispute between linux and *BSD gurus.
I know I could make the application directory wherever I want to (/ABC, /opt/ABC, /usr/local/ABC, /usr/ABC) but I want to be a "good citizen in the *BSD world", as I am in the linux world (/opt/ABC).

Quite a few programs install into /usr/local/ABC, but not all of them do, unless your package has a completely unique directory structure, Why not place binaries in /usr/local/bin(or sbin), man pages in /usr/local/man.. resources or default data in /usr/local/share/ABC/*

As for user specific configuration files, create a hidden directory in the users home directory... /home/user/.ABC/*

That's pretty much a safe default for most software, the whole /opt + FHS thing is so Linux-centric..

If I want to install a non open-source application which wants to create an application directory on a *BSD system, I have NO standard BSD hier compliant solution but an accepted one - to install in /usr/local. Any other location is possible but not acceptable in the BSD world.

If I want to install a non open-source application which wants to create an application directory on a *BSD system, I have NO standard BSD hier compliant solution but an accepted one - to install in /usr/local. Any other location is possible but not acceptable in the BSD world.

Please correct me if I'm wrong.

Most BSD users assume 3rd party packages will be installed into /usr/local, and as such, /usr and/or /usr/local are often separate "larger" partitions.

The size of the / partition is not guaranteed, in fact, it's only 150M on my workstations.. as you can see, users might not be happy with you creating a /opt directory and using up all the available space.

Let me reformulate: where should I/we put an application directory (which means a directory containing ALL of the application files, into it's own structure, under a common root, ABC/ for example) if the standard *BSD filesystem hierarchy provides no room for it?

Should we blame the application developers for packaging the port like that or the standard for being too restrictive?

An FreeBSD port example is bdc. It installs everything under /usr/local/bdc. Is this path hier compliant?

Quote:

I believe the formal nature of things would be three hierarchies

/ level -> needed for starting the system, the real critical stuff. And probably holdovers from old unix days.

/usr level -> stuff that came with the OS but non-essential to starting the system, i.e. /bin/shd versus /usr/bin/vi

/usr/local level -> the local systems crap including /usr/local/bin/emacs.

local/ local executables, libraries, etc. Also used as the
default destination for the FreeBSD ports framework.
Within local/, the general layout sketched out by
hier for /usr should be used. Exceptions are the
man directory (directly under local/ rather than
under local/share/), ports documentation (in
share/doc/<port>/), and /usr/local/etc (mimics
/etc).

__________________
UNIX was not designed to stop you from doing stupid things, because that would also stop you from doing clever things.