我们使用rcm将配置部署到任何文件夹

你好 周(在积压的文章中腌制了很长时间) 前一段时间,我谈到了如何使用rcm进行常规配置管理 。 我们公司中有一个p模块,可以将用户的个人设置分发给他有权访问的所有主机。 因此,我想要以下内容:


  • 对我使用的所有内容(vim,zsh,git等)进行自己的设置
  • 在dotfiles存储库中更新它们时进行更新
  • 所有这些-没有不必要的手势

工具


我已经使用了所有需要的东西,即:


  • 厘米
  • 吉特
  • 焦油

用于将文件部署到主机的格式


这里没有什么棘手的问题:我们通过在主机上解压缩tarball来部署tarball。 仅管理特定列表中的文件和目录,从而在每次部署时完全磨平每个表冠。 因此,如果压缩包已更改,则$HOME列表中的所有内容都会被擦除。 如果不是,则$ HOME的内容保持不变。 一个单独的脚本负责(重新)将文件夹与个人文件的源文件一起打包;它看起来很琐碎:


 #!/bin/bash -e # Repack each personal directory into a tarball, use gtar on mac/*BSD and tar on linux TAR=$(command -v gtar tar | head -1) cd "$(dirname "$0")" for file in *; do if [ -d "${file}" ]; then printf '\033[0;32mArchiving of \033[1;33m%s\033[0m\n' "$file" # to avoid differences in an archive because of different mtime # hard coded 2003-01-01 CET XZ_OPT=-e9 $TAR --mtime="@1041375600" -cJf "${file}.tar.xz" "${file}" fi done 

如何创建一个新的提交球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内容如下:


 #!/bin/sh set -e WORK_DIR="tag-personal" HOME="${HOME}/some/long/custom/path/final_directory/USERNAME" # Some unnecessary and very heavy plugins EXCLUDED_VIM_PLUGINS='YouCompleteMe vimtex' rm -rf "${HOME}" cp -r "${WORK_DIR}" "${HOME}" rcdn -v rcup -v for plugin in ${EXCLUDED_VIM_PLUGINS}; do rm -rf "${HOME}/.vim/plugged/${plugin}" done # cleanup for .git dirs, compiled py and pictures find "${HOME}" \( \ \( -type d -iname '.git' \) -o \ \( -type f \ \( -iname '*.pyc' -o -iname '*.gif' -o -iname '*.png' \) \ \) \ \) -exec rm -rf {} + # final repack for files "${HOME}/../repack.sh" 

现在,每次使用点文件提交到存储库后,将启动此脚本。


一切之后,仍然需要使用个人数据来提交+推送到存储库,并等待直到自动化魔术将我的配置带到工作的主机上。


为什么使这样的事情复杂化?


事实是,尽管该公司没有用于将个人配置部署到主机的工具,但并不需要这种工具包。 但是,只要有机会,食欲就会立即增加。 我的一些同事对将三个文件带到主机这一事实感到满意,例如.vimrc .bashrc .gitconfig 。 但是,很长一段时间以来,我一直在热情地磨砺,校正和抛光各种工具。 安装所有插件后,仅~/.vim的重量为427MB(是的,其中218个是YCM,我没有将其拖到服务器上,在清理和打包后,它们的重量最多减轻了3MB)。


可能有人会认为这太多了,可以用手完成。 也许不是每个人都同意这一点。


我希望其他人几乎有身体上的需求,使他们几乎可以在家中的工作站上感觉舒适,并且工具允许他。 祝您健康,并祝我们自动化!

Source: https://habr.com/ru/post/zh-CN435706/


All Articles