FHS'nin alternatifleri nelerdir?


32

15 yıldan fazla zamandır Linux kullanıcısıyım ama tutkuyla nefret ettiğim tek şey zorunlu dizin yapısı. Böyle bilmiyorum /usr/binçiftlerin veya kütüphanelerini için çöplük olduğunu /usr/lib, /usr/lib32, /usr/libx32, /lib, /lib32vb ... Random şeyler /usr/sharevb dilsiz ve kafa karıştırıcı bu. Ama bazıları hoşuna gidiyor ve zevkleri farklı.

Her paketin izole edildiği bir dizin yapısı istiyorum. Bunun yerine, medya oynatıcı ejderinin kendine ait bir yapısı olup olmadığını düşünün:

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

Veya:

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

Sen anladın. Seçeneklerim neler? Programım gibi bir şey kullanan herhangi bir Linux dağıtımı var mı? Bazı dağıtım istediğim gibi çalışacak şekilde değiştirilebilir mi (Gentoo ??) veya LFS'ye ihtiyacım var mı? Bu alanda herhangi bir önceki sanat var mı? Planın uygulanabilir veya uygun olmadığı konusunda yapılan yayınlar gibi mi?

OS X'i aramıyorum. :) Fakat OS X'ten ilham alan tamamen tamam.

Düzenleme : Hiçbir fikrim nasıl var PATH, LD_LIBRARY_PATHve dışarı çalışması gerektiğini yolları küçük bir sette bağlı diğer çevre değişkenleri. Kate'in içinde KDE editörü yüklü ise /software/kate/bin/x86/bin/kate, başlatmak için ikili dosyaya tam yolunu yazmak zorunda kaldığımı düşünüyorum. Dinamik kütüphaneler ve dlopençağrılar için nasıl çalışması gerektiğini bilmiyorum ama çözülemez bir mühendislik sorunu olamaz.


3
Tüm ikili dosyalarınız her yerde gizliyse, arama yolunuz nasıl görünür? Yazılımları başladıktan sonra yüklediğinizde, halihazırda çalışan işlem / oturumlardaki yolu nasıl güncellersiniz? Güvenlik önlemleriniz, ortalama bir kullanıcının karanlık bir şubede bir ikili dosyayı değiştirmeyi nasıl yönetmesini önlemektir? Muhtemelen bir çok makine için ortak bir ağ montajı olan salt okunur bir bölme yapma ve kullanma rahatlığını kesinlikle
yitiriyorsunuz

1
@HagenvonEitzen Ancak (OP'nin adlandırma şemasını ve örneklerini kullanarak), FHS'de /softwaresalt okunur hale getirmenin yararları ve sakıncaları için /usrsalt okunur yapabilirsiniz.
bir CVn

Dinamik kütüphaneler kurulum isimlerini veya RPATH'leri kullanabilir.
asmeurer

1
Sorunuz bana cr.yp.to/slashpackage.html adresini hatırlattı . Yine de bunun alakadar olduğundan emin değilim.
bli

Yanıtlar:


50

İlk olarak, bir ön çıkar çatışması reddi: Ben uzun zamandır GoboLinux geliştiricisiyim.

İkincisi, önceden bir etki alanı uzmanlığı iddiası: Uzun zamandır GoboLinux geliştiricisiyim.

Mevcut kullanımda birkaç farklı yapı vardır. GoboLinux'ta bir tane var ve GNU Stow , Homebrew vb. Araçlar oldukça benzer bir şey kullanıyor (özellikle kullanıcı programları için). NixOS ayrıca programlar ve yaşam felsefesi için standart dışı bir hiyerarşi kullanır. Aynı zamanda oldukça yaygın bir LFS deneyidir.

Bunların hepsini tanımlayacağım ve daha sonra pratikte nasıl çalıştığı ("fizibilite") hakkındaki deneyimlerden yorum yapacağım. Kısa cevap, evet, uygulanabilir olduğu, ancak gerçekten istemelisiniz .


GoboLinux

GoboLinux'un tarif ettiğinize çok benzeyen bir yapısı var. Yazılımın altında /Programs: /Programs/ZSH/5.0.8ZSH 5.0.8'e ait tüm dosyaları normal bin/ lib/ ... dizinlerinde bulunur. Sistem araçları /System/Links, /usr¹ üzerinde eşlenen hiyerarşi altındaki dosyalara sembolik bağlantılar oluşturur . PATHDeğişken sadece tek bir birleşik yürütülebilir dizinini içeren ve LD_LIBRARY_PATHkullanılmaz. Yazılımın birden fazla sürümü aynı anda bir arada bulunabilir, ancak belirli bir isim ( bin/zsh) ile sadece bir dosya bir kerede aktif olarak bağlanacaktır. Diğerlerine tam yollarından erişebilirsiniz.

Uyumluluk sembolik bir dizi de bu yüzden, mevcut /binve /usr/binbenzeri birleşik yürütülebilir dizinine bağlanır ve. Bu çalışma zamanında yazılım için hayatı kolaylaştırır. Bir çekirdek düzeltme eki olan GoboHide, bu uyumluluk semboliklerinin dosya listelerinden gizlenmesini sağlar (ancak yine de geçilebilir).

Contra başka cevap, sen yok GoboHide tamamen kozmetik ve çekirdek general² kullanıcı tarafından uzay yollarında bağlı değildir: çekirdek kodunu değiştirmek gerekir. GoboLinux ısmarlama bir init sistemine sahiptir, ancak bunun için de gerekli değildir.

Tagline her zaman "dosya sistemi paket yöneticisidir" olmuştur, ancak sistemde oldukça sıradan paket yönetimi araçları bulunmaktadır. Sen kullanarak her şeyi yapabilirsiniz cp, rmve lnolsa.

GoboLinux'u kullanmak istiyorsanız, çok açığız. Yine de küçük bir geliştirme ekibi olduğunu ve kimsenin daha önce kullanmak istememesi durumunda, istediğiniz bazı yazılımların paketlenmemiş olduğunu göreceksiniz. İyi haber şu ki, sistem için bir program oluşturmak genellikle oldukça kolaydır (standart bir "tarif" yaklaşık üç satır uzunluğundadır); Kötü haber şu ki, bazen aşağıda daha fazlasını anlatacağım, rahatsız edici derecede karmaşık.

Yayınlar

Birkaç "yayın" var. Linux.conf.au 2010'da genel olarak her şeyi kapsayan ve videoda bulunan bir bütün olarak sistemde bir sunum yaptım : ogv mp4 (ayrıca yerel Linux Avustralya aynanızda ); Ayrıca notlarımı nesire yazdım . Bazı itirazlara ve sorunlara yönelik GoboLinux web sitesinde ünlü " Ben clueless değilim " de dahil olmak üzere birkaç eski belge vardır . Bugünlerde hepimizin daha az gung-ho olduğunu düşünüyorum ve gelecekteki bir sürümün sembolik bağlantılar için temel konum olarak kabul edileceğinden şüpheleniyorum ./usr


NixOS

NixOS her kurulu programı kendi dizinine koyar /nix/store. Bu dizinlere şunun gibi bir şey isimlendirilmiştir /nix/store/5rnfzla9kcx4mj5zdc7nlnv8na1najvg-firefox-3.5.4/- bu programa giden tüm bağımlılıkları ve konfigürasyon kümesini temsil eden bir şifreleme karma vardır. Bu dizinde, yerel olarak az ya da çok normal konumlara sahip tüm ilişkili dosyalar bulunur.

Aynı zamanda aynı anda birden fazla versiyona sahip olmanıza ve bunlardan herhangi birini kullanmanıza izin verir. NixOS, yeniden üretilebilen konfigürasyonla ilişkili bütün bir felsefeye sahiptir: temelde baştan beri içine yapılandırılmış bir konfigürasyon yönetim sistemi vardır. Yüklü programların doğru dünyasını kullanıcıya sunmak için bazı çevresel manipülasyonlara dayanır.


LFS

Linux üzerinden geçmek oldukça kolay. Scratch From ve tam olarak istediğiniz hiyerarşiyi kurun: sadece dizinleri hazırlayın ve doğru yere kurulacak her şeyi yapılandırın. GoboLinux deneyleri yapmak için bunu birkaç kez yaptım ve normal LFS'den çok daha zor değil. Bu durumda uyumluluk simgelerini yapmanız gerekir; Aksi takdirde, büyük ölçüde daha zordur, ancak sendika bağlantılarının dikkatli kullanılması, gerçekten istemeniz durumunda muhtemelen bundan kaçınabilir.

Bir noktada tam olarak bu konuda bir LFS İpucu olduğunu hissediyorum , ancak şimdi bulamıyorum.


Fizibilite Üzerine

FHS ile ilgili olan şey, bir standart olması, çok yaygın olması ve yazıldığı zaman mevcut kullanımı geniş ölçüde yansıtmasıdır. Çoğu kullanıcı, esasen o düzeni takip etmeyen bir sistemde asla bulunmaz. Bunun sonucu olarak, pek çok yazılımın, genellikle istemeden tamamen kimsenin farketmediği gizli bağımlılıklar vardır.

Bütün o senaryolar #!/bin/bash? Orada Bash yoksa iyi değil. GoboLinux'un bütün bu uyumluluk semboliklerine sahip olmasının nedeni budur; bu sadece pratik. Pek çok yazılım, standart olmayan bir düzen altında derleme zamanında veya çalışma zamanında işlevini yerine getirmiyor ve daha sonra genellikle müdahaleci bir şekilde düzeltmek için düzeltme eki gerekiyor.

Temel Autoconf programınız, genellikle nerede söylediğiniz yere kendini mutlu bir şekilde kurar ve doğru geçiş sürecini otomatikleştirmek oldukça kolaydır --prefix. Diğer yapı sistemleri, kasıtlı olarak hiyerarşi içinde pişirme veya taşınabilir olmayan bir yapılandırma yazmak için önde gelen yazarlar tarafından her zaman çok hoş değildir. CMake, ikinci kategoride önemli bir suçlu. Bunun anlamı, eğer bu dünyada yaşamak istiyorsanız, başkalarının yapılı sistemlerinde çok fazla titizlikle çalışmak için hazırlıklı olmanız gerektiğidir. Derleme sırasında oluşturulan dosyaları dinamik olarak yamalamak zorunda kalmak çok zordur.

Çalışma zamanı yine başka bir konudur. Birçok programda, kendi dosyalarının veya bir başkasının dosyalarının, kendilerine göre veya kesinlikle nerede bulundukları konusunda varsayımlar vardır. Tutarlı bir görünüm sunmak için sembolik bağları kullanmaya başladığınızda, birçok program bunları ele alan hatalara sahiptir (veya bazen sizin için yararsız olabilecek doğru davranışlar olabilir). Örneğin, bir araç yanında veya içinde yürütülebilir dosyayı foobarbulmayı bekleyebilir . Bağlantısını okuyor olup olmamasına bağlı olarak, bunlar iki farklı yer olabilir ve ikisi de yine doğru olmayabilir.baz../sbin

Kombine bir problem ise /usr/sharedizindir. Tabii ki paylaşılan dosyalar için, ancak her programı kendi ön ekine koyduğunuzda, artık paylaşılmıyorlar. Bu, standart ikonları ve benzerlerini bulamayan programlara götürür. GoboLinux bu konuyu oldukça çirkin bir şekilde ele aldı: inşa sırasında, $prefix/sharebir $prefix/Sharedbağlantı oldu ve bağlantı kurulduktan sonra sharebunun yerine global dizine işaret edildi . Şimdi derleme zamanı sanal alan ve dosya hareketi share(ve diğer dizinleri) ile uğraşmak için kullanır , ancak okuma bağlantılarından kaynaklanan çalışma zamanı hataları yine de bir sorun olabilir.

Birden çok programın süitleri başka bir sorundur. GoboLinux hiçbir zaman GNOME'u tam olarak çalışmadı ve NixOS'un da inandığını sanmıyorum.

Yani, evet, bu uygulanabilir , ancak:

  • Sadece işleri yapmak için çok fazla iş var.
  • Bazı yazılımlar hiçbir zaman çalışmayabilir.
  • İnsanlar sana komik bakacaklar.

Bunların hepsi sizin için sorun olabilir veya olmayabilir.


14 Sürüm 14.01 /System/Index, doğrudan üzerine haritalanan kullanır /usr. Gelecekteki bir sürümün Bağlantılar / Dizin hiyerarşisini bırakabileceğini /usrve pano boyunca kullanabileceğini düşünüyorum .

² /bin/shVarsayılan olarak var olması gerekir .


1
Mükemmel cevap! Yazılım yazarları daha çok gobolinux'da veya düşmanca çalışabilmeleri için yamaları kabul eder mi?
Björn Lindqvist

Zamanla yayılan yamalar çoğunlukla iyi gider, ancak bazen bakımcılar FHS'ye güvenme konusunda biraz güçlendirici olabilir. Ayrıca KDE uzmanlarının, bir dosyayı kopyalamak için değiştirilemez bir şablon dosyasına kopyalamak yerine, dosyayı kopyalamak için tasarım yapmak olduğunu vurgulamakta ısrar ediyorum. Çok fazla düzeltme eki bir kodlanmış yoldan diğerine uygun bir düzeltme yerine başka bir şey değildir, bu yüzden yine de yukarı akış göndermeye değmez.
Michael Homer,

Öyleyse, istediğiniz zaman (veya zaman içinde) istediğiniz / ihtiyaç duyduğunuz tüm yazılımların yaratılması / çatallanması / eklenmesi bulunursa ve fon sağladıysanız (eh hem, Apple / Microsoft'un yaptığı / yaptığı gibi görünüyor), sonra altınınız? Bana öyle geliyor. Ben böyle masaüstüne düşmanca davranan normları kırma yeniliklerle ilgilenmiyorum.
ThorSummoner 9:15

2
@ThorSummoner: Çoğu dağıtım tüm yazılımlarını yoğun bir şekilde yatar; bu "finansman" zaten gerçek. Bu yamalar, dağılımın özelliklerine uygun, işlevsel ve evet, yol değişikliklerinin bir karışımıdır. Tabii ki, bir son kullanıcı olarak, bunu gerçekten fark etmiyorsunuz, ama işte orada - kabul edilmesi kolay olan bir dağıtımın arkasında çok fazla emek var. Genelde bazı şeyleri yamalamak zorunda değilsiniz - GoboLinux tariflerinin sadece% 13'ü, örneğin Debian'dan daha düşük olan, aslında Debian'dan daha düşük olan herhangi bir tür yama içerir. gerekli.
Michael Homer

6

Hem GoboLinux (F.sb'den bahsedilir) hem de GNU guix , bir ikili dizinin "geçerli" versiyonuna işaret etmek için simgelerle birlikte paket başına bir dizin yapısı kullanan dağıtımlardır.

GoboLinux istikrarlı bir sistem istiyorsanız daha iyi bir bahis gibi görünüyor. GNU guix açıkça henüz üretime hazır olmadığını söylüyor. GoboLinux yıllardır buralarda. Ben de kendim denemedim.


5

GoboLinux'u kontrol et .

Eğer dizin yapısının değişmesini istiyorsanız, bazı çekirdek kodlarını, önyükleme işlemini, rc dosyalarını temel alan dizin çalışma seviyelerini ve paket yöneticisini ve ardından dizin yapısını değiştirmelisiniz.


5

Linux FHS, Sun ve diğer UNIX şirketlerinin 1980'lerin sonunda verdikleri kararlara dayanmaktadır.

O zaman önemli bir değişiklik vazgeçmek /usr/local/ve tanıtmaktı /opt// { bin! lib! man! ...}

Bugün / usr / bin'in çöplük olarak kullanılmasının nedenini arıyorsanız, GNOME'un en sorumlu projelerden biri olduğuna inanıyorum.

32 bit ve 64 bit kütüphanelerinde olanlara FHS neden olmuş gibi görünüyor.

Solaris içinde platforma özel alt dizinleri tanıtıldı /lib /usr/binve /usr/lib. Dileğiniz, Sun'ın 1988'den itibaren temel konsepti nasıl geliştirdiğidir.


"Vazgeç / usr / yerel" diyerek ne demek istediğini anlamadım. FHS özellikle / usr / yerel ve / opt seçeneklerinden bahseder .
bir CVn

2
Sun, HP, IBM, AT&T, SGI tarafından geliştirilen orijinal FHS elbette sistematik olmayan ve sorunlu / usr / yerel'i kaldırdı. Linux insanlarının neden bu hatayı tekrar sunduğunu bilmiyorum.
schily

2
“Dileğiniz, Sun’ın 1988’deki temel konsepti nasıl geliştirdiğidir.” Bu cümleyi anlamıyorum.
Faheem Mitha

4

Her paket dosya sisteminin kendi parçasını olsaydı, son derece geniş ve hantal ortam değişkenleri gerekiyordu PATH, LD_LIBRARY_PATHve benzeri.

Elbette bu şekilde paketleri kendiniz kurabilir ve daha sonra ortamınızda olup olmadıklarını yönetmek için GNU Modülleri gibi bir şey kullanabilirsiniz ve çalıştığım bilimsel yazılım için yaptığımız şey budur, ancak bunun için yapmayız. sistem yazılımı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.