一、简介
.snap 是Ubuntu自16.04开始引入的一种新的软件包,其目的是在任何发行版、任何硬件设备上都能方便的运行软件。其原理是通过在根目录创建一个/snap子目录,控制其权限,里面的所有内容设置为只读,以沙盒形式运行软件。
.snap包的后端是snapd,类似于dpkg处理.deb一样,不过.snap除了包含软件本体,还包含了从glibc开始所有运行软件所必须的类库,因此保证了.snap包安装到其他发行版,也能保持极大的兼容性。同时这种独特的运行模式使得软件可以随时更新版本而不用担心破坏系统类库,解决了大多数发行版只能从仓库安装相对固定的软件版本的尴尬问题。
二、安装
目前很多发行版已主动或被动的支持了snapd,列出几个
archlinux
sudo pacman -S snapd
#允许snapd到systemd进程:
sudo systemctl enable --now snapd.socket
Debian(stretch+)
sudo apt install snapd
fedora
sudo dnf copr enable zyga/snapcore
sudo dnf install snapd
# 允许snapd到systemd进程:
sudo systemctl enable --now snapd.service
#SELinux处于试验性支持,目前可以:
sudo setenforce 0
#坚持开启,编辑 /etc/selinux/config
设置 SELINUX=permissive ,重启。
Ubuntu(16.04+)
sudo apt install snapd
其他发行版可以到snapcraft.io/docs/core/install查看。
三、打包
打包.snap,我推荐使用canonical主导的官方项目snapcraft,项目官网snapcraft.io。通过较为简单的配置步骤,就能打包出标准的.snap软件包。类似于deb打包,snapcraft支持编译+封装。
四、使用
几个有用的snap命令:
1、安装
sudo snap install <software> 从远程仓库获取并安装软件
sudo snap install --devmode <software> 或
sudo snap install --dangerous <software> 可以安装本地.snap包。
2、更新
sudo snap refresh [software]
如果不带软件名参数,则更新所有已安装软件。
3、卸载
sudo snap remove <software>
4、列出本地已安装snappy程序
snap list
5、搜索远程仓库
snap find [software]
也可以在uappexplorer.com搜索所有仓库里的存货。
6、snap --help 可以获取其他有用信息。
五、软件仓库
目前默认使用Canonical搭建的仓库,如果你想搭建自己的仓库,可以到snapcraft上寻找相关文档。
六、与flatpak有何不同?
从技术角度上看(文档和新闻),两者区别不大,都采用沙盒+捆绑底层类库的做法;
从目的角度看,两者的出发点也都是解决生态系统碎片化的问题,使开发者可以一次打包,用户就随处运行,无论哪个发行版,在不必重编译和打包的前提下方便的安装和更新应用,当然双方也有其他方面的考虑;
目前谁的软件仓库更强大?毫无疑问是snappy,仓库里目前已经有600余质量不一的软件。而flatpak目前还是散兵游勇一般,有几家软件商提供了.flatpak格式供下载,没有统一的软件中心。
.snap 是Ubuntu自16.04开始引入的一种新的软件包,其目的是在任何发行版、任何硬件设备上都能方便的运行软件。其原理是通过在根目录创建一个/snap子目录,控制其权限,里面的所有内容设置为只读,以沙盒形式运行软件。
.snap包的后端是snapd,类似于dpkg处理.deb一样,不过.snap除了包含软件本体,还包含了从glibc开始所有运行软件所必须的类库,因此保证了.snap包安装到其他发行版,也能保持极大的兼容性。同时这种独特的运行模式使得软件可以随时更新版本而不用担心破坏系统类库,解决了大多数发行版只能从仓库安装相对固定的软件版本的尴尬问题。
二、安装
目前很多发行版已主动或被动的支持了snapd,列出几个
archlinux
sudo pacman -S snapd
#允许snapd到systemd进程:
sudo systemctl enable --now snapd.socket
Debian(stretch+)
sudo apt install snapd
fedora
sudo dnf copr enable zyga/snapcore
sudo dnf install snapd
# 允许snapd到systemd进程:
sudo systemctl enable --now snapd.service
#SELinux处于试验性支持,目前可以:
sudo setenforce 0
#坚持开启,编辑 /etc/selinux/config
设置 SELINUX=permissive ,重启。
Ubuntu(16.04+)
sudo apt install snapd
其他发行版可以到snapcraft.io/docs/core/install查看。
三、打包
打包.snap,我推荐使用canonical主导的官方项目snapcraft,项目官网snapcraft.io。通过较为简单的配置步骤,就能打包出标准的.snap软件包。类似于deb打包,snapcraft支持编译+封装。
四、使用
几个有用的snap命令:
1、安装
sudo snap install <software> 从远程仓库获取并安装软件
sudo snap install --devmode <software> 或
sudo snap install --dangerous <software> 可以安装本地.snap包。
2、更新
sudo snap refresh [software]
如果不带软件名参数,则更新所有已安装软件。
3、卸载
sudo snap remove <software>
4、列出本地已安装snappy程序
snap list
5、搜索远程仓库
snap find [software]
也可以在uappexplorer.com搜索所有仓库里的存货。
6、snap --help 可以获取其他有用信息。
五、软件仓库
目前默认使用Canonical搭建的仓库,如果你想搭建自己的仓库,可以到snapcraft上寻找相关文档。
六、与flatpak有何不同?
从技术角度上看(文档和新闻),两者区别不大,都采用沙盒+捆绑底层类库的做法;
从目的角度看,两者的出发点也都是解决生态系统碎片化的问题,使开发者可以一次打包,用户就随处运行,无论哪个发行版,在不必重编译和打包的前提下方便的安装和更新应用,当然双方也有其他方面的考虑;
目前谁的软件仓库更强大?毫无疑问是snappy,仓库里目前已经有600余质量不一的软件。而flatpak目前还是散兵游勇一般,有几家软件商提供了.flatpak格式供下载,没有统一的软件中心。