Apa alternatif untuk FHS?

32

Saya adalah pengguna lama Linux selama lebih dari 15 tahun tetapi satu hal yang saya benci dengan hasrat adalah struktur direktori yang diamanatkan. Aku tidak seperti itu /usr/binadalah tempat pembuangan untuk biner atau libs di /usr/lib, /usr/lib32, /usr/libx32, /lib, /lib32dll ... hal-hal acak di /usr/sharedll Ini bodoh dan membingungkan. Tetapi beberapa menyukainya dan rasanya berbeda.

Saya ingin struktur direktori di mana setiap paket terisolasi. Bayangkan sebaliknya jika naga pemutar media memiliki strukturnya sendiri:

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

Atau:

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

Anda mengerti maksudnya. Apa saja pilihan saya? Apakah ada distro Linux yang menggunakan sesuatu seperti skema saya? Dapatkah beberapa distro dimodifikasi agar berfungsi seperti yang saya inginkan (Gentoo ??) atau apakah saya memerlukan LFS? Apakah ada karya seni sebelumnya di bidang ini? Suka publikasi tentang apakah skema itu layak atau tidak layak?

Tidak mencari OS X. :) Tapi OS X yang diilhami benar-benar ok

Sunting : Saya tidak tahu caranya PATH, LD_LIBRARY_PATHdan variabel lingkungan lainnya yang bergantung pada set kecil jalur harus berhasil. Saya berpikir bahwa jika saya memiliki Kate KDE editor diinstal /software/kate/bin/x86/bin/katemaka saya boleh dengan mengetikkan path lengkap ke biner untuk memulainya. Bagaimana cara kerjanya untuk pustaka dan dlopenpanggilan dinamis , saya tidak tahu tetapi itu tidak bisa menjadi masalah teknik yang tidak dapat diselesaikan.

Björn Lindqvist
sumber
3
Seperti apa jalur pencarian Anda jika semua binari Anda disembunyikan di semua tempat? Bagaimana Anda memperbarui jalur dalam proses / sesi yang sudah berjalan saat Anda menginstal perangkat lunak setelah dimulainya? Apa langkah-langkah keamanan Anda untuk mencegah pengguna rata-rata entah bagaimana mengelola untuk memodifikasi biner di beberapa cabang-cabang yang tidak jelas? Anda tentu saja kehilangan kenyamanan untuk membuat / usr parisi read-only, mungkin net-mount umum untuk banyak mesin ...
Hagen von Eitzen
1
@HagenvonEitzen But (menggunakan skema dan contoh penamaan OP) Anda dapat membuat /softwareread-only saja, untuk manfaat dan kelemahan yang sama seperti membuat /usrread-only di FHS.
CVn
Pustaka dinamis dapat menggunakan nama instal atau RPATH.
penanggung jawab
1
Pertanyaan Anda mengingatkan saya pada cr.yp.to/slashpackage.html . Namun, tidak yakin ini relevan.
bli

Jawaban:

50

Pertama, penafian konflik kepentingan di muka: Saya sudah lama menjadi pengembang GoboLinux.

Kedua, klaim awal keahlian domain: Saya sudah lama menjadi pengembang GoboLinux.

Ada beberapa struktur berbeda yang digunakan saat ini. GoboLinux memilikinya, dan alat-alat seperti GNU Stow , Homebrew , dll, menggunakan sesuatu yang sangat mirip (terutama untuk program pengguna). NixOS juga menggunakan hierarki non-standar untuk program, dan filosofi kehidupan. Ini juga merupakan eksperimen LFS yang cukup umum.

Saya akan menggambarkan semua itu, dan kemudian mengomentari pengalaman tentang bagaimana hal itu berhasil dalam praktiknya ("kelayakan"). Jawaban singkatnya adalah ya, itu layak, tetapi Anda harus benar-benar menginginkannya .


GoboLinux

GoboLinux memiliki struktur yang sangat mirip dengan yang Anda gambarkan. Perangkat lunak diinstal di bawah /Programs: /Programs/ZSH/5.0.8berisi semua file milik ZSH 5.0.8, di direktori bin// lib/ ... biasa . Alat sistem membuat symlink ke file-file tersebut di bawah /System/Linkshierarki, yang memetakan ke /usr¹. The PATHvariabel hanya berisi direktori executable tunggal terpadu, dan LD_LIBRARY_PATHtidak terpakai. Beberapa versi perangkat lunak dapat hidup berdampingan sekaligus, tetapi hanya satu file dengan nama yang diberikan ( bin/zsh) akan ditautkan secara aktif sekaligus. Anda dapat mengakses yang lain dengan jalur lengkap mereka.

Sekumpulan symlink kompatibilitas juga ada, jadi /bindan /usr/binpetakan ke direktori executable yang disatukan, dan seterusnya. Ini membuat hidup lebih mudah untuk perangkat lunak pada saat dijalankan. Patch kernel, GoboHide, memungkinkan symlink kompatibilitas disembunyikan dari daftar file (tetapi masih dapat dilalui).

Kontra jawaban lain, Anda tidak perlu mengubah kode kernel: GoboHide murni kosmetik, dan kernel tidak bergantung pada jalur ruang pengguna pada umumnya². GoboLinux memang memiliki sistem init yang dipesan lebih dahulu, tetapi itu juga tidak diperlukan untuk melakukan ini.

Tagline selalu menjadi "sistem file adalah manajer paket", tetapi ada alat manajemen paket yang cukup biasa dalam sistem. Anda dapat melakukan segala sesuatu dengan menggunakan cp, rm, dan ln, meskipun.

Jika Anda ingin menggunakan GoboLinux, Anda dipersilahkan. Saya akan mencatat, bahwa itu adalah tim pengembangan kecil, dan Anda mungkin menemukan bahwa beberapa perangkat lunak yang Anda inginkan tidak dikemas jika tidak ada yang ingin menggunakannya sebelumnya. Kabar baiknya adalah bahwa umumnya cukup mudah untuk membangun program untuk sistem ("resep" standar adalah sekitar tiga baris panjang); berita buruknya adalah kadang-kadang rumit dan tidak menyenangkan, yang akan saya bahas lebih lanjut di bawah ini.

Publikasi

Ada beberapa "publikasi". Saya memberikan presentasi di linux.conf.au 2010 tentang sistem secara keseluruhan yang mencakup semuanya secara umum, yang tersedia dalam video: ogv mp4 (juga di mirror Linux Australia lokal Anda); Saya juga menulis catatan saya menjadi prosa. Ada juga beberapa dokumen yang lebih tua, termasuk yang terkenal " Aku tidak mengerti ", di situs web GoboLinux , yang membahas beberapa keberatan dan masalah. Saya pikir kita semua sedikit kurang gung-ho hari ini, dan saya menduga bahwa rilis di masa depan akan diadopsi /usrsebagai lokasi dasar untuk symlink.


NixOS

NixOS menempatkan setiap program yang diinstal ke dalam direktori sendiri di bawah /nix/store. Direktori-direktori itu bernama sesuatu/nix/store/5rnfzla9kcx4mj5zdc7nlnv8na1najvg-firefox-3.5.4/ - ada hash kriptografi yang mewakili seluruh rangkaian dependensi dan konfigurasi yang mengarah ke program itu. Di dalam direktori itu terdapat semua file yang terkait, dengan lokasi yang lebih atau kurang normal secara lokal.

Ini juga memungkinkan Anda untuk memiliki beberapa versi sekaligus, dan untuk menggunakannya. NixOS memiliki seluruh filosofi yang terkait dengannya dari konfigurasi yang dapat direproduksi: pada dasarnya punya sistem manajemen konfigurasi yang dimasukkan sejak awal. Itu bergantung pada beberapa manipulasi lingkungan untuk menghadirkan dunia yang tepat dari program yang diinstal kepada pengguna.


LFS

Cukup mudah untuk melalui Linux From Scratch dan mengatur hierarki yang Anda inginkan: buat saja direktori dan konfigurasikan semuanya untuk dipasang di tempat yang tepat. Saya sudah melakukannya beberapa kali dalam membangun eksperimen GoboLinux, dan itu tidak jauh lebih sulit daripada LFS biasa. Anda perlu membuat symlink kompatibilitas dalam kasus itu; kalau tidak, ini jauh lebih sulit, tetapi penggunaan union mount yang hati-hati mungkin bisa menghindarinya jika Anda benar-benar menginginkannya.

Saya merasa ada Petunjuk LFS tentang hal itu pada satu titik, tetapi saya tidak bisa menemukannya sekarang.


Tentang Kelayakan

Hal tentang FHS adalah standar, sangat umum, dan secara luas mencerminkan penggunaan yang ada pada saat itu ditulis. Sebagian besar pengguna tidak akan pernah berada pada sistem yang pada dasarnya tidak mengikuti tata letak itu. Hasil dari itu adalah bahwa banyak perangkat lunak memiliki ketergantungan laten padanya yang tidak disadari oleh siapa pun, seringkali sama sekali tidak disengaja.

Dengan semua skrip itu #!/bin/bash? Tidak bagus jika Anda tidak memiliki Bash di sana. Itu sebabnya GoboLinux memiliki semua symlinks kompatibilitas; itu hanya praktis. Banyak perangkat lunak gagal berfungsi baik pada saat membangun atau pada waktu berjalan di bawah tata letak non-standar, dan kemudian memerlukan perbaikan untuk memperbaiki, seringkali cukup intrusively.

Program dasar Autoconf Anda biasanya akan dengan senang hati menginstal sendiri ke mana pun Anda mengatakannya, dan cukup mudah untuk mengotomatiskan proses mengirimkan yang benar --prefix. Sistem build lain tidak selalu begitu baik, baik dengan sengaja memadukan hirarki, atau dengan mengarahkan penulis untuk menulis konfigurasi non-portabel. CMake adalah pelaku utama dalam kategori yang terakhir. Itu berarti bahwa jika Anda ingin hidup di dunia ini, Anda harus siap untuk melakukan banyak pekerjaan fiddly di depan dalam sistem pembangunan orang lain. Ini adalah kerumitan nyata harus secara dinamis menambal file yang dihasilkan selama kompilasi.

Runtime adalah masalah lain lagi. Banyak program memiliki asumsi tentang di mana file mereka sendiri, atau file orang lain, ditemukan relatif terhadap mereka atau benar-benar. Ketika Anda mulai menggunakan symlink untuk menyajikan tampilan yang konsisten, banyak program memiliki bug yang menangani mereka (atau kadang-kadang, perilaku yang bisa dibilang benar yang tidak membantu Anda). Misalnya, alat foobarmungkin berharap untuk menemukan bazexecutable di sebelahnya, atau di ../sbin. Bergantung pada apakah itu membaca symlink atau tidak, itu bisa menjadi dua tempat yang berbeda, dan keduanya tidak benar.

Masalah gabungan adalah /usr/sharedirektori. Ini untuk file bersama, tentu saja, tetapi ketika Anda meletakkan setiap program di awalannya sendiri, mereka tidak lagi benar-benar dibagikan. Itu mengarah ke program yang tidak dapat menemukan ikon standar dan sejenisnya. GoboLinux berurusan dengan ini dengan cara yang sangat jelek: pada saat membangun, $prefix/shareadalah symlink ke $prefix/Shared, dan setelah membangun tautan diarahkan ke sharedirektori global sebagai gantinya. Sekarang menggunakan sandboxing waktu kompilasi dan pergerakan file untuk berurusan dengan share(dan direktori lain), tetapi kesalahan runtime dari membaca tautan masih bisa menjadi masalah.

Suite beberapa program adalah masalah lain. GoboLinux tidak pernah membuat GNOME bekerja sepenuhnya, dan saya tidak percaya NixOS memiliki keduanya, karena saling ketergantungan tata letak begitu terpanggang sehingga hanya sulit untuk menyembuhkan semuanya.

Jadi, ya, itu layak , tetapi:

  • Ada cukup banyak pekerjaan yang terlibat hanya dalam membuat fungsi berfungsi.
  • Beberapa perangkat lunak mungkin tidak pernah berfungsi.
  • Orang-orang akan melihat Anda lucu.

Semua itu mungkin atau mungkin tidak menjadi masalah bagi Anda.


¹ Versi 14.01 digunakan /System/Index, yang memetakan langsung ke /usr. Saya menduga versi yang akan datang dapat menjatuhkan hierarki Tautan / Indeks dan menggunakannya /usrdi seluruh papan.

² Itu memang perlu /bin/shada secara default.

Michael Homer
sumber
1
Jawaban bagus! Apakah sebagian besar pembuat perangkat lunak menerima patch untuk membuatnya bekerja di gobolinux atau memusuhi itu?
Björn Lindqvist
Sebagian besar waktu patch upstream baik-baik saja, tetapi kadang-kadang pengelola bisa sedikit bertengkar tentang mengandalkan FHS. Saya juga ingat pengelola KDE bersikeras bahwa menyalin symlink ke file templat yang tidak dapat dimodifikasi alih-alih mendereferensi untuk menyalin file itu dengan desain. Banyak tambalan berasal dari satu jalur hard-coded ke yang lain, daripada perbaikan yang tepat, jadi mereka tidak layak dikirim ke hulu.
Michael Homer
Jadi, jika Anda menemukan dan mendanai (dalam waktu atau uang) pembuatan / forking / patching dari semua perangkat lunak yang Anda inginkan / butuhkan, (eh, seperti Apple / Microsoft lakukan / tampaknya dilakukan), maka emas Anda? Seperti itulah kedengarannya bagi saya. Saya terlalu tertarik pada inovasi pemecah norma yang tidak memusuhi radikal desktop seperti ini.
ThorSummoner
2
@ Tumormoner: Sebagian besar distribusi menambal semua perangkat lunak mereka; bahwa "pendanaan" sudah menjadi kenyataan. Tambalan itu adalah campuran fungsional dan, ya, perubahan jalur agar sesuai dengan kekhasan distribusi. Tentu saja, sebagai pengguna akhir, Anda tidak benar-benar memperhatikannya, tetapi ada di sana - ada banyak tenaga kerja di balik distribusi yang mudah diterima begitu saja. Pada umumnya Anda tidak perlu menambal sesuatu - hanya 13% dari resep GoboLinux melibatkan segala jenis tambalan sama sekali, misalnya, yang sebenarnya lebih rendah daripada, katakanlah, Debian - meskipun ini merupakan jenis tambalan yang mengganggu untuk dilakukan ketika itu Dibutuhkan.
Michael Homer
6

Kedua GoboLinux (yang disebutkan F.sb) dan GNU Guix adalah distribusi yang menggunakan struktur direktori per-paket bersama dengan symlink ke titik ke versi "saat ini" dari biner.

GoboLinux tampaknya menjadi taruhan yang lebih baik jika Anda menginginkan sistem yang stabil. GNU guix secara eksplisit mengatakan itu belum siap produksi. GoboLinux telah ada selama bertahun-tahun. Saya sendiri belum pernah mencoba.

cjm
sumber
5

Periksalah GoboLinux .

Jika Anda ingin struktur direktori diubah, Anda harus mengubah beberapa kode kernel, proses boot, runlevel direktori berdasarkan file rc, dan manajer paket, kemudian struktur direktori.

F.sb
sumber
5

Linux FHS didasarkan pada apa yang diputuskan Sun dan perusahaan UNIX lainnya pada akhir 1980-an.

Perubahan penting pada waktu itu adalah meninggalkan /usr/local/dan memperkenalkan /opt// { bin! lib! man! ...}

Jika Anda mencari alasan mengapa / usr / bin hari ini digunakan sebagai tempat pembuangan, saya percaya bahwa GNOME adalah salah satu proyek yang paling bertanggung jawab.

Apa yang terjadi dengan perpustakaan 32 bit vs 64 bit tampaknya disebabkan oleh FHS.

Solaris memperkenalkan subdirektori khusus platform di /lib /usr/bindan /usr/lib. Apakah keinginan Anda adalah bagaimana Sun meningkatkan konsep dasar dari tahun 1988.

schily
sumber
Saya tidak mengerti maksud Anda dengan mengatakan "abandon / usr / local". FHS secara khusus menyebutkan / usr / lokal dan / opt .
CVn
2
FHS asli yang dikembangkan oleh Sun, HP, IBM, AT&T, SGI tentu saja menghapus / usr / lokal yang tidak sistematis. Saya tidak tahu mengapa orang-orang Linux memperkenalkan kembali kesalahan itu.
schily
2
"Apakah keinginanmu adalah bagaimana Sun meningkatkan konsep dasar dari tahun 1988." Saya tidak mengerti kalimat ini.
Faheem Mitha
4

Jika setiap paket memiliki bagiannya sendiri dari sistem file, Anda perlu variabel lingkungan yang sangat besar dan sulit digunakan PATH, LD_LIBRARY_PATHdan sejenisnya.

Anda tentu saja dapat menginstal paket sendiri dengan cara ini, dan kemudian menggunakan sesuatu seperti Modul GNU untuk mengelola apakah mereka ada di lingkungan Anda atau tidak, dan ini adalah apa yang kami lakukan untuk perangkat lunak ilmiah tempat saya bekerja, tetapi kami tidak melakukannya untuk perangkat lunak sistem.

Tim Cutts
sumber