【Chromebook】Linuxコンソールが起動せず困った - uepon日々の備忘録

【Chromebook】Linuxコンソールが起動せず困った

割と仕事が忙しかった1月も過ぎてしまい。今年はスロースタートするぞと思っていたのですが、今年も3つほどイベントを開催し 全然言ってることとやってることが違うなと思っていました。

ngk2020s.connpass.com

node-red-tokai.connpass.com

久しぶりにChromebookを使ってみる

f:id:ueponx:20200206120504p:plain

年始あたりで割と使えるようにしていたChromebookASUS Chromebook Flip C101PA)ですが、出張などでもつかえるようの設定してみました。会社ではOffice365を使用しているので、スマートフォンでもメールやスケジュールの管理ができます。ChromebookでもAndroidのアプリに対応しているのでインストールすれば問題なく使用できます。PowerPointやWordなどの編集に関してはオンライン版でもできますが、レイアウトが残念なことが多いので仕事レベルではちょっとっていうレベルです。でも、普通にWebサービスやメールなどが使えるので、これだけでも割と十分って感じなのです。

テキストエディタに関しては少し微妙にはなってしまいますが、オンラインではHackMDを使用しています。オフラインではVisualStudioCodeの使用も考えていたのですが、日本語変換がOS側とLinuxコンテナ側で切り替えがずれてしまうことから、もう少し成熟してきてからでもいいのかな~と。なのでTextってアプリ(デフォルト?)を使って急場をしのいでいます。

hackmd.io

f:id:ueponx:20200206123005p:plain

f:id:ueponx:20200206120813p:plain

アップデートしてみた

Chromebookは割と頻繁にOSのアップデートが行われるのですが、更新完了までは時間がかからないこともあり、トイレに行っている間ぐらいで完了してくれます。今回もきたね、はいはいという感じでアップデートを行ってみました。特に変わったこともなく起動するのですが、Linuxのターミナルの起動だけが何故か立ち上がらない…。

f:id:ueponx:20200206121953p:plain

起動待機状態で、くるくる回っている(これってなんていうんだっけ?)んですが、時間が立つと終わってしまいます。

こんな感じ f:id:ueponx:20200206123319p:plain

通常であれば、コンソールウインドウが開くのですが、それはないようです。何度やってもだめだったので、これはやはりアップデート失敗なのか?と思い、仕方なくPowerwashを行いました。(割と短時間で初期化されます)Powerwashを行ってもアプリのインストール情報やChromeの設定はユーザーアカウントに残っていてくれるので復帰すればほぼ元の状態に戻ってくれます。(Linuxコンテナ関係はオプションなので無理のようです)

f:id:ueponx:20200206121844p:plain

Powerwashも終わり、さてLinuxコンテナを有効化してみようと思ったら、現象は変わらず。

OSを初期化したのにこの状況やばくない?Chromebookではこれ以外の復帰方法はないので、かなり焦りました。もしかしたら、OSのアップデートが来ればまた治るのでは?という気もしましたが、どういう状況になっているのかは少し気になったので調べてみました。

調べてみた

Linuxの機能を無効化することはできましたが、再度有効化しようとするとコンテナが起動しないというメッセージとともにエラーがでました。それ以降は有効化できず、かなりまずい系の状況に。

ネットでぐぐってみるとcroshで調べることができるみたいという情報がありました。croshChromeブラウザ上で【Ctrl+Alt+t】を押すと新しいタブが開いて

Welcome to crosh, the Chrome OS developer shell.

If you got here by mistake, don't panic!  Just close this tab and carry on.

Type 'help' for a list of commands.

If you want to customize the look/behavior, you can use the options page.
Load it by using the Ctrl+Shift+P keyboard shortcut.

crosh> 

というようなメッセージとともに起動します。Linuxbashなどとは異なりChromeOSデベロッパー向けのコンソールのようです。ネットワーク系のコマンドやTopなどのプロセス系のコマンドがあるものになります。

f:id:ueponx:20200206122419p:plain

コマンドライン上でhelpコマンドを実行すれば、使用できるコマンドが表示されます。

そのなかからvmcコマンドを使用します。vmcコマンド仮想マシンコンテナ関係のコマンドのようです。 helpコマンドでvmcのヘルプをみると、vmcのサブコマンドやパラメータが表示されます。

crosh> help vmc
vmc
USAGE: vmc
   [ start [--enable-gpu] [--enable-audio-capture] <name> |
     stop <name> |
     create [-p] <name> [<source media> [<removable storage name>]] [-- additional parameters]
     destroy <name> |
     disk-op-status <command UUID> |
     export <vm name> <file name> [<removable storage name>] |
     import [-p] <vm name> <file name> [<removable storage name>] |
     list |
     share <vm name> <path> |
     unshare <vm name> <path> |
     container <vm name> <container name> [ (<image server> <image alias>) | (<rootfs path> <metadata path>)] |
     usb-attach <vm name> <bus>:<device> |
     usb-detach <vm name> <port> |
     usb-list <vm name> |
     --help | -h ]

いまのトラブルでは起動がうまく一定ないのでコンテナの起動状態を調べてみます。トラブルの状態で以下のコマンド実行します。

crosh> vmc list
termina (1526222848 bytes)
Total Size (bytes): 1526222848

f:id:ueponx:20200206122537p:plain

Linuxコンテナは起動している(?)ようです。terminaというのがコンテナの名称のようですね。これをコマンドのパラメータ<name>として指定すれば良さそうです。今は有効化もできない状況なので、とりあえずはコンテナの動作をストップさせてみます。vmc stopコマンドを使用して停止させてみます。

実行してもエラーはでません。停止したかなと思い、もう一度vmc listで確認してみると…停止されてはいないようです。

crosh> vmc stop termina

crosh> vmc list
termina (1465851904 bytes)
Total Size (bytes): 1465851904

※正常な状態であっても、コンテナが再起動(?)するようです。ターミナルが開いていても、一度内容が初期化されます。この挙動は正常のようです。

ここでLinux機能を有効化しようとしても状態は変化ません。むう。

Linux機能を有効化していないのに、コンテナが動いているという非常にわかない状況になっているので、一度コンテナそのものを削除しようと思います。 削除はvmc destroyを使用します。

crosh> vmc destroy termina

こちらも特にエラーもなく終了しました。Linux機能は有効化していない状態なのでvmc listコマンドをチェックterminaがなくなりました。

再度、Linux機能を有効化してみると正常に終了し、無事にターミナルも起動するようになりました。(vmc listコマンドでterminaは復活します)

f:id:ueponx:20200206123138p:plain

おわりに

ChromeOSのトラブルというトラブルは今回が初めてだったので割とどうしたらいいかなとみたいなところもありましたが、なんとか解決できてよかったです。

また、今回使用したcroshに関しては、結構興味深い内容のことも調べられるようなので引き続きチェックしていこうと思います。

/* -----codeの行番号----- */