مرحبا مرة اخرى الأسبوع (هذه المقالة قد تم تخليلها لفترة طويلة جدًا في تراكم الأعمال) منذ بعض الوقت ، تحدثت عن كيفية استخدام RCM لإدارة التكوين العادي. لدينا وحدة دمية في شركتنا تقوم بتوزيع الإعدادات الشخصية للمستخدم على جميع المضيفين الذين يستطيع الوصول إليه. وفقًا لذلك ، أريد ما يلي:
- امتلك الإعدادات الخاصة بكل شيء أستخدمه (vim ، zsh ، git ، إلخ ..)
- قم بتحديثها عند تحديثها في مستودع dotfiles
- كل هذا - دون لفتات لا لزوم لها
الأدوات
كل ما هو مطلوب يستخدمه لي بالفعل ، وهو:
لا يوجد شيء صعب هنا: نقوم بنشر القاروص عن طريق تفريغ محتوياتها على المضيفين. تتم إدارة الملفات والدلائل فقط من قائمة محددة ، وطحن كل تاج بالكامل مع كل عملية نشر. وفقًا لذلك ، إذا تم تغيير لعبة tarball ، يتم فرك كل شيء في قائمة $HOME
. إذا لم يكن كذلك ، تظل محتويات $ HOME دون تغيير. يعتبر البرنامج النصي المنفصل مسؤولاً عن (إعادة) تعبئة المجلد بالملفات المصدر للملفات الشخصية ؛ يبدو تافهاً للغاية:
كيفية إنشاء كرة ارتكاب كرة جديدة
نشر 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
بالمحتويات التالية:
الآن ، بعد كل التزام بالمستودع بملفات نقطة ، سيتم إطلاق هذا البرنامج النصي.
كل شيء ، بعد ذلك يبقى إجراء التزام + الضغط على مستودع البيانات الشخصية والانتظار حتى يأخذ سحر الأتمتة التكوينات الخاصة بي إلى المضيفين العاملين.
لماذا تعقيد أشياء مثل هذا؟
والحقيقة هي أنه في حين أن الشركة لم يكن لديها أدوات لنشر التكوين الشخصي للمضيفين ، لم تكن هناك حاجة لمثل هذه المجموعة. ولكن بمجرد أن تنشأ الفرصة ، تنمو الشهية على الفور. كان بعض زملائي راضين عن حقيقة أنهم أحضروا ثلاثة ملفات إلى المضيفين ، على سبيل .vimrc .bashrc .gitconfig
. ومع ذلك ، فقد كنت لفترة طويلة شحذًا وتصحيح وتلميع مجموعة كاملة من الأدوات المختلفة. يبلغ ~/.vim
فقط بعد تثبيت جميع المكونات الإضافية 427 ميجابايت (نعم ، 218 منها YCM ، وأنا لا أسحبه إلى الخوادم ، وبعد التنظيف والتعبئة ، يفقد وزنه ما يصل إلى 3 ميغابايت).
ربما ، شخص ما سوف يعتقد أن هذا أكثر من اللازم ويمكن أن يتم بأيدي. ربما لن يتفق الجميع مع هذا.
آمل أن يكون لدى شخص آخر حاجة جسدية تقريبًا للشعور بالراحة في محطات العمل ، وفي المنزل تقريبًا ، والأدوات تسمح له بذلك. استخدم صحتك وقد تكون الأتمتة معنا!