部署个人程序和脚本

部署个人程序和脚本

我有一个git包含有用的程序和脚本的项目。层次结构如下所示:

$ git clone https://github.com/myaccount/myutils.git

$ tree myutils
.
├── bash
│   ├── do-this.sh
│   ├── do-that.sh
│   ├── functions-to-source.sh  # Contains useful functions that will be sourced by other scripts.
│   ├── tests
│   │   ├── bin
│   │   └── command.ext1.ext2.ext3
│   └── todo
├── python
│   ├── notes
│   └── package1
│       ├── module1.py
│       └── module2.py
└── c
    ├── bin
    ├── build
    ├── doc
    ├── include
    ├── lib
    ├── Makefile
    ├── src
    └── test

我们还可以将每个文件夹视为一个项目。我应该如何安装我的文件/usr/local?我想让它们成为安装在/usr/local.我读到我们应该放入/usr/local/src必须编译的内容。这里只需要编译C工程,那么我是否将各个子文件夹(bin、lib、src)的内容复制到相应的子文件夹中/usr/local?那些不需要编译的脚本呢?我应该复制每个脚本吗/usr/local/bin?或者建立一个符号链接到它们?整个项目怎么样,是否应该将其移动到某些特定文件夹中?我想了解更多关于良好(最佳?)部署实践的信息。

答案1

我建议使用GNU 斯托/opt在目录下为任何特定于站点的软件创建层次结构(请参阅文件系统层次结构标准,尽管有些网站使用/sw代替)。这样,你的东西就会

  1. [使用/opt] ...不与任何包管理器安装的任何内容发生冲突。
  2. [使用stow]...是真的易于安装/卸载。

对于stow,创建目录/opt/stow

在此之下,为每个单独的项目创建一个完整的子层次结构,即

  • /opt/stow/project-1/{bin,lib,man}
  • /opt/stow/project-2/bin
  • /opt/stow/project-3/{bin,fun,share/examples}fun适用于具有 shell 函数的可源 shell 代码)
  • ETC。

不要将 C 源代码放在那里,只放使用工具所需的东西。

然后:

$ cd /opt/stow
$ stow project-1
$ stow project-2
$ stow project-3

每次调用stow都会使用指向正确位置的符号链接填充目录/opt,以便您的可执行文件来自例如/opt/stow/project-1/bin /opt/stow/project-2/bin可以轻松访问/opt/bin.

然后添加/opt/binPATH您的即可。

卸载例如project-1来自/opt

$ cd /opt/stow
$ stow -D project-1

这将从/opt层次结构中删除所有指向 的链接/opt/stow/project-1,但保留完整的内容/opt/stow/project-1

如果您的第一个项目有新版本,您可以:

$ # (having un-stowed project-1, and still in /opt/stow ...)
$ mv project-1 project-1.old
$ cp $HOME/path/project-1 ./
$ stow project-1

stow与标志一起使用-v来查看实际发生的情况。

基本上,GNU Stow 可以轻松地保持应用程序的单独安装分离。我一直使用它来编译和安装代码(例如$HOME/local使用--prefixwith )。./configure使卸载东西变得更容易。

相关内容