编译时安装包的所有文件的最佳路径是哪里?
例如 - 我想安装 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 包。这样,您将获得一个与其他包集成的常规包。
有一些警告(您将不会获得依赖项,并且一些非常复杂的安装脚本可能会失败),但通常它运行得很好。