はじめに
テレワークの導入に伴って会社から Chromebook を貸与され、Linux が使えるということで試しにテレワークでの開発に使うことになりました。
Chromebook で Linux を使用するにはいくつかの方法があるそうで 1 、特別これでなければいけないという理由もなかったため Crostini を利用しました。しかし、実際に操作することになる Linux (デフォルトのターミナルアプリで操作する Linux コンテナ) と ChromeOS の位置関係が分かりづらく躓くことがありました。(特にポートフォワード関連)
また、Crostini に使用されている技術が書かれているページがいくつかありましたが、この記事ではそういった技術をあまり知らなくても、感覚的にこの Linux コンテナと ChromeOS の位置関係をつかめるようにと思い書いた記事になります。
コロナの影響で Chromebook を使い始めた方、使い始める方、開発機としての導入を考えている方もいらっしゃるかもしれません。読みづらい点や間違っている点などあるかもしれませんが参考になれば幸いです。
概要
この記事では主に以下の内容について書いています。
(タイトル含め、一部語弊があるかもしれません)
- Crostini について
- ChromeOS からターミナルアプリ上の Linux の位置まで実際に辿ってみる
環境
- Acer Chromebook CB715
- Chrome OS (Google Chrome) beta 64bit
Crostini とは
Crostini は、Linux アプリケーションのサポートを使いやすくし、ChromeOS とうまく統合するための包括的な用語です。
Referense: Running Custom Containers Under Chrome OS #Overview
Translation: DeepL翻訳
なお Crostini では、デフォルトで Debian が入ります。2
Crostini を構成するもの
Crostini の構成要素で、実際に今回操作するものを列挙し、軽く説明を入れます。3 4
- Crosh (ChRome SHell)
- Temina (Termina VM)
- LXC / LXD
Crosh とは
Chromeシェル(CROSH)は、Linux BASHまたはWindowsコマンド(cmd.exe)ターミナルと似た、コマンド・ライン・インターフェイスです。Chrome OSはLinuxベースですが、CROSHはほとんどのLinuxコマンドを認識しません。
Reference: Dell™ ChromebookでのCROSH Diagnostics(診断)の使用)
Temina とは
起動速度を重視した、読み取り専用の仮想マシン
Termina は、ChromeOS の Linux カーネルとユーザーランドツールを削ぎ落とした VM イメージです。
Referense: Running Custom Containers Under Chrome OS #Overview
Translation: DeepL翻訳
LXC / LXD とは
システム単位で利用されるコンテナの一種。
因みに Docker はアプリケーション単位で利用されるコンテナだそうです。5
ChromeOS からターミナルアプリ上の Linux の位置を実際に辿ってみる
では順を追って、ターミナルアプリで表示されている場所まで ChromeOS 上から辿っていきたいと思います。
1. Crosh の起動
Google Chorme またはターミナルアプリから ctrl + alt + t
で Crosh を起動します。
2. Termina VM へログイン
Crosh から Termina VM へログインします。6
crosh> vsh termina
(termina) chronos@localhost ~ $
3. Termina VM 上で稼働している LXC / LXD コンテナを表示
(termina) chronos@localhost ~ $ lxc list
+---------+---------+------------------------------+-----------------------------------------------+------------+-----------+
| NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS |
+---------+---------+------------------------------+-----------------------------------------------+------------+-----------+
| **penguin** | RUNNING | 172.20.0.1 (br-8703516dbe4d) | 2400:2413:2202:bb00:216:3eff:fed8:4207 (eth0) | PERSISTENT | 0 |
| | | 172.17.0.1 (docker0) | | | |
| | | 100.115.92.202 (eth0) | | | |
+---------+---------+------------------------------+-----------------------------------------------+------------+-----------+
4. 稼働中の LXC / LXD コンテナにログイン
デフォルトでは penguin
というユーザー名の Debian が入っているので、以下のコマンドでログインします。
(termina) chronos@localhost ~ $ lxc exec penguin bash
root@penguin:~#
ログイン後、試しに実行中の Docker コンテナを表示してみます。
これでようやく探していた Linux コンテナまで辿り着きました。
ここでのコマンド操作が、Linux アプリとして用意されている「ターミナル」と全く同じ になるという事のようです。
root@penguin:~# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6822c5f1993b nginx:stable-alpine "/bin/sh -c 'envsubs…" 14 hours ago Up 3 hours 0.0.0.0:8080->80/tcp cvat_proxy
55e2b1de1b0e cvat_cvat_ui "nginx -g 'daemon of…" 14 hours ago Up 3 hours 80/tcp cvat_ui
b6b4feb3670e cvat "/usr/bin/supervisord" 14 hours ago Up 3 hours 8080/tcp, 8443/tcp cvat
8832f64e8f96 postgres:10-alpine "docker-entrypoint.s…" 14 hours ago Up 3 hours 5432/tcp cvat_db
fcf14c4d2ca5 redis:4.0-alpine "docker-entrypoint.s…" 14 hours ago Up 3 hours 6379/tcp cvat_redis
参考
- Using LXD on your Chromebook, https://ubuntu.com/blog/using-lxd-on-your-chromebook
- Running Custom Containers Under Chrome OS, https://chromium.googlesource.com/chromiumos/docs/+/HEAD/containers_and_vms.md
-
Crostini 以外の Linux 環境と、その比較については「ChromebookのLinux環境を整える(Crouton + Ubuntu20.04 + Chromebrew + Sommelier)」という記事が分かりやすかったです。 ↩
-
Debian 以外のディストリビューションを入れることもできるそうです。(Can I run a different Linux distro?) ↩
-
こちらのページに Crostini の関係図のようなものがありました。Crostini developer guide #What is all this stuff? ↩
-
ほとんどのことはこのページに記載されています。(Running Custom Containers Under Chrome OS) ↩
-
Termina が起動していない時は、Crosh から
vmc start termina
と打ち込み、起動させます。 ↩