作为
应用格式包. snap包和rpm/deb包, 有何差别?
-
https://weibo.com/ttarticle/p/show?id=2309404562460668723287
-
-
安装完snap, 根目录下会出现如/dev/loop0的挂载点,这些挂载点正是snap软件包的目录。Snap使用了squashFS文件系统,一种开源的压缩,只读文件系统.
-
-
一旦snap被安装后,其就有一个只读的文件系统和一个可写入的区域。应用自身的执行文件、库、依赖包都被放在这个只读目录,意味着该目录不能被随意篡改和写入。
-
-
squashFS文件系统的引入,使得snap的安全性要优于传统的Linux软件包。同时,每个snap默认都被严格限制(confined),即限制系统权限和资源访问。但是,可通过授予权限策略来获得对系统资源的访问。这也是安全性更好的表现。
-
-
Snap可包含一个或多个服务,支持cli(命令行)应用,GUI图形应用以及无单进程限制。因此,你可以在单个snap下 <调用一个或多个服务>。对于某些多服务的应用来说,非常方便。
-
-
snap间相互隔离,那么怎么交换资源呢?答案是可以通过interface(接口)定义来做资源交换。interface被用于让snap可访问OpenGL加速,声卡播放、录制,网络和HOME目录。Interface由slot和plug组成即提供者和消费者。
-
Snap的基本命令:install,remove,find,list,infor,refresh等等。
-
-
1.安装snap,可使用以下命令或图形界面的store通过鼠标点击操作:
-
-
sudo snap install code //安装code snap
-
-
2.卸载snap
-
-
sudo snap remove code
-
-
3.搜索snap
-
-
snap find code
-
-
4.查看snap信息
-
-
snap info code
-
-
5.查看已安装的snap
-
-
snap list
-
-
6.更新snap
-
-
sudo snap refresh code channel=latest/stable //channel来指定通道版本
-
https://ubuntu.com/tutorials/create-your-first-snap#1-overview
-
-
snap 是把引用和依赖关系捆绑起来, 这样在不同的linux版本时可以避免环境依赖问题.
-
Snapcraft 是一个很好的制作snap的工具.
-
制作流程查看 网址. 一个简单的 hello world 制作.
-
制作snap包的范例.
-
-
前提:
-
1. timg 项目. https://github.com/hzeller/timg
-
Makefile 在 src/ 子文件夹中而不是项目的根文件夹中
-
依赖两个开发包(GraphicsMagic++ 和 WebP)
-
使用 make 就能生成可执行文件
-
-
为了让 timg 以 snap 包形式运行,我们需要将这两个库捆绑在 snap 包中(或者静态链接它们)
-
-
ubuntu@snaps:~$ mkdir timg-snap 新建一个目录
-
ubuntu@snaps:~$ cd timg-snap/
-
ubuntu@snaps:~/timg-snap$ snapcraft init 创建snapcraft.yaml的工作框架
-
Created snap/snapcraft.yaml. 此时生成一个新的yaml文件
-
Edit the file to your liking or run `snapcraft` to get started
-
ubuntu@snaps:~/timg-snap$ cat snap/snapcraft.yaml
-
name: my-snap-name # you probably want to 'snapcraft register 'version: '0.1' # just for humans, typically '1.2+git' or '1.3.2'summary: Single-line elevator pitch for your amazing snap # 79 char long summarydescription: |
-
This is my-snap's description. You have a paragraph or two to tell the most important story about your snap. Keep it under 100 words though, we live in tweetspace and your description wants to look good in the snap store.
-
-
grade: devel # must be 'stable' to release into candidate/stable channelsconfinement: devmode # use 'strict' once you have the right plugs and slotsparts: my-part: # See 'snapcraft plugins
填充新生成的
snapcraft.yaml 并编译
-
snapcraft.yaml 配置文件的上半部分是元数据。我们需要一个一个把它们填满,这算是比较容易的部分。元数据由以下字段组成:
-
-
name (名字)—— snap 包的名字,它将公开在 Ubuntu 商店中。
-
-
version (版本)—— snap 包的版本号。可以是源代码存储库中一个适当的分支或者标记,如果没有分支或标记的话,也可以是当前日期。
-
-
summary (摘要)—— 不超过 80 个字符的简短描述。
-
-
description (描述)—— 长一点的描述, 100 个字以下。
-
-
grade (等级)—— stable (稳定)或者 devel (开发)。因为我们想要在 Ubuntu 商店的稳定通道中发布这个 snap 包,所以在 snap 包能正常工作后,就把它设置成 stable。
-
-
confinement (限制)—— 我们首先设置为 devmode (开发模式),这样系统将不会以任何方式限制 snap 包。一旦它在 devmode下能正常工作,我们再考虑选择 strict (严格)还是 classic(传统)限制。
-
-
-
将 grade (等级)设置为 stable (稳定)
-
将 confinement 限制设置为 devmode (开发模式)
-
-
也可以通过命令设定名字
-
$ snapcraft register timg 注册名字
-
-
parts:的意义
-
-
将最初的配置:
-
-
parts: my-part:
-
# See 'snapcraft plugins'
-
plugin: nil
-
修改为:
-
-
parts: timg: source: https://github.com/hzeller/timg.git
-
plugin: make
-
-
-
运行下 snapcraft prime 命令
-
提示 snapcraft 无法在源代码中找到 Makefile 文件,正如我们之前所暗示的,Makefile 位于 src/ 子文件夹中。那么,我们可以让 snapcraft 使用 src/ 文件夹中的 Makefile 文件吗?
-
-
更新下 parts:
-
parts: timg: source: https://github.com/hzeller/timg.git
-
source-subdir: src plugin: make
-
-
再次运行 snapcraft clean; snapcraft prime
-
提示snapcraft 找不到 GraphicsMagick++ 这个开发库.
-
修改 parts
-
parts: timg: source: https://github.com/hzeller/timg.git
-
source-subdir: src plugin: make build-packages:
-
- libgraphicsmagick++1-dev 这个是包名
-
- libwebp-dev
-
-
再次运行 snapcraft clean; snapcraft prime 可以编译成功.
-
-
在 build/ 子目录中,我们可以找到 make 的输出结果。由于我们设置了 source-subdir: 为 src,所以 artifacts: 的基目录为 build/src。在这里我们可以找到可执行文件 timg,我们需要将它设置为 artifacts: 的一个参数。通过 artifacts:,我们可以把 make 输出的某些文件复制到 snap 包的安装目录(在 prime/ 中)。
-
-
文件 parts: 部分的内容:
-
-
parts: timg: source: https://github.com/hzeller/timg.git
-
source-subdir: src plugin: make build-packages:
-
- libgraphicsmagick++1-dev
-
- libwebp-dev artifacts: [timg]
-
再次运行 snapcraft clean; snapcraft prime
-
则会看到字样
-
Staging timg
-
Priming timg
snapcraft 生成了可执行文件,但没有导出给用户使用的命令。
接下来我们需要通过 apps:
导出一个命令
-
首先我们需要知道命令在 prime/ 的哪个子文件夹中:
-
-
ubuntu@snaps:~/timg-snap$ ls prime/
-
meta/ snap/ timg* usr/
-
-
-
它在 prime/ 子文件夹的根目录中。现在,我们已经准备好要在 snapcaft.yaml 中增加 apps: 的内容
-
-
在 part: 段前面加上
-
apps:
-
timg:
-
command: timg
-
-
再次运行 snapcraft prime,然后测试下生成的 snap 包:
-
-
ubuntu@snaps:~/timg-snap$ snapcraft prime
-
Skipping pull timg (already ran)
-
Skipping build timg (already ran)
-
Skipping stage timg (already ran)
-
Skipping prime timg (already ran)
-
ubuntu@snaps:~/timg-snap$ snap try --devmode prime/
-
timg 20170226 mounted from /home/ubuntu/timg-snap/prime
-
-
我们可以通过 snap try --devmode prime/ 启用该 snap 包然后测试 timg 命令。这是一种高效的测试方法,可以避免生成 .snap 文件,并且无需安装和卸载它们,因为 snap try prime/ 直接使用了 prime/ 文件夹中的内容。
限制 snap
到目前为止,snap 包一直是在不受限制的开发模式下运行的。让我们看看如何限制它的运行
-
ubuntu@snaps:~/timg-snap$ snap list
-
Name Version Rev Developer Notes
-
core 16-2 1337 canonical -
-
timg 20170226 x1 devmode,try
-
ubuntu@snaps:~/timg-snap$ snap try --jailmode prime # 临时使用限制模式(jailmode)(confinement: strict)
-
timg 20170226 mounted from /home/ubuntu/timg-snap/prime
-
ubuntu@snaps:~/timg-snap$ snap list
-
Name Version Rev Developer Notes
-
core 16-2 1337 canonical -
-
timg 20170226 x2 jailmode,try
-
-
修改snapcraf.yaml 为 confinement: strict
-
此时应用只能访问 $HOME.
-
-
如果希望 timg snap 包能访问整个文件系统,我们可以设置传统限制(confinement: classic)来实现。
打包和测试
让我们打包这个 snap,制作 .snap 文件,然后在新安装的 Ubuntu 系统上对它进行测试。
-
ubuntu@snaps:~/timg-snap$ snapcraft
-
Skipping pull timg (already ran)
-
Skipping build timg (already ran)
-
Skipping stage timg (already ran)
-
Skipping prime timg (already ran)
-
Snapping 'timg' \
-
Snapped timg_20170226_amd64.snap
-
-
在一个全新容器中测试这个snap应用.在一个全新安装的 Linux 系统中测试 snap 包是很重要的,因为这样才能确保 snap 包中包含所有必须的代码库
-
-
在容器内执行
-
-
$ sudo apt install squashfuse
-
$ sudo snap install timg_20170226_amd64.snap 此时会开机运行 run_cmd的那个命令.
-
然后执行测试.
发布到 Ubuntu 商店
-
https://snapcraft.io/docs/build-snaps/publish
-
-
对于 timg 来说,我们设置了严格限制和稳定等级。因此,我们会将它发布到稳定通道。
-
-
$ snapcraft push timg_20170226_amd64.snap
-
得到 revision 6 of 'timg' created 字样.即修订版本好.
-
$ snapcraft release timg 6 stable 或者 beta通道也可以.
阅读(1838) | 评论(0) | 转发(0) |