Apa perbedaan antara / etc dan / usr / local / etc

24

Saya mengembangkan daemon yang perlu menyimpan banyak data aplikasi, dan saya perhatikan bahwa di sistem saya (Fedora 15), ada /usr/local/etcdirektori.

Saya telah memutuskan untuk menginstal daemon saya /usr/local/bin, dan saya memerlukan tempat untuk file konfigurasi saya.

Saya tidak melihat ini di Wikipedia . Apakah ini non-standar atau ini sebenarnya tempat standar untuk program yang diinstal /usr/local/binuntuk menyimpan file konfigurasi?

Alasannya, saya ingin memasarkan ini ke sys-admin, dan mendapatkan sesuatu yang salah ini bukan nilai jual yang bagus ...

hajar
sumber
2
Ada alasan untuk tidak meletakkannya langsung di bawah /etc/myapp? Jika saya ingin mengubah konfigurasi, itu akan menjadi tempat pertama yang saya cari.
new123456
@ new123456- Saya pribadi suka ide menjaga file konfigurasi dekat dengan biner (misalnya /usr/local/bin-> /usr/local/etc), tetapi konvensi menang dalam kasus ini.
beatgammit

Jawaban:

24

/usr/localbiasanya untuk aplikasi yang dibangun dari sumber. yaitu saya menginstal sebagian besar paket saya menggunakan sesuatu seperti apt, tetapi jika saya mengunduh versi yang lebih baru dari sesuatu atau perangkat lunak bukan bagian dari distribusi saya, saya akan membangunnya dari sumber dan memasukkan semuanya ke dalam hierarki `/ usr / local '.

Ini memungkinkan pemisahan dari sisa distribusi.

Jika Anda sedang mengembangkan sebuah software untuk orang lain, Anda harus merancang itu sehingga bisa dipasang di mana saja orang ingin, tetapi harus default ke biasa FHS ditentukan direktori sistem ketika mereka menentukan awalan untuk menjadi /usr( /etc, /usr/bin, dll)

yaitu /usr/localuntuk penggunaan pribadi Anda, seharusnya bukan satu-satunya tempat untuk menginstal perangkat lunak Anda.

Baca FHS dengan baik , dan gunakan alat Linux standar untuk memungkinkan sumber Anda dibangun dan diinstal di mana saja sehingga pembuat paket untuk berbagai distribusi dapat mengonfigurasinya sesuai kebutuhan untuk distribusi mereka, dan pengguna dapat memasukkannya ke dalam /usr/local jika mereka menginginkannya atau direktori sistem reguler jika mereka mau.

EightBitTony
sumber
Ya, saya pikir memungkinkan penyesuaian itu bagus, tapi saya bertanya-tanya apakah /usr/local/etcstandar untuk file konfigurasi untuk program semacam itu.
beatgammit
/ usr / local / etc adalah sesuatu yang mungkin saya pilih jika saya membangun daemon Anda dari source, tapi / etc adalah tempat yang seseorang akan pilih jika mereka mengemas daemon Anda dengan debian atau Ubuntu.
EightBitTony
4
Sebenarnya standar GNU memanggil paket ke default ke jalur lokal karena orang yang membangunnya dari sumber biasanya tidak menentukan di mana. Distribusi akan mengubahnya ke jalur non lokal ketika mereka mengemas / membangunnya.
psusi
@ psusi- Poin bagus, saya akan pastikan untuk menjadikannya default. Mungkin saya akan mendeteksi ketika make install saya dijalankan sebagai root atau pengguna biasa. Jika root, saya akan default ke / usr / local, jika pengguna, ke direktori home pengguna. Saya juga akan menambahkan pengaturan konfigurasi.
beatgammit
@ EightBitTony- Apakah ada platform lain yang memiliki konvensi berbeda? Saya sudah membuat skrip start-up yang berbeda untuk platform yang berbeda (pemula, systemd, init).
beatgammit
7

Jawaban yang sangat singkat

/ etc digunakan oleh OS Anda untuk file konfigurasinya

/ usr / local / etc dapat digunakan untuk file konfigurasi Anda oleh Anda dan perangkat lunak tambahan yang diinstal

AndyM
sumber
4

/usr/local/etcjarang digunakan di dunia Linux. Tetapi keputusan apakah akan menyimpan file konfigurasi /etc, /usr/local/etcatau lokasi lain umumnya dibuat pada waktu kompilasi (dan seringkali dapat ditimpa melalui opsi baris perintah atau variabel lingkungan). Tidak masalah apa standarnya ketika dikompilasi, pastikan mudah untuk diatur (biasanya opsi untuk --sysconfdir, mengikuti autoconf). Jika daemon Anda dikemas untuk distribusi, executable akan masuk ke /usr/sbin(default ketika membangun dari sumber seharusnya /usr/local/sbin) dan konfigurasi di bawah /etc.

Perhatikan bahwa /etcitu bukan tempat untuk "banyak data aplikasi". Itu masuk ke dalam /var. Default ketika membangun dari sumber bisa /var/local/mydaemonatau /var/lib/mydaemon; sekali lagi tidak ada konvensi yang kuat baik untuk default ketika membangun dari sumber. Seharusnya ada cara untuk mengubah standar waktu kompilasi (biasanya dengan configure --localstatedir) dan run-time default (dengan pengaturan dalam file konfigurasi, mungkin dengan opsi baris perintah atau variabel lingkungan).

Gilles 'SANGAT berhenti menjadi jahat'
sumber
Apakah ada alasan mengapa /usr/local/etctidak sering digunakan? Saya suka ide menjaga file konfigurasi pada tingkat yang sama dari sistem file dengan biner.
beatgammit
1
@jameson Saya tidak tahu apakah ada alasan luas. BSD melakukannya dengan cara itu. Sebagai seorang admin, saya suka semua file konfigurasi (yang harus didukung dan dikontrol-ubah, tidak seperti barang-barang di bindan libdan sebagainya yang dapat diinstal ulang) tinggal di tempat yang sama.
Gilles 'SANGAT berhenti menjadi jahat'
1

Sebagai pengguna Arch, saya akan menghindari / usr / local alltogether dan menggunakan hanya / etc untuk konfigurasi. Ketika menginstal dari sumber, saya lebih suka menulis file PKGBUILD kecil sementara saya berada di sana, dan mungkin mengunggahnya ke Arch User Repository (AUR), baik untuk orang lain dan saya sendiri di komputer lain di masa depan. Dilihat oleh jumlah paket di AUR, dan kecepatan pembuatannya, saya tidak sendirian dalam berpikir seperti ini. Ini meningkatkan peluang bagi semua orang bahwa suatu paket akan tersedia alih-alih harus menginstalnya dari sumber, dan mampu menghindari lokasi usang seperti / usr / local.

Debian juga tampaknya menyukai ide untuk membangun paket sumber daripada menginstal apa pun ke / usr / local, maka utilitas seperti checkinstall .

Membuat paket dari sumber yang ingin Anda instal akan menjadi cara yang baik untuk melacak di mana file berada dan pastikan tidak ada dari mereka yang ditimpa secara tidak konsisten oleh paket lain atau "make install" lainnya. Menghapus instalan dengan "make uninstall" bukanlah solusi yang baik. Informasi tentang versi mana yang diinstal adalah hal lain yang dapat dilakukan manajer paket modern dengan baik.

Saya hanya akan melepaskan / usr / lokal sepenuhnya. Ini bukan tempat yang baik untuk meletakkan apa pun, bukan untuk menginstal paket (direktori seluruh sistem lebih cocok) dan bukan untuk pengguna.

Alexander
sumber