Saya menulis paket untuk sesuatu yang memerlukan variabel lingkungan untuk diatur agar dapat dieksekusi dengan baik. Haruskah langkah instal manajer paket memodifikasi lingkungan pengguna, atau hanya meminta pengguna untuk melakukannya sendiri? Intuisi saya adalah yang terakhir, tetapi saya bisa melihat argumen untuk yang pertama.
installer
environment
package-managers
David Cowden
sumber
sumber
.bashrc
, saya pikir.bash
? Ada banyak shell alternatif yang tersedia dengan beragam file startup. Saya dengan serius menyarankan mencari beberapa solusi alternatif di sini.tomcat
yang membutuhkan beberapa variabel lingkungan agar berfungsi dengan benar; semuanya diatur oleh skrip startup yang dijalankan alih-alih menjalankan binernya secara langsung.Jawaban:
Tidak juga. Pemasang paket tidak boleh menyentuh apa pun di direktori home untuk akun yang bukan milik paket tersebut. Paket juga harus mengonfigurasi sendiri sehingga jika diinstal, mereka dapat digunakan tanpa upaya khusus dari pihak pengguna. (Ada kasus luar biasa di mana Anda tidak ingin melakukan ini, tetapi jumlahnya sedikit dan jarang.)
Lingkungan Unixy memiliki tempat untuk meletakkan file konfigurasi yang dibaca setiap kali pengguna memulai shell login. Untuk cangkang Bourne dan C, Anda dapat memasukkan konfigurasi Anda ke dalam
/etc/profile
dan/etc/csh.cshrc
masing - masing. (Jangan lupa menghapusnya saat Anda mencopot pemasangan.)Banyak sistem juga mendukung melakukan ini menggunakan file individual, yang membuatnya lebih mudah untuk menambah dan menghapus bit konfigurasi tanpa harus menjatuhkan teks ke beberapa tempat sewenang-wenang dalam satu file. (Ini juga memberi Anda semua kontrol dan manfaat pertanggungjawaban yang Anda dapatkan dari manajer paket.) Beberapa distribusi akan mengonfigurasi
/etc/profile
membaca semua file yang cocok/etc/profile.d/*.sh
.sumber
rc
dalam nama skrip berasal dari CTSSruncom
(Run Commands), tetapi sejak itu meluas dalam cakupan untuk memasukkan makna lain.profile.d
tidak dibangun menjadi bash, itu adalah pengait yang biasanya disediakan (biasanya basis distro)/etc/profile
. ;)Tidak pernah dapat diterima untuk memodifikasi
/home
struktur pengguna dari manajer paket kecuali jika modifikasi itu adalah intinya.Pendekatan utama untuk ini adalah:
/etc/profile.d
. Pada beberapa sistem linux, semua skrip dalam direktori ini bersumber dari pengaturan shell default, sehingga Anda dapat dengan aman mengatur variabel di sana.sumber
Pertanyaan Haruskah langkah instalasi manajer paket memodifikasi lingkungan pengguna?
Jawab Tidak. Ini ide buruk untuk memodifikasi data pengguna, dalam hal ini file .bashrc. Data pengguna harus dianggap suci oleh manajer paket?
Pertanyaan Jika langkah instalasi manajer paket hanya meminta pengguna untuk melakukannya sendiri?
Jawaban Ini adalah solusi yang jauh lebih enak tetapi masih belum ideal.
Saya pikir Anda harus membuat skrip shell pembungkus di mana Anda dapat mengatur variabel lingkungan yang diperlukan dan mereka menjalankan executable setelah itu.
sumber
Anda melewatkan hutan untuk pepohonan. Jelas lebih nyaman untuk melakukan perubahan lingkungan bagi pengguna, tetapi juga lebih berisiko dan agak invasif. Anda harus menggabungkan yang terbaik dari kedua dunia dengan bertanya kepada pengguna apakah installer harus memodifikasi mereka
.bashrc
, dan sebaliknya memberikan instruksi bagaimana mereka harus melakukannya sendiri.sumber
Anda menganggap bahwa "pengguna" adalah tunggal. Apa yang terjadi jika saya memiliki ribuan pengguna di sistem ini?
Anda berasumsi bahwa Anda bahkan dapat menemukan direktori home pengguna. Jika pengguna dikelola melalui mis. LDAP Anda bahkan mungkin tidak diizinkan untuk mendapatkan daftar semua pengguna yang valid. Direktori home mungkin tidak ada di / home; mereka mungkin dipasang secara dinamis dari jaringan. Direktori rumah pengguna dapat dienkripsi dan kunci tidak dapat diakses ketika mereka tidak masuk.
Tidak ada cara untuk melakukan ini dengan andal dalam setiap situasi yang memungkinkan. Gunakan mekanisme distro untuk mengatur variabel lingkungan untuk pengguna saat mereka masuk atau menelurkan shell. Jika itu tidak berhasil, tulis pembungkus. (Pembungkus juga bisa berupa biner jika perlu, untuk membahas argumen dalam komentar).
sumber
Mengatur variabel global dalam sebuah paket dapat diterima jika itu adalah yang ditentukan oleh proyek Anda sendiri (dan itu berarti nama proyek adalah bagian dari nama variabel!). Meskipun begitu, Anda seharusnya tidak menyentuh file pengguna
.bashrc
- alih-alih Anda harus menambahkan skrip ke /etc/profile.d .sumber