Chrome OS Linux Container (crostini) tips

The new Linux Containers available on some ChromeBooks are manna from heaven if you are a developer. Having a full blown Debian based distribution just a click away makes supported ChromeBooks very usable development platforms. And getting such a device can be cheap.

Here is a set of tips to help make things a little nicer.

Error trying to see “Linux Files” (added 2019-11-11)

If you go to Files > My Files > Linux Files, it is supposed to show you the files in your home directory in the linux container. However, you might also see something like

Error mounting crostini container: 15

The error number may change.

Here are some things to try to fix it.

flags

Go to chrome://flags and press “Reset all to default” in the upper right hand corner and restart.

groupadd

In the containers shell, type

sudo groupadd chromeos-access

Restart linux.

Updating the Debian version (added 2019-10-08)

Currently, the bundled distribution is set to stretch which is … old. Updating to stable is just like updating debian on any system.

Edit the file /etc/apt/sources.list and put in stable where ever you see stretch.

sudo vim /etc/apt/sources.list

change:

deb https://deb.debian.org/debian stretch main
deb https://deb.debian.org/debian-security stretch/updates main

to:

deb https://deb.debian.org/debian stable main
deb https://deb.debian.org/debian-security stable/updates main

Then it is the normal

sudo apt-get update
sudo apt-get dist-upgrade
sudo apt clean

Viewing Local Servers

Many systems these days come with a bundled local webserver to allow you test your changes without having to stage to a external host (think node.js, hugo, jekyll, etc). By default, these always want to listen on localhost (127.0.0.1). But the Linux container is a full-fledge VM and so localhost is, well, local. This means that you can’t use the “main” browser and point it to the localhost and have anything useful happen.

Solution 1 - Install browser in the VM

One solution is to install the browser of your choice into the VM and use that. But you have a perfectly good browser already installed, so why take up the space to install another?

Solution 2 - Switch VM Application to External Interface

In order to use the main browser, you need to coax the local webserver to listen on the VM’s external interface. To get the external interface, you can use the command hostname -I (note the capital I).

As an example here are the commands to make hugo and jekyll use the external interface.

hugo server --bind `hostname -I` --baseURL `hostname -I`
jekyll serve --server `hostname -I`

To view the server, point the browser to

http://penguin.linux.test:<port>

ChromeOS points that synthetic domain to your Linux VM.

Solution 3 - Use a Port Forwarder

The Chrome App Connection Forwarder can set up rules so that when you try to connect to e.g. localhost:1313 it is forwarded to penguin.linux.test:1313

Note that you still need to make the application talk to the VM’s external interface (solution 2). But now you can point your browser to localhost as you normally would.

Configure the terminal

While in the terminal hit ctrl-shift-P. This will bring up a browser tab with settings such a font and colors.

Force Shutdown the VM

In recent versions, there is actually a menu item to do this. Right click on the terminal icon and you should see a “Shut Down Linux (Beta)” item.

If not, you can do it in crosh.

Ctrl-At-T to bring up crosh shell.

Enter the command: vmc stop termina

It will automatically restart when you start Terminal app.

  • The default VM name is termina
  • The default container is penguin

Access the distribution from crosh

Ctrl-Alt-T                                 # open crosh
vsh termina                                # start the VM and get a command prompt
lxc exec penguin -- /bin/login -f <userid> # start the container