Haruskah manajer paket memodifikasi file .bashrc Anda?

9

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.

David Cowden
sumber
7
Bisakah Anda membuat sesuatu itu berperilaku lebih baik, menghapus ketergantungan pada variabel lingkungan (misalnya, menggunakan file konfigurasi)? Itu akan lebih baik untuk mengemas hacks atau mucking .bashrc, saya pikir.
Tentu, tetapi katakanlah untuk tujuan pertanyaan ini bahwa memodifikasi aplikasi bukanlah suatu pilihan.
David Cowden
1
Bagaimana jika pengguna tidak berjalan bash? Ada banyak shell alternatif yang tersedia dengan beragam file startup. Saya dengan serius menyarankan mencari beberapa solusi alternatif di sini.
Jules
10
Jadi tulis pembungkus di sekitarnya. Lihat, misalnya, tomcatyang membutuhkan beberapa variabel lingkungan agar berfungsi dengan benar; semuanya diatur oleh skrip startup yang dijalankan alih-alih menjalankan binernya secara langsung.
Jules
1
@Valitas saya tahu. Usulan Jules sudah disarankan. Saya sedang bercanda - mengolok-olok logika melingkar yang terlibat untuk pertama berdebat bahwa saya harus memiliki solusi agnostik shell kemudian melanjutkan untuk menyarankan saya menggunakan skrip shell sebagai solusi. Ini lelucon (;
David Cowden

Jawaban:

18

Haruskah langkah instal manajer paket memodifikasi lingkungan pengguna, atau hanya meminta pengguna untuk melakukannya sendiri?

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/profiledan /etc/csh.cshrcmasing - 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/profilemembaca semua file yang cocok /etc/profile.d/*.sh.

Blrfl
sumber
1
Secara historis, rcdalam nama skrip berasal dari CTSSruncom (Run Commands), tetapi sejak itu meluas dalam cakupan untuk memasukkan makna lain.
Jeffrey Hantin
1
@JeffreyHantin: Touché. Dihapus.
Blrfl
1
Benci untuk terus memetik, tetapi profile.dtidak dibangun menjadi bash, itu adalah pengait yang biasanya disediakan (biasanya basis distro) /etc/profile. ;)
Jeffrey Hantin
1
@ JeffreyHantin: Cukup benar, meskipun tidak akan ada kritik atas penggunaan kata "Unixy". :-)
Blrfl
14

Tidak pernah dapat diterima untuk memodifikasi /homestruktur pengguna dari manajer paket kecuali jika modifikasi itu adalah intinya.

Pendekatan utama untuk ini adalah:

  • Beri tahu pengguna yang mereka perlu konfigurasikan.
  • Pasokan bawaan sehingga tidak diperlukan
  • Kemas skrip peluncur yang menetapkan nilai dengan tepat
  • (Jika distro mendukungnya) Jatuhkan file yang mengekspor variabel lingkungan di dalamnya /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.
Daenyth
sumber
7

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.

R Sahu
sumber
Saya sudah mempertimbangkan ide ini juga. Proyek ini masih muda dan akan sampai pada titik di mana ini tidak perlu.
David Cowden
@ GlenH7 Saya memperbarui tanggapan saya. Semoga respons yang diperbarui lebih merupakan jawaban yang Anda cari.
R Sahu
@ GlenH7: Pertanyaan ini pada dasarnya adalah masalah XY: meta.stackexchange.com/questions/66377/what-is-the-xy-problem , di mana kebutuhan variabel lingkungan adalah masalah sebenarnya yang harus dipecahkan.
whatsisname
Selain itu, saran jawaban ini untuk membuat skrip wrapper adalah satu-satunya jawaban yang akan bekerja untuk semua shell.
whatsisname
1
@MattThomason realisasi itulah yang mendorong saya untuk benar-benar mengajukan pertanyaan (;
David Cowden
5

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.

Kilian Foth
sumber
Terima kasih atas sarannya. Saya belum pernah menulis paket publik sebelumnya dan hanya ingin memastikan saya tidak melakukan sesuatu yang tabu.
David Cowden
Beginilah cara google cloud SDK menangani ini hari ini. Ia bertanya apakah Anda ingin memodifikasi file startup Anda.
jmq
1

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).

pjc50
sumber
0

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 .

Idan Arye
sumber