Halo lagi. Minggu (artikel ini sudah sangat lama diasamkan di backlog) Beberapa waktu yang lalu, saya berbicara tentang cara menggunakan rcm untuk manajemen konfigurasi normal. Kami memiliki modul boneka di perusahaan kami yang mendistribusikan pengaturan pribadi pengguna ke semua host yang ia akses. Karena itu, saya ingin yang berikut ini:
- Memiliki pengaturan saya sendiri untuk semua yang saya gunakan (vim, zsh, git, dll.)
- Perbarui mereka saat mereka memperbarui dalam repositori dotfiles
- Semua ini - tanpa gerakan yang tidak perlu
Alat-alatnya
Semua yang dibutuhkan sudah saya gunakan, yaitu:
Tidak ada yang rumit di sini: kami menyebarkan tarbal dengan membongkar isinya di host. Hanya file dan direktori dari daftar tertentu yang dikelola, sepenuhnya menggerinda setiap mahkota dengan setiap penyebaran. Dengan demikian, jika tarball telah berubah, semua yang ada di daftar $HOME
terhapus. Jika tidak, isi $ HOME tetap tidak berubah. Sebuah skrip terpisah bertanggung jawab untuk (kembali) mengemas folder dengan file sumber file pribadi, itu terlihat sangat sepele:
Cara membuat tarball bola komit baru
Sebarkan dotfiles bukan dalam $ HOME
Karena saya sudah memiliki alat yang saya gunakan konfigurasi untuk berbagai host, maka jelas saya akan menggunakannya. Anda hanya perlu memperbaiki sesuatu dan membuat rcm
menyalin file ke tempat yang saya butuhkan. Namun, rcm selalu menetapkan file titik dalam $ HOME, tidak ada argumen baris perintah untuk mengubah perilaku ini.
Setelah beberapa percobaan dan memilih sumbernya, saya menyadari bahwa Anda dapat langsung mengubah $ HOME, kemudian perilaku utilitas semua perintah rcm akan berubah sebagai berikut: setiap utilitas lsrc, mkrc, rcdn, rsup
akan membaca ${HOME}/.rcrc
dan gunakan ${HOME}/.dotfiles
secara default. Dengan demikian, cukup untuk membuat ${HOME}/.rcrc
dengan semua parameter yang diperlukan.
Cara termudah adalah dengan membuat "kosong" dari folder rumah dan mengisinya dari awal dengan komit masing-masing. Contoh tampilannya dapat dilihat di repositori . Folder ini diabaikan pada semua host tanpa tag pribadi , sehingga tidak akan mengganggu konfigurasi utama. Satu file .rcrc tunggal berisi semua parameter untuk logika penyalinan file, saya hanya akan membuat beberapa komentar:
- Tanpa
$SYMLINK_DIRS
rcup
bekerja sangat lama, membuat daftar file lengkap untuk disalin. Dengan opsi ini, bersama-sama dengan $COPY_ALWAYS
utilitas cukup menyalin seluruh folder sebagai cp -r
tanpa masalah yang tidak perlu - Jelas, banyak yang tidak diperlukan pada server jarak jauh, semua ini tercantum dalam
$EXCLUDES
(dengan pengecualian dari vim plugins, mereka harus dihapus di hook karena $SYMLINK_DIRS
) - Karena
${HOME}/.dotfiles
berhenti berfungsi karena alasan yang jelas, Anda juga harus mengganti $DOTFILES_DIRS
Itu saja. Sekarang Anda dapat menyalin folder tag-pribadi di mana saja, mengganti ${HOME}
untuk sementara waktu, dan menjalankan 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
Wow! Tapi saya ingin sesuatu yang lain ...
Kami mengotomatiskan "penyebaran" konfigurasi ke custom $ HOME
Membuat "sesuatu" ini mudah, git pada titik ini akan membantu kaitannya. Ada file yang dapat dieksekusi .git/hooks/post-commit
konten berikut:
Sekarang, setelah setiap komit ke repositori dengan file dot, skrip ini akan diluncurkan.
Semuanya, setelah itu tetap membuat komit + push ke repositori dengan data pribadi dan tunggu sampai keajaiban otomatisasi membawa konfigurasi saya ke host yang berfungsi.
Mengapa menyulitkan hal-hal seperti ini?
Faktanya adalah bahwa sementara perusahaan tidak memiliki alat untuk menyebarkan konfigurasi pribadi ke host, tidak diperlukan kit semacam itu. Namun begitu peluang muncul, nafsu makan tumbuh seketika. Beberapa rekan saya puas dengan fakta bahwa mereka membawa tiga file ke host, katakan .vimrc .bashrc .gitconfig
. Namun, untuk waktu yang lama saya telah mengasah dengan penuh kasih, memperbaiki dan memoles seluruh rangkaian berbagai alat. Hanya ~/.vim
setelah menginstal semua plugin dengan berat 427MB (ya, 218 di antaranya adalah YCM, dan saya tidak menyeretnya ke server, dan setelah membersihkan dan mengemasnya semua kehilangan berat hingga 3MB).
Mungkin, seseorang akan berpikir bahwa ini entah bagaimana terlalu banyak dan bisa dilakukan dengan tangan. Mungkin tidak semua orang akan setuju dengan ini.
Saya harap ada orang lain yang memiliki kebutuhan fisik untuk merasa nyaman di tempat kerja, hampir di rumah, dan alat-alatnya memungkinkannya. Gunakan kesehatan Anda dan mungkin otomatisasi bersama kami!