Memiliki setiap repositori (atau kumpulan repositori) dalam filenya sendiri membuatnya lebih mudah untuk dikelola, baik dengan tangan maupun dengan program:
- Ini memungkinkan penginstalan baru yang membutuhkan repo mereka sendiri untuk tidak perlu mencari file datar untuk memastikan tidak menambahkan entri duplikat.
- Ini memungkinkan administrator sistem untuk dengan mudah menonaktifkan (dengan mengganti nama) atau menghapus (dengan menghapus) kumpulan repositori tanpa harus mengedit file amonolitik.
- Hal ini memungkinkan pengelola paket memberikan perintah sederhana untuk memperbarui lokasi repositori tanpa harus khawatir secara tidak sengaja mengubah konfigurasi untuk repositori yang tidak terkait.
Pada tingkat teknis, sebagai seseorang yang harus menangani perubahan ini di beberapa alat info sistem yang besar dan populer, pada dasarnya hal ini terjadi:
Untuk sources.list.d/
# to add
if [[ ! -e /etc/apt/sources.list.d/some_repo.list ]];then
echo 'some repo line for apt' > /etc/apt/sources.list.d/some_repo.list
fi
# to delete
if [[ -e /etc/apt/sources.list.d/some_repo.list ]];then
rm -f /etc/apt/sources.list.d/some_repo.list
fi
Perhatikan bahwa kecuali mereka juga melakukan pemeriksaan yang sama seperti di bawah ini, jika Anda mengomentari baris repo, pengujian ini akan salah. Jika mereka melakukan pemeriksaan yang sama seperti di bawah ini, maka kerumitannya sama persis, kecuali dilakukan pada banyak file, bukan satu. Selain itu, kecuali jika mereka memeriksa SEMUA kemungkinan file, mereka dapat, dan sering melakukannya, menambahkan item duplikat, yang kemudian membuat apt complain, hingga Anda menghapus salah satunya.
Untuk sources.list
# to add. Respect commented out lines. Bonus points for uncommenting
# line instead of adding a new line
if [[ -z $( grep -E '\s*[^#]\s*some repo line for apt' /etc/apt/sources.list ) ]];then
echo 'some repo line for apt' >> /etc/apt/sources.list
fi
# to delete. Delete whether commented out or not. Bonus for not
# deleting if commented out, thus respecting the user's wishes
sed -i '/.*some repo line for apt.*/d' /etc/apt/sources.list
Pengembang Google Chrome tidak memeriksa keberadaan sumber Google Chrome, mengandalkan nama file persis yang akan dibuat oleh paket Chrome mereka. Dalam semua kasus lain, mereka akan membuat file baru di sources.list.d dengan nama persis seperti yang mereka inginkan.
Untuk melihat sumber apa yang Anda miliki, tentu saja, tidak begitu cantik, karena Anda tidak bisa lebih mudah membaca dan memelihara daripada:
cat /etc/sources.list
Jadi ini pada dasarnya dilakukan untuk tujuan pembaruan otomatis, dan untuk memberikan perintah tunggal yang mudah yang dapat Anda berikan kepada pengguna, sejauh yang saya tahu. Untuk pengguna, itu berarti mereka harus membaca banyak file, bukan 1 file untuk melihat apakah mereka menambahkan repo, dan untuk apt, itu berarti harus membaca banyak file, bukan satu file juga.
Karena di dunia nyata, jika Anda akan melakukan ini dengan baik, Anda harus mendukung pemeriksaan terhadap semua file, terlepas dari namanya, dan kemudian menguji apakah tindakan yang akan dilakukan diperlukan atau tidak diperlukan.
Namun, jika Anda tidak melakukannya dengan baik, Anda akan mengabaikan pemeriksaan untuk melihat apakah item tersebut ada di sumber, dan hanya memeriksa nama file. Saya percaya itulah yang dilakukan sebagian besar barang otomatis, tetapi karena pada akhirnya, saya hanya perlu memeriksa semuanya sehingga saya dapat mencantumkannya dan bertindak berdasarkan jika salah satu dari file tersebut cocok, satu-satunya hasil nyata adalah membuatnya jauh lebih rumit.
Pengeditan Massal
Mengingat menjalankan banyak server, saya akan tergoda untuk hanya membuat skrip pekerjaan malam yang melewati /etc/apt/sources.list.d/ dan memeriksa terlebih dahulu untuk memastikan item tersebut belum ada di sources.list, lalu jika sudah tidak, tambahkan item itu ke sources.list, hapus file sources.list.d, dan jika sudah ada di sources.list, hapus saja file sources.list.d
Karena TIDAK ada hal negatif untuk menggunakan hanya sources.list di luar kesederhanaan dan kemudahan pemeliharaan, menambahkan sesuatu seperti itu mungkin bukan ide yang buruk, terutama mengingat tindakan acak kreatif oleh admin sys.
Seperti disebutkan dalam komentar di atas, inxi -r akan dengan rapi mencetak per file repo aktif, tetapi tentu saja tidak akan mengedit atau mengubahnya, sehingga hanya setengah dari solusi. Jika ada banyak distribusi, sulit mempelajari bagaimana masing-masing melakukannya, itu sudah pasti, dan sayangnya, keacakan adalah aturannya, bukan pengecualian.
Jika Anda mengelola server Anda secara manual, saya setuju itu membuat segalanya lebih membingungkan. Namun, ini menguntungkan manajemen terprogram (yaitu "konfigurasi sebagai kode"). Saat menggunakan perangkat lunak manajemen konfigurasi seperti Puppet, Ansible, Chef, dll., lebih mudah untuk menjatuhkan atau menghapus file di direktori dan menjalankan apt update
, alih-alih mem-parsing file untuk menambah atau menghapus baris tertentu.
Terutama karena itu menghindari keharusan mengelola konten dari satu sumber daya 'file', misalnya:/etc/apt/sources.list
, dari beberapa modul independen yang telah ditulis oleh pihak ketiga.
Saya menghargai penggunaan dir ".d" Ubuntu secara luas untuk alasan khusus ini, yaitu sudoers.d, rsyslog.d, sysctl.d., cron.d, logrotate.d, dll.