不再尴尬的ChromeOS

ChromeOS曾经是一个非常尴尬的存在。

最早发布于2009年7月,在相当长的一段时间内,ChromeOS的功能几乎与Chrome浏览器可以划上完全的等号。以ChromeOS为载体的硬件产品也几乎全部针对的是中低端市场以及教育业。从一方面来说,廉价的ChromeOS硬件设备对于在第三世界国家中计算机的普及起到了积极的作用。也有报道曾说,在美国,ChromeOS在教育市场也占有不小的份额。

但也有许多人认为ChromeOS是一个非常失败的产品,当Google推出第一代Chromebook Pixel时,很多人不理解为什么Google会做一款对于ChromeOS来说硬件配置完全过剩的产品。在2014年底参加杭州GDG(Google Developer Group)的线下活动时,我第一次见到了Chromebook Pixel。

Image for post
Image for post
Image for post
Image for post

毫无疑问当年的ChromeOS生态非常匮乏。用户花费了与Macbook Pro接近的价格,购买到的产品的主要功能却不过是一个Chrome浏览器罢了。除了浏览网页之外,Chrome App Store里的应用生态……(或者说真的有这所谓的生态吗?)大部分的应用不过只是打开一个网页版罢了。当年我对于第一代Chromebook Pixel留下的最深刻的印象是,它的触控板的灵敏度非常高,甚至可以和Macbook Pro的触控板媲美。仅此而已。

在此之后的很长一段时间内都不曾再继续关注ChromeOS的发展。直到Google宣布ChromeOS可以运行Android应用,也仅仅是这两年的事情。但仅仅是Android+ChromeOS,似乎依然不能成为许多人的生产力工具。但一切在2018年发生了巨大的变化。

一个叫做Crostini的项目的诞生完完全全改变了ChromeOS的未来。何为Crostini?Crostini其实可以算是一种Linux容器技术,与Docker类似,由LXC发展而来。Crostini最早在2018年1月出现在了Chromium的源代码中。在2月份的时候,Pixelbook在Dev Channel的ChromeOS 66版本上最早体验到了该功能。在2018年Google I/O大会前夕,已经有相当一部分Linux应用可以在Pixelbook上运行。如今,这项功能已经随着ChromeOS 69的发布进入了Stable Channel,虽然在功能介绍中依然打着Beta的字样。

我没有ChromeOS的硬件设备,但是这半年多来一直在关注这项功能的进展。随着时间的推移,如今Crostini已不再是Pixelbook专属的功能。甚至在ChromeOS的第三方版本Cloudready中也已支持该功能。本文的写作就是在安装了Cloudready的虚拟机中完成的。

本文的主要目的就是为了简要介绍使用Cloudready体验Crostini这个功能时会遇到的坑以及解决方案。

Cloudready是一家根据Chromium源代码,提供ChromeOS解决方案的商业公司。除了付费版本之外,也有提供家庭版,可以直接安装在实体机上,特别适合一些配置比较弱,年代比较久远的硬件设备,且有一个制作好的虚拟机OVA镜像,可以在VMware,VirtualBox等虚拟化软件中直接运行。

  1. 下载Cloudready的虚拟化镜像。

2. 使用VMware或VirtualBox等虚拟化软件导入下载下来的OVA镜像。

3. 对于预设的硬件配置做一些调整。

1) 以VMware为例,建议在CPU配置中开启“虚拟化Intel VT-x/EPT或AMD-V/RVI”以及“虚拟化CPU性能计数器”以及“虚拟化IOMMU(IO内存管理单元)”三个选项。

2) OVA包中默认配置的磁盘大小只有10GB。开启Crostini功能后10GB的空间几乎不能做任何事。因此首先在VMware的硬件配置中将硬盘的容量扩大到一个合理的水平。建议至少30GB以上。

但是做完了这一步仅仅是扩大的硬盘的大小,我们还需要调整ChromeOS的分区来利用新增加的空间。起初我一直在尝试直接在ChromeOS内部直接调整分区。但是多次尝试后发现,ChromeOS的Shell自带的诸如fdisk, parted等工具都是阉割版,并不能直接调整分区的大小。后来终于找到的解决方案是:

  • 下载GParted的Live ISO(https://gparted.org/download.php)。在虚拟化软件中设置以GParted的Live ISO作为引导启动。然后直接在GParted的GUI界面中调整分区大小即可。
Image for post
Image for post
  • ChromeOS的分区结构如下:
Disk /dev/sda: 50 GiB, 53687091200 bytes, 104857600 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: 5EA16EDE-F568-6C47-87F6-6B4E0E687B8F

Device Start End Sectors Size Type
/dev/sda1 64 64 1 512B ChromeOS reserved
/dev/sda2 65 65 1 512B ChromeOS reserved
/dev/sda3 66 66 1 512B ChromeOS reserved
/dev/sda4 67 67 1 512B ChromeOS reserved
/dev/sda5 68 68 1 512B ChromeOS reserved
/dev/sda6 69 69 1 512B ChromeOS reserved
/dev/sda7 70 70 1 512B ChromeOS reserved
/dev/sda8 71 71 1 512B ChromeOS reserved
/dev/sda9 72 72 1 512B ChromeOS reserved
/dev/sda10 73 73 1 512B ChromeOS reserved
/dev/sda11 74 74 1 512B ChromeOS reserved
/dev/sda12 75 75 1 512B ChromeOS reserved
/dev/sda13 76 76 1 512B ChromeOS reserved
/dev/sda14 77 77 1 512B ChromeOS reserved
/dev/sda15 78 78 1 512B ChromeOS reserved
/dev/sda16 14864450 104855551 89991102 42.9G Microsoft basic data
/dev/sda17 20546 53313 32768 16M ChromeOS kernel
/dev/sda18 8622146 14864449 6242304 3G ChromeOS root fs
/dev/sda19 53314 86081 32768 16M ChromeOS kernel
/dev/sda20 2379842 8622145 6242304 3G ChromeOS root fs
/dev/sda21 16514 16514 1 512B ChromeOS kernel
/dev/sda22 16515 16515 1 512B ChromeOS root fs
/dev/sda23 86082 2183233 2097152 1G Microsoft basic data
/dev/sda24 16516 16516 1 512B ChromeOS reserved
/dev/sda25 16517 16517 1 512B ChromeOS reserved
/dev/sda26 130 16513 16384 8M unknown
/dev/sda27 2183234 2314305 131072 64M EFI System
/dev/sda28 2183234 2314305 131072 64M unknown

Partition table entries are not in disk order.

注意,这里有句话:“Partition table entries are not in disk order”。当你使用GParted引导启动之后,实际看到的分区结构是这样的

Image for post
Image for post

/dev/sda16实际上位于最末端。所以只要把/dev/sda16扩容至你想要的大小即可。

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

另外需要注意的有:

  1. 建议在VMware中导入了OVA镜像后,进入一次ChromeOS系统,确保能正常工作。然后先不要升级ChromeOS的版本。

因为在使用中发现,如果先升级然后再调整分区,系统版本会回滚到OVA镜像最原始的系统版本。

4. 所以目前Linux App能运行的到底有哪些?

先开启Linux的功能。

Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post
Image for post

目前Crostini安装的Linux发行版是Debian Stretch。仅凭我目前十分有限的测试来看,VSCode运行非常平稳,命令行程序中,比如Rust的自动安装程序也把Rust正确装上了。Docker官网提供的一键安装脚本也能用,但是目前装上的Docker版本(Docker-ce 18.06)存在一个bug,导致在启动容器的时候会失败,根据社区的反馈来看,这个bug已经被Docker上游的runc修复,预计在下一次更新中就能正常使用了:

PyCharm看起来似乎能用,但是在启动的过程中导致ChromeOS黑屏重启了。不知道是因为虚拟机的内存太小(4GB)还是其他原因。因为据Google的说法,Android Studio都能正常用了,那Intellij的那一套全家桶离正常使用也不远了。除此之外,能用的还有1Password(使用1Password X)等。

存在的问题包括:

  1. 当Cloudready版本的ChromeOS装在VMware等虚拟机上时,显示分辨率无法调整,只有640x480,但是安装在实体机上时应该没有这个问题。正常的Chromebook设备就更加不会有这个问题了。

总之,我觉得在经过了这么多年的发展之后,ChromeOS在我看来终于走出了一条正确的道路。今后,一个ChromeOS设备集ChromeOS+Android+Linux桌面应用于一身,而且是在同一个操作系统下可以同时使用这三者,可以预见的是,Chromebook已经完全可以作为许多程序员的专业生产力工具了。我不好说目前我碰到的这些bug是Cloudready版本在VMware里面的bug,还是Crostini这个项目本身的bug,但是至少这条发展的道路是非常正确的。

那么问题来了,Google,何时更新Pixelbook的配置呢?

Update:

  1. Steam on ChromeOS works
Image for post
Image for post

前段时间推出的基于Proton的Steam Play也能启用。尝试安装了四个游戏,分别是TIS-100, Limbo,BattleBlock Theater和Replica. 前两个似乎都是原生Linux版本,Replica在启动的时候提示基于Proton启动。

Image for post
Image for post

TIS-100完全正常使用。

Image for post
Image for post

Limbo卡在了启动界面,按键没有任何反应(

BattleBlock Theater和Replica都崩溃了。根本无法启动。

Written by

Developer || Ingress Resistance || INFJ || PGP: 0x7E1EB1851D017D3D || https://jinwei.me

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store