是否有可能使用与/usr
标准目录不同的目录来安装东西?我问,因为我有一个/usr
只读的无尽操作系统系统,因此无法以“标准”方式做事。
换句话说:有没有办法创建另一个文件夹,比如在我的主目录中(让我们称之为“ user
”),并“s ”和hare
之间的所有命令和依赖项?那么,例如,当我想在- 目录中安装 perl-tk 时,我可以使用在make install 期间已安装在该文件夹中的 perl 软件包吗?/usr
/home/user
/home/user
/usr/whatever
我无法更改/usr
(有一种带有覆盖层的方法,但是通过系统更新,这些更改消失了),所以我需要以某种方式“在它之外工作”,但仍然以某种方式“链接”到它。
改变系统将是一个显而易见的选择,但也只是逃避挑战;)
答案1
这可能Endless OS
不是完成您想要的任务的正确工具。来自Endless OS 开发者页面,
无尽的操作系统
不是典型的 Linux 发行版。我们不使用 rpm、apt 或任何其他打包系统。我们使用由 OSTree 管理的只读根文件系统,应用程序包覆盖在顶部。我们有不同的目标用户。大多数桌面 Linux 发行版都面向精通技术的用户和开发人员。简单性是关键,因此我们精心挑选适合用户的最佳应用程序。我们的操作系统有许多核心技术,特别是 Linux 内核、OSTree、systemd、GNU、X、GNOME 和 Xapian。
答案2
是的,可以将软件安装到/usr
.
一个例子(系统范围)是/usr/local
. (这可能仍然无法直接帮助您,因为您的目录/usr
是只读的。)目录与其布局/usr/local
匹配(它有一个等)在大多数情况下,它用于区分作为基本操作系统的一部分提供的软件包(其中将进入),由 systemd 管理员从源安装(将进入)。/usr
/bin
/lib
/usr
/usr/local
还有一个/opt
旨在将软件包安装到单独的每个软件包目录中。因此,例如,您可以在下面安装 Perl 6 /opt/perl6
,并且它只包含 Perl 而没有其他内容。您将为单独的包保留单独的目录,这通常可以通过删除其目录来轻松“卸载”包。您通常需要进行$PATH
适当的设置才能访问安装在那里的程序,或者在bin
已经存在的其他目录中创建符号链接$PATH
来访问这些程序。管理/opt
通常是针对管理员的,考虑到您需要更新$PATH
安装的每个软件包,这可能不是最好的选择......
要在目录下安装软件,一种可能的方法是在其顶部$HOME
创建一个子目录并匹配或层次结构。.local
/usr
/usr/local
所以也许可以尝试这个:
mkdir ~/.local
然后像--prefix
安装新软件包时一样使用它。例如,如果包使用 autoconf 样式的配置脚本,您可以使用以下命令构建和安装它:
./configure --prefix="$HOME/.local"
make
make install
您需要添加~/.local
到您的$PATH
,以便您可以访问那里的程序。所以在你的~/.bashrc
:
PATH=$HOME/.local:$PATH
export PATH
打开新的 shell(新终端,或注销并重新登录)以使更改生效。或者只是在现有的 shell 上运行相同的命令。您现在应该能够~/.local/bin
直接执行程序。