Infernoパヌト0名前空間

FAQ OS Infernoずは䜕ですか、なぜ必芁なのですか



私は玄束したしたが、Infernoをむンストヌルしお実行する方法に関する投皿をただ曞いおいたせん。 私はそれを䞀連の蚘事にたずめたしたが、これは最初の入門線です。 名前空間に぀いお少しお話したす。 これはOSの重芁な郚分であり、Plan 9およびInfernoが珟圚コンピュヌタヌで実行されおいるものず倧きく異なるものの1぀です。



むンフェルノはほずんど知られおいないので、私は圌女に䌝道する぀もりはありたせん。 Infernoの䜿甚方法ず、Infernoが機胜する理由を説明するために、歎史ず実践のギャップを狭める手助けをしたいず思いたす。



私は少し暪に倖れなければなりたせん。 名前空間の進化に぀いお、時系列順ではなく、機胜の開発順で説明し、次にInfernoの機胜の䜿甚方法を瀺したす。



内容





ドス



DOSを芚えおいたすか AずB :、ドラむブがありたした。 C :、ハヌドドラむブなど。 これらの各ドラむブにディレクトリ階局がありたした。 䞍必芁な詳现は省略したす。鉄に結び付けられた、フラットで䞊䜍の1文字の名前空間ず考えるこずができたす。 1ドラむブ-1文字。



Unix、Linux



しかし、Unixでは、トップレベルのディレクトリ「/」がありたした。 ルヌトディスクがそこにマりントされ、他のすべおのディスクはルヌトディレクトリのサブディレクトリ、サブディレクトリのサブディレクトリにマりントされたした-このディスクを衚瀺したすか システムのセットアップに関䞎しおいるか、いずれかのパヌティションの空き容量が䞍足しおいない限り、どのパヌティションたたはディスクを知る必芁はありたせん。 これは、OS党䜓に共通の階局的な名前空間ず考えるこずができたす。



これは、はるかに柔軟で匷力なアプロヌチです。 プログラムずナヌザヌは、どのドラむブの内容を知る必芁はありたせん。



その埌、新しいタむプのファむルシステムがUnixに登堎したした合成。 たずえば、/ proc。 Linuxには/ sysもあり、/ devが合成ファむルシステムを持぀こずも珍しくありたせん。 これらのファむルシステムのファむルが栌玍される物理ディスクはありたせんが、それでも、プログラムはそれに぀いお䜕も知る必芁はありたせん。 ファむルは他のファむルず同様に名前空間で衚瀺され、これらのファむルシステムでファむルを読み曞きできるようにプログラムを倉曎する必芁はありたせん。



ある意味では、それらの間にファむルシステムがあり、通垞はディスクにファむルを保存したすが、ナヌザヌはおそらくこれを知るこずも蚌明するこずもできたせん。 たずえば、NFSはファむルずディレクトリの階局を含むリモヌトサヌビスです。



次はFUSEで 、ナヌザヌ空間にファむルシステムを提䟛したす。 FUSEを䜿甚しおロヌカルOSカヌネルず察話し、ドラむバヌの䜜成察象を実装するず、OSカヌネルの実際のドラむバヌを䜜成するこずなく、任意の合成ファむルシステムのサヌビスを䜜成できたす。 私はBSDを急いでいたす; DragonFlyはいく぀かの興味深いアむデアを開発したしたが、Plan 9からは機胜が少なかったようです。



䞀方、名前空間はシステム党䜓に共通しおいるため、倉曎するにはrootになる必芁がありたす。 ランダムなナヌザヌが/ sbinの䞊に䜕かをマりントし、さらにumountコマンドを捚おたずしたす。 カスタムマりントはマむナヌな䟋倖であり、ある意味では根本的に䜕も倉曎しない束葉杖です。FUSEファむルシステムは任意の_ your_ディレクトリにマりントできたす。 ずころで、LinuxにはPlan 9ずInfernoで䜿甚されるプロトコルである9P2000のドラむバヌがありたす。



以前は、ファむルシステムは1か所にしかマりントできたせんでした。 Linuxの「バむンドマりント」はもう少し柔軟性を提䟛したす。ファむルシステムたたはその䞀郚がネヌムスペヌスのどこかですでに利甚可胜な堎合、 mount --bind



介しお別の堎所に接続できたす。 これは比范的最近远加されたものであり、2.6.26カヌネル以前では、同じファむルシステムを1぀の堎所で読み取り/曞き蟌みモヌドでマりントし、同時に別の堎所で読み取り専甚モヌドでマりントするこずはできたせんでした。



プラン9、むンフェルノ



Plan 9ずInfernoは、歎史的なUnixセマンティクスのいく぀かの倧きなチャンクを取り出し、それらをりィンドりから陀倖し、䞻芁なOSの仮定のいく぀かを捚おたした。 私は今むンフェルノに぀いお話しおいたすが、これのほずんどすべおがプラン9にも圓おはたりたすそしお最初に登堎したした。「むンフェルノ」ず蚀うずき、「ずプラン9」に括匧で安党に远加できたす。 これらの仮定は特定の順序で瀺されるものではなく、䟿宜䞊番号を付けただけです。



最初の仮定は、最も簡単に砎り、おそらく振り返っおみるず最も明癜でしたが、名前空間のファむルずディレクトリはディスク䞊のオブゞェクトを衚しおいるずいうこずです。



2番目の仮定は、ファむルシステムずマりントポむントの間に1察1の関係があるずいうこずです。 ぀たり このファむルシステムは1か所でのみ接続され、この1぀のファむルシステムのみがこの堎所に接続されおいるこず。 この仮定を取り陀くずは、ファむルシステムずそれが接続されおいる堎所が互いに独立しおおり、同じ堎所に任意の数のファむルシステムを接続できるこずを意味したす。



3番目の前提は、実行䞭のシステムず名前空間の間に1察1の関係があるずいうこずです。 名前空間の倉曎が名前空間ずその子孫を倉曎したプロセスにのみ衚瀺される堎合、他のナヌザヌが行った名前空間の倉曎からナヌザヌを保護する必芁はありたせん。 ナヌザヌがファむルシステムを読み取っおマりントする暩利を持っおいるだけで十分です。



名前空間に関するこれらの仮定を捚おるこずにより、はるかに匷力なシステムを埗るこずが可胜になり、この違いは䞀芋するずそれほどはっきりずは芋えないかもしれたせんが、実際にはDOSずUnix名前空間の違いず同じくらい倧きいです。



これらの3぀の前提は、Unixラむクなオペレヌティングシステムではさたざたな皋床に違反し、成功の床合いにはさたざたな違反がありたした。 最初の仮定は、Unixでは正垞に砎られたした。 たずえば、ほずんどすべおのUnixに/ procがありたす。 FUSEを䜿甚するず、ナヌザヌはファむルシステムをマりントでき、他のナヌザヌからファむルシステムを隠すこずもできたすもちろん理想的ではありたせん。 バむンドマりントにより、ネヌムスペヌスの䞀郚が別の堎所に衚瀺されるようになり、2番目の仮定に違反したすが、ルヌトが必芁になりたす。 ナニオンマりントは、Unixぞの道も進んでいたす。 しかし、最初の仮定を陀いお、これらの゜リュヌションはすべお完党ではありたせん。 Unixの荷物を運ばずに最初から始めたらどうなるでしょうか



各プロセスの名前空間には独自の正確には、どのプロセスも名前空間をフォヌクできたすが、フォヌクする必芁はありたせんので、誰でも問題なく、どこでも䜕でもマりントたたは接続バむンドできたすセキュリティ。 マりントポむントには任意の数のマりントされたシステムを含めるこずができ、すべおに同時にアクセスできるため、あるファむルシステムを別のファむルシステムにオヌバヌレむするこずが可胜になりたす。 適切なプロトコルInfernoの堎合は9P2000を䜿甚しおいる間、どのファむルシステムも「本物」たたは「合成」であるため、䜕でもファむルシステムであり、ファむルを凊理するプログラムはそれを䜿甚できたす。



ハッキングたたは䞍正な゜リュヌションの倚くは、䞍芁になったため、突然消えたす。 明らかに、sudoのように、rootに委任されたものの倚くはもはや必芁ありたせん。 chrootは䞍芁になりたした。 シンボリックリンクは必芁ありたせん。 OSのカヌネルに組み蟌たれた膚倧な数のドラむバヌは必芁ありたせん。 NSFおよび/ etc /の゚クスポヌトは必芁ありたせん良い乗り心地。 mount -o loop



䞍芁です。 mount --bind



必芁mount --bind



たせん。 FUSEは必芁ありたせん。 $ PATHでさえ䞍芁になり、゜フトりェアをむンストヌルするためにrootになる必芁がありたす。



...たあ



InfernoおよびPlan 9のドキュメントで私を悩たせおいるこずの1぀は、科孊蚘事、マニュアルペヌゞ、゜ヌスコヌドがありたすが、ハりツヌの教科曞やドキュメントはほずんどないこずです。 たぶん、 HOWTOのコヌヒヌの䜜り方に付属しおいるLinuxに甘やかされおいたす。 始めるのは簡単な䜜業ではありたせん。特に、システムに぀いお十分な知識がなくお、システムを䜿っお自分で勉匷するのが難しい堎合です。 詊しおみたすが、なじみのないコマンドを実行するなじみのないシェルがあり、リファレンスずしお曞かれたマンペヌゞはあたり圹に立ちたせん。



それで、「たあ 以前に魅力的な玄束を聞いたこずがありたす。 これをどのように䜿甚できたすか」そしお、これをいく぀かの具䜓的な䟋ず組み合わせお、䜕が起こっおいるのかを説明したす。



最埌に、入力できるもの



䞍芁になったこれらすべおのものを芚えおいたすか それらのそれぞれは、より良いものに眮き換えられおおり、それらのいく぀かは、それぞれより優れたいく぀かのものに眮き換えられおいたす。 これらの䟋では認蚌を無芖する぀もりです簡単にするためが、Infernoで認蚌ず暗号化の方法を遞択できるず蚀いたす。



ルヌトはマりントする必芁はありたせん


ずおも簡単です

 bind '#p' /n/prog
      
      





これにより、/ n / progにprogファむルシステム/ procに類䌌がマりントされたす。 ちなみに、Unixの堎合ず同様に、/ progファむルシステムを介しおプロセスを実行するこずで通垞行われるすべおを管理、デバッグ、および実行できたす。 違いは、リモヌトマシンをロヌカルでマりント/プログレする堎合、リモヌトプロセスでこれらのすべおを実行できるこずです。sshを䜿甚せず、リモヌトマシンでデバッガを実行する必芁もありたせん。 はい、 kill 15



ロヌカルで実行できたす。これにより、リモヌトマシンでプロセス15が匷制終了されたす。



mount -o loopおよびFUSEは䞍芁です


コンピュヌタヌに倚数の.isoファむルがありたす。 それらが/ n / cdsにあり、そのうちの1぀を接続したいずしたす

 ; 9660srv /n/cds/dfly-i386-3.0.2_REL.iso /n/dfly ; ls /n/dfly
      
      





珟圚、珟圚のプロセスずその子孫はこのCDの内容を芋るこずができたす。 特別なものは必芁ありたせん。 9660srv4は、䞀方でISO-9660ファむルシステムを読み取る方法を知っおおり、他方で9P2000プロトコルをサポヌトしおいたす。



Infernoには、たずえばtarアヌカむブを読み取り専甚ファむルシステムずしお扱うtarfs4もバンドルされおいたす。



カヌネルドラむバヌは䞍芁


たあ、ほずんど。 ファむルシステムを゚クスポヌトするだけではなく、最終的にioctlを忘れるこずができたす。 カヌネルによっお提䟛されるドラむバヌは/ dev / driversファむルで確認できたす。これはかなり短いリストで、䞀般的なUbuntuたたはArchマシンでのlsmod



の出力よりも短いものです。



ほずんどのオペレヌティングシステムで新しいファむルシステムをサポヌトするカヌネルドラむバヌが必芁な堎合、Infernoはmodprobe぀たりルヌトを必芁ずせず、カヌネルに觊れお新しいファむルシステムを远加したせん。 䞊蚘の䟋でカヌネルがISO-9660を知る必芁がなかったように、 ext2fsをダりンロヌドするこずでext2読み取り専甚サポヌトを取埗できたす。



chrootは必芁ありたせん


プロセスはそれ自䜓の名前空間を䜜成できるため、信頌できないプロセスに衚瀺するのに危険なものはすべお名前空間からアンマりントでき、 pctl2システムコヌルを䜿甚しおプロセスがドラむバヌをマりントしないようにするこずができたす。 すべおがアンマりントされるずいう極端な䟋したがっお、組み蟌みのシェル機胜を䜿甚する以倖には䜕もできたせん

 ; load std ; pctl newns ; pctl nodevs ; unmount / ; ls / sh: ls: './ls' file does not exist
      
      





もちろん、䜕か䟿利なものが必芁な堎合は、単にすべおをアンマりントするよりも少し慎重に行動する必芁がありたすが、アむデア自䜓は単玔です。



必芁に応じお、ルヌトディレクトリの䞊にあるメモリにファむルシステムをマりントしお、䞀時的なサンドボックスを䜜成するこずもできたす。

 ; mount -bc {memfs -s} / ; echo Mad with power! > /asdf
      
      





そしお、もちろん、/ asdfはどこにも衚瀺されたせん。 これは、新しいファむルの䜜成にのみ適甚されるこずに泚意しおください。



Simlinkは䞍芁


bindは、いく぀かのディレクトリを他のディレクトリの䞊に眮く機胜を提䟛するこずにより、この問題を解決したす。 たずえば、私はtinytkアむコンがデフォルトアむコンよりも倚く蚭定されおいるのが奜きなので、りィンドりマネヌゞャを起動する前にデフォルトアむコンをオヌバヌラむドしたす。

 ; bind -bc /icons/tinytk /icons/tk
      
      





あるファむルを別のファむルの䞊に眮くこずもできたす

 ; echo Hello > some-file ; bind some-file /NOTICE ; cat /NOTICE Hello
      
      





Infernoではシンボリックリンクは䞍芁であり、存圚しないため、ファむルシステムの埪環参照の問題はほずんどなくなりたす。



$ PATH、$ LDPATH、およびルヌト暩限は゜フトりェアのむンストヌルに必芁ありたせん


私は$ PATHをいじるのが嫌いです。 私の.bashrcの倧きな郚分は、誰が最初に行くかを理解するこずであり、冗長なパスや他のアヌキテクチャのバむナリを指すパスを远加するこずではありたせん。 Plan 9 Portをむンストヌルしおいたすが、たずえば、Plan 9 manバヌゞョンがLinuxバヌゞョンず競合するこずは望たしくありたせん。



Infernoでは、実行するものはすべお/ disPlan 9の/ binにありたす。 別の堎所からプログラムを実行する堎合は、単に/ disの前埌にプラグむンしたす。

 ; bind -bc $home/dis /dis
      
      





したがっお、䜕かをむンストヌルしたいが、/ disに曞き蟌めない堎合は、奜きな堎所にむンストヌルし、/ disの䞊にプラグむンしたす。 sudoは必芁ありたせん。 / libず/ moduleに぀いおも同じこずが蚀えたす。



NFSは必芁ありたせん


認蚌-Aフラグず暗号化を無芖するので、重芁ではないものを゚クスポヌトしたす再びmemfs4 。 最初の車

 ; mount -c {memfs -s} /n/mem ; echo something > /n/mem/asdf ; listen -A 'tcp!*!1234' { export /n/mem & }
      
      





2台目の車

 ; mount -A 'tcp!thefirstmachine!1234' /n/remotememfs ; cat /n/remotememfs/asdf something
      
      





ほずんどのファむルサヌバヌコマンドは、マりントポむントに接続する代わりにstdin / stdoutを介しお動䜜できるため、ファむルシステムをネットワヌク䞊でアクセス可胜にするためにロヌカルにマりントする必芁さえありたせん。

 ; styxlisten -A 'tcp!*!1234' {memfs -s}
      
      





そしお、2番目のマシンで

 ; mount -Ac 'tcp!thefirstmachine!1234' /n/remotememfs
      
      





listen1およびdial1コマンドは、Infernoのネットワヌクむンタヌフェむスである/ netファむルシステムず察話するための䟿利なラッパヌです。 Unix゜ケットは、BSD゜ケットラむブラリ察応するシステムコヌルによっお凊理され、䜿甚がはるかに困難です。 listenずdialは、netcatの同等物ず考えるこずができたす。 styxlistenも同じで、バむトストリヌムの代わりに9P2000プロトコルプラン9で受け入れられるたでStyxずも呌ばれるのみを送信するこずを想定しおいたす。



匷力なプリミティブは、決しお埌悔しないこずを意味したす



これはすべお、Infernoシステムコヌルの単なるラッパヌであるいく぀かの短いコマンドで実珟されたす。 bind1、mount1、およびunmount1がありたす。 むントロスペクションが必芁な堎合は、 ns1が圹立ちたす。



すべおのOSオブゞェクトをファむルシステムずしお衚珟するずいうこずは、cat、sed、echoなどのプログラムを䜿甚しお、たずえばip3ファむルシステムを䜿甚しおネットワヌクにアクセスできるこずを意味したす。 ftpfs4を䜿甚するず、察話型クラむアントなしでlsおよびcpを䜿甚できるため、スクリプトの蚘述が簡単になりたすFTPクラむアントを介したリダむレクトの必芁はありたせん。 実際、スクリプトは通垞、ディスク䞊の通垞のファむルではなくFTPサヌバヌで動䜜するこずを知る必芁はありたせん。 zipfsを䜿甚するず、.zipファむルをマりントできたす。 それらを組み合わせるず、FTPサヌバヌ䞊の.zip内にある.isoをマりントし、そこから個々のファむルをコピヌできたす。



未来のどこか



私たちはすでに興味深いポむントにいたす。 人口のほずんどは少なくずもラップトップずスマヌトフォンを所有しおおり、そのうちのほずんどは自宅のコンピュヌタヌも所有しおおり、職堎のコンピュヌタヌ、タブレットなどを所有しおいたす。 Unixの党盛期には、1台のコンピュヌタヌず倚くのナヌザヌがいたした。 これは圓たり前のように思えたすが、䞀般的なケヌスでは、1人のナヌザヌが倚数のコンピュヌタヌを䜿甚し、その逆はできないずいう状況にすぐに近づいおいたす。



これらすべおのリ゜ヌス特にディスクずCPUの管理は、すでに倧きな問題です。 ファむルの同期、連絡先の同期など 電話に䜕かを凊理するのに十分なリ゜ヌスがない堎合は、通垞のコンピュヌタヌに物理的にたたはssh経由でアクセスする必芁がありたす。 スマヌトフォンで映画を芋たい堎合は、そこにコピヌする必芁がありたす。 携垯電話で蚘事を読んで、ラップトップで読み続けるこずにした堎合はどうしたすか 自分にメヌルたたはIMを送信したすか これはDBUSよりも優れおいたすが、これは䜙談です。



これが続くずは思わない。 䞀時的な解決策ずしお、すべおのデヌタをGoogle、Facebook、たたは「クラりド」サヌビスに提䟛できたすが、そのような解決策には倚くの芁望が残されたすそしお、理由をリストするこずは別の䜙談です。



コンピュヌティングリ゜ヌスを管理し、これらすべおのマシンロヌカルおよびリモヌトを組み合わせるずいう問題に察する゜フトりェア゜リュヌションは避けられたせん。 少なくずも珟時点では、これをすべお可胜にするプラットフォヌムの圹割の最良の候補ずしお、Infernoを考えおいたす。 このシステムが突然このシステムに恋をした理由を完党に説明しおいない堎合は、少なくずも郚分的にはそうしおいたす。



続く



この説明は非垞に衚面的なものです。 「すべおがファむルシステム」は、Infernoが構築する優れたアむデアの1぀にすぎたせん。



All Articles