最初に、利益相反の免責条項:私は長年GoboLinux開発者です。
第二に、ドメインの専門知識の先行請求:私は長年GoboLinux開発者です。
現在使用されている構造はいくつかあります。GoboLinuxには1つがあり、GNU StowやHomebrewなどのツールは非常によく似たものを使用します(主にユーザープログラム用)。NixOSは、プログラムおよび生活哲学に非標準の階層も使用します。これは、かなり一般的なLFS実験でもあります。
これらのすべてを説明し、それが実際にどのように機能するかについての経験からコメントします(「実現可能性」)。簡単な答えは、はい、それは実行可能ですが、本当にそれを望んでいるということです。
GoboLinux
GoboLinuxの構造は、説明したものと非常によく似ています。ソフトウェアは、下にインストールされて/Programs
:/Programs/ZSH/5.0.8
通常では、ZSH 5.0.8に属するすべてのファイルが含まれていますbin
/ lib
/ ...ディレクトリ。システムツールは、/System/Links
階層にあるこれらのファイルへのシンボリックリンクを作成し、/usr
¹にマッピングします。PATH
変数は、単一の統合された実行ファイルのディレクトリが含まれており、LD_LIBRARY_PATH
未使用です。ソフトウェアの複数のバージョンが同時に共存できますが、一度にbin/zsh
アクティブにリンクされるのは、特定の名前()の1つのファイルのみです。他のユーザーはフルパスでアクセスできます。
互換性のあるシンボリックリンクのセットも存在するため、統合された実行可能ファイルのディレクトリ/bin
などに/usr/bin
マップされます。これにより、実行時にソフトウェアの作業が楽になります。カーネルパッチGoboHideを使用すると、これらの互換性のあるシンボリックリンクをファイルリストから隠すことができます(ただし、トラバーサルは可能です)。
コントラ別の答え、あなたはしていないカーネルのコードを変更する必要があります。GoboHideは、純粋に化粧品であり、カーネルはgeneral²でユーザ空間のパスに依存しません。GoboLinuxには、特注のinitシステムがありますが、これを行うために必須ではありません。
キャッチフレーズは常に「ファイルシステムがパッケージマネージャー」でしたが、システムにはかなり普通のパッケージ管理ツールがあります。あなたは使用してすべてを行うことができcp
、rm
およびln
、しかし。
GoboLinuxを使用する場合は、大歓迎です。ただし、小規模な開発チームであり、以前に使用したい人がいなければ、必要なソフトウェアがパッケージ化されていないことに気付くでしょう。幸いなことに、システム用のプログラムを作成するのは一般にかなり簡単です(標準の「レシピ」は約3行の長さです)。悪いニュースは、不快なほど複雑な場合があることです。これについては、以下で詳しく説明します。
刊行物
いくつかの「出版物」があります。私はでプレゼンテーションを行いましたlinux.conf.au 2010ビデオで利用可能で、一般的に全体そのカバーのすべて、などのシステム上:OGV 、MP4(また、あなたの地元のLinuxオーストラリアミラー上)。私もメモを散文に書きました。GoboLinuxのWebサイトには、いくつかの異論や問題に対処する有名な「私は無知ではありません」など、いくつかの古いドキュメントもあります。最近、私たちは少しばかりガンホーになっていると思いますし、将来のリリースではシンボリックリンクのベースロケーションとして採用されると思います。/usr
NixOS
NixOSは、インストールされた各プログラムをの下の独自のディレクトリに配置し/nix/store
ます。これらのディレクトリには、次のような名前が付けられ/nix/store/5rnfzla9kcx4mj5zdc7nlnv8na1najvg-firefox-3.5.4/
ています。そのプログラムにつながる依存関係と構成のセット全体を表す暗号化ハッシュがあります。そのディレクトリ内には、関連付けられたすべてのファイルがあり、ローカルのほぼ通常の場所にあります。
また、一度に複数のバージョンを使用して、それらのいずれかを使用することもできます。NixOSには、再現可能な設定という哲学があります。基本的に、最初から設定管理システムが組み込まれています。インストールされたプログラムの正しい世界をユーザーに提示するために、何らかの環境操作に依存しています。
LFS
Linux From Scratchを使用して、必要な階層を正確にセットアップするのはかなり簡単です。ディレクトリを作成し、適切な場所にインストールするようにすべてを構成するだけです。GoboLinuxの実験を構築する際に何度かやってみましたが、それは単純なLFSよりもそれほど難しくありません。その場合、互換性シンボリックリンクを作成する必要があります。それ以外の場合はかなり難しくなりますが、ユニオンマウントを慎重に使用すると、本当に必要な場合はおそらく回避できます。
ある時点でそれについてのLFSヒントがあったように感じますが、今は見つけることができません。
実現可能性について
FHSについてのことは、それが標準であり、非常に一般的であり、書かれた時点での既存の使用法を広く反映しているということです。ほとんどのユーザーは、本質的にそのレイアウトに従わないシステムを使用することはありません。その結果、多くのソフトウェアには潜在的な依存関係があり、誰も気付かないこともあります。
これらのスクリプトはすべて#!/bin/bash
?そこにBashがないとダメです。GoboLinuxにこれらすべての互換性シンボリックリンクがあるのはそのためです。実用的です。多くのソフトウェアは、ビルド時または非標準レイアウトでの実行時に機能しなくなり、修正するためにパッチを必要とします。
通常、基本的なAutoconfプログラムは、ユーザーが指定した場所に自動的にインストールします--prefix
。正しいを渡すプロセスを自動化するのはかなり簡単です。他のビルドシステムは、意図的に階層をベイク処理したり、作成者が移植性のない構成を記述したりすることで、必ずしも優れているとは限りません。CMakeは、後者のカテゴリの主要な犯罪者です。つまり、この世界に住みたいのであれば、他の人のビルドシステムで多くの面倒な作業を事前に準備する必要があります。コンパイル中に生成されたファイルに動的にパッチを適用するのは本当に面倒です。
ランタイムはまた別の問題です。多くのプログラムは、自分のファイルまたは他の人のファイルがどこにあるのか、それらに関連するのか、絶対に見つかるのかについての仮定を持っています。一貫性のあるビューを表示するためにシンボリックリンクを使用し始めると、多くのプログラムがそれらを処理するバグを抱えています(または、おそらく、あなたにとって役に立たない間違いなく正しい動作)。たとえば、ツールfoobar
は、そのbaz
隣またはで実行可能ファイルを見つけることを期待する場合があり../sbin
ます。シンボリックリンクを読み取るかどうかに応じて、それらは2つの異なる場所になる可能性があり、どちらも正しいとは限りません。
組み合わされた問題は/usr/share
ディレクトリです。もちろん、共有ファイル用ですが、すべてのプログラムを独自のプレフィックスに入れると、実際には共有されなくなります。それは、標準のアイコンなどを見つけることができないプログラムにつながります。GoboLinuxはこれをかなりい方法で処理しました。ビルド時に$prefix/share
は、へのシンボリックリンク$prefix/Shared
であり、ビルド後にはリンクがグローバルshare
ディレクトリを指していました。コンパイル時のサンドボックスとファイルの移動を使用してshare
(および他のディレクトリ)を処理するようになりましたが、リンクの読み取りによる実行時エラーが問題になる可能性があります。
複数のプログラムのスイートは別の問題です。GoboLinuxがGNOMEを完全に機能させることは一度もありません。また、レイアウトの相互依存性が非常にベーキングされているため、すべてを修復するのは手に負えないため、NixOSも機能するとは考えていません。
そう、はい、それは実行可能ですが、:
- 物事を機能させるだけでは、かなりの作業が必要になります。
- 一部のソフトウェアは動作しない可能性があります。
- 人々はあなたを面白く見ます。
これらはすべて問題になる場合もあれば、そうでない場合もあります。
¹バージョン14.01は/System/Index
、に直接マッピングします/usr
。将来のバージョンではリンク/インデックス階層が削除され、/usr
全面的に使用される可能性があります。
² /bin/sh
デフォルトで存在する必要があります。