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/bin
adalah tempat pembuangan untuk biner atau libs di /usr/lib
, /usr/lib32
, /usr/libx32
, /lib
, /lib32
dll ... hal-hal acak di /usr/share
dll 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_PATH
dan 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/kate
maka saya boleh dengan mengetikkan path lengkap ke biner untuk memulainya. Bagaimana cara kerjanya untuk pustaka dan dlopen
panggilan dinamis , saya tidak tahu tetapi itu tidak bisa menjadi masalah teknik yang tidak dapat diselesaikan.
sumber
/software
read-only saja, untuk manfaat dan kelemahan yang sama seperti membuat/usr
read-only di FHS.Jawaban:
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.8
berisi semua file milik ZSH 5.0.8, di direktoribin
//lib
/ ... biasa . Alat sistem membuat symlink ke file-file tersebut di bawah/System/Links
hierarki, yang memetakan ke/usr
¹. ThePATH
variabel hanya berisi direktori executable tunggal terpadu, danLD_LIBRARY_PATH
tidak 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
/bin
dan/usr/bin
petakan 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
, danln
, 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
/usr
sebagai 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
foobar
mungkin berharap untuk menemukanbaz
executable 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/share
direktori. 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/share
adalah symlink ke$prefix/Shared
, dan setelah membangun tautan diarahkan keshare
direktori global sebagai gantinya. Sekarang menggunakan sandboxing waktu kompilasi dan pergerakan file untuk berurusan denganshare
(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:
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/usr
di seluruh papan.² Itu memang perlu
/bin/sh
ada secara default.sumber
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.
sumber
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.
sumber
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/bin
dan/usr/lib
. Apakah keinginan Anda adalah bagaimana Sun meningkatkan konsep dasar dari tahun 1988.sumber
Jika setiap paket memiliki bagiannya sendiri dari sistem file, Anda perlu variabel lingkungan yang sangat besar dan sulit digunakan
PATH
,LD_LIBRARY_PATH
dan 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.
sumber