ChromiumOS是谷歌的一款云操作系统,秉承了Chrome浏览器快速、简洁、安全的特性。相比Windows、Mac OS等传统的本地操作系统来说,一种新的、应用“云计算”来实现大部分功能、本地计算机只存储少量信息的新操作系统模式渐渐崭露头角。Chromium OS就是这样的一款轻量型、云计算为主的操作系统。目前Google与多家一线终端制造商合作开发出了基于ChromiumOS的ChromeBook系列产品,比如三星的Series 5系列。
本文目标
目标1:原生ChromiumOS的编译步骤、方法和注意事项
目标2:更换原生ChromiumOS的开机动画
目标3:简述ChromiumOS的编译原理
ChromiumOS的相关资源
网站 | 链接 |
---|---|
Chromium官方网站 | https://www.chromium.org |
ChromiumOS官方网站 | https://www.chromium.org/chromium-os |
ChromiumOS代码 | https://chromium.googlesource.com/chromiumos |
ChromiumOS文档入口 | https://chromium.googlesource.com/chromiumos/docs/ |
ChromiumOS文档 | https://chromium.googlesource.com/chromiumos/docs/+/HEAD/README.md |
ChromiumOS磁盘映像结构 | https://chromium.googlesource.com/chromiumos/docs/+/HEAD/disk_format.md |
ChromiumOS启动 | https://www.chromium.org/chromium-os/chromiumos-design-docs/boot-design |
编译ChromiumOS
0x01 确认环境依赖
- Ubuntu Linux (version 18.04 - Bionic)(需64位系统)
- 一个具有sudo权限的账号
- 大内存机器(本次编译是在编译机上架设的虚拟机,该虚拟机尽量把CPU都选上,内存开辟到20G以上,磁盘在100G以上)
0x02 安装依赖软件,安装git,python等软件
1 | $ sudo apt-get install git gitk git-gui curl xz-utils python3-pkg-resources python3-virtualenv python3-oauth2client |
Git安装完毕之后使用如下命令配置Git
1 | $ git config --global user.email "you@example.com" |
如果不进行配置,在下载代码时,可能会出现如下的错误:
0x03 安装Google的代码下载工具depot_tools
1 | $ mkdir -p /home/chrome/apps/depot_tools |
代码下载完毕之后,我们将depot_tools放到系统目录中。
1 | $ sudo vi /etc/profile |
0x04 设置sudoers超时时间
如果不想每次启动新终端都重新输入密码,在配置文件中禁止tty_tickets即可,但此举使得所有进程都使用同一个sudo任务,具体参看跨终端sudo。
1 | $ cd /tmp |
上述方法为官方教程,但我实验过后发现如下问题:
unchanged?也就是说,没有改变,没有生效??!!看来官方教程也有错误。所以我用了其他的方法。
新方法如下所述:
第一步,先设置visudo的编辑器,Ubuntu默认采用nano作为visudo的编辑器,我用不习惯,先变成vi再说(如果你习惯了nano,那么不用做这一步)。
使用如下命令编辑/etc/sudoers文件。
1 $ sudo vi /etc/sudoers打开文件之后,在文件中加入如下一行命令即可:
1 Defaults editor=/usr/bin/vi, env_editor添加内容之后,如下图所示:
第二步,我们使用如下命令编辑 /etc/sudoers这个文件。
1 $ sudo visudo从第一步来看,既然我们可以使用vi命令来编辑这个文件,为什么还要用“sudo visudo”呢?
答案:千万不要使用普通的编辑命令如vi来修改sudoers文件。由于该文件的特殊性,错误的语法将导致你无法在系统里获取提升权限。正确的修改方式是使用visudo命令。visudo命令将打开一个文字编辑器,但是在保存文件的时候,将会验证sudoers文件的语法。这将防止你配置错误导致sudo命令受阻。第三步,打开文件之后,我们在文件中添加如下内容。
1
2
3 Defaults !tty_tickets
Defaults timestamp_timeout=180添加内容之后,如下图所示:
退出编辑,不需要使用其他的命令,修改的配置即刻生效!
0x05 下载源代码
按照官方指引,官方希望大家把ChromiumOS的代码下载到当前用户home目录的根节点下。比如当前的用户为chrome,那么我们应当将源代码下载到 /home/chrome/chromiumos目录。当然,这里修改成你的账户名。
所以我们创建一个目录:
1 | $(outside) mkdir -p /home/chrome/chromiumos |
根据网速的不同,下载有可能需要几个小时不等,需要慢慢耐心等待。下面是一些下载过程中的截图,供参考。
0x06 下载构建环境
1 | $(outside) cros_sdk |
注意:
- 1.cros_sdk不需要经常下载,基本上下载一次即可。
- 2.如需删除chroot,请使用cros_sdk –delete正确删除它。
0x07 构建编译脚本
1 | # 以下所有的步骤,都在chroot之后,如果你退出了,再次编译时,务必使用cros_sdk再次进入chroot |
0x08 编译各种资源包
1 | # 设置密码:当我们编译成功后,进入ChromiumOS之后,可以进入命令界面 |
编译资源包需要的时间也不少,在当前的编译机上,大概需要60m到80m之间。
0x09 构建映像
1 | $(inside) ./build_image --board=${BOARD} --noenable_rootfs_verification |
构建完成之后,生成的映像文件目录:
latest是指向最新映像包的软连接,进入该目录之后,我们会看到生成好的映像文件。
/home/chrome/chromiumos/src/build/images/amd64-generic/latest/chromiumos_image.bin
该文件就是我们最终需要的映像文件,将其拷贝出来,在其他机器上使用U盘烧录工具,写入U盘,然后我们使用U盘引导系统,进行体验。
更换开机动画
首先,先说明两个目录:
/home/chrome/chromiumos/src/platform/chromiumos-assets
该目录下是我们的代码目录,我们使用修改后的序列图替换本处的图片。系统会自动编译该目录,然后将该目录下的图片放到编译后的正确的目录(也就是下面这个目录)。/home/chrome/chromiumos/chroot/build/amd64-generic/usr/share/chromeos-assets
该目录下的存放真实的启动序列图,你的图片到底有没有编译进来,可以到这个目录来验证。
所以,我们先使用如下的命令,告诉编译系统,使用本地资源包,而不是从网上下载。
1 | $(inside) cros_workon --board=${BOARD} start chromeos-base/chromiumos-assets |
1 | # 如果在以前代码的基础上构建的,已经设置过密码,可以忽略 |
执行完build_packages命令之后,我们可以到下述目录去看看看我们的资源包是不是替换了。
将系统安装从USB安装到运行机的硬盘上
0x01 使用U盘引导进入ChromiumOS的图形界面(比如那个选择wifi的地方)
0x02 在进入图形界面之后,使用组合键:Ctrl + Alt + F2,进入命令界面
账户:chronos
密码:编译时使用./set_shared_user_password.sh设置的密码
0x03 登录系统之后,使用如下命令将系统从U盘安装到运行机的硬盘上
1 | $sudo /usr/sbin/chromeos-install --dst /dev/mmcblk1 |
安装成功之后,提示移除U盘重启机器。拔掉U盘,重新启动机器,系统从硬盘启动,进入ChromiumOS。
至此,我们已经完整的编译出了一个ChromiumOS,并且将其安装到硬盘上。
综上所有命令
1 | $ (outside) mkdir -p /home/chrome/chromiumos |
参考资料
1.https://baike.baidu.com/item/Chromium%20OS/7569945?fr=ge_ala
2.https://chromium.googlesource.com/chromiumos/docs/+/HEAD/developer_guide.md
3.https://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html#_setting_up
4.https://chromium.googlesource.com/chromiumos/docs/+/HEAD/tips-and-tricks.md#How-to-make-sudo-a-little-more-permissive