你好 周(在积压的文章中腌制了很长时间) 前一段时间,我谈到了如何使用rcm进行常规配置管理 。 我们公司中有一个p模块,可以将用户的个人设置分发给他有权访问的所有主机。 因此,我想要以下内容:
- 对我使用的所有内容(vim,zsh,git等)进行自己的设置
- 在dotfiles存储库中更新它们时进行更新
- 所有这些-没有不必要的手势
工具
我已经使用了所有需要的东西,即:
这里没有什么棘手的问题:我们通过在主机上解压缩tarball来部署tarball。 仅管理特定列表中的文件和目录,从而在每次部署时完全磨平每个表冠。 因此,如果压缩包已更改,则$HOME
列表中的所有内容都会被擦除。 如果不是,则$ HOME的内容保持不变。 一个单独的脚本负责(重新)将文件夹与个人文件的源文件一起打包;它看起来很琐碎:
如何创建一个新的提交球tarball
不在$ HOME中部署点文件
由于我已经有了一个将配置部署到各种主机的工具,因此显然我将使用它。 您只需要修复某些问题,并使rcm
将文件复制到我需要的位置即可。 但是,rcm始终在$ HOME中设置点文件,没有命令行参数可以更改此行为。
经过一些实验并在源代码中进行选择,我意识到您可以直接更改$ HOME,然后所有rcm命令的实用程序的行为将发生如下变化: lsrc, mkrc, rcdn, rsup
每个实用程序lsrc, mkrc, rcdn, rsup
将读取${HOME}/.rcrc
并使用${HOME}/.dotfiles
默认是点文件。 因此,创建具有所有必需参数的相同${HOME}/.rcrc
就足够了。
最简单的方法是在主文件夹中创建一个“空白”,并在每次提交时从头开始填充它。 在存储库中可以看到有关外观的示例。 在没有个人标签的所有主机上,此文件夹都将被忽略;因此,它不会干扰主配置。 一个单独的.rcrc文件包含文件复制逻辑的所有参数,我仅作一些说明:
- 如果没有
$SYMLINK_DIRS
rcup
正常工作,从而创建了要复制的文件的完整列表。 使用此选项以及$COPY_ALWAYS
实用程序只需将整个文件夹复制为cp -r
即可,而不会造成不必要的麻烦 - 显然,在远程服务器上并不需要很多,所有这些都在
$EXCLUDES
列出(除了vim插件,由于使用了$SYMLINK_DIRS
,因此必须在钩子$SYMLINK_DIRS
其删除) - 由于
${HOME}/.dotfiles
由于明显的原因而停止工作,因此您还必须覆盖$DOTFILES_DIRS
仅此而已。 现在,您可以将tag-personal文件夹复制到任何位置, rcup
覆盖${HOME}
,然后运行rcup
WORK_DIR="${HOME}/.dotfiles/tag-personal" _OLD_HOME=$HOME HOME="${HOME}/some/long/custom/path" cp -r "${WORK_DIR}" "${HOME}" rcup -v HOME=$_OLD_HOME
哇! 但是我想要别的东西...
我们将配置的“部署”自动化到自定义$ HOME
使这个“东西”很容易,这时git将有助于解决它的问题。 有一个可执行文件.git/hooks/post-commit
内容如下:
现在,每次使用点文件提交到存储库后,将启动此脚本。
一切之后,仍然需要使用个人数据来提交+推送到存储库,并等待直到自动化魔术将我的配置带到工作的主机上。
为什么使这样的事情复杂化?
事实是,尽管该公司没有用于将个人配置部署到主机的工具,但并不需要这种工具包。 但是,只要有机会,食欲就会立即增加。 我的一些同事对将三个文件带到主机这一事实感到满意,例如.vimrc .bashrc .gitconfig
。 但是,很长一段时间以来,我一直在热情地磨砺,校正和抛光各种工具。 安装所有插件后,仅~/.vim
的重量为427MB(是的,其中218个是YCM,我没有将其拖到服务器上,在清理和打包后,它们的重量最多减轻了3MB)。
可能有人会认为这太多了,可以用手完成。 也许不是每个人都同意这一点。
我希望其他人几乎有身体上的需求,使他们几乎可以在家中的工作站上感觉舒适,并且工具允许他。 祝您健康,并祝我们自动化!