At Google I/O 2018, one of the presentations was on What’s new in Android apps for Chrome OS (Google I/O ’18). The third and most exciting developer tool shown in the presentation, was the ability to run graphical Linux apps on Chrome OS. Here is a screenshot of a native Linux terminal application, as shown in the presentation.
They were so excited that the presenter said it would knock the socks off of the participants. And they had arranged a giveaway of socks. Actual socks swag to those attending the presentation 8-).
The way that they get the GUI apps from the LXD container to appear to the screen, is similar to
Project Crostini
Project Crostini is the Chrome OS project to add support to run Linux GUI apps on Chrome OS.
The components that facilitate Project Crostini can be found at https://github.com/lstoll/cros-crostini That page has instructions for those that wanted to enable the running of Linux GUI apps on Chrome OS, when Project Crostini was still under development. Lincoln Stoll dissected the source of Chrome OS and created a helpful list of the involved repositories.
The basic component is The Chrome OS Virtual Machine Monitor (crossvm), which runs untrusted operating systems through Linux’s KVM interface. The Linux distribution would run in a VM. The test repositories make reference to the X server, XWayland and Wayland. There is a repository called sommelier, which is a nested Wayland compositor with X11 forwarding support. It needs more searching to figure out where the source code ended into the Chrome OS repository and what is actually being used.
Update #1: Here are the vm_tools in Chrome OS. They include garcon, a service that gets added in the container and communicates with another service outside of the container (vm_concierge).
What is important, is that LXD runs in this VM and is configured to launch a machine container with a Linux distribution. We are going in depth into this.
LXD in Project Crostini
Here is the file that does the initial configuration of the LXD service. It preseeds LXD with the following configuration.
- It uses a storage pool with the btrfs filesystem.
- It sets up a private bridge for networking.
- It configures the default LXD profile with relevant settings that will be applied to the container when it gets created.
- The container will not autostart when the Chromebook is restarted. It will get started manually.
- There will be private networking.
- The directory /opt/google/cros-containers of the host gets shared into the container as both /opt/google/cros-containers and /opt/google/garcon.
- The container will be able to get the IP address of the host from the file /dev/.host_ip (inside the container).
- The Wayland socket of the VM is shared to the container. This means that GUI applications that run in the container, can appear in the X server running in the VM of Chrome OS.
- The /dev/wl0 device file of the host is shared into the container as /dev/wl0. With permissions 0666. That’s the wireless interface.
# Storage pools storage_pools: - name: default driver: btrfs config: source: /mnt/stateful/lxd/storage-pools/default # Network # IPv4 address is configured by the host. networks: - name: lxdbr0 type: bridge config: ipv4.address: none ipv6.address: none # Profiles profiles: - name: default config: boot.autostart: false devices: root: path: / pool: default type: disk eth0: nictype: bridged parent: lxdbr0 type: nic cros_containers: path: /opt/google/cros-containers source: /opt/google/cros-containers type: disk garcon: path: /opt/google/garcon source: /opt/google/cros-containers type: disk host-ip: path: /dev/.host_ip source: /run/host_ip type: disk wayland-sock: path: /dev/.wayland-0 source: /run/wayland-0 type: disk wl0: source: /dev/wl0 type: unix-char mode: 0666
Here it creates the btrfs storage pool (termina-lxd-scripts/files/stateful_setup.sh),
mkfs.btrfs /dev/vdb || true # The disk may already be formatted. mount -o user_subvol_rm_allowed /dev/vdb /mnt/stateful
With the completed LXD configuration, let’s see how the container gets created. It is this file, termina-lxd-scripts/files/run_container.sh Specifically,
- It configures an LXD remote URL, https://storage.googleapis.com/cros-containers, that has the container image. It is accessible through the simplestreams protocol.
- It launches the container image with
lxc launch google:debian/stretch
How to try google:debian/stretch on our own LXD installation
Let’s delve deeper in the container image that is used in Chrome OS. For this, we are adding the LXD remote URL and then launch the container.
First, let’s add the LXD remote.
$ lxc remote add google https://storage.googleapis.com/cros-containers --protocol=simplestreams
Let’s verify that it has been added.
$ lxc remote list +--------+------------------------------------------------+---------------+-----------+--------+--------+ | NAME | URL | PROTOCOL | AUTH TYPE | PUBLIC | STATIC | +---------------------------------------------------------+---------------+-----------+--------+--------+ | google | https://storage.googleapis.com/cros-containers | simplestreams | | YES | NO | +---------------------------------------------------------+---------------+-----------+--------+--------+ | images | https://images.linuxcontainers.org | simplestreams | | YES | NO | +---------------------------------------------------------+---------------+-----------+--------+--------+ | local (default) | unix:// | lxd | tls | NO | YES | +---------------------------------------------------------+---------------+-----------+--------+--------+ | ubuntu | https://cloud-images.ubuntu.com/releases | simplestreams | | YES | YES | +---------------------------------------------------------+---------------+-----------+--------+--------+ | ubuntu-daily | https://cloud-images.ubuntu.com/daily | simplestreams | | YES | YES | +---------------------------------------------------------+---------------+-----------+--------+--------+
What’s in the google: container image repository?
$ lxc image list google: +-------------------------+--------------+--------+-------------------------------------------------------+--------+----------+------------------------------+ | ALIAS | FINGERPRINT | PUBLIC | DESCRIPTION | ARCH | SIZE | UPLOAD DATE | +-------------------------+--------------+--------+-------------------------------------------------------+--------+----------+------------------------------+ | debian/stretch (3 more) | 706f2390a7f6 | yes | Debian for Chromium OS stretch amd64 (20180504_22:19) | x86_64 | 194.82MB | May 4, 2018 at 12:00am (UTC) | +-------------------------+--------------+--------+-------------------------------------------------------+--------+----------+------------------------------+
It is a single image for x86_64, based on Debian Stretch (20180504_22:19).
Let’s see again those details for the specific container image from Google.
$ lxc image show google:debian/stretch auto_update: false properties: architecture: amd64 description: Debian for Chromium OS stretch amd64 (20180504_22:19) os: Debian for Chromium OS release: stretch serial: "20180504_22:19" public: true
Compare those details with the stock debian/stretch container image,
$ lxc image show images:debian/stretch auto_update: false properties: architecture: amd64 description: Debian stretch amd64 (20180511_05:25) os: Debian release: stretch serial: "20180511_05:25" public: true
Can we then get detailed info of the Google container image?
$ lxc image info google:debian/stretch Fingerprint: 706f2390a7f67655df8d0d5d46038ed993ad28cb161648781fbd60af4b52dd76 Size: 194.82MB Architecture: x86_64 Public: yes Timestamps: Created: 2018/05/04 00:00 UTC Uploaded: 2018/05/04 00:00 UTC Expires: never Last used: never Properties: serial: 20180504_22:19 description: Debian for Chromium OS stretch amd64 (20180504_22:19) os: Debian for Chromium OS release: stretch architecture: amd64 Aliases: - debian/stretch/default - debian/stretch/default/amd64 - debian/stretch - debian/stretch/amd64 Cached: no Auto update: disabled
Compare those details with the stock debian/stretch container image.
$ lxc image info images:debian/stretch Fingerprint: 07341ea710a44508c12e5b3b437bd13fa334e56b3c4e2808c32fd7e6b12df8d1 Size: 110.22MB Architecture: x86_64 Public: yes Timestamps: Created: 2018/05/11 00:00 UTC Uploaded: 2018/05/11 00:00 UTC Expires: never Last used: never Properties: os: Debian release: stretch architecture: amd64 serial: 20180511_05:25 description: Debian stretch amd64 (20180511_05:25) Aliases: - debian/stretch/default - debian/stretch/default/amd64 - debian/9/default - debian/9/default/amd64 - debian/stretch - debian/stretch/amd64 - debian/9 - debian/9/amd64 Cached: no Auto update: disabled
Up to now we learned that the Google debian/stretch container image has 95MB of extra files (compressed).
It’s time to launch a container with google:debian/stretch!
$ lxc launch google:debian/stretch chrome-os-linux Creating chrome-os-linux Starting chrome-os-linux $
Now, get a shell into this container.
$ lxc exec chrome-os-linux bash root@chrome-os-linux:~#
There is no non-root account,
root@chrome-os-linux:~# ls /home/ root@chrome-os-linux:~#
Differences with stock debian/stretch image
These are the Chrome OS-specific packages that the container image has. These are not architecture-specific files (architecture: all).
ii cros-adapta 0.1 all Chromium OS GTK Theme This package provides symlinks ii cros-apt-config 0.12 all APT config for Chromium OS integration. This package ii cros-garcon 0.10 all Chromium OS Garcon Bridge. This package provides the ii cros-guest-tools 0.12 all Metapackage for Chromium OS integration. This package has ii cros-sommelier 0.11 all sommelier base package. This package installs unitfiles ii cros-sommelier-config 0.11 all sommelier config for Chromium OS integration. This ii cros-sudo-config 0.10 all sudo config for Chromium OS integration. This package ii cros-systemd-overrides 0.10 all systemd overrides for running under Chromium OS. This ii cros-ui-config 0.11 all UI integration for Chromium OS This package installs ii cros-unattended-upgrades 0.10 all Unattended upgrades config. This package installs an ii cros-wayland 0.10 all Wayland extras for virtwl in Chromium OS. This package
There are 305 additional packages in total in the Chrome OS container image of Debian stretch, compared to the stock Debian Stretch image.
adwaita-icon-theme apt-transport-https apt-utils at-spi2-core bash-completion ca-certificates cpp cpp-6 cros-adapta cros-apt-config cros-garcon cros-guest-tools cros-sommelier cros-sommelier-config cros-sudo-config cros-systemd-overrides cros-ui-config cros-unattended-upgrades cros-wayland curl dbus-x11 dconf-cli dconf-gsettings-backend:amd64 dconf-service desktop-file-utils dh-python distro-info-data fontconfig fontconfig-config fonts-croscore fonts-dejavu-core fonts-roboto fonts-roboto-hinted glib-networking:amd64 glib-networking-common glib-networking-services gnome-icon-theme gsettings-desktop-schemas gtk-update-icon-cache hicolor-icon-theme i965-va-driver:amd64 less libapt-inst2.0:amd64 libasound2:amd64 libasound2-data libasound2-plugins:amd64 libasyncns0:amd64 libatk-bridge2.0-0:amd64 libatk1.0-0:amd64 libatk1.0-data libatspi2.0-0:amd64 libauthen-sasl-perl libavahi-client3:amd64 libavahi-common-data:amd64 libavahi-common3:amd64 libavcodec57:amd64 libavresample3:amd64 libavutil55:amd64 libcairo-gobject2:amd64 libcairo2:amd64 libcolord2:amd64 libcroco3:amd64 libcrystalhd3:amd64 libcups2:amd64 libcurl3:amd64 libcurl3-gnutls:amd64 libdatrie1:amd64 libdconf1:amd64 libdrm-amdgpu1:amd64 libdrm-intel1:amd64 libdrm-nouveau2:amd64 libdrm-radeon1:amd64 libdrm2:amd64 libegl1-mesa:amd64 libencode-locale-perl libepoxy0:amd64 libffi6:amd64 libfile-basedir-perl libfile-desktopentry-perl libfile-listing-perl libfile-mimeinfo-perl libflac8:amd64 libfont-afm-perl libfontconfig1:amd64 libfontenc1:amd64 libfreetype6:amd64 libgail-common:amd64 libgail18:amd64 libgbm1:amd64 libgdbm3:amd64 libgdk-pixbuf2.0-0:amd64 libgdk-pixbuf2.0-common libgl1-mesa-dri:amd64 libgl1-mesa-glx:amd64 libglapi-mesa:amd64 libglib2.0-0:amd64 libglib2.0-data libgmp10:amd64 libgnutls30:amd64 libgomp1:amd64 libgraphite2-3:amd64 libgsm1:amd64 libgtk-3-0:amd64 libgtk-3-bin libgtk-3-common libgtk2.0-0:amd64 libgtk2.0-bin libgtk2.0-common libharfbuzz0b:amd64 libhogweed4:amd64 libhtml-form-perl libhtml-format-perl libhtml-parser-perl libhtml-tagset-perl libhtml-tree-perl libhttp-cookies-perl libhttp-daemon-perl libhttp-date-perl libhttp-message-perl libhttp-negotiate-perl libice6:amd64 libicu57:amd64 libidn2-0:amd64 libio-html-perl libio-socket-ssl-perl libipc-system-simple-perl libisl15:amd64 libjack-jackd2-0:amd64 libjbig0:amd64 libjpeg62-turbo:amd64 libjson-glib-1.0-0:amd64 libjson-glib-1.0-common liblcms2-2:amd64 libldap-2.4-2:amd64 libldap-common libllvm3.9:amd64 libltdl7:amd64 liblwp-mediatypes-perl liblwp-protocol-https-perl libmailtools-perl libmp3lame0:amd64 libmpc3:amd64 libmpdec2:amd64 libmpfr4:amd64 libnet-dbus-perl libnet-http-perl libnet-smtp-ssl-perl libnet-ssleay-perl libnettle6:amd64 libnghttp2-14:amd64 libnuma1:amd64 libogg0:amd64 libopenjp2-7:amd64 libopus0:amd64 liborc-0.4-0:amd64 libp11-kit0:amd64 libpango-1.0-0:amd64 libpangocairo-1.0-0:amd64 libpangoft2-1.0-0:amd64 libpciaccess0:amd64 libperl5.24:amd64 libpixman-1-0:amd64 libpng16-16:amd64 libpolkit-agent-1-0:amd64 libpolkit-backend-1-0:amd64 libpolkit-gobject-1-0:amd64 libproxy1v5:amd64 libpsl5:amd64 libpulse0:amd64 libpulsedsp:amd64 libpython3-stdlib:amd64 libpython3.5-minimal:amd64 libpython3.5-stdlib:amd64 libreadline7:amd64 librest-0.7-0:amd64 librsvg2-2:amd64 librsvg2-common:amd64 librtmp1:amd64 libsamplerate0:amd64 libsasl2-2:amd64 libsasl2-modules:amd64 libsasl2-modules-db:amd64 libsensors4:amd64 libshine3:amd64 libsm6:amd64 libsnappy1v5:amd64 libsndfile1:amd64 libsoup-gnome2.4-1:amd64 libsoup2.4-1:amd64 libsoxr0:amd64 libspeex1:amd64 libspeexdsp1:amd64 libsqlite3-0:amd64 libssh2-1:amd64 libssl1.1:amd64 libswresample2:amd64 libtasn1-6:amd64 libtdb1:amd64 libtext-iconv-perl libthai-data libthai0:amd64 libtheora0:amd64 libtie-ixhash-perl libtiff5:amd64 libtimedate-perl libtwolame0:amd64 libtxc-dxtn-s2tc:amd64 libunistring0:amd64 liburi-perl libva-drm1:amd64 libva-x11-1:amd64 libva1:amd64 libvdpau-va-gl1:amd64 libvdpau1:amd64 libvorbis0a:amd64 libvorbisenc2:amd64 libvpx4:amd64 libwavpack1:amd64 libwayland-client0:amd64 libwayland-cursor0:amd64 libwayland-egl1-mesa:amd64 libwayland-server0:amd64 libwebp6:amd64 libwebpmux2:amd64 libwebrtc-audio-processing1:amd64 libwrap0:amd64 libwww-perl libwww-robotrules-perl libx11-protocol-perl libx11-xcb1:amd64 libx264-148:amd64 libx265-95:amd64 libxaw7:amd64 libxcb-dri2-0:amd64 libxcb-dri3-0:amd64 libxcb-glx0:amd64 libxcb-present0:amd64 libxcb-render0:amd64 libxcb-shape0:amd64 libxcb-shm0:amd64 libxcb-sync1:amd64 libxcb-xfixes0:amd64 libxcomposite1:amd64 libxcursor1:amd64 libxdamage1:amd64 libxfixes3:amd64 libxft2:amd64 libxi6:amd64 libxinerama1:amd64 libxkbcommon0:amd64 libxml-parser-perl libxml-twig-perl libxml-xpathengine-perl libxml2:amd64 libxmu6:amd64 libxpm4:amd64 libxrandr2:amd64 libxrender1:amd64 libxshmfence1:amd64 libxt6:amd64 libxtst6:amd64 libxv1:amd64 libxvidcore4:amd64 libxxf86dga1:amd64 libxxf86vm1:amd64 libzvbi-common libzvbi0:amd64 lsb-release mesa-va-drivers:amd64 mesa-vdpau-drivers:amd64 mime-support openssl perl perl-modules-5.24 perl-openssl-defaults:amd64 policykit-1 publicsuffix pulseaudio pulseaudio-utils python-apt-common python3 python3-apt python3-minimal python3.5 python3.5-minimal readline-common rename rtkit sgml-base shared-mime-info sudo tcpd ucf unattended-upgrades unzip va-driver-all:amd64 vdpau-driver-all:amd64 x11-common x11-utils x11-xserver-utils xdg-user-dirs xdg-utils xkb-data xml-core xz-utils
The binary files are meant to be found at /opt/google/cros-containers/. For example,
root@chrome-os-linux:~# cat /usr/bin/gnome-www-browser #!/bin/bash /opt/google/cros-containers/bin/garcon --client --url "$@" root@chrome-os-linux:~#
Obviously, these files are not found in the container that I just launched. These files are provided by Chrome OS of a the Chromebook.
I did not find binaries in the container to launch a Linux terminal application. I assume would be found at /opt/google/cros-containers/bin/ as well.
The Chrome OS deb package repository
Here is the repository,
root@chrome-os-linux:~# cat /etc/apt/sources.list.d/cros.list deb https://storage.googleapis.com/cros-packages stretch main root@chrome-os-linux:~#
And here are the details of the packages,
$ curl https://storage.googleapis.com/cros-packages/dists/stretch/main/binary-amd64/Packages Package: cros-adapta Version: 0.1 Architecture: all Recommends: libgtk2.0-0, libgtk-3-0 Maintainer: The Chromium OS Authors <chromium-os-dev@chromium.org> Priority: optional Section: misc Filename: pool/main/c/cros-adapta/cros-adapta_0.1_all.deb Size: 792 SHA256: 885783a862f75fb95e0d389c400b9463c9580a84e9ec54c1ed2c8dbafa1ccbc5 SHA1: 23cbf5f11724d971592da9db9a17b2ae1c28dfad MD5sum: 27fdba7a27c84caa4014a69546a83a6b Description: Chromium OS GTK Theme This package provides symlinks which link the bind-mounted theme into the correct location in the container. Homepage: https://chromium.googlesource.com/chromiumos/third_party/cros-adapta/ Built-Using: Bazel Package: cros-apt-config Version: 0.12 Architecture: all Depends: apt-transport-https Maintainer: The Chromium OS Authors <chromium-os-dev@chromium.org> Priority: optional Section: misc Filename: pool/main/c/cros-apt-config/cros-apt-config_0.12_all.deb Size: 7358 SHA256: d6d21bdf348e6510a9c933f8aacde7ac4054b6e2f56d5e13e9772800fab13e9e SHA1: 51b23541fc8029725966bf45f0a98075cbb01dfa MD5sum: b3de74124b2947e0ad819416ce7eed78 Description: APT config for Chromium OS integration. This package installs the keyring for the Chromium OS integration apt repo, the source list, and APT preferences. Homepage: https://chromium.org Built-Using: Bazel Package: cros-garcon Version: 0.10 Architecture: all Depends: desktop-file-utils, xdg-utils Maintainer: The Chromium OS Authors <chromium-os-dev@chromium.org> Priority: optional Section: misc Filename: pool/main/c/cros-garcon/cros-garcon_0.10_all.deb Size: 1330 SHA256: 32430b920770a8f6d5e0f271de340e87afb32bd9c2a4ecc4e470318e37033672 SHA1: 46f24826d9a0eaab8ec1617d173c48f15fedd937 MD5sum: 4ab2fa3b50ec42bddf6aeeb93c1ef202 Description: Chromium OS Garcon Bridge. This package provides the systemd unit files for Garcon, the bridge to Chromium OS. Homepage: https://chromium.org Built-Using: Bazel Package: cros-guest-tools Version: 0.12 Architecture: all Depends: cros-garcon, cros-sommelier Recommends: bash-completion, cros-apt-config, cros-sommelier-config, cros-sudo-config, cros-systemd-overrides, cros-ui-config, cros-unattended-upgrades, cros-wayland, curl, dbus-x11, pulseaudio, unzip, vim Maintainer: The Chromium OS Authors <chromium-os-dev@chromium.org> Priority: optional Section: misc Filename: pool/main/c/cros-guest-tools/cros-guest-tools_0.12_all.deb Size: 10882 SHA256: 5f0a2521351b22fe3b537431dec59740c6cc96771372432fe3c7a88a5939884d SHA1: d37aab929c0c7011dd6b730bdc2052d7e232d577 MD5sum: 5d9fafa14a4f88108f716438c45cf390 Description: Metapackage for Chromium OS integration. This package has dependencies on all other packages necessary for Chromium OS integration. Homepage: https://chromium.org Built-Using: Bazel Package: cros-sommelier Version: 0.11 Architecture: all Depends: libpam-systemd Recommends: x11-utils, x11-xserver-utils, xkb-data Maintainer: The Chromium OS Authors <chromium-os-dev@chromium.org> Priority: optional Section: misc Filename: pool/main/c/cros-sommelier/cros-sommelier_0.11_all.deb Size: 1552 SHA256: 522fe94157708d1a62c42a404bcffe537205fd7ea7b0d4a1ed98de562916c146 SHA1: ec51d2d8641d9234ccffc0d61a03f8f467205c73 MD5sum: 8ed001a623ae74302d7046e4187a71c7 Description: sommelier base package. This package installs unitfiles and support scripts for sommelier. Homepage: https://chromium.org Built-Using: Bazel Package: cros-sommelier-config Version: 0.11 Architecture: all Depends: libpam-systemd, cros-sommelier Maintainer: The Chromium OS Authors <chromium-os-dev@chromium.org> Priority: optional Section: misc Filename: pool/main/c/cros-sommelier-config/cros-sommelier-config_0.11_all.deb Size: 1246 SHA256: edbba3817fd3cdb41ea2f008ea4279f2e276580d5b1498c942965c3b00b4bff1 SHA1: 762ca85f3f9cea87566f42912fd6077c0071e740 MD5sum: 767a8a8c9b336ed682b95d9dd49fbde5 Description: sommelier config for Chromium OS integration. This package installs default configuration for sommelier. that is ideal for integration with Chromium OS. Homepage: https://chromium.org Built-Using: Bazel Package: cros-sudo-config Version: 0.10 Architecture: all Depends: sudo Maintainer: The Chromium OS Authors <chromium-os-dev@chromium.org> Priority: optional Section: misc Filename: pool/main/c/cros-sudo-config/cros-sudo-config_0.10_all.deb Size: 810 SHA256: d9c1e2b677dadd1dd20da8499538d9ee2e4c2bc44b16de8aaed0f1e747f371a3 SHA1: 07b961e847112da07c6a24b9f154be6fed13cca1 MD5sum: 37f54f1e727330ab092532a5fc5300fe Description: sudo config for Chromium OS integration. This package installs default configuration for sudo to allow passwordless sudo access for the sudo group. Homepage: https://chromium.org Built-Using: Bazel Package: cros-systemd-overrides Version: 0.10 Architecture: all Depends: systemd Maintainer: The Chromium OS Authors <chromium-os-dev@chromium.org> Priority: optional Section: misc Filename: pool/main/c/cros-systemd-overrides/cros-systemd-overrides_0.10_all.deb Size: 10776 SHA256: 7b960a84d94be0fbe5b4969c7f8e887ccf3c2adf2b2dc10b5cb4856d30eeaab5 SHA1: 06dc91e9739fd3d70fa54051a1166c2dfcc591e2 MD5sum: 16033ff279b2f282c265d5acea3baac6 Description: systemd overrides for running under Chromium OS. This package overrides the default behavior of some core systemd units. Homepage: https://chromium.org Built-Using: Bazel Package: cros-ui-config Version: 0.11 Architecture: all Depends: cros-adapta, dconf-cli, fonts-croscore, fonts-roboto Maintainer: The Chromium OS Authors <chromium-os-dev@chromium.org> Priority: optional Section: misc Filename: pool/main/c/cros-ui-config/cros-ui-config_0.11_all.deb Size: 1280 SHA256: bc1c5513ab67c003a6c069d386a629935cd345b464d13b1dd7847822f98825f3 SHA1: 4193bd92f9f05085d480de09f2c15fe93542f272 MD5sum: 7e95b56058030484b6393d05767dea04 Description: UI integration for Chromium OS This package installs default configuration for GTK+ that is ideal for integration with Chromium OS. Homepage: https://chromium.org Built-Using: Bazel Package: cros-unattended-upgrades Version: 0.10 Architecture: all Depends: unattended-upgrades Maintainer: The Chromium OS Authors <chromium-os-dev@chromium.org> Priority: optional Section: misc Filename: pool/main/c/cros-unattended-upgrades/cros-unattended-upgrades_0.10_all.deb Size: 1008 SHA256: 33057294098edb169e03099b415726a99fb1ffbdf04915a3acd69f72cf4c84e8 SHA1: ec575f7222c5008487c76e95d073cc81107cad0b MD5sum: ae30c3a11da61346a710e4432383bbe0 Description: Unattended upgrades config. This package installs an unattended upgrades config for Chromium OS guest containers. Homepage: https://chromium.org Built-Using: Bazel Package: cros-wayland Version: 0.10 Architecture: all Maintainer: The Chromium OS Authors <chromium-os-dev@chromium.org> Priority: optional Section: x11 Filename: pool/main/c/cros-wayland/cros-wayland_0.10_all.deb Size: 886 SHA256: 06d26a150e69bda950b0df166328a2dae60ac0a0840f432b26dc127b842dd1ef SHA1: 48bd118c497b0a4090b126d7c3d8ec3aacced504 MD5sum: a495d16e5212535571adfd7820b733c2 Description: Wayland extras for virtwl in Chromium OS. This package provides config files and udev rules to improve the Wayland experience under CrOS. Homepage: https://chromium.org Built-Using: Bazel
Conclusion
It is quite neat that Chrome OS uses machine containers with LXD to maintain a Linux installation.
Apart from the apparent benefits of the Chromebook users, it makes sense to have a look at the implementation in order to figure out how to create a sort of lightweight Virtualbox clone (ability to run a desktop environment of any Linux distribution) that uses containers and LXD.
1 ping
[…] Αν θέλετε να μάθετε τα ενδότερα του θέματος, σας συστήνω να διαβάσετε την ανάλυση που έκανε ο Σίμος Ξενιτέλλης στο άρθρο «A closer look at Chrome OS using LXD to run Linux GUI apps (Project Crostini)«. […]