0x01 关于Snap

Snap是Ubuntu母公司Canonical于2016年4月发布Ubuntu16.04时候引入的一种安全的、易于管理的、沙盒化的软件包格式,与传统的dpkg/apt有着很大的区别。

Snap可以让开发者将他们的软件更新包随时发布给用户,而不必等待发行版的更新周期;其次Snap应用可以同时安装多个版本的软件,比如安装Python2.7和Python3.3。

0X02 基础常用操作

#查询已经安装了的软件
sudo snap list#搜索要安装的Snap软件包
sudo snap find xxxx#查看Snap软件的更多信息
sudo snap info xxxx#安装Snap软件包
sudo snap install xxxx#更换软件安装通道
sudo snap switch –channel=xxxx xxxx#更新Snap软件包
sudo snap refresh xxxx#还原到之前版本
sudo snap revert xxxx#卸载Snap软件
sudo snap remove xxxx
当然光靠命令你想搜索什么snap软件包也是一头雾水吧!可以去uappexplorer里查询下,有什么snap软件包呢!喜欢的就都安装上。

#Uappexplorer

https://uappexplorer.com/snaps

0x03 将软件打包为Snap软件

Snapcraft是用来构建snaps的软件,他使用也非常的简单,我们仅仅需要写一个snapcraft.yaml的配置文件即可。接下来就用Snapcraft打包一下GNU项目里的hello和bash。先从hello开始。

由于Ubuntu 18.04LTS中已经安装有Snapcraft了,我们就不需要在去apt安装了。可以直接开始打包我们的snap软件。

0X0301 初始打包

1.创建一个打包snap的目录hello。

mkdir hello
cd hello
2.初始化snapcraft。
snapcraft init

3.使用vim编辑配置文件snapcraft.yaml。

vim snap/snapcraft.yaml

将其修改为以下内容。

name:描述这个snap软件的名称

version:描述这个软件的版本,可以用ascii码。

summary:对软件的一个总结。

Description:对软件进行一个描述。

grade:软件的发行通道。

confinement:对软件做一个限制,如devmode或者strict。

之后按照格式定义以下parts。

其中source表示打包软件的来源,plugin表示此软件安装时候需要的一些依赖关系,使用autotools即可。

4.编译snap打包软件。

snapcraft

由于我们的source需要从GNU的ftp服务器上下载程序,待下载好后,其会自动打包编译。

5.之后进行测试安装。

sudo snap install --devmode hello2.10amd64.snap

可以通过snap list查看是否安装成功,注意看Notes部分,其为devmode。

6.进行测试,输入hello命令。

神马??竟然抱错了。当然你肯定会想用which hello进行检查。不过我可以告诉你答案,hello的二进制文件在/snap/bin里,是不是明白哪里出问题了?

0X0302 Snap全局命令

我们已经知道了为什么hello不能成为全局命令了,当然也还是只能通过修改snapcraft.yaml配置文件来使之成为全局命令。

1.修改snapcraft.yaml,添加一个apps部分,使命令hello指向bin/hello即可。

2.迭代你的snap打包软件。

snapcraft prime

3.之后再次尝试hello命令,终于生效了。

0X0303 Snap打包进阶

1.为了让我们的snap更有意思一点,我们添加一个新的parts和apps。

2.之后我们重新执行。

Snapcraft prime

毫无疑问你肯定会报错失败。为什么呢??因为gnu-hello和gnu-bash两个不同的parts都将定向到了一个share/info/dir里,这里就发生了冲突。

3.其实在执行snapcraft的时候,类似于执行./configure,这里只用给./configure一个参数即可。那么snapcraft.yaml配置文件可以这么修改。

这相当于将—infodir=/var/bash/info作为一个参数传递给了./configure。

3.之后重新编译。

snapcraft clean gnu-bash -s build

这里的clean只是相当于重新构架了一下gnu-bash,并不需要重新下载gnu-bash,当然可以snapcraft成功了。

4.之后重新测试。

sudo snap try --devmode prime

5.之后再次测试hello和hello.bash命令,看看是否能进入这个子shell。

之后通过env查询当前的环境,确认进入子shell,要退出的话,按q哦!

删除devmode

之前通过snap list可以看出Notes部分标记hello为devmode,既然我们都测试完毕了,那么是时候改为strict了。

1.修改配置文件snapcraft.yaml。

将devmode修改为strict;其实也可以将grade后面的devel修改为stable了。

2.再次snapscraft一下。

3.你可以尝试安装它。

sudo snap install hello2.10amd64.snap

不出意外会报错:error: cannot find signatures with metadata for snap "hello2.10amd64.snap"。

4.为什么会报错呢?是由于我们的软件没有经过Snap Store签名,而之前的安装是因为是devmode所以可以被安装,因而要在本地安装非devmode的snap时候,需要加入—dangerous选项。

之后snap打包后的hello即可被安装,在通过snap list看一下,Notes部分已经没有devmode的字样了。而程序也可以正常的运行。

linux snap 沙盒化软件包格式 简介相关推荐

  1. 沙盒化容器:是容器还是虚拟机

    随着 IT 技术的发展,AI.区块链和大数据等技术提升了对应用毫秒级扩展的需求,开发人员也面临着的功能快速推出的压力.混合云是新常态,数字化转型是保持竞争力的必要条件,虚拟化成为这些挑战的基本技术. ...

  2. 沙盒化容器:是容器还是虚拟机?

    公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! 随着 IT 技术的发展,AI.区块链和大数据等技术提升了对应用毫秒级扩展的需求,开发人员也面临着的功能快速推出的压 ...

  3. 【DEVOPS】借助Docker+Liquibase实现数据库的沙盒化

    借助Docker + Liquibase 实现数据库分钟级别的重建,做到开发/测试环境的沙盒化. 1. 前言 传统的开发/测试流程中,每次涉及到数据库的操作都是比较痛苦的: 你这到底做了什么样的骚操作 ...

  4. 影子系统、沙盒、虚拟机的区别,沙盒化容器:是容器还是虚拟机,容器、虚拟机、虚拟环境的区别

    1 容器和虚拟机的区别 虚拟机是操作系统级别的资源隔离,而容器本质上是进程级的资源隔离. 2 虚拟机和虚拟环境的区别 虚拟环境是为了隔绝用户的多个运行环境,避免冲突. 虚拟机是为了隔绝多个用户之间的操 ...

  5. linux 在沙盒中运行,Linux容器的细粒度沙盒策略执行方法与流程

    本发明专利属于计算机技术领域,涉及云计算安全方向.更具体的讲,本发明专利涉及一种Linux容器的细粒度沙盒策略执行方法. 背景技术: Linux容器技术采用命名空间将进.文件.设备等资源进行隔离,为用 ...

  6. 国产信创Linux桌面系统比较:软件包格式及软件管理、桌面环境及桌面应用

    信创产业中,操作系统开始整合,基本上集中在银河麒麟V10和UOS2,很多朋友问到各种国产信创Linux系统的区别和比较.因此结合前期写的几篇文章,对这个问题再进行了整理.以龙芯CPU为例,比较包括lo ...

  7. Linux版idea沙盒化运行,游戏《Minecraft》IntelliJ下模组开发环境ForgeGradle的使用教程...

    嗯,当你想搞个模组的时候,肯定需要用到FG. 就比如编译模组的时候. 很好,首先下载源码去. files.minecraftforge.net/ 然后打开命令行到源码目录下 执行命令~ Win:   ...

  8. linux关闭沙盒模式,打开或关闭沙盒模式以禁用宏

    注册表项的特定位置因运行的 Access 版本.Windows 和 Access 版本的 (32 位或 64 位) 以及是否具有即点即用安装而异. 如果在从下面显示的可能选项中查找正确的注册表项时遇到 ...

  9. Mac 开发(一) 苹果沙盒机制sandbox 简介

    文章目录 Mac 开发(一) 苹果沙盒机制sandbox简介 1 Mac sandbox简介 1.1 关于应用程序沙盒 1.2 为啥要用沙盒机制 2 沙盒原理 3 xcode中开启沙盒权限 3.1 X ...

最新文章

  1. 简单的OSPF多区配置
  2. ROS Gazebo(三):启动gazebo/URDF
  3. [导入]ASP.NET断点续传和多线程下载
  4. write up::web 实战2-注入 --sqlmap注入版
  5. Linux安装配置Redis CentOS 7 下安装Redis
  6. stm32怎么调用for循环内部的变量_循环中的异步amp;amp;循环中的闭包
  7. 使用GNS3和Cisco IOU搭建路由交换实验-安装篇
  8. MAVEN 的常用命令
  9. 移动端实现内滚动的4种方案
  10. 读书笔记 摘自:《斯坦福极简经济学》
  11. 仓库体积过大,如何减小?
  12. linux网络配置文件,Linux下一块网卡设置多个IP地址
  13. PageRank实践-博客园用户PageRank排名
  14. 买卖股票系列(力扣121、122、123、188、309、714) Java动态规划
  15. photoshop进行景深合成
  16. GBase8s数据库INTERSECT 运算符
  17. 阿里内部信:构建“大中台、小前台”组织机制
  18. [导入]WAP广告钱景一致看好 现PUSH模式受质疑
  19. 摩根士丹利分析报告:中国正在调整经济底层逻辑!
  20. python写的脚本怎么用,如何用python写脚本

热门文章

  1. error while loading shared libraries: libz.so.1错误
  2. 示波器探头使用注意事项,示波器探头的选择
  3. matlab画图函数plot
  4. asp.net C# MVC 提交表单后清空表单
  5. 搜索suggest实现 动态的查询建议
  6. VSS、RSS、PSS、USS
  7. ShineTime - 带有 CSS3 闪亮特效的缩略图相册
  8. 0001242: Steps to make RealTek DVB-T USB dongle...
  9. 【例题收藏】◇例题·6◇ 电压机制(voltage)
  10. 面试集锦(十六)架构设计