クロームブック(Chromebook)にあるクロスティーニ(Crostini)はLXDを利用して動作しています。
クロームブック(Chrome OS)は標準機能としてLXDを操作することができますので、今回は操作しながら見ていくことにしましょう。
細かい仕組みを見ていく前に、LXDで任意のインスタンスを作成することにします。
Ctrl + Alt + Tを押すと、
crosh(Chrome Shell)と呼ばれるターミナルが起動します。
下記のコマンドを実行して、Termina(テルミナ)と呼ばれるVMイメージを起動します。
crosh> vmc start termina
※すでにクロスティーニを起動している場合は
crosh> vsh termina
になります。
テルミナが起動すると、プロンプトが
(termina) chronos@localhost ~ $
に切り替わります。
プロンプトがテルミナに切り替わると、lxdやlxcのコマンドを実行できるようになります。
試しに
$ lxd --version
を実行してみましょう。
5.0.2
のようにLXDのバージョンが出力されます。
続いて、defaultのプロフィールを確認します。
$ lxc profile show default
config: boot.autostart: "false" boot.host_shutdown_timeout: "9" raw.idmap: |- both 1000 1000 both 655360 655360 both 665357 665357 both 1001 1001 security.nesting: "true" description: Default LXD profile devices: /dev/snd/controlC0: major: "116" minor: "0" mode: "0666" path: /dev/snd/controlC0 type: unix-char /dev/snd/pcmC0D0p: major: "116" minor: "16" mode: "0666" path: /dev/snd/pcmC0D0p type: unix-char /dev/snd/seq: major: "116" minor: "1" mode: "0666" path: /dev/snd/seq type: unix-char /dev/snd/timer: major: "116" minor: "33" mode: "0666" path: /dev/snd/timer type: unix-char /dev/wl0: major: "245" minor: "0" mode: "0666" path: /dev/wl0 type: unix-char cros_containers: path: /opt/google/cros-containers source: /opt/google/cros-containers type: disk cros_milestone: path: /dev/.cros_milestone source: /run/cros_milestone type: disk eth0: nictype: bridged parent: lxdbr0 type: nic external: path: /mnt/external source: /mnt/external type: disk fonts: path: /usr/share/fonts/chromeos source: /mnt/fonts type: disk fuse: mode: "0666" source: /dev/fuse type: unix-char root: path: / pool: default type: disk shared: path: /mnt/chromeos source: /mnt/shared type: disk tun: mode: "0666" source: /dev/net/tun type: unix-char name: default used_by: - /1.0/instances/penguin
クロスティーニとして動いているpenguinというインスタンスでdefaultプロフィールが用いられていました。
興味があれば、lxdbr0ネットワークやdefaultストレージも見ておくと良いでしょう。
インスタンス名がc1のインスタンスを作成してみます。
下記のコマンドを実行します。
lxc launch ubuntu:24.04 c1
Creating c1 Starting c1
が出力されたら、
$ lxc list
のコマンドを実行して、
+---------+---------+-----------------------+--------------------------------------------+-----------+-----------+ | NAME | STATE | IPV4 | IPV6 | TYPE | SNAPSHOTS | +---------+---------+-----------------------+--------------------------------------------+-----------+-----------+ | c1 | RUNNING | 100.115.92.200 (eth0) | 240d:1e:3bb:5500:216:3eff:fee6:9fdb (eth0) | CONTAINER | 0 | +---------+---------+-----------------------+--------------------------------------------+-----------+-----------+ | penguin | STOPPED | | | CONTAINER | 0 | +---------+---------+-----------------------+--------------------------------------------+-----------+-----------+
インスタンスが生成されていることを確認します。
作成したインスタンスを操作してみます。
今回は下記のコマンドを実行して、インスタンスにbashログインをしてみます。
sudo lxc exec c1 bash
lxc execの後にインスタンス名とインスタンス内で実行したいコマンドを追加します。
このコマンドを実行すると、
root@c1:~#
になり、インスタンス内にログイン出来たことになります。
動作確認の為に下記のコマンドを実行してみます。
# cat /etc/lsb-release
※# はコメントではなく、rootアカウントで操作している意味になります。
DISTRIB_ID=Ubuntu DISTRIB_RELEASE=24.04 DISTRIB_CODENAME=noble DISTRIB_DESCRIPTION="Ubuntu 24.04 LTS"
Ubuntu 24.04に切り替わっている事がわかります。