Chrome浏览器是一个非常重要的应用.它甚至成为我们平时工作而不可以缺失的工具.在今天的教程中,我们来展示如何把Chrome浏览器打包为一个snap应用.
我们知道,每当我们在电脑上安装我们的Chrome浏览器时,我们可以在如下的地址来下载我们的Chrome deb安装包:
https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
当然这是针对64位的机器来说的.我们如何在我们的snapcraft如何安装这个debian包呢?答案是使用dump plugin.为此,我们的snapcraft.yaml的内容如下:
snapcraft.yaml
name: mychrome # you probably want to 'snapcraft register <name>'
version: '0.2' # just for humans, typically '1.2+git' or '1.3.2'
summary: Chrome for snap # 79 char long summary
description: |
This is chrome app in snap format
grade: stable # must be 'stable' to release into candidate/stable channels
confinement: strict # use 'strict' once you have the right plugs and slots
apps:
mychrome:
command: desktop-launch $SNAP/opt/google/chrome/chrome
plugs: [unity7,home,x11,opengl,network,network-bind,browser-support,process-control,fuse-support]
parts:
chrome:
plugin: dump
source: https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb
stage-packages:
- overlay-scrollbar-gtk2
- libatk-adaptor
- libgail-common
- libcanberra-gtk-module
- libnss3-tools
- libglu1-mesa
# language support
- fonts-freefont-ttf
- ttf-freefont
- ttf-wqy-microhei
- fonts-wqy-microhei
# input method
- fcitx
- fcitx-frontend-gtk2
after: [desktop-gtk2]
在上面可以看出来,我们使用dump plugin来安装我们的google-chrome-stable_current_amd64.deb文件.
为了能够让我们的chrome正确运行,我们也同时把它所需要的其它的debian包一并打入到我们的snap包中.
stage-packages:
- overlay-scrollbar-gtk2
- libatk-adaptor
- libgail-common
- libcanberra-gtk-module
- libnss3-tools
- libglu1-mesa
# language support
- fonts-freefont-ttf
- ttf-freefont
- ttf-wqy-microhei
- fonts-wqy-microhei
# input method
- fcitx
- fcitx-frontend-gtk2
这些都是从Ubuntu Archive来的debian安装包,它们将最终被打入到我们的snap包中.也许有人问:为什么我们不可以用同样的方法(stage-packages)来打包我们的google-chrome-stable_current_amd64.deb?这里的原因就是它不来自于Ubuntu Archive,所以stage-packages不可以帮我们安装.在这里,我们由于在应用中需要中文的显示,所以我也把相应的语言字体包打入到我们的应用之中.对于其它语言的支持,开发者可以自己添加到语言的列表中.另外为了配合我们的输入法的输入,我也把相应的输入法的包打入到我们的最终的snap包中.
另外由于这个应用是一个gtk的应用,所有我们必须使用由desktop-gtk2所提供的desktop-launch来启动我们的应用.由于这个remote part(https://wiki.ubuntu.com/snapcraft/parts)必须是先于我们的chrome part,所有我们使用了after来调整在build过程中的先后顺序.
在这里值得注意的是我们使用两个非自动连接的plug/slot接口(interfaces)(http://snapcraft.io/docs/reference/interfaces):process-control及fuse-support.将来如果该应用发布到stable channel的话,并且我们不以--devmode的选项来安装,我们可以使用如下的命令来安装并需要做相应的手动连接:
$ sudo snap install mychrome
$ sudo snap connect mychrome:fuse-support ubuntu-core:fuse-support
$ sudo snap connect mychrome:fuse-support ubuntu-core:process-control
由于目前我的mychrom应用是发布到beta的channel里,并且还有个别的安全问题没有完全得到解决.我们可以使用--devmode来安装:
$ sudo snap install mychrome --beta --devmode
等安装完我们的chrome应用后,我们可以在我们的dash中找到相应的Chrome图标.我们可以直接使用这个图标来启动我们的应用:
我们项目的源码在:https://github.com/liu-xiao-guo/mychrome