File konfigurasi, yang mencakup file lain, bukanlah hal baru. Menempatkan file-file yang disertakan di sub-direktori juga telah menjadi pilihan sejak awal. Mari kita tinjau kasus penggunaan dan lihat cara mendapatkan hasil maksimal dari metode organisasi ini.
Beberapa orang menganggap satu file konfigurasi sebagai pendekatan "sederhana" dan seluruh pohon file menjadi lebih kompleks. Namun, berhentilah dan pikirkan seberapa besar beberapa file konfigurasi dapat bertambah, atau berapa banyak orang atau program yang perlu mengeditnya. Mengizinkan setiap subproyek untuk memasukkan konfigurasi mereka ke dalam file mereka sendiri dalam subdirektori akan menjadi lebih mudah. Baru-baru ini, seperti di systemd
dokumentasi, file-file ini kadang-kadang disebut file "drop-in".
Seiring waktu, dan terutama dalam beberapa tahun terakhir, penggunaan subdirektori di /etc
telah meningkat. Dua situasi signifikan yang mendorong gerakan ini:
- Program yang lebih besar telah membagi file konfigurasi yang kompleks menjadi beberapa file yang lebih kecil.
- Banyak program lain menjadi bergantung pada satu utilitas. Masing-masing utilitas tersebut perlu mengelola sebagian konfigurasi.
Isi per paket
Beberapa penggunaan pertama *.d
direktori yang saya temui adalah untuk logging dan penjadwalan. Mari kita lihat logrotate
kegunaan. File konfigurasi utama adalah /etc/logrotate.conf
. Ini tidak terlalu rumit, tetapi setiap file yang akan dirotasi perlu ditentukan. Setiap file mungkin juga memerlukan opsi konfigurasi yang berbeda. Alih-alih mengedit file tunggal ini setiap kali aplikasi ditambahkan atau diperbarui pada sistem, kami memisahkan konfigurasi untuk setiap aplikasi ke file tertentu.
$ grep ^include /etc/logrotate.conf
include /etc/logrotate.d
File konfigurasi utama mencakup semua file di direktori lain. File dalam direktori mungkin berasal dari paket RPM yang berbeda.
$ rpm -qf /etc/logrotate.d/aide
aide-0.16-12.fc31.x86_64
$rpm -qf /etc/logrotate.d/rsyslog
rsyslog-8.2002.0-1.fc31.x86_64
$ rpm -qf /etc/logrotate.d/chrony
chrony-3.5-4.fc31.x86_64
Pemilik setiap paket tahu apa yang perlu dirotasi dan seberapa sering. Mereka menyediakan file konfigurasi khusus untuk aplikasi mereka dan menambahkannya ke logrotate.d
direktori selama instalasi. Itu juga dihapus dari logrotate.d
direktori saat paket di-uninstal dari sistem.
Contoh lain dari use case ini adalah penjadwalan dengan cron
di cron.d
direktori dan konfigurasi otentikasi dengan PAM di pam.d
direktori. Dengan menggunakan file terpisah, administrator sistem tidak perlu mengelola konflik penulisan ke satu file.
Atur berdasarkan fungsi
Server web Apache adalah program ekstensif dengan banyak opsi konfigurasi. Apache menggunakan conf.d
direktori untuk organisasi. Ketika saya mulai dengan Apache, sudah umum untuk memiliki satu server yang meng-host beberapa situs virtual. Masing-masing host virtual tersebut memiliki file konfigurasinya sendiri. Pendekatan ini memungkinkan kami untuk berbagi tugas administrasi file serta berbagi file di sistem yang berbeda selama migrasi, pemulihan, dan penyeimbangan beban. Hari ini, saya melihat lebih banyak kasus di mana konfigurasi dipisahkan oleh fungsi.
Faktor lainnya adalah jika fitur tersebut dipasang sebagai modul terpisah.
$ rpm -qf /etc/httpd/conf.d/ssl.conf
mod_ssl-2.4.43-1.fc31.x86_64
ssl.conf
konfigurasi hanya tersedia bila mod_ssl
paket diinstal. Modul lain juga dapat memasukkan file ke conf.d
direktori. Beberapa aplikasi, seperti mod_auth_kerb
paket, berikan contoh dalam /usr/share/doc
direktori. Terserah administrator web untuk membuat atau mengelola file produksi.
[ Butuh bantuan lebih lanjut untuk mempelajari Linux? Kursus online gratis:Tinjauan teknis Red Hat Enterprise Linux. ]
Pengelolaan terpusat
Seperti yang saya sarankan dengan file konfigurasi web, penggunaan lain dari file konfigurasi terpisah adalah untuk mempermudah pengelolaan terpusat file ini, dan hanya mendistribusikan komponen yang relevan ke setiap node yang dikelola.
modules.d
direktori menyimpan konfigurasi untuk pengaturan modul kernel dan sysctl.d
direktori berisi setelan penyetelan kernel. Setelan ini mungkin hanya diperlukan pada beberapa sistem, atau mungkin memerlukan setelan khusus perangkat keras. Pengaturan dapat diatur oleh perangkat keras, fungsi, atau kombinasi.
Program pengelolaan konfigurasi hanya dapat mendorong file yang relevan ke host terkelola tertentu atau menghasilkan file di setiap host berdasarkan template. Jika Anda mendistribusikan file-file ini dengan solusi manajemen konfigurasi seperti Ansible, gunakan sesuatu seperti ansible_managed
variabel untuk menyertakan komentar yang menunjukkan bahwa file tersebut dikelola dari jarak jauh.
Tentukan nama dan lokasi
Sementara direktori dot-d memiliki kasus penggunaan umum untuk membantu organisasi dan distribusi, ada banyak cara berbeda untuk menangani penyertaan. Untuk setiap aplikasi atau utilitas, kita perlu menentukan cara terbaik untuk memberi nama file kita. Beberapa konfigurasi hanya mengenali file dengan ekstensi tertentu, seperti .conf
, sementara yang lain merujuk semua file dalam direktori.
man
halaman untuk file konfigurasi utama, seperti man logrotate.conf
, biasanya akan menjelaskan opsi. Namun, saya mulai dengan mencari pernyataan include dalam file konfigurasi.
Saat saya mencari termasuk, saya melihat berbagai metode (diformat agar mudah dibaca):
$ grep ^include /etc/*conf
krb5.conf : includedir /etc/krb5.conf.d/
ld.so.conf : include ld.so.conf.d/*.conf
logrotate.conf : include /etc/logrotate.d
rsyslog.conf : include(file="/etc/rsyslog.d/*.conf" mode="optional")
ld.so
dan rsyslog
konfigurasi keduanya mengharapkan file yang disertakan diakhiri dengan .conf
. Yang lain sepertinya menyertakan semua file, tetapi penyelidikan lebih lanjut mungkin menunjukkan metode untuk mengecualikan file. Misalnya, man logrotate.conf
menunjukkan bahwa tabooext
dan taboopat
dapat digunakan untuk menyaring .orig
, .bak
, .rpmnew
, atau file lain yang mungkin dihasilkan dari pembuatan versi atau pembaruan. Untuk krb5.conf
file, ada keduanya include
dan includedir
pengarahan. Halaman manual menunjukkan bahwa includedir
direktif mencakup "semua file dalam direktori yang namanya hanya terdiri dari karakter alfanumerik, tanda hubung, atau garis bawah." Selanjutnya ditunjukkan bahwa file yang dimulai dengan titik (.) diabaikan.
Pertimbangan lain untuk file yang disertakan adalah urutan baca dan gabung. Saya telah melihat beberapa yang membaca dalam urutan acak, tetapi sebagian besar menyertakan file dalam urutan yang ditemukan di direktori. Jika urutannya sangat penting, seperti untuk modul atau skrip startup, biasanya nama file diawali dengan angka. Standar penamaan lain seperti "pra" atau "pos" juga umum.
$ ls /etc/NetworkManager/dispatcher.d/
04-iscsi 20-chrony no-wait.d pre-down.d pre-up.d
Beberapa utilitas bahkan mungkin memiliki simbol ekspansi yang membantu mengelola dan mendistribusikan file terpusat. sudoers
konfigurasi adalah contoh di mana %h
mewakili bentuk pendek dari nama host.
include /etc/sudoers.d/sudoers.%h
Baris sertakan di atas menentukan file konfigurasi untuk host saat ini, meskipun direktori berisi file lain. Lihat man sudoers
untuk lebih banyak contoh.
Verifikasi file
Bahaya lain dalam menggunakan direktori dot-d adalah Anda mungkin harus memodifikasi perintah pemeriksaan sintaks.
Dalam beberapa kasus, semua file konfigurasi harus diperiksa sekaligus. Misalnya, dengan Apache, apachectl configtest
perintah selalu memeriksa file konfigurasi utama, yang dapat menyertakan file lain. Ini menggunakan opsi default. Anda dapat menjalankan httpd -t
perintah dengan opsi tambahan. Misalnya, ada opsi untuk membuat daftar semua file yang disertakan.
$ httpd -t -D DUMP_INCLUDES
Included configuration files:
(*) /etc/httpd/conf/httpd.conf
(59) /etc/httpd/conf.modules.d/00-base.conf
(59) /etc/httpd/conf.modules.d/00-dav.conf
httpd
perintah juga mengambil -f
pilihan untuk menentukan file tertentu. Namun, file itu harus lulus semua pemeriksaan konfigurasi, jadi memeriksa file yang disertakan mungkin tidak memberikan hasil yang diinginkan. Kesalahan berikut terjadi saat memeriksa ssl.conf
default file konfigurasi yang disediakan oleh mod_ssl
paket.
$ httpd -t -f /etc/httpd/conf.d/ssl.conf
AH00534: httpd: Configuration error: No MPM loaded.
Aplikasi lain memang memiliki metode untuk memverifikasi sintaks untuk file yang disertakan. sudo
konfigurasi biasanya dimodifikasi dengan menggunakan visudo
perintah sehingga validasi sintaks dapat dilakukan sebelum menyimpan dan keluar. Utilitas ini mengedit /etc/sudoers
file secara default tetapi juga mendukung -f
opsi untuk menentukan file yang berbeda.
$ sudo visudo -f /etc/sudoers.d/demo
>>> /etc/sudoers.d/demo: syntax error near line 1 <<<
What now? q
Options are:
(e)dit sudoers file again
e(x)it without saving changes to sudoers file
(Q)uit and save changes to sudoers file (DANGER!)
What now? x
Perintah yang sama juga mendukung --check
opsi untuk hanya memvalidasi file tanpa mengedit.
$ visudo -c demo.sudo
>>> demo.sudo: syntax error near line 1 <<<
parse error in demo.sudo near line 1
Gabungkan ini dengan opsi validasi dalam program manajemen konfigurasi Anda untuk memastikan bahwa perluasan template tidak merusak file konfigurasi. Ada contoh dalam dokumentasi untuk modul salinan dan template Ansible. Saya juga telah memberikan contoh berikut dari ansible-doc template
untuk sshd
:
- name: Update sshd configuration safely, avoid locking yourself out
template:
src: etc/ssh/sshd_config.j2
dest: /etc/ssh/sshd_config
owner: root
group: root
mode: '0600'
validate: /usr/sbin/sshd -t -f %s
backup: yes
Menggali sedikit melalui baris komentar dan halaman manual akan membantu Anda mendapatkan hasil maksimal dari metode organisasi ini dengan menampilkan opsi distribusi, konvensi penamaan, dan informasi validasi sintaks.
Selesai
Mengatur file konfigurasi ke dalam direktori dapat membuat administrasi lebih mudah untuk dikelola dan didelegasikan. File dapat diatur menurut paket atau fungsi dan solusi manajemen konfigurasi seperti Ansible bahkan dapat mengambil manfaat dari file template yang lebih kecil. Anda mungkin perlu menstandardisasi nama dan lokasi file, dan Anda mungkin perlu memperbarui alat verifikasi file, tetapi menggunakan folder dot d untuk menampung beberapa file konfigurasi dapat menghemat banyak usaha.
[ Ingin mencoba Red Hat Enterprise Linux? Unduh sekarang secara gratis. ]