Các lựa chọn thay thế cho FHS là gì?


32

Tôi là một người dùng Linux lâu năm trong hơn 15 năm nhưng có một điều tôi ghét với niềm đam mê là cấu trúc thư mục bắt buộc. Tôi không thích điều đó /usr/binlà bãi chứa mã nhị phân hoặc libs trong /usr/lib, /usr/lib32, /usr/libx32, /lib, /lib32vv ... ngẫu nhiên nội dung trong /usr/sharevv Đó là câm và khó hiểu. Nhưng một số thích nó và thị hiếu khác nhau.

Tôi muốn một cấu trúc thư mục trong đó mỗi gói được cách ly. Thay vào đó hãy tưởng tượng nếu con rồng của người chơi phương tiện có cấu trúc riêng của nó:

/software/dragon
/software/dragon/bin/x86/dragon
/software/dragon/doc/README
/software/dragon/doc/copyright
/software/dragon/lib/x86/libdragon.so

Hoặc là:

/software/zlib/include/zlib.h
/software/zlib/lib/1.2.8/x86/libz.so
/software/zlib/lib/1.2.8/x64/libz.so
/software/zlib/doc/examples/...
/software/zlib/man/...

Bạn sẽ có được điểm. Những lựa chọn của tôi là gì? Có bản phân phối Linux nào sử dụng cái gì đó giống như sơ đồ của tôi không? Một số distro có thể được sửa đổi để hoạt động như tôi muốn không (Gentoo ??) hoặc tôi có cần LFS không? Có bất kỳ nghệ thuật trước trong lĩnh vực này? Giống như các ấn phẩm về nếu chương trình là khả thi hoặc không khả thi?

Không tìm kiếm OS X. :) Nhưng lấy cảm hứng từ OS X là hoàn toàn ổn.

Chỉnh sửa : Tôi không có ý tưởng như thế nào PATH, LD_LIBRARY_PATHvà các biến môi trường khác mà phụ thuộc vào một nhóm nhỏ các con đường nên đi đến đâu. Tôi nghĩ rằng nếu tôi đã cài đặt trình soạn thảo KDE Kate/software/kate/bin/x86/bin/kate thì tôi sẽ ổn khi phải nhập đường dẫn đầy đủ đến tệp nhị phân để khởi động nó. Làm thế nào nó nên hoạt động cho các thư viện và dlopencuộc gọi động, tôi không biết nhưng nó không thể là một vấn đề kỹ thuật không thể giải quyết.


3
Con đường tìm kiếm của bạn sẽ trông như thế nào nếu tất cả các nhị phân của bạn bị ẩn ở khắp mọi nơi? Làm thế nào để bạn cập nhật đường dẫn trong các quy trình / phiên đã chạy khi bạn cài đặt phần mềm sau khi chúng bắt đầu? Các biện pháp bảo mật của bạn sẽ là gì để ngăn người dùng trung bình bằng cách nào đó quản lý để sửa đổi nhị phân trong một số nhánh bin tối nghĩa? Bạn chắc chắn mất đi sự thoải mái khi có thể biến / usr thành một parition chỉ đọc, có thể là một mạng lưới phổ biến cho nhiều máy móc ...
Hagen von Eitzen

1
@HagenvonEitzen Nhưng (sử dụng sơ đồ và ví dụ đặt tên của OP), bạn có thể /softwarechỉ đọc thay thế, vì những lợi ích và nhược điểm tương tự như /usrchỉ đọc trong FHS.
một CVn

Các thư viện động có thể sử dụng tên cài đặt hoặc RPATH.
asmeker

1
Câu hỏi của bạn làm tôi nhớ đến cr.yp.to/slashpackage.html . Không chắc chắn điều này có liên quan, mặc dù.
bli

Câu trả lời:


50

Đầu tiên, từ chối trách nhiệm xung đột lợi ích trước mắt: Tôi là nhà phát triển GoboLinux lâu năm.

Thứ hai, một tuyên bố trước mắt về chuyên môn tên miền: Tôi là một nhà phát triển GoboLinux lâu năm.

Có một vài cấu trúc khác nhau trong sử dụng hiện tại. GoboLinux có một và các công cụ như GNU Stow , Homebrew , v.v., sử dụng một cái gì đó khá giống nhau (chủ yếu cho các chương trình người dùng). NixOS cũng sử dụng hệ thống phân cấp không chuẩn cho các chương trình và triết lý sống. Đây cũng là một thử nghiệm LFS khá phổ biến.

Tôi sẽ mô tả tất cả những điều đó, và sau đó nhận xét từ kinh nghiệm về cách thực hiện trong thực tế ("tính khả thi"). Câu trả lời ngắn gọn là có, nó khả thi, nhưng bạn phải thực sự muốn nó .


GoboLinux

GoboLinux có cấu trúc rất giống với những gì bạn mô tả. Phần mềm được cài đặt bên dưới /Programs: /Programs/ZSH/5.0.8chứa tất cả các tệp thuộc ZSH 5.0.8, trong các thư mục bin/ lib/ ... thông thường . Các công cụ hệ thống tạo liên kết tượng trưng đến các tệp đó theo cấu trúc /System/Linksphân cấp, ánh xạ vào /usr. Các PATHbiến chỉ chứa thư mục thực thi thống nhất, và LD_LIBRARY_PATHlà không sử dụng. Nhiều phiên bản phần mềm có thể cùng tồn tại cùng một lúc, nhưng chỉ một tệp theo tên đã cho ( bin/zsh) sẽ được liên kết tích cực cùng một lúc. Bạn có thể truy cập những người khác bằng đường dẫn đầy đủ của họ.

Một tập hợp các liên kết tương thích cũng tồn tại, do đó /bin, /usr/binánh xạ tới thư mục thực thi hợp nhất, v.v. Điều này làm cho cuộc sống dễ dàng hơn cho phần mềm trong thời gian chạy. Một bản vá kernel, GoboHide, cho phép các liên kết tương thích đó bị ẩn khỏi danh sách tệp (nhưng vẫn có thể duyệt qua).

Đối với câu trả lời khác, bạn không cần phải sửa đổi mã hạt nhân: GoboHide hoàn toàn là mỹ phẩm và hạt nhân không phụ thuộc vào đường dẫn không gian người dùng nói chung². GoboLinux không có hệ thống init bespoke, nhưng điều đó cũng không bắt buộc phải làm điều này.

Khẩu hiệu luôn là "hệ thống tập tin là trình quản lý gói", nhưng có những công cụ quản lý gói thông thường trong hệ thống. Bạn có thể làm mọi việc bằng cp, rmln, mặc dù.

Nếu bạn muốn sử dụng GoboLinux, bạn rất hoan nghênh. Tuy nhiên, tôi sẽ lưu ý rằng đó là một nhóm phát triển nhỏ và bạn có thể thấy rằng một số phần mềm bạn muốn không được đóng gói nếu không ai muốn sử dụng nó trước đây. Tin tốt là nói chung khá dễ dàng để xây dựng một chương trình cho hệ thống (một "công thức" tiêu chuẩn dài khoảng ba dòng); tin xấu là đôi khi nó phức tạp một cách khó chịu, mà tôi sẽ đề cập nhiều hơn bên dưới.

Ấn phẩm

Có một vài "ấn phẩm". Tôi đã trình bày tại linux.conf.au 2010 trên toàn bộ hệ thống bao gồm tất cả mọi thứ nói chung, có sẵn trong video: ogv mp4 (cũng trên gương Linux Úc địa phương của bạn); Tôi cũng đã viết lên ghi chú của tôi vào văn xuôi. Ngoài ra còn có một vài tài liệu cũ hơn, bao gồm " Tôi không biết gì ", trên trang web GoboLinux , trong đó đề cập đến một số phản đối và vấn đề. Tôi nghĩ rằng tất cả chúng ta ngày nay ít gung-ho hơn một chút và tôi nghi ngờ rằng một bản phát hành trong tương lai sẽ sử dụng /usrlàm vị trí cơ sở cho các liên kết tượng trưng.


NixOS

NixOS đặt từng chương trình được cài đặt vào thư mục riêng của nó bên dưới /nix/store. Các thư mục đó được đặt tên giống như /nix/store/5rnfzla9kcx4mj5zdc7nlnv8na1najvg-firefox-3.5.4/- có một hàm băm mật mã đại diện cho toàn bộ các phụ thuộc và cấu hình dẫn đến chương trình đó. Bên trong thư mục đó là tất cả các tệp được liên kết, với các vị trí bình thường nhiều hơn hoặc ít hơn cục bộ.

Nó cũng cho phép bạn có nhiều phiên bản cùng một lúc và sử dụng bất kỳ phiên bản nào trong số chúng. NixOS có toàn bộ triết lý liên quan đến cấu hình có thể tái tạo: về cơ bản, nó có một hệ thống quản lý cấu hình được đưa vào từ đầu. Nó dựa vào một số thao tác môi trường để trình bày đúng thế giới của các chương trình được cài đặt cho người dùng.


LFS

Việc truy cập Linux From Scratch khá đơn giản và thiết lập chính xác thứ bậc bạn muốn: chỉ cần tạo các thư mục và định cấu hình mọi thứ để cài đặt đúng nơi. Tôi đã thực hiện nó một vài lần trong việc xây dựng các thử nghiệm GoboLinux và nó không khó hơn LFS đơn giản. Bạn cần phải tạo các liên kết tương thích trong trường hợp đó; mặt khác, nó khó hơn nhiều, nhưng sử dụng cẩn thận các liên kết có thể tránh điều đó nếu bạn thực sự muốn.

Tôi cảm thấy như có một LFS Gợi ý về chính xác điều đó tại một thời điểm, nhưng dường như tôi không thể tìm thấy nó bây giờ.


Về tính khả thi

Vấn đề của FHS là nó là một tiêu chuẩn, nó rất phổ biến và nó phản ánh rộng rãi việc sử dụng hiện tại tại thời điểm nó được viết. Hầu hết người dùng sẽ không bao giờ ở trên một hệ thống không tuân theo bố cục đó. Kết quả của điều đó là rất nhiều phần mềm có sự phụ thuộc tiềm ẩn vào nó mà không ai nhận ra, thường là hoàn toàn vô tình.

Tất cả những kịch bản với #!/bin/bash? Không tốt nếu bạn không có Bash ở đó. Đó là lý do tại sao GoboLinux có tất cả các liên kết tương thích đó; nó chỉ thực tế Rất nhiều phần mềm không hoạt động hoặc trong thời gian xây dựng hoặc trong thời gian chạy theo bố cục không chuẩn, và sau đó nó yêu cầu vá để sửa, thường khá xâm phạm.

Chương trình Autoconf cơ bản của bạn thường sẽ vui vẻ cài đặt bất cứ nơi nào bạn nói với nó và khá dễ dàng để tự động hóa quá trình chuyển chính xác --prefix. Các hệ thống xây dựng khác không phải lúc nào cũng đẹp, bằng cách cố tình nướng trong hệ thống phân cấp hoặc bởi các tác giả hàng đầu để viết cấu hình không di động. CMake là một tội phạm lớn trong thể loại sau. Điều đó có nghĩa là nếu bạn muốn sống trong thế giới này, bạn phải sẵn sàng làm rất nhiều công việc khó khăn ở phía trước trong các hệ thống xây dựng của người khác. Đó là một rắc rối thực sự khi phải tự động vá các tệp được tạo trong quá trình biên dịch.

Thời gian chạy là một vấn đề một lần nữa. Nhiều chương trình có giả định về nơi các tệp của riêng họ hoặc tệp của người khác được tìm thấy có liên quan đến chúng hoặc hoàn toàn. Khi bạn bắt đầu sử dụng các liên kết tượng trưng để đưa ra một quan điểm nhất quán, rất nhiều chương trình có lỗi xử lý chúng (hoặc đôi khi, được cho là hành vi đúng được cho là không có ích cho bạn). Ví dụ, một công cụ foobarcó thể mong đợi tìm thấy baztệp thực thi bên cạnh nó hoặc trong ../sbin. Tùy thuộc vào việc nó có đọc được liên kết tượng trưng của nó hay không, chúng có thể là hai vị trí khác nhau và dù sao chúng cũng không thể đúng.

Một vấn đề kết hợp là /usr/sharethư mục. Tất nhiên, nó dành cho các tệp được chia sẻ, nhưng khi bạn đặt mọi chương trình vào tiền tố riêng thì chúng không còn thực sự được chia sẻ. Điều đó dẫn đến các chương trình không thể tìm thấy các biểu tượng tiêu chuẩn và tương tự. GoboLinux đã xử lý vấn đề này theo một cách khá xấu xí: tại thời điểm xây dựng, $prefix/sharelà một liên kết tượng trưng $prefix/Sharedvà sau khi xây dựng liên kết đã được trỏ đến sharethư mục toàn cầu thay thế. Bây giờ nó sử dụng hộp cát thời gian biên dịch và di chuyển tệp để xử lý share(và các thư mục khác), nhưng lỗi thời gian chạy từ các liên kết đọc vẫn có thể là một vấn đề.

Suites của nhiều chương trình là một vấn đề khác. GoboLinux chưa bao giờ khiến Gnome hoạt động hoàn toàn và tôi cũng không tin NixOS có được, bởi vì sự phụ thuộc lẫn nhau về bố cục được nung nấu đến mức chỉ có thể chữa được tất cả.

Vì vậy, vâng, nó khả thi , nhưng:

  • Có khá nhiều công việc liên quan đến việc làm cho mọi thứ hoạt động.
  • Một số phần mềm có thể không bao giờ hoạt động.
  • Mọi người sẽ nhìn bạn buồn cười.

Tất cả những điều đó có thể hoặc không thể là một vấn đề cho bạn.


Phiên bản 14.01 sử dụng /System/Index, ánh xạ trực tiếp lên /usr. Tôi nghi ngờ một phiên bản trong tương lai có thể bỏ cấu trúc phân cấp Liên kết / Chỉ mục và sử dụng /usrtrên bảng.

² Nó đòi hỏi /bin/shphải tồn tại theo mặc định.


1
Câu trả lời chính xác! Có phải các tác giả phần mềm dễ tiếp thu các bản vá để làm cho chúng hoạt động trong gobolinux hoặc thù địch với nó?
Bjorn Lindqvist

Hầu hết thời gian các bản vá ngược dòng đều ổn, nhưng đôi khi những người bảo trì có thể hơi hiếu chiến khi dựa vào FHS. Tôi cũng nhớ các nhà bảo trì KDE khăng khăng rằng sao chép một liên kết tượng trưng vào một tệp mẫu không thể thay đổi được thay vì hủy bỏ nó để sao chép tệp theo thiết kế. Rất nhiều bản vá được chuyển từ một con đường được mã hóa cứng sang một con đường khác, thay vì một bản sửa lỗi thích hợp, vì vậy dù sao chúng cũng không đáng để gửi ngược dòng.
Michael Homer

Vì vậy, nếu bạn đã tìm thấy và tài trợ (bằng thời gian hoặc tiền bạc) việc tạo / sửa / vá tất cả phần mềm bạn muốn / cần, (eh hem, giống như Apple / Microsoft không / có vẻ như vậy), thì bạn có vàng không? Đó là những gì nó nghe giống như tôi. Tôi quá quan tâm đến những đổi mới phá vỡ quy tắc không mang tính thù địch đối với máy tính để bàn như thế này.
ThorSummoner

2
@ThorSummoner: Hầu hết các bản phân phối vá rất nhiều phần mềm của họ; rằng "tài trợ" đã là thực tế. Các bản vá đó là một hỗn hợp của chức năng và, vâng, thay đổi đường dẫn để phù hợp với đặc thù của bản phân phối. Tất nhiên, với tư cách là người dùng cuối, bạn không thực sự chú ý đến nó, nhưng nó ở đó - có rất nhiều lao động đằng sau một bản phân phối mà nó dễ dàng được chấp nhận. Nhìn chung, bạn không cần phải vá mọi thứ - chỉ có 13% công thức nấu ăn của GoboLinux liên quan đến bất kỳ loại bản vá nào, ví dụ, thực sự thấp hơn so với Debian, mặc dù đó là một loại vá khó chịu phải làm khi nó bắt buộc.
Michael Homer

6

Cả hai GoboLinux (mà F.sb đã đề cập) và GNU guix đều là các bản phân phối sử dụng cấu trúc thư mục trên mỗi gói cùng với các liên kết tượng trưng để trỏ đến phiên bản "hiện tại" của tệp nhị phân.

GoboLinux dường như là lựa chọn tốt hơn nếu bạn muốn có một hệ thống ổn định. GNU guix nói rõ rằng nó chưa sẵn sàng sản xuất. GoboLinux đã tồn tại trong nhiều năm. Tôi chưa bao giờ thử bản thân mình.


5

kiểm tra GoboLinux .

Nếu bạn muốn thay đổi cấu trúc thư mục, bạn nên thay đổi một số mã kernel, quá trình khởi động, thư mục thư mục dựa trên các tệp RC và trình quản lý gói, sau đó là cấu trúc thư mục.


5

Linux FHS dựa trên những gì Sun và các công ty UNIX khác quyết định vào cuối những năm 1980.

Một thay đổi quan trọng tại thời điểm đó là từ bỏ /usr/local/và giới thiệu /opt// { bin! lib! man! ...}

Nếu bạn đang tìm kiếm lý do tại sao / usr / bin ngày nay được sử dụng làm bãi đổ rác, tôi tin rằng Gnome là một trong những dự án có trách nhiệm nhất.

Điều gì đã xảy ra với các thư viện 32 bit so với 64 bit dường như là do FHS gây ra.

Solaris giới thiệu các thư mục con cụ thể nền tảng trong /lib /usr/bin/usr/lib. Mong muốn của bạn là làm thế nào Sun tăng cường khái niệm cơ sở từ năm 1988.


Tôi không thấy ý của bạn khi nói "từ bỏ / usr / local". FHS đặc biệt đề cập / usr / local cũng như / opt .
CVn

2
FHS ban đầu được phát triển bởi Sun, HP, IBM, AT & T, SGI tất nhiên đã loại bỏ tính không hệ thống và có vấn đề / usr / local. Tôi không biết tại sao người Linux lại giới thiệu sai lầm đó.
schily

2
"Mong muốn của bạn là làm thế nào Sun tăng cường khái niệm cơ sở từ năm 1988." Tôi không hiểu câu này.
Faheem Mitha

4

Nếu mỗi gói có một phần riêng của hệ thống tệp, bạn sẽ cần các biến môi trường cực kỳ lớn và khó sử dụng PATH, LD_LIBRARY_PATHvà tương tự.

Tất nhiên, bạn có thể tự cài đặt các gói theo cách này và sau đó sử dụng một cái gì đó như Mô-đun GNU để quản lý xem chúng có ở trong môi trường của bạn hay không và đây là những gì chúng tôi làm cho phần mềm khoa học nơi tôi làm việc, nhưng chúng tôi không làm điều đó cho phần mềm hệ thống.

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.