Tại sao phần mềm tự cài đặt trong / usr / lib?


11

Tôi đã sử dụng các máy chủ Linux trong nhiều năm nay và tôi tiếp tục bị nhầm lẫn bởi Tiêu chuẩn phân cấp hệ thống tập tin. Thông thường, tôi có thể sống với sự nhầm lẫn. Nhưng bây giờ tôi đang phát triển phần mềm của riêng mình cho Linux, tôi cần hiểu nơi mà các trình quản lý gói được cài đặt.

Tôi đã khá tin rằng / opt là vị trí hoàn hảo cho ứng dụng của tôi. Nhưng sau khi điều tra hệ thống tập tin Debian của tôi, tôi không chắc nữa: rất nhiều phần mềm thực sự được cài đặt trong / usr / lib! Để đặt tên cho một số: MySQL, MySQLWorkbench, Nautilus, Ry nhịpbox ...

Theo FHS, / usr / lib được cho là chứa "Thư viện lập trình và gói" và "bao gồm các tệp đối tượng, thư viện và các tệp nhị phân nội bộ không được người dùng hoặc tập lệnh shell trực tiếp thực hiện" ( Xem tại đây ).

Rất nhiều phần mềm nằm trong / usr / lib của máy chủ debian của tôi không phải là thư viện hoặc nhị phân nội bộ mà là phần mềm thực thi người dùng chính thức!

Tôi vẫn đang trên đường cài đặt ứng dụng của mình trong / opt. Nhưng tôi thực sự muốn hiểu nếu điều này là chính xác và trên hết, tại sao .

Cảm ơn trước cho lời khuyên của bạn,

Eric.


2
Kiểm tra tại chỗ, từ những gì tôi có thể nói với MySQLWorkbench chỉ cài đặt các thư viện trong / usr / lib. Điều gì khiến bạn nghĩ rằng có "phần mềm thực thi người dùng chính thức" trong / usr / lib?
Đánh dấu Wagner

Phím tắt thực tế nằm trong menu Ứng dụng trỏ đến nhị phân nằm trong / usr / lib, nếu tôi nhớ chính xác.
Eric MORAND

Bạn có vẻ bối rối về nơi phần mềm bạn liệt kê được cài đặt. Dưới đây là các liên kết đến danh sách nếu các tệp cho MySQL và Nautilus. Lưu ý rằng các tệp được phân chia giữa / etc, / usr / bin, / usr / lib, v.v. giống như FHS nói rằng chúng nên như vậy. packages.debian.org/wheezy/i386/mysql-server-5.5/filelist packages.debian.org/wheezy/i386/nautilus/filelist
chi sóc

Câu trả lời:


6

Chìa khóa thực sự để hiểu Tiêu chuẩn gia truyền hệ thống tập tin là biết rằng nó được thiết kế với các hệ thống tập tin mạng.

Đối với mọi máy có cùng hệ điều hành, phát hành và kiến ​​trúc, bạn có thể chia sẻ / usr thông qua NFS và gắn kết nó.
/ usr được (re) gắn kết sau khi ngăn xếp mạng được khởi tạo.

/var <-- local, r/w optimized
/usr <-- can be mounted over network, possibly even read-only!
/opt <-- local, read mostly
/etc <-- local, read mostly
/srv <-- local, r/w optimized

/home <-- either/or

Bạn có phiền khi cung cấp một liên kết cho các tiêu chuẩn cục bộ / từ xa và r - r / w không?
Thuyền trưởng Hươu cao cổ

Điều này có nghĩa là người ta có thể có một "kho" duy nhất cho mỗi máy chủ Linux hoặc máy trạm trong mạng không?
Eric MORAND

1
Nó cần một số công việc, nhưng có, bạn có thể. Quay lại khi ổ cứng đắt tiền, đây là tiêu chuẩn cho bất kỳ buổi giới thiệu lớn nào.
Dan Garthwaite

@ eric-morand Từ FHS: "/ usr là phần chính thứ hai của hệ thống tập tin. / usr có thể chia sẻ, dữ liệu chỉ đọc. Điều đó có nghĩa là / usr phải được chia sẻ giữa các máy chủ tuân thủ FHS khác nhau và không được ghi vào . Bất kỳ thông tin nào cụ thể về máy chủ hoặc thay đổi theo thời gian đều được lưu trữ ở nơi khác. " pathname.com/fhs/pub/fhs-2.3.html#THEUSRHIERARCHY
Dan Garthwaite

Rất tiếc. Nhận xét trên là dành cho @CaptainGiraffe
Dan Garthwaite

12

Sự khác biệt là /usrcó nghĩa là để giữ các gói được cài đặt như một phần của hệ thống . Các gói bạn nhận được từ kho Debian / Ubuntu, PPA, v.v., vào đây. Mặc dù /optcó nghĩa là cho các ứng dụng bên thứ ba chưa được xử lý không được phân phối thông qua quy trình phân phối gói của phân phối.

Nếu bạn phân phối các gói .deb hoặc .rpm, cuối cùng sẽ đưa phần mềm của bạn vào kho chính thức, bạn nên cài đặt /usr. Nếu không thì cài đặt vào /opt. Trong cả hai trường hợp, ứng dụng của bạn sẽ có thể được biên dịch để chạy ở bất kỳ vị trí tùy ý nào (ví dụ: với sự trợ giúp của các autotools GNU).


Cảm ơn. Ngay bây giờ, tôi không có kế hoạch đưa ứng dụng của mình vào kho lưu trữ chính thức.
Eric MORAND

Thế còn / usr / local thì sao? Hoặc là rời rạc
Aaron Copley

@AaronCopley /usr/localkhông nằm trong phạm vi của câu hỏi này. Nhưng nó có nghĩa là phần mềm của bên thứ ba mà quản trị viên cục bộ biên dịch và cài đặt.
Michael Hampton

Đó là lý do tại sao tôi hỏi nếu nó được coi là rời rạc.
Aaron Copley

2

Bạn cài đặt thư viện của mình vào <prefix>/lib, tệp nhị phân của bạn trong <prefix>/bin, tệp tiêu đề của bạn trong <prefix>/include, trang man trong prefix/[share/]man, tệp pkgconfig trong <prefix>/lib/pkgconfighoặc <prefix/share/pkgconfig, tệp cmake .m4 của bạn trong<prefix>/share/aclocal

Sau đó, để cho người quản lý gói quyết định tiền tố. Nếu bạn đang tự phân phối vòng / phút của vòng / phút, /usrlà một lựa chọn tốt cho tiền tố.

./configure --prefix=~/.local/ Vẫn nên làm việc, vì vậy đừng đi mã hóa con đường của bạn ở bất cứ đâu!

Một số thư viện được gói vào một số công cụ khác làm cho chúng cũng có thể thực thi và có thể sử dụng như một thư viện, nhưng chúng vẫn là các thư viện, và không phải trong $ PATH của bạn, vì vậy tôi có thể đưa chúng vào / lib tôi đoán.


1

Tôi sẽ đề nghị tránh cài đặt ứng dụng của bạn dưới / opt. Lý do 1: Một số distro không có / opt theo mặc định Lý do 2: / usr / lib là đường dẫn chuẩn cho thư viện {Nếu các ứng dụng khác cần sử dụng thư viện của bạn, bạn cần thêm đường dẫn thư viện của mình theo cách thủ công vào / etc / ldconfig} / opt sẽ thuận tiện hơn khi bạn có các ứng dụng độc lập mà bạn cài đặt thủ công và bạn muốn biết chúng nằm ở đâu

Một trong những lý do mà các tệp thực thi chính thức được đặt trong / usr / lib có thể là chúng được sử dụng từ các tập lệnh khác. {Ví dụ tập lệnh bash không thể sử dụng API trực tiếp. vì lý do này, một mẹo phổ biến là xây dựng một "trình bao bọc" xung quanh api này và đẩy các tham số làm đối số của tập lệnh}


2
Tôi không đồng ý. Nếu anh ta muốn cài đặt trong / opt, trình quản lý gói sẽ tạo thư mục, vì vậy đó không phải là vấn đề. Ngoài ra, các tệp nhị phân được cài đặt trong / usr / lib là một ý tưởng tồi.
Walter

Cảm ơn @Nikolaidis Fotis. Nhưng trong trường hợp của tôi, ứng dụng của tôi không chứa thư viện công cộng và sẽ không được các ứng dụng khác sử dụng.
Eric MORAND

0

Xin vui lòng, cài đặt nó trong / opt.

Cách quá nhiều ứng dụng Linux tạo ra giống nhau khiến các nhà phát triển Windows tạo ra trong những năm 90.

Hãy cài đặt công cụ của chúng tôi trong C: \ windows sao cho đơn giản và dễ tìm (và nhanh hơn một chút). Sau đó, 15 năm địa ngục DLL xuất hiện khi các gói phần mềm khác nhau cần các phiên bản khác nhau của cùng một thư viện (trong Windows không có phiên bản của các thư viện).

Trừ khi bạn đang viết phần mềm hệ thống thực tế, hãy đặt nó vào / opt, để mọi người có thể theo dõi tốt hơn ai đã cài đặt cái gì.


4
Đây không phải là Windows. Chúng tôi có các trình quản lý gói hoạt động và điều này thực sự không phải là vấn đề.
Michael Hampton

Nếu bạn thực sự lo lắng về mọi thứ trong cùng một cây, hãy xem trình quản lý gói Nix . Tốt nhất của cả hai thế giới, nếu bạn hỏi tôi.
TheSola10
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.