.snap包是Ubuntu 16.04 LTS发布时引入的新应用格式包,当前主流的Linux发行版均支持snap格式的包。本文介绍snap包的相关使用。
介绍
snap 包的优势:
- 安全,snap 安装时在根目录下会出现如
/dev/loop0的挂载点,这就是snap软件包的目录- Snap 使用 squashFS 文件系统(一种开源的压缩,只读文件系统,基于GPL协议发行)
- 一旦 snap 被安装后,其就有一个只读的文件系统和一个可写入的区域。应用自身的执行文件、库、依赖包都被放在这个只读目录,意味着该目录不能被随意篡改和写入
- 每个snap默认都被严格限制(confined),即限制系统权限和资源访问。当然可通过授予权限策略来获得对系统资源的访问
- snap 包支持通过
interface(接口)定义来做资源交换
snap 商店
snap 商店是 snap 包的仓库,使用 snapcraft 发布,release 类型包括:
stable:稳定candidate:候选beta:测试edge:边缘
本质
snap 包本质包含一个私有的 root 文件系统,里面包含了依赖的软件包
# snap 文件包
$ file /var/lib/snapd/snaps/go_10008.snap
/var/lib/snapd/snaps/go_10008.snap: Squashfs filesystem, little endian, version 1024.0, compressed, -8706422325634924544 bytes, 1043595264 inodes, blocksize: 512 bytes, created: Mon Jul 26 11:05:07 1982
# 借助 loop 设备只读方式挂载在 /snap/go/10008,卸载时,loop 占用会释放
$ mount -l | grep go
/var/lib/snapd/snaps/go_10008.snap on /snap/go/10008 type squashfs (ro,nodev,relatime,errors=continue,x-gdu.hide)
$ df -lh | grep go
/dev/loop8 106M 106M 0 100% /snap/go/10008
# 以 go 命令为例,执行 go 命令时,通过 /usr/bin/snap 转发到 /snap/go/10008/bin/go
$ which go
/snap/bin/go
$ ls -lhart /snap/bin/go
lrwxrwxrwx 1 root root 13 Jan 11 15:01 /snap/bin/go -> /usr/bin/snap
$ file /usr/bin/snap
/usr/bin/snap: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=246e9f196e72a715fe7e9f2e2bc859ed9f33234c, for GNU/Linux 3.2.0, stripped
$ ls /snap/go/10008/bin/
go gofmt使用
- 安装 snapd
apt install snapd- 删除 snapd
apt purge snapdhelp
基础使用
安装
安装软件,可使用如下命令或图形界面的 Ubuntu software store 完成:
sudo snap install snap-store卸载
sudo snap remove snap-store搜索
snap find snap-store查看 snap 信息
snap info snap-store查看已安装的 snap
snap list更新snap
//channel来指定通道版本
sudo snap refresh snap-store channel=latest/stableAccount
$ snap login
Personal information is handled as per our privacy notice at
https://www.ubuntu.com/legal/dataprivacy/snap-store
Email address: 8@xiexianbin.cn
Password of "8@xiexianbin.cn":
Login successful扩展
- https://snapcraft.io/ 发布 snap 包