Take the 2-minute tour ×
Unix & Linux Stack Exchange is a question and answer site for users of Linux, FreeBSD and other Un*x-like operating systems.. It's 100% free, no registration required.

I want to install a program in Linux and run it as a daemon. (Team Speak 3 in this case, but the question is general in nature). There is no package provided, only tarred binaries. Where in directory structure should I put such a program by convention?

On the web I found that /opt is for "optional addon apps", while /usr is for "user programs". I found one tutorial suggesting /opt while the other sugested /usr.

So which one is "more correct"?

share|improve this question
1  
The "more correct" depends on your distribution. You should check your distribution's guidelines on where to put software that isn't managed by the package manager (often /usr/local) OR on how to create your own package for it. –  Leiaz Apr 29 at 11:31
    
Thank you Leiaz. Your comment helped me to find the answer (askubuntu.com/questions/1148/…). So I guess it should be /opt in my case (Using Linux Mint, which is based on Ubuntu) and the application is using a single folder. If you convert your comment into an answer, I will accept it. –  Eiver Apr 29 at 11:41

4 Answers 4

up vote 1 down vote accepted

The "more correct" depends on your distribution. You should check your distribution's guidelines on where to put software that isn't managed by the package manager (often /usr/local) OR on how to create your own package for it.

As you said TeamSpeak just put everything in one folder (and may not be easy to reorganise), yes /opt/ is probably best.

(But, for instance, in Archlinux, the package manager can install there, so I'd still make a PKGBUILD to install in /opt.)

Also distributions usually try to follow the Filesystem Hierarchy Standard, so this is where to look for more generic convention.

share|improve this answer

The Linux Standard Base and the Filesystem Hierarchy Standard are arguably the standards of where and how you should install software on a Linux system and would suggest placing software that isn't included in your distribution either in /opt or /usr/local/ or rather subdirectories therein (/opt/<package> /opt/<provider> /usr/local/bin).

Best practice is to convert software you download to a installable software package native to your distribution, for instance dpkg or rpm formats. That will facilitate reporting, upgrading and cleanly removing the software.

share|improve this answer

Binaries go in the bin folder by common conventions, how you would organize your package structure is up to you, I can think of /opt/<prog_name>/ if it is just a list of binaries.

share|improve this answer
    
I am afraid that Team Speak 3 guys made the program in such a way that everything it needs sits just in one folder (binaries,config files, logs), so It doesn't use /bin or /etc or /var/log –  Eiver Apr 29 at 11:36

If you will be compiling your own software then you ultimately control the installation location. By convention, software compiled and installed manually (not through a package manager, e.g apt, yum, pacman) is installed in /usr/local. Some packages (programs) will create a sub-directory within /usr/local to store all of their relevant files in, such as /usr/local/openssl. Other packages will install their necessary files into existing directories such as /usr/local/sbin and /usr/local/etc. These are simply default locations and can be changed during compilation.

When you are compiling software, the installation location can be specified by using the --prefix= option when running ./configure. It is highly recommended that you look at all of the available options for your package by running $ ./configure --help | less. Additionally, browsing the INSTALL and README documents provided with your package is a good idea. They tend to include installation instructions and dependency information that is specific to the package.

It should also be noted that although you can store software anywhere, according to the FHS, source code for locally installed software should be stored in /usr/local/src Standardizing where you store your source trees will allow you to easily locate a tree if you need to copy a stock configuration file or binary. Even though some packages use it, your source code should not be stored in /usr/src as that is designated for system software such as the kernel.

Finally, you need to ensure that your installation location is included in your $PATH. If you decide to install your package in /opt but it's not in your $PATH your shell won't find the executables and you will have to use the absolute path to invoke your programs. Here are some great discussions from AU about configuring your $PATH

Additional reading: man hier

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.