スポンサーリンク
Amazon
PCレビュー

知っていても役には立たないけど、ちょっと面白いChrome OSのLinuxシステム「Crostini」の裏側

本サイトでは広告から収益を得ることがあります。

Chrome OSがLinuxに対応した。というのは以前からの周知の事実だと思いますが、その実装方法について実際に操作しながら解説したいと思います。単に仮想OSとして搭載されている訳ではありません。

Chrome OSは今では販促のコンセプトがブレブレですが、もともとはシンプルなシンクライアントを目指していましたので、今も難しいことは隠す実装になっています。しかし「開発者に使ってもらいたい」と中の人がいうように、何気に開発者向けの機能は充実していっており「覗こうと思えば覗ける」ようになっています。今回はLinuxの実装をコマンドを叩いて「覗いて」いこうと思います。Chromebookは「開発者モード」にしてある前提です。

ちなみに、Chromebookを開発者モードにする時にはストレージが初期化されてしまいますので、開発者的な人は購入時に最初に開発者モードにしてしまうことをお勧めします。Chrome OSは初期化して環境をもとに戻すのも手間はかかりませんが、私などはLinuxのバックアップを忘れて吹き飛ばしてしまいがちです。

「Crostini」とChrome OSのシェル「Crosh」

「Chrome OSでLinuxを使うための仕組み」を総称してCrostini(読み方はクロスティーニ)と呼ばれています。Linux仮想マシンや、そこに構築されるLinuxコンテナ、Chrome OSのファイルアプリとLinuxのフォルダの共有、GUIアプリケーションをChrome OSのアプリケーションと同じレベルのウインドウで表示したり、Chrome OSのランチャーやシェルフにLinuxにインストールされたアプリケーションのアイコンを表示したりとCrostiniの機能は多岐にわたります。

Crostiniの中を覗くためには、まずChrome OSのコンソールを開く必要があります。

ウインドウがなにも開いていない状態やChromeブラウザがアクティブな状態でCtrl + Alt + Tを押下すると、ChromeブラウザにCrosh(読み方はクロッシュ)と呼ばれるChrome OSのシェルが開きます。

Chrome OSはLinuxベースですが、このCroshというシェルでは、PingやFreeなどの一部を除いて、ほとんどのLinuxコマンドは受け付けません。

Croshで使用できるコマンドの一覧は「help_advanced」コマンドで見ることができます。「help_advanced」コマンド自体がわからない時には「help」コマンドで教えてくれます。

このコマンド一覧には「shell」コマンドがあります。「shell」コマンドでLinuxシェルでおなじみのbashが起動できます。もちろん、bash上では普段使用しているLinuxのコマンドが使用できます。

bashのコマンドプロンプトを見ると、Croshではchronos(読み方はクロノス)というユーザーでログインしていることがわかります。chronosはChrome OSの管理者ユーザーっぽいですね。

chronosはラテン語では「時間の神」らしいです。ギリシャ語で同じ発音の「農耕の神」もいるようです。どちらにしても神とはGoogleらしい(笑) Chromeは一般的に金属の名前から取っていると言われています。chronosを見たときに実はこちらから取ったのでは?と思いましたが、Chrmiumも金属の名前なので、単に響きの似た単語を使っていっているだけのような気がしますね。

Linuxでやりたいことは、後述のPenguin(Chrome OSのターミナルでアクセスするLinux)で出来ますのでcroshでChrome OS自体を触る機会はあまりないのですが、「free」コマンドでメモリー使用量を確認したりはします。

仮想マシン「Termina」

Chrome OSの中で別のOSであるLinuxが使えるのは、そりゃ仮想OSだよねということでChrome OSに搭載されている仮想マシンがTermina(読み方はテルミナ)です。テルミナはターミナルと同意とのことで中二な名称じゃなくなってしまいましたが、急に我に返ったのでしょうか。しかし、スペイン語では「終わり」を意味するそうで、やはり中二的ななにかを暗示しているのかもしれません。

「vmc list」で仮想マシンの一覧を見ることができます。仮想マシンはterminaが1つだけ存在しています。

上が仮想マシンが停止している時、下が起動している時の表示です。

Chrome OSのシェルフの「ターミナル」のアイコンを右クリックしたときのメニューに「Linuxをシャットダウン」と表示されていれば起動しています。「vmc start termina」で起動したり、逆に「vmc stop termina」で停止させたりすることもできます。他にも「vmc create」や「vmc destory」などもできますが、必要もありませんので試したことはありません。

「vsh termina」コマンドでTermina仮想マシン内に入ることができます。普通にbashが起動しますので、他のLinuxと同じようにコマンドを使えますが、OSとしてはChrome OSのようにも見えます。ユーザー名もホストOSと同じくchronosですね。

Linuxコンテナ「Penguin」

上記で紹介した仮想マシンはTerminaという名前でしたが、Chrome OSから標準のターミナルでLinuxにアクセスするとPenguin(読み方はペンギン。ユーザーに直接見えるところだからか、ここはえらくベタですね)というマシン名になっていますよね? そうです。Termina仮想マシンがChrome OSのユーザーに開放されている訳ではありません。Termina仮想マシンに作成されている「Penguin」と名付けられたLinuxコンテナが開放されているのです。

Linuxコンテナ=Dockerと勘違いしている人がいるかもしれませんが、Dockerというのは元々はLinuxコンテナを便利に使うための仕組みで、LinuxコンテナというのはLinuxカーネルが提供している機能です。CrostiniではLXCという仕組みを利用してLinuxコンテナを用意しています。

コンテナの一覧を見るには「lxc list」コマンドを使用します。

出ましたね「penguin」が。仮想ネットワークのIPアドレスなども表示されています。「docker0」と表示されているのは、私がPenguinにDockerをインストールしているから表示されているだけで、普通は「eth0」だけが表示されるはずです。

もちろん、lxcのコマンドでコンテナを追加したり、起動・停止もできますが、やはり使い道はありません。自分でコンテナを作成したい場合にはPenguinにDockerをインストールするのが普通の使い方です。

それでは、いよいよPenguinコンテナに入ってみます。コマンドは「lxc exec penguin bash」です。「penguin内でbashシェルを実行する」という意味です。

遂に、いつもChrome OSのターミナルからログインするLinux「Penguin」に、たどり着きました。Chrome OSのターミナルからログインする時とは異なるユーザーでログインしていますので、ルートに「みえてるかい?.txt」というファイルを置いてみました。

どちらからも見えていますね。


このようにChrome OSに搭載されて、ターミナルで開かれるpenguinは、Chrome OS内の仮想OS内のLinuxコンテナの一つということです。仮想マシンに直接アクセスしても特にやることもないのですが、こういった実装を見るのは楽しいですよね。

なぜ、直接仮想マシンをユーザーに公開しないのだろうか?と考えれば、別の仕様のOSが、他の仮想マシンや他のコンテナに実装するようなことも想定しているのかもしれませんね。色々と面白い展開になっていけばなぁと思います。