我应该把自己编译的软件放在哪里?


Answers:


89

经验法则,至少在基于Debian的系统上:

  • /usr/local对于东西,这是“全系统” -即/usr/local往往是在发行版的默认$PATH,并遵循与标准UNIX目录层次结构/usr/local/bin/usr/local/lib等等。

  • /opt对于您不信任的东西,您将无法在全系统范围内使用每个应用程序的前缀/opt/firefox-3.6.8(例如/opt/mono-2.6.7,等等)。存放在这里需要进行更仔细的管理,但是也不太可能破坏系统—并且因为删除文件夹而已被删除,因此删除起来更容易。


有趣的是,/opt如果您确实要安装,许多程序/应用程序会自动建议安装到该程序/应用程序sudo
HongboZhu

50

如果您真的不想让它完全干扰,请不要将其放在您的中的任何位置$PATH

如果要安装它$PATH,至少请确保不要安装到/usr/local。我发现即使发行版已将其安装在其中,也可以找到许多软件/usr

我最喜欢的安装定制编译软件的方法是在我的$HOME目录中。这样,您就无需使用sudo任何东西,并且它与系统的其余部分非常隔离。例如:

mkdir ~/stage
./configure --prefix=/home/username/stage && make && make install

如果需要,可以将其添加/home/username/stage/bin到中$PATH


1
当然,使用主目录是最佳选择。海事组织。
bitek 2010年

1
+1同意。对于bash / ruby​​ / python脚本,我喜欢〜/ sbin,对于编译的安装,我喜欢〜/ opt / ...,在〜/ bin中带有别名。
克里斯(Kris)2010年

4
+1用于使用主目录,因为它使事情变得更简单;-1表示避免$ PATH的建议-根据标准(例如),实际上存在“保留用于本地安装的目录” /usr/local
里卡多·穆里

1
我避免使用/ usr / local的建议是基于原始发布者的意愿(有点含糊),不干扰打包的软件。由于有很多打包的软件可以通过在/ usr / local或$ PATH中查找来“帮助”,因此我认为这是有干扰的。但这确实取决于一个人的个人需求和目标。在许多情况下,/ usr / local是一个很好的选择。
桑迪

没有人注意到注释2中的字母“ s”完全误解。应该删除的文件
影响


10

大多数时候,我喜欢将自己的已编译内容放入中/opt。这有点伪标准。您也可以考虑/usr/local,但我更希望100%保持隔离。


1
发行公司往往把不少东西在/ opt(通常是专有的封装)/选择不说,发行不能触摸它。但是它确实说过/ usr / local
xenoterracide 2010年

1
我从来没有见过一个发行版把东西在/opt,不过我见过很多次,/usr/local散落着垃圾,它来自于发行
斯科特安德森

发行版,我习惯将Java放在/ opt中,我也曾经在其中看到过acrobat reader。如果他们将内容放在/ usr / local中,则它们将被FHS忽略,FHS表示需要安全,以免在系统更新中被覆盖。
xenoterracide 2010年

我猜对每个人来说。FHS很好,但我认为有时它会被忽略。
Scott Anderson

我见过的发行版软件包中唯一出现的/usr/local是与标准树中的目录并行的目录层次结构,甚至还有诸如TeX之类的索引文件。
Phil Miller 2010年

9

把它们放到/usr/local/src

我要做的是在此目录中提取源代码。它将创建一条类似

/usr/local/src/postgresql-8.3.7

然后创建一个符号链接到它:

/usr/local/src # ln -s  postgresql-8.3.7 postgresql

把你所有的建筑都做完/usr/local/src/postgresql

当您需要在版本和文档之间弹出时,这种方式很有用。


1
+1说明您的基本原理以及OP如何应用它,包括版本控制。
2010年


5

如果有可能,我建议您编译软件,然后创建FC软件包(我相信它使用yum安装软件包)。然后,您可以安装自己的已编译软件的软件包并删除它,而不会弄乱整个系统。


5

如果您希望能够轻松安装和删除自己构建的多个应用程序,则可以将Stow用作简单的程序包管理器。



4

我建议两件事:

系统范围:使用stow并安装在/ usr / local / stow / package-version下。然后,您可以轻松地在版本之间切换。

在我的家中,或者如果我没有/ usr / local的写许可权,我会亲自在〜/ .local下安装程序,这由XDG standard提示。

您也可以在本地使用存储,尽管我从未使用过:)


3

我的设置与大多数人有所不同,因为我做了很多开发工作。我有一个/ home / jackson / bin /目录,我将东西安装到其中,并且我编辑了.bashrc并添加了以下内容:

export PATH=/home/jackson/bin/bin::$PATH
export LD_LIBRARY_PATH=/home/jackson/bin/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/home/jackson/bin/lib/pkgconfig:$PKG_CONFIG_PATH

我不会为所有事情都这样做,但是在开发过程中会很好。


3

实际上,从源tarball创建deb或rpm并不难。这样,您可以使用发行版的程序包管理器的功能来保持系统清洁。大多数时候,这就是我要做的:只需创建一个rpm。


2

如果正在编译应用程序,则可以在PATH env变量中添加其可执行文件路径。这不会影响其他用户。


我不知道为什么要投反对票?+1表示“平衡”
phunehehe 2010年

我也想知道为什么:-)。我在没有安装权限的情况下使用了相同的解决方案来使用cscope。
Hemant 2010年

@phunehehe可能是因为它甚至没有尝试回答问题。问题问在哪里放置软件。该答案提示您将其放置在某个地方可以做什么。可以通过提供有关使用哪些文件夹的一些建议来改进它。
JBentley

2

总是可以选择“将其放入它的位置”,但首先要编写一个简单的rpm。


1

如果希望您的应用程序对系统上的所有用户可用,并且您具有必要的权限,请使用/ opt。如果希望该应用程序仅对您(和root)可用,请使用/ home / username


0

最简单的方法是获取源程序包(.src.rpm对于RPMite),将其解包,将新的源程序/配置/内容打包到其中,适当更改版本并进行构建。安装此软件包可使您的软件包管理器了解新软件包,并考虑将其用于依赖项以及卸载/更新。

这是第一次麻烦,但是如果有新版本(或一些重要补丁)出现,则更新起来会更容易。另一个好处是您可以使用本地软件创建自己的存储库,以供例如实验室中的计算机共享。


0

编写RPM并不困难,它具有放置位置的准则,并可以使卸载变得很容易。

如果执行此操作,请像通过打包系统提供的所有其他文件一样,在/usr而不是下安装文件/usr/local

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.