Người quản lý gói có nên sửa đổi tệp .bashrc của bạn không?


9

Tôi đang viết một gói cho một cái gì đó yêu cầu một biến môi trường được thiết lập để thực thi đúng. Bước cài đặt của trình quản lý gói có nên sửa đổi môi trường của người dùng hay chỉ cần nhắc người dùng tự làm như vậy? Trực giác của tôi sẽ là cái sau, nhưng tôi có thể thấy những lý lẽ cho cái trước.


7
Bạn có thể làm cho cái gì đó hoạt động tốt hơn, loại bỏ sự phụ thuộc vào biến môi trường (ví dụ: sử dụng tệp cấu hình thay thế) không? Điều đó sẽ tốt hơn cho việc đóng gói hack hoặc mucking với .bashrc, tôi nghĩ vậy.

Chắc chắn, nhưng hãy nói cho mục đích của câu hỏi này rằng sửa đổi ứng dụng không phải là một lựa chọn.
David Cowden

1
Nếu người dùng không chạy bashthì sao? Có nhiều shell thay thế có sẵn với nhiều loại tệp khởi động. Tôi nghiêm túc đề nghị tìm một số giải pháp thay thế ở đây.
Jules

10
Vì vậy, viết một bao bọc xung quanh nó. Xem, ví dụ, tomcatcần một số biến môi trường để hoạt động chính xác; tất cả đều được thiết lập bởi một tập lệnh khởi động được chạy thay vì chạy trực tiếp nhị phân của nó.
Jules

1
@Vality tôi biết. Đề xuất của Jules đã được đề xuất rồi. Tôi đang tỏ ra khó chịu - làm cho niềm vui của logic vòng tròn liên quan đến lần đầu tiên lập luận rằng tôi nên có một giải pháp bất khả tri về vỏ sau đó tiến hành đề nghị tôi sử dụng một kịch bản shell làm giải pháp. Đó là một trò đùa (;
David Cowden

Câu trả lời:


18

Bước cài đặt của trình quản lý gói có nên sửa đổi môi trường của người dùng hay chỉ cần nhắc người dùng tự làm như vậy?

Cũng không. Trình cài đặt gói không bao giờ chạm vào bất cứ thứ gì trong thư mục chính cho tài khoản mà gói không sở hữu. Các gói cũng nên tự cấu hình để nếu chúng được cài đặt, chúng có thể sử dụng được mà không cần bất kỳ nỗ lực đặc biệt nào đối với phần của người dùng. (Có những trường hợp đặc biệt mà bạn không muốn làm điều này, nhưng chúng rất ít và xa.)

Môi trường Unixy có một nơi để đặt các tệp cấu hình được đọc bất cứ khi nào người dùng bắt đầu một vỏ đăng nhập. Đối với hệ vỏ Bourne và C, bạn có thể chèn cấu hình của mình vào /etc/profile/etc/csh.cshrctương ứng. (Đừng quên xóa nó khi bạn gỡ cài đặt.)

Nhiều hệ thống cũng hỗ trợ thực hiện việc này bằng cách sử dụng các tệp riêng lẻ, giúp dễ dàng thêm và xóa các bit cấu hình mà không phải thả văn bản vào một số vị trí tùy ý trong một tệp. (Nó cũng cung cấp cho bạn tất cả các lợi ích kiểm soát và trách nhiệm mà bạn nhận được từ trình quản lý gói.) Một số bản phân phối sẽ định cấu hình /etc/profileđọc tất cả các tệp khớp /etc/profile.d/*.sh.


1
Trong lịch sử, rctrong một tên tập lệnh xuất phát từ CTSSruncom (Run Commands), nhưng từ đó đã mở rộng phạm vi để bao gồm các ý nghĩa khác.
Jeffrey Hantin

1
@JeffreyHantin: Touché. Đã xóa.
Blrfl

1
Ghét để tiếp tục chọn, nhưng profile.dkhông được tích hợp vào bash, đó là một cái móc thường được cung cấp từ (thường là cơ sở của distro) /etc/profile. ;)
Jeffrey Hantin

1
@JeffreyHantin: Đúng vậy, mặc dù sẽ không có chỉ trích về việc tôi sử dụng từ "Unixy". :-)
Blrfl

14

Không bao giờ chấp nhận sửa đổi /homecấu trúc người dùng từ trình quản lý gói trừ khi sửa đổi đó là toàn bộ điểm.

Các cách tiếp cận chính cho điều này là:

  • Thông báo cho người dùng họ cần cấu hình nó.
  • Cung mặc định nên không cần thiết
  • Gói một tập lệnh launcher đặt các giá trị phù hợp
  • (Nếu bản phân phối hỗ trợ nó) Thả tệp xuất biến môi trường bên trong /etc/profile.d. Trên một số hệ thống linux, tất cả các tập lệnh trong thư mục này có nguồn gốc từ thiết lập shell mặc định, vì vậy bạn có thể đặt biến ở đó một cách an toàn.

7

Câu hỏi Bước cài đặt của trình quản lý gói có nên sửa đổi môi trường của người dùng không?

Trả lời Không. Đó là một ý tưởng tồi để sửa đổi dữ liệu của người dùng, trong trường hợp này là tệp .bashrc. Dữ liệu của người dùng nên được coi là thiêng liêng của người quản lý gói?

Câu hỏi Có nên thực hiện bước cài đặt của trình quản lý gói đơn giản nhắc người dùng tự làm như vậy không?

Trả lời Đây là một giải pháp hợp lý hơn nhiều nhưng vẫn không lý tưởng.

Tôi nghĩ bạn nên tạo một tập lệnh shell shell trong đó bạn có thể đặt các biến môi trường cần thiết và chúng chạy chương trình thực thi sau đó.


Tôi cũng đã xem xét ý tưởng này. Dự án còn non trẻ và sẽ đi đến điểm không cần thiết.
David Cowden

@ GlenH7 Tôi đã cập nhật phản hồi của mình. Hy vọng rằng các phản hồi cập nhật là nhiều câu trả lời bạn đang tìm kiếm.
R Sahu

@ GlenH7: Câu hỏi này thực chất là một vấn đề XY: meta.stackexchange.com/questions/66377/what-is-the-xy-probols , trong đó nhu cầu về các biến môi trường là vấn đề thực sự cần giải quyết.
whatsisname

Hơn nữa, đề xuất câu trả lời này để tạo tập lệnh bao bọc là câu trả lời duy nhất sẽ hoạt động cho tất cả các trình bao.
whatsisname

1
@MattThomason rằng việc nhận ra là điều khiến tôi thực sự đặt câu hỏi (;
David Cowden

5

Bạn đang thiếu rừng cho cây. Rõ ràng việc thực hiện thay đổi môi trường cho người dùng sẽ thuận tiện hơn, nhưng cũng rủi ro hơn và có phần xâm lấn hơn. Bạn nên kết hợp tốt nhất của cả hai thế giới bằng cách hỏi người dùng xem trình cài đặt có nên sửa đổi chúng hay không .bashrc, và nếu không thì hãy đưa ra hướng dẫn cách họ nên tự làm.


Cảm ơn vì lời khuyên. Tôi chưa bao giờ viết một gói công khai trước đây và chỉ muốn đảm bảo rằng tôi không làm điều gì đó cấm kỵ.
David Cowden

Đây là cách google đám mây SDK xử lý việc này ngày hôm nay. Nó hỏi nếu bạn muốn sửa đổi các tập tin khởi động của bạn.
jmq

1

Bạn đang cho rằng "người dùng" là số ít. Điều gì xảy ra nếu tôi có hàng ngàn người dùng trên hệ thống này?

Bạn đang giả định rằng bạn thậm chí có thể tìm thấy thư mục chính của người dùng. Nếu người dùng được quản lý thông qua LDAP, bạn thậm chí có thể không được phép nhận danh sách tất cả người dùng hợp lệ. Các thư mục nhà có thể không ở / nhà; chúng có thể được gắn động từ mạng. Thư mục nhà của người dùng có thể được mã hóa và khóa không thể truy cập trong khi họ không đăng nhập.

Không có cách nào để làm điều này một cách đáng tin cậy trong mọi tình huống có thể. Sử dụng cơ chế của distro để đặt các biến môi trường cho người dùng khi họ đăng nhập hoặc sinh ra các shell. Nếu điều đó không làm việc, viết một trình bao bọc. (Trình bao bọc cũng có thể là nhị phân nếu cần thiết, để giải quyết đối số trong các bình luận).


0

Đặt biến toàn cục trong gói có thể được chấp nhận nếu đó là biến được xác định bởi dự án của riêng bạn (và điều đó có nghĩa là tên của dự án là một phần của tên biến!). Thậm chí sau đó, bạn không nên chạm vào .bashrctệp của người dùng - thay vào đó bạn nên thêm tập lệnh vào /etc/profile.d .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.