最佳实践:在哪里安装 Linux 软件包

最佳实践:在哪里安装 Linux 软件包

编译时安装包的所有文件的最佳路径是哪里?

例如 - 我想安装 ProFTPd,因此有一个选项

--prefix=/usr/local/proftpd

,这意味着编译后的所有文件(包括二进制文件和配置文件)都将存储在这里。如您所知,所有通过软件包系统安装的软件包(如 SuSE 上的 zypper 或 Ubuntu 上的 apt)通常将其配置文件存储在 /etc/ 中,将二进制文件存储在 /sbin/ 中,并且还将链接存储在我的 $PATH 中,因此我只需输入 proftpd(无需 /sbin)即可运行。

我认为通过软件包系统安装软件包的巨大优势在于卸载过程简单。我希望能够轻松卸载已编译的软件包。

我想我可以创建一些批处理文件,我可以像这样使用它:

uninstall --package=proftpd

我的脚本将在常用路径(/etc、/sbin)中找到所有 proftpd 文件并使用 rm 将其删除。

是否有任何最佳实践,在哪里存储所有这些文件,或者我的第一个示例(--prefix = / usr / local / proftpd)是否存在任何(缺点)优点?

我真的不认为拥有配置文件和二进制文件的两条路径是件好事,但也许我误解了 Linux 的基本原理……:-)

答案1

文件系统层次标准

发行版得到/usr,您得到/usr/local,ISV 也得到/opt

答案2

/usr/local如果您具有管理员权限并且希望每个人都使用您的程序,或者$HOME您只想为自己制作一个副本,那么在您的机器上安装软件包的最佳位置就是。

通常您会将前缀设置为,--prefix=/usr/local以便将应用程序文件存储在/usr/local/bin设置中/usr/local/etc等等。

使用这些标准位置的优点是……嗯,基本上它们是标准的。人们知道在哪里寻找文件。例如,/usr/local/bin几乎总是在每个人的 中$PATH,所以你不必摆弄变量$PATH来让人们运行它。同样,库是通过检查找到的$LD_LIBRARY_PATH,但/usr/local/lib通常是默认检查的,所以你不需要手动添加它,等等。

关于卸载:一旦您运行配置并构建程序,就会make install为您安装它,并make uninstall自动删除文件。

答案3

实际上,最好的方法可能是创建一个可以安装的包。

许多应用程序都附带了创建 RPM 或 DEB 包所需的文件。如果没有,可以使用工具自动创建包,例如检查安装

checkinstall将监视 的操作make install,并重定向已安装的文件以从中创建 DEB 或 RPM 包。这样,您将获得一个与其他包集成的常规包。

有一些警告(您将不会获得依赖项,并且一些非常复杂的安装脚本可能会失败),但通常它运行得很好。

答案4

最佳做法是遵循Linux 标准库,特别是文件系统层次标准

相关内容