Tôi nên tự cài đặt phần mềm ở đâu?


Câu trả lời:


90

Nguyên tắc chung, ít nhất là trên các hệ thống có hương vị Debian:

  • /usr/localcho các công cụ đó là "system-wide" -ie /usr/localcó xu hướng được trong mặc định của distro $PATH, và sau một hệ thống phân cấp thư mục UNIX chuẩn /usr/local/bin, /usr/local/libvv

  • /optđối với những thứ bạn không tin tưởng để tạo ra toàn hệ thống, với tiền tố trên mỗi ứng dụng, tức là /opt/firefox-3.6.8, /opt/mono-2.6.7v.v. Những thứ ở đây đòi hỏi phải quản lý cẩn thận hơn, nhưng cũng ít có khả năng phá vỡ hệ thống của bạn và dễ dàng gỡ bỏ hơn vì bạn chỉ cần xóa thư mục và nó đã biến mất.


thật thú vị, nhiều chương trình / ứng dụng tự động đề xuất cài đặt /optnếu bạn sudocài đặt.
HongboZhu

50

Nếu bạn thực sự không muốn nó can thiệp gì cả, đừng đặt nó ở bất cứ đâu trong bạn $PATH.

Nếu bạn muốn nó vào $PATH, ít nhất hãy đảm bảo không cài đặt /usr/local. Tôi đã thấy rằng rất nhiều phần mềm trông ở đó ngay cả khi nó được cài đặt bởi bản phân phối /usr.

Cách yêu thích của tôi để cài đặt phần mềm biên dịch tùy chỉnh là trong $HOMEthư mục của tôi . Bằng cách đó, bạn không phải sử dụng sudocho bất cứ điều gì và nó rất tách biệt với phần còn lại của hệ thống. Ví dụ:

mkdir ~/stage
./configure --prefix=/home/username/stage && make && make install

Và nếu bạn muốn, sau đó bạn có thể thêm /home/username/stage/binvào của bạn $PATH.


1
Chắc chắn, sử dụng thư mục nhà của bạn là lựa chọn tốt nhất. IMO.
cắn

1
Đồng ý +1. Tôi thích ~ / sbin cho các tập lệnh bash / ruby ​​/ python và ~ / opt / ... cho các bản cài đặt được biên dịch, với các bí danh trong ~ / bin.
Kris

4
+1 để sử dụng thư mục chính của bạn vì nó làm cho mọi thứ đơn giản hơn; -1 cho đề xuất để tránh $ PATH - thực sự có các thư mục "dành riêng cho cài đặt cục bộ" theo các tiêu chuẩn (ví dụ /usr/local:).
Riccardo Murri

1
Đề xuất của tôi để tránh / usr / local được dựa trên mong muốn của người gửi ban đầu (hơi mơ hồ) để không can thiệp vào phần mềm đóng gói. Vì có rất nhiều phần mềm được đóng gói sẽ "trợ giúp" bằng cách tìm trong / usr / local hoặc $ PATH, tôi cho rằng điều đó đủ điều kiện để can thiệp. Nhưng nó thực sự phụ thuộc vào nhu cầu và mục tiêu cá nhân của một người. / usr / local có thể là một lựa chọn hoàn toàn tốt trong nhiều tình huống.
Sandy

không ai nhận thấy sự hiểu lầm hoàn toàn của chữ "s" trong bình luận # 2. cần phải xóa
meffect

20

FHS nói hãy đặt nó vào / usr / local nơi các bản phân phối không được chạm vào nó. /usr/local/bincho các nhị phân /usr/local/srccho nguồn và /usr/local/libcho các thư viện. Xem thông số kỹ thuật FHS để biết thêm


Còn cấu hình thì sao? Nói rằng tôi đã cài đặt MySQL mà không sử dụng trình quản lý gói, tôi có nên sử dụng /etc/mysqlcho cấu hình không?
Hubro

Tôi chỉ nhận thấy có một /usr/local/etcthư mục theo mặc định, tôi đoán tôi nên sử dụng nó ... :-)
Hubro

10

Hầu hết thời gian, tôi thích đặt công cụ biên dịch của riêng mình vào /opt. Đó là một nơi giả chuẩn. Bạn cũng có thể xem xét /usr/local, nhưng tôi thích giữ công cụ của mình cách ly 100%.


1
distro có xu hướng đặt khá nhiều thứ vào / opt (thường là các gói độc quyền) / opt không nói rằng distro không thể chạm vào nó. tuy nhiên, nó nói rằng về / usr / local
xenoterracide

1
Tôi chưa bao giờ thấy một bản phân phối nào đặt đồ đạc vào trong /opt, tuy nhiên tôi đã thấy nhiều lần nơi chứa /usr/localđầy rác từ nhà phân phối
Scott Anderson

Tôi sử dụng như để đưa java vào / opt Tôi cũng đã thấy trình đọc acrobat ở đó. nếu họ đang đặt nội dung vào / usr / local thì họ sẽ bỏ qua FHS nói rằng nó cần được an toàn để không bị ghi đè trong các bản cập nhật hệ thống.
xenoterracide

Để mỗi người của họ, tôi đoán. FHS là tốt, nhưng tôi nghĩ đôi khi nó bị bỏ qua.
Scott Anderson

Thứ duy nhất tôi từng thấy các gói distro được đặt vào /usr/locallà hệ thống phân cấp thư mục song song với các gói trong cây tiêu chuẩn và có thể lập chỉ mục các tệp cho những thứ như TeX.
Phil Miller

9

Đặt chúng vào /usr/local/src.

Những gì tôi làm là trích xuất nguồn trong thư mục này. Nó sẽ tạo ra một con đường như

/usr/local/src/postgresql-8.3.7

Sau đó, tôi tạo một liên kết tượng trưng cho nó:

/usr/local/src # ln -s  postgresql-8.3.7 postgresql

Làm tất cả các tòa nhà của bạn trong /usr/local/src/postgresql.

Làm mọi thứ theo cách này sẽ giúp ích khi bạn cần bật giữa các phiên bản và tài liệu về phiên bản bạn đang sử dụng.


1
+1 để nêu lý do của bạn và cách OP có thể áp dụng nó, bao gồm cả phiên bản.
samt

6

Điều này nhắc nhở tôi, tôi cần sử dụng checkinstall thường xuyên hơn! Bằng cách đó tôi chỉ làm như bình thường

 ./configure
 make

theo dõi bởi

 sudo checkinstall

để tạo tệp .deb ...


2
Không trả lời câu hỏi.
JBentley

5

Nếu có khả năng - Tôi khuyên bạn nên biên dịch phần mềm của mình và sau đó tạo gói FC (tôi tin rằng nó sử dụng yum để cài đặt gói phần mềm). Sau đó, bạn có thể cài đặt gói phần mềm được biên dịch của riêng bạn và gỡ bỏ nó mà không làm hỏng toàn bộ hệ thống.


5

Nếu bạn muốn có thể dễ dàng cài đặt và xóa một số ứng dụng do mình tự tạo, bạn có thể sử dụng Stow như một trình quản lý gói đơn giản.


5

Theo FHS , /usr/local/được sử dụng cho các ứng dụng được biên dịch từ nguồn, trong khi /opt/được sử dụng cho các ứng dụng bên thứ 3 không được nhà cung cấp hệ điều hành của bạn hỗ trợ.


4

Hai điều tôi khuyên bạn nên:

Toàn hệ thống: sử dụng stow và cài đặt theo / usr / local / stow / gói-phiên bản. Sau đó, bạn có thể dễ dàng chuyển đổi giữa các phiên bản.

Ở nhà tôi, hoặc nếu tôi không có quyền / usr / local write, cá nhân tôi cài đặt các chương trình theo ~ / .local, được gợi ý theo tiêu chuẩn XDG .

Bạn cũng có thể sử dụng stow cục bộ, mặc dù tôi chưa bao giờ làm :)


3

Tôi có một chút thiết lập khác với hầu hết mọi người vì tôi phát triển rất nhiều. Tôi có một thư mục / home / jackson / bin / mà tôi cài đặt vào và tôi đã chỉnh sửa .bashrc của mình bằng cách thêm này:

export PATH=/home/jackson/bin/bin::$PATH
export LD_LIBRARY_PATH=/home/jackson/bin/lib:$LD_LIBRARY_PATH
export PKG_CONFIG_PATH=/home/jackson/bin/lib/pkgconfig:$PKG_CONFIG_PATH

Tôi sẽ không làm điều này cho tất cả mọi thứ, nhưng nó tốt đẹp trong quá trình phát triển.


3

Thực sự không khó để tạo ra deb hoặc vòng / phút từ tarball nguồn. Bằng cách đó, bạn có thể sử dụng các tiện ích của trình quản lý gói của distro để giữ cho hệ thống của bạn sạch sẽ. Đây là những gì tôi làm, hầu hết thời gian: chỉ cần tạo ra một vòng / phút nhỏ.


2

nếu bạn đang biên dịch một ứng dụng, bạn có thể thêm đường dẫn thực thi của nó trong biến env PATH của bạn. Điều này sẽ không ảnh hưởng đến người dùng khác.


Tôi tự hỏi tại sao các phiếu giảm? +1 để loại "cân bằng tắt"
phunehehe

Tôi cũng đang tự hỏi tại sao :-). Tôi đã sử dụng cùng một giải pháp cho việc sử dụng cscope nơi tôi không có quyền cài đặt.
Hemant

@phunehehe Có lẽ vì nó thậm chí không cố gắng trả lời câu hỏi. Câu hỏi hỏi nơi đặt phần mềm. Câu trả lời này đưa ra một lời khuyên về những gì bạn có thể làm sau khi bạn đặt nó ở đâu đó. Nó có thể được cải thiện bằng cách đưa ra một số gợi ý về việc sử dụng thư mục nào.
JBentley

2

Luôn luôn có tùy chọn "đặt nó ở nơi nó thuộc về" nhưng trước tiên hãy viết một vòng / phút đơn giản.


1

Nếu bạn muốn ứng dụng của mình khả dụng cho tất cả người dùng trên hệ thống và bạn có các quyền cần thiết, hãy sử dụng / opt. Nếu bạn muốn ứng dụng chỉ khả dụng cho bạn (và root), hãy sử dụng / home / tên người dùng


0

Cách dễ nhất để làm điều này là lấy gói nguồn ( .src.rpmđối với RPMites), giải nén nó, hack nguồn / cấu hình mới / bất cứ thứ gì vào nó, thay đổi phiên bản một cách thích hợp và xây dựng. Cài đặt này làm cho trình quản lý gói của bạn biết về gói mới, cho phép xem xét gói phụ thuộc và gỡ cài đặt / cập nhật.

Đây là một việc vặt lần đầu tiên, nhưng nếu một phiên bản mới (hoặc một số bản vá quan trọng) xuất hiện, thì việc cập nhật sẽ đơn giản hơn. Một lợi ích khác là bạn có thể tạo kho lưu trữ của riêng mình bằng phần mềm cục bộ, được chia sẻ, ví dụ như các máy trong phòng thí nghiệm.


0

Viết một RPM, nó không khó, có hướng dẫn về nơi đặt mọi thứ và làm cho việc gỡ cài đặt nhanh chóng.

Nếu bạn làm điều này, hãy cài đặt các tệp bên dưới /usrvà không bên dưới /usr/local, giống như tất cả các tệp khác đi qua hệ thống đóng gói.

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.