目的
使用GNU stow轻松管理从源文件和点文件安装的程序
要求
- 根权限
困难
简单
约定
介绍
有时我们必须从源代码安装程序:也许它们无法通过标准渠道获得,或者我们想要特定版本的软件。 GNU存放非常好symlinks factory
该程序可以通过非常整洁且易于维护的方式来组织文件,从而对我们有很大帮助。
获取存放
您的分发存储库很可能包含stow
,例如在Fedora中,安装它所要做的就是:
# dnf install stow
或在Ubuntu /Debian上,您可以通过执行以下命令安装存储:
# apt install stow
在某些发行版中,它没有在标准存储库中存储,但是可以通过添加一些额外的软件源(例如,在Rhel和CentOS7的情况下为epel)或作为最后的选择,从源代码编译来轻松获得:需要很少的依赖。
从源代码编译存储
最新的可用存放版本是2.2.2
:压缩包可在此处下载:https://ftp.gnu.org/gnu/stow/
。
下载源文件后,必须解压缩tarball。导航到您下载软件包的目录,然后简单地运行:
$ tar -xvpzf stow-2.2.2.tar.gz
提取源代码后,在stow-2.2.2目录中导航,然后只需运行以下命令即可编译程序:
$ ./configure
$ make
最后,安装软件包:
# make install
默认情况下,该软件包将安装在/usr/local/
目录,但我们可以更改此目录,方法是通过--prefix
配置脚本的选项,或通过添加prefix="/your/dir"
当运行make install
命令。
在这一点上,如果所有人都按预期工作,我们应该stow
安装在我们的系统上
收起如何工作?
存放的主要概念在程序手册中已得到很好的说明:
The approach used by Stow is to install each package into its own tree,
then use symbolic links to make it appear as though the files are
installed in the common tree.
为了更好地了解软件包的工作原理,让我们分析其关键概念:
存放目录
存放目录是包含所有stow packages
,每个都有自己的私有子树。典型的存放目录是/usr/local/stow
:在其中,每个子目录代表一个package
收纳包
如上所述,存储目录包含”packages”,每个目录都位于其自己的单独子目录中,该子目录通常以程序本身命名。软件包不过是与作为实体管理的特定软件相关的文件和目录的列表。
存放目标目录
存放目标目录是一个非常简单的概念来解释。这是必须显示软件包文件的目录。默认情况下,存储目标目录被认为是从中调用存储的目录之上的目录。可以通过使用-t
选项(–target的缩写),它使我们可以指定备用目录。
一个实际的例子
我相信一个做得很好的示例值1000字,因此让我们展示一下存储如何工作。假设我们要编译安装libx264
。让我们克隆包含其源的git存储库:
$ git clone git://git.videolan.org/x264.git
运行该命令几秒钟后,将创建”x264″目录,该目录将包含准备好进行编译的源。现在,我们在其中导航并运行configure
脚本,将/usr /local /stow /libx264目录指定为--prefix
:
$ cd x264 && ./configure --prefix=/usr/local/stow/libx264
然后我们构建程序并安装它:
$ make
# make install
x264目录应该已经在存储目录中创建:它包含通常直接安装在系统中的所有内容。现在,我们要做的就是调用存储。我们必须使用以下命令从存储目录中运行命令:-d
选项以手动指定存放目录的路径(默认为当前目录),或通过指定目标-t
如前所述。我们还应该提供要存放的软件包名称作为参数。在这种情况下,我们从存储目录中运行程序,因此我们需要输入的是:
# stow libx264
现在,已将libx264软件包中包含的所有文件和目录符号链接到已从其中调用存储的目录的父目录(/usr /local)中,以便例如,包含在其中的libx264二进制文件/usr/local/stow/x264/bin
现在被链接到/usr/local/bin
,其中包含的文件/usr/local/stow/x264/etc
现在被链接到/usr/local/etc
等等。这样,对于系统来说,似乎文件已正常安装,并且我们可以轻松地跟踪我们编译和安装的每个程序。要还原操作,我们只需使用-D
选项:
# stow -d libx264
完成了!符号链接不再存在:我们只是”uninstalled”储藏包,将我们的系统保持在干净一致的状态。在这一点上,应该清楚为什么将它也用于管理点文件。一种常见的做法是将所有user-specific配置文件存储在git存储库中,以便对其进行轻松管理并使它们在任何地方都可用,然后使用存储将它们适当地放置在用户主目录中。
Stow还可以防止您错误地覆盖文件:如果目标文件已经存在并且不指向stow目录中的包,它将拒绝创建符号链接。这种情况在存储术语中称为冲突。
而已!有关选项的完整列表,请查阅收藏手册,不要忘记在评论中告诉我们您的意见。