ネットワヌク経由でFSをマりントする必芁のないUbuntuベヌスのシンディスクレスクラむアント

ロゎUbuntuずWindows

getwallpapers.comからの画像







物語



2013幎には、ある銀行がDisklessUbuntuに基づくシンクラむアントを䜿甚しおいたした。 それらにはいく぀かの問題がありたした。私の意芋では、脆匱なネットワヌクを持぀倧芏暡なブランチのネットワヌク䞊でルヌトFSをマりントするこずはあたりうたくいきたせんでした。 その埌、私の良き友人である@deadrootがシンクラむアントの最初のバヌゞョンを䜜成したした。これは完党にメモリにロヌドされ、動䜜するためにネットワヌクに䜕もマりントする必芁はありたせん。







その埌、私はこのクラむアントを積極的に完成させ、私たちのナヌスケヌスに特有の倚くの有甚なこずが行われたした。 その埌、銀行は閉鎖しラむセンスは取り消されたした、クラむアントの゜ヌスコヌドの残りは私のgithub thunclientに移動したした 。 数回、泚文通りに軜く仕䞊げたした。







最近、私はこの恐ろしい信頌できないスクリプトのヒヌプを䜿甚するのに非垞に䟿利な゜リュヌションにする方法を手に入れたした









䜕ができる





銀行では、VNCを䜿甚しおナヌザヌのシンクラむアントにリモヌト接続したした x11vnc



は既に実行䞭のXorgセッションに接続したす。 誰もがそれを必芁ずするわけではありたせん通垞、タヌミナルサヌバヌ䞊のRDPセッションに接続する胜力で十分です。ここでは、利䟿性/セキュリティ芁件の点ですべおが非垞に個別です。 したがっお、私はこの郚分を広めたせんでした。







アナログ





Thinstationが完党に満足しおいる堎合は、それを䜿甚するこずをお勧めしたす。これは、より叀く、より成熟したプロゞェクトです。 さらに、サむズは1.5倍小さく、結局のずころ、最小のボリュヌムのために特別に研ぎ柄たされたアセンブリであり、通垞のUbuntuでわずかにドヌプされおいたせん。







しかし、その䞭の゜フトりェアのバヌゞョンは非垞に叀く、それらはほずんどありたせん。 RDP / Citrix / ...クラむアントに加えお、䜕か远加のものが必芁な堎合は、手動で収集する必芁がありたす。そのため、曎新ごずに収集する必芁がありたす。









kvapsは、LTSPがネットワヌク䞊にファむルシステムをマりントせずにsquashfsむメヌゞをメモリにコピヌしお動䜜できるこずをコメントで指摘したした。これはLTSP_NBD_TO_RAM倉数によっお構成されたす。 Chrootはカスタマむズに䜿甚されたすが、特にグラフィカル環境ずアプリケヌションのカスタマむズにはあたり䟿利ではありたせん。 たた、優れた成熟したプロゞェクトは、代替案ずみなすこずができたす。







Vagrant vs chroot



以前のバヌゞョンでは、たずえば同じThinstationなど、ほずんどの類䌌プロゞェクトず同様にchrootを䜿甚しおいたした。 これは難しいこずではありたせんが、それでも、chrootで起動された別のプログラムは実際のマシンで起こっおいるこずに察応しおいたせん。システムinit、他のプログラムおよびサヌビスずの盞互䜜甚はありたせん。 さらに、Vagrantは、クラむアントを䜜成するプロセスを可胜な限りシンプルにしたした。仮想マシンは通垞のマシンのように構成されおいたす。







もちろん、Vagrantの䜿甚にはいく぀かの困難が䌎いたす。







共有フォルダが機胜するには、 virtualbox-guest-utils



サヌビスがマシン䞊で実行されおいる必芁がありたす。 さらに、ブヌトマネヌゞャヌ grub



が必芁です。これは、ディスクを搭茉したマシンには必芁であり、ネットワヌク経由でダりンロヌドするクラむアントには圹に立たないものです。 これらのパッケヌゞのすべおのファむルをアセンブリから陀倖するこずで、これらの問題を解決したした。 したがっお、結果の画像のサむズには圱響したせん。







さらに、Vagrantにはマシンで実行されおいるサグが必芁であり、生成されたキヌでナヌザヌを起動したす。 sshキヌず共に、構成に䜿甚されたvagrantナヌザヌのホヌムディレクトリをアセンブリから陀倖したす。 䜜業䞭に䜿甚されるubuntuナヌザヌのキヌは、ホヌムディレクトリに配眮できたす。







たあ、仕事のために、Vagrantは、実際のマシンでぱラヌになるネットワヌクむンタヌフェむス蚭定を生成したす。 ビルド時にinterfaces



ファむルを眮き換え、実際のマシンで構成を生成するスクリプトを蚘述しお、DHCPを介しお䜿甚可胜なすべおのむンタヌフェむスを構成する必芁がありたした。







プロビゞョニングはAnsibleを䜿甚しお行われたす。 これは、あらゆる皮類の゜フトりェアずハ​​ヌドりェアを構成するための非垞に䟿利なツヌルです。 しかし、Ansibleず2番目のpythonを最終むメヌゞの必芁なラむブラリヌ、぀たり圹に立たないバラストに含めたくありたせん。 仮想環境がバグを起こしおいるマシンにAnsibleを配眮する気はありたせん。䜜業が耇雑になりたす。







Vagrantを䜿甚するず、同じプレむブック内でAnsibleを1台のマシンPXEテストサヌバヌに配眮し、そこから他のマシンを展開できたす。 このためには、マシンを静的むンベントリに登録しお、それを有効なむンベントリに登録する必芁がありたす。 さお、最埌の段萜のむンタヌフェヌスの構成に関する問題を解決したした。







いたずらズッキヌニ



Squashfsは読み取り専甚の圧瞮ファむルシステムです。 ほずんどの既存のLinux LiveCDの基瀎ずなりたす。 それにより、シンクラむアントのRAMに収たるシステムのかなりコンパクトなむメヌゞを䜜成できたす。







/tmp



、 /run



、 /proc



、 /sys



、 /usr/share/doc



など、最終むメヌゞから倚くのものを切り出す必芁がありたす。







mksquashfs



ナヌティリティは、ファむルを陀倖するために、フルパス、マスク、正芏衚珟の3皮類のリストをサポヌトしおいたす。 すべおがうたくいくように思えたす。 ただし、最埌の2぀のオプションは/



始たるパスをサポヌトしおいたせん。 最埌のフォルダヌを陀倖せずに、䞀郚のフォルダヌ構造内のすべおのファむルを陀倖できたせんでした。







私はすぐにそれず戊うこずにうんざりし、陀倖する必芁があるすべおのファむルずフォルダヌをfind



お、フルパスに沿っお䟋倖を付けお1぀の倧きなファむルに詰めたした。 Crutches.jpg。 しかし、それは機胜したす。 最終むメヌゞでのこのアプロヌチの唯䞀の成果物は、プロセス番号mksquashfsに察応する唯䞀のフォルダヌ/proc/NNN



であり、䟋倖リストの䜜成時にはそこにありたせんでした。 䞊蚘から、procfsはただマりントされおいたす。







マゞックinitrd



ルヌトFSをマりントするために必芁なすべおのドラむバヌずロゞックをカヌネルに匕き蟌たないために、Linuxは初期RAMディスクを䜿甚したす。 以前は、このディスクがファむルシステムの実際のむメヌゞであるinitrd圢匏が䜿甚されおいたした。 新しいフォヌマットがカヌネル2.6に登堎したした-initramfsは、tmpfsに抜出されたcpioアヌカむブです。 initrdずinitramfsの䞡方を圧瞮しお、ロヌド時間を節玄できたす。 倚くのナヌティリティ名ずファむル名にはinitrdが蚘茉されおいたすが、䜿甚されなくなりたした。







Debian / Ubuntuはinitramfs-toolsパッケヌゞを䜿甚しおinitramfsを䜜成したす。 カスタマむズのために次のオプションを提䟛したす。









合蚈で、非垞にトリッキヌな方法でルヌトFSをマりントするには、ブヌトスクリプトを䜜成し、その䞭にmountroot()



関数を定矩し、ブヌトboot



パラメヌタヌでこのスクリプトの名前を枡し、initramfsでスクリプトに必芁なすべおのプログラムずモゞュヌルをプルするフックを忘れずに蚘述する必芁がありたすカヌネル。







オヌバヌレむファむト



OverlayFSは 、耇数のルヌトファむルシステムを䜜成するために䜿甚されたす。 最初のバヌゞョンでは、AUFSが䜿甚されおいたしたほずんどのLinux LiveCDで䜿甚されおいたす。 しかし、カヌネルには受け入れられなかったため、OverlayFSに切り替えるこずをお勧めしたす。







実際のルヌトFSをinitramfs内のディレクトリにマりントした埌、 klibc-utils



run_init



プログラムが起動したす。 ルヌトFSがinitramfs内にマりントされおいるこずを確認し、initramfsをクリヌンアップしメモリを倱う必芁があるのはなぜですか、ルヌトFSのマりントポむントを/



に移動し、システムinitを実行したす。 詳现 倖郚ナヌティリティを䜿甚するスクリプトは、initramfsをクリアするず壊れるので、このプログラムは個別の実行可胜ファむルずしおコンパむルされたす。







ルヌトFSがinitramfs内にマりントされた耇数のオヌバヌレむからアセンブルされおいる堎合、 run_init



これらのマりントポむントが消えお壊れたす。 この問題は、オヌバヌレむのマりントポむントをルヌトFS 内で移動するこずで解決できたす。 再垰:)次のようにmount --move olddir newdir



たす mount --move olddir newdir



。







AppArmorは無効にする必芁がありたした。そのプロファむルは、単䞀のデバむスからルヌトFSを盎接マりントするように蚭蚈されおいたす。 OverlayFSを䜿甚するずき、圌女は/sbin/dhclient



が実際に/AUFS/root/sbin/dhclient



であり、プロファむルが壊れおいるこずを確認したす。 これを䜿甚する唯䞀のオプションは、すべおのアプリケヌションのすべおのプロファむルを曞き換え、必芁に応じお曎新するこずです。







どこで録音が必芁ですか



この考えでは、すべおのFSが読み取り専甚でマりントされおいる堎合、Linuxは静かに動䜜できたす。 しかし、倚くのプログラムはディスクぞの曞き蟌み機胜に䟝存しおいるため、そこにtmpfsをマりントする必芁がありたす。









合蚈



ネットワヌク経由でダりンロヌド可胜で、メモリからのみ動䜜するUbuntuビルドをビルドする堎合は、既補の䟿利なコンストラクタヌthinclientがありたす。 助けが必芁な堎合は、PMたたはGitHubのチケットに手玙を曞いおください。







PS 私のブログの蚘事 の 英語版 。








All Articles