rcmを使用して、構成を任意のフォルダーに展開します

こんにちは。 週(この記事は非常に長い間バックログで漬けられています) 少し前に、通常の構成管理に rcmを使用する方法について話しました。 当社には、ユーザーの個人設定をユーザーがアクセスできるすべてのホストに配布するパペットモジュールがあります。 したがって、次のものが必要です:









ツール



必要なものはすべて私がすでに使用しています。









ファイルをホストに展開するために使用される形式



ここで難しいことは何もありません。ホストで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
      
      





新しいコミットボールターボールを作成する方法



$ HOMEにないドットファイルを展開する



さまざまなホストに構成をデプロイするツールがすでにあるため、明らかに自分で使用します。 何かを修正し、 rcm



でファイルを必要な場所にコピーするだけです。 ただし、rcmは常に$ HOMEにドットファイルを設定します;この動作を変更するコマンドライン引数はありません。







いくつかの実験とソースの選択後、$ HOMEを直接変更できることに気付きました。すべてのrcmコマンドのユーティリティの動作は次のように変更されます。ユーティリティlsrc, mkrc, rcdn, rsup



はそれぞれ${HOME}/.rcrc



${HOME}/.dotfiles



デフォルトで${HOME}/.dotfiles



。 したがって、必要なすべてのパラメーターを使用して同じ${HOME}/.rcrc



を作成するだけで十分です。







最も簡単な方法は、ホームフォルダーの「空白」を作成し、各コミットでゼロからそれを埋めることです。 それがどのように見えるかの例はリポジトリで見ることができます 。 このフォルダーは、 個人タグのないすべてのホストで無視されるため、メイン構成に干渉しません。 単一の.rcrcファイルには、ファイルをコピーするロジックのすべてのパラメーターが含まれます。いくつかのコメントのみを行います。









以上です。 これで、タグパーソナルフォルダーを任意の場所にコピーし、 ${HOME}



時間をオーバーライドして、 rcup



を実行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



3つのファイルをホストに持ってきたという事実に満足している人もいました。 しかし、私は長い間、さまざまなツールのセット全体を愛情を込めて研ぎ、修正し、磨き続けてきました。 すべてのプラグインをインストールした後の~/.vim



重量は427MBのみです(はい、そのうち218個はYCMであり、サーバーにドラッグしません。クリーニングして梱包した後はすべて3MBになります)。







おそらく、誰かにとっては、これはどういうわけか多すぎて、手で行うことができたように思えます。 おそらく誰もがこれに同意するわけではありません







ワークステーションで、ほとんど自宅で快適に感じるために、他の誰かがほとんど身体的に必要であり、ツールが彼を許すことを願っています。 あなたの健康を利用してください。自動化が私たちと共にありますように!








All Articles