نحن نستخدم rcm لنشر التكوين في أي مجلد

مرحبا مرة اخرى الأسبوع (هذه المقالة قد تم تخليلها لفترة طويلة جدًا في تراكم الأعمال) منذ بعض الوقت ، تحدثت عن كيفية استخدام RCM لإدارة التكوين العادي. لدينا وحدة دمية في شركتنا تقوم بتوزيع الإعدادات الشخصية للمستخدم على جميع المضيفين الذين يستطيع الوصول إليه. وفقًا لذلك ، أريد ما يلي:


  • امتلك الإعدادات الخاصة بكل شيء أستخدمه (vim ، zsh ، git ، إلخ ..)
  • قم بتحديثها عند تحديثها في مستودع dotfiles
  • كل هذا - دون لفتات لا لزوم لها

الأدوات


كل ما هو مطلوب يستخدمه لي بالفعل ، وهو:


  • RCM
  • بوابة
  • القطران

التنسيق المستخدم لنشر الملفات على المضيفين


لا يوجد شيء صعب هنا: نقوم بنشر القاروص عن طريق تفريغ محتوياتها على المضيفين. تتم إدارة الملفات والدلائل فقط من قائمة محددة ، وطحن كل تاج بالكامل مع كل عملية نشر. وفقًا لذلك ، إذا تم تغيير لعبة 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 

كيفية إنشاء كرة ارتكاب كرة جديدة


نشر dotfiles ليس في $ HOME


نظرًا لأن لدي بالفعل أداة يمكنني من خلالها نشر التكوينات على مضيفين مختلفين ، فمن الواضح أنني سأستخدمها. عليك فقط إصلاح شيء ما وجعل نسخة rcm من الملفات إلى ما أحتاج إليه. ومع ذلك ، تقوم rcm دائمًا بتعيين ملفات النقاط في $ HOME ، ولا توجد وسيطات لسطر الأوامر لتغيير هذا السلوك.


بعد بعض التجارب والانتقاء في المصدر ، أدركت أنه يمكنك تغيير $ HOME مباشرةً ، ثم سيتغير سلوك الأدوات المساعدة لجميع أوامر rcm كما يلي: كل من الأدوات المساعدة lsrc, mkrc, rcdn, rsup سوف تقرأ ${HOME}/.rcrc وتستخدم ${HOME}/.dotfiles افتراضيًا. وفقًا لذلك ، يكفي إنشاء نفس ${HOME}/.rcrc مع جميع المعلمات اللازمة.


أسهل طريقة هي جعل "فارغة" من المجلد الرئيسي وتعبئته من نقطة الصفر مع كل التزام. مثال على كيفية ظهوره يمكن رؤيته في المستودع . يتم تجاهل هذا المجلد على جميع المضيفين بدون العلامة الشخصية ؛ وبالتالي ، لن يتداخل مع التكوين الرئيسي. يحتوي ملف .rcrc واحد على كل المعلمات الخاصة بمنطق نسخ الملف ، سأدلي ببعض الملاحظات فقط:


  • بدون $SYMLINK_DIRS يعمل rcup طويلًا بشكل ميؤوس منه ، حيث ينشئ قائمة كاملة من الملفات لنسخها. من خلال هذا الخيار ، جنبًا إلى جنب مع $COPY_ALWAYS الأداة ببساطة بنسخ المجلد بالكامل كـ cp -r دون مشكلة غير ضرورية
  • من الواضح أنه لا حاجة إلى الكثير على الخوادم البعيدة ، كل هذا مدرج في $EXCLUDES (باستثناء المكونات الإضافية vim ، يجب حذفها في الخطاف لأنه $SYMLINK_DIRS )
  • نظرًا لأن ${HOME}/.dotfiles يتوقف عن العمل لأسباب واضحة ، يجب عليك أيضًا تجاوز $DOTFILES_DIRS

هذا كل شيء. الآن يمكنك نسخ مجلد العلامات الشخصية في أي مكان ، وتجاوز ${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 فقط بعد تثبيت جميع المكونات الإضافية 427 ميجابايت (نعم ، 218 منها YCM ، وأنا لا أسحبه إلى الخوادم ، وبعد التنظيف والتعبئة ، يفقد وزنه ما يصل إلى 3 ميغابايت).


ربما ، شخص ما سوف يعتقد أن هذا أكثر من اللازم ويمكن أن يتم بأيدي. ربما لن يتفق الجميع مع هذا.


آمل أن يكون لدى شخص آخر حاجة جسدية تقريبًا للشعور بالراحة في محطات العمل ، وفي المنزل تقريبًا ، والأدوات تسمح له بذلك. استخدم صحتك وقد تكون الأتمتة معنا!

Source: https://habr.com/ru/post/ar435706/


All Articles