专栏首页博客笔记Snap容器基础入门使用

Snap容器基础入门使用

0x00 前言说明

描述:在大多数应用场景下Ubuntu借助包管理器apt-get安装软件包很方便,前提是服务器要能够联网;但是如果在。政府或企业内网的服务器,通常是不与互联网连通的,这时候部署软件只能借助文件拷贝的方式,感觉回到了原始时代。而且更为严重的问题是软件包部署过程中的相互依赖的问题;

Q:如何解决?

在离线部署方面确实Windows比Linux做得好,Windows软件包通常会将软件所需的依赖打包,部署时只需拷贝一个软件安装包即可运行(缺陷:体积太大); 当然此时Linux中也有类似Windows软件安装包,即snap软件包机制可以用来简化离线部署。

Q:什么是Snap? 答:它的安装包扩展名是.snap类似于一个容器,完全独立于系统,它包含一个应用程序需要用到的所有文件和库(Snap包含一个私有的root文件系统里面包含依赖的软件包),他们安装在独立的目录中且各个应用之间相互隔离,互不影响,而且安装快捷简单,运行容易管理;主要支持的主流发行版Ubuntu和Debian; 简单的说:它类似于windows的软件安装包将所需的依赖都统一打包到软件包中部署时只需拷贝snap文件即可,俨然就是一个镜像容器。

Snap前身是由 Canonical 进行开发和管理的snappy演变而来用的是和 Flatpak 对抗,在Ubuntu 20.04 TLS的focal的发行版本中默认自带;

Snap优缺点:

  • 优点:
    • 安装简单、稳定、自动升级以及自带配置环境无需自行配置;
    • 得益于 Canonical 在中国大陆的运营,下载速度还是可以的,好像是有 CDN 的
  • 缺点:
    • 配置不灵活
    • 软件包巨大,好像运行一个软件包都需要挂载一个镜像,说是为了解决依赖问题,但……
    • 字体渲染支持很烂
    • 启动速度巨慢,了解后发现这个 Snap 果然还是把软件全部打包并压缩做成镜像,每次都要解压缩再挂载……那速度

注意事项:

  • 从`Ubuntu 16.04起snap环境是自带的意味着您无需安装它,但是如果是早于16.04的版本且服务器不能联网,安装snap环境很困难,你只能自求多福了

0x01 安装卸载

(1) 安装

描述:由于在Ubuntu 20.04 TLS 默认已经安装了snap,下面流程讲述的是没有安装该软件的系统流程:


(2) 卸载

描述:由于系统使用了docker容器不采用snap进行安装软件方式,则此时snap在系统中显得多余并且我是一个强迫症患者看到这么多挂载目录就忍不住了;

$ df -hT
Filesystem                        Type      Size  Used Avail Use% Mounted on
/dev/loop1                        squashfs   69M   69M     0 100% /snap/lxd/14804
/dev/loop4                        squashfs   28M   28M     0 100% /snap/snapd/7264
/dev/loop5                        squashfs   55M   55M     0 100% /snap/core18/1705
/dev/loop0                        squashfs   71M   71M     0 100% /snap/lxd/16926
/dev/loop3                        squashfs   30M   30M     0 100% /snap/snapd/8790
/dev/loop2                        squashfs   56M   56M     0 100% /snap/core18/1885

清除流程:

# 1.删掉所有的已经安装的 Snap 软件
for p in $(snap list | awk '{print $1}'); do
  sudo snap remove $p
done

# 2.停止snpad并且取消core18挂载的文件系统
sudo systemctl stop snapd
for m in /snap/core18/*; do
   sudo umount $m
done
# 干掉 Snap 的 Core 文件,很大哟。
sudo snap remove core

# 3.干掉 Snap 的管理工具。
sudo apt autoremove --purge snapd

# 4. 干掉 Snap 的目录。
rm -rf ~/snap
sudo rm -rf /snap
sudo rm -rf /var/snap
sudo rm -rf /var/lib/snapd
sudo rm -rf /var/cache/snapd


# 5.干掉 Snap 的目录。
sudo bash -c "cat > /etc/apt/preferences.d/no-snapd.pref" << EOL
Package: snapd
Pin: origin ""
Pin-Priority: -1
EOL

0x01 基础配置

加速拉取

描述:对于国外的一些应用确实由于国内的网络原因,导致Snap拉取下载只跳几十KB真的十分感人; 因为snap一直没有国内的镜像而且开启普通代理也无法为它加速通过配置snapd为它提提速

方式1:systemd设置snap代理 描述:由于直接设置 http_proxy 环境变量无法设置上, 所以需要在 snapd 启动文件中直接设置 proxy, 方法如下:

# (1) 前置操作, 修改  systemctl edit 使用的编辑器为 VIM, 如果不介意 Nano 可以跳过这一步
$ sudo tee -a /etc/profile <<-'EOF' 
export SYSTEMD_EDITOR="/bin/vim"
EOF
$ source /etc/profile

# (2) 开始设置代理编辑snapd的systemd,此时会在snapd的启动文件夹下新建立一个配置文件,用于复写snapd启动配置;
$ sudo systemctl edit snapd
#添加如下
[Service]
Environment="http_proxy=http://127.0.0.1:port"
Environment="https_proxy=http://127.0.0.1:port"
#保存退出
$ sudo systemctl daemon-reload
$ sudo systemctl restart snapd

方式2:离线snap文件 描述:为了扩展解决办法我们可以采用国外的VPS先拉取下载应用的snap文件,这算是下载snap包的另外一种方式;

操作流程: Step1.在能联网的Ubuntu上使用snap download命令下载

[email protected]:~# snap download docker
Fetching snap "docker"
Install the snap with:
  snap ack docker_423.assert
  snap install docker_423.snap

Step2.上命令将会得到.assert和.snap两类文件:

  • .assert:是软件包的元数据信息,包括签名和权限控制信息
  • .snap:是实际的安装文件

Step3.另外一种方法是到uApp Explorer网站上下载,可惜现在 uappexplorer 已经下线, 我们无法从 uappexplorer 中获取 SnapApp 的 .snap 文件,在后续或有更好的解决方法;:

  • 好处:是不需要有Ubuntu环境
  • 缺点:是只能下载.snap文件,无法下载.assert文件。

Step4.假如您下载好.snap文件先进行安装,常规的我们需要将软件包拷贝到服务器上,安装时首先注册.assert,然后再安装.snap包;

#1) 存在.assert文件时候
$ sudo snap ack docker_321.assert
$ sudo snap install docker_321.snap

#2) 不存在.assert文件时候(注意使用该方式一定要保证官方下载,危险参数下意味着软件不是在“沙盒”环境下执行的,运行过程不受控)
$ sudo snap install xxxxx.snap --dangerous
$ sudo snap install docker.snap --dangerous

注意事项:

  • core软件包是snap的核心运行时,几乎所有的snap包都依赖core运行时,如果您Ubuntu 发行版本低于 18.04 您可能需要在安装其它的软件包的时候先安装core,

snap镜像搜索: https://snapcraft.io/search?q=nextcloud 下载后执行此命令安装:

```

- `--dangerous所提示的是,这种模式有些“危险”。这是因为缺少.assert文件所描述的签名信息和权限控制信息,意味着软件不是在“沙盒”环境下执行的,运行过程不受控。




#### 入坑出坑
##### 1.Snap安装docker后的相关使用问题
问题描述:创建容器时候无法指定非/home/xxx目录,以及docker-compose构建时必须在home目录之下
解决办法:
```bash
# 挂载持久化数据
/home/public/data/

# docker-compose.yaml
/home/public/project/docker-compose.yaml

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Windows之注册表介绍与使用安全

    PC机及其操作系统的一个特点就是允许用户按照自己的要求对计算机系统的硬件和软件进行各种各样的配置。 早期的图形操作系统,如Win3.x中对软硬件工作环境的配置是...

    WeiyiGeek
  • Python3入门学习三.md

    描述: 我们所知道常用的操作系统有Windows,Mac,LINUX,UNIX,这些操作系统底层对于文件系统的访问工作原理是不一样的,因此您可能要针对不同的操作...

    WeiyiGeek
  • Huawei-5310F-V5存储设备简单使用配置

    Q: 什么是文件系统? 答: 通过创建文件系统可以使文件系统以文件目录的形式共享存储资源。

    WeiyiGeek
  • ubuntu中snap包的安装、更新删除与简单使用

    什么是snap,snap是一种全新的软件包管理方式,它类似一个容器拥有一个应用程序所有的文件和库,各个应用程序之间完全独立。所以使用snap包的好处就是它解决了...

    砸漏
  • gb格式注释文件转换成gff3注释文件格式

    今天在NCBI下载了酵母的参考基因组,没有找到gff格式的基因组注释文件,只找到了genbank格式的基因组注释文件。应该会有现成的工具来实现常用的基因组注释文...

    用户7010445
  • 深入理解Spring系列之四:BeanDefinition装载前奏曲

    框架的源码分析,有些代码可以暂时忽略,如Spring如何进行XML模式校验的、XML解析的细节等,这些代码可以在了解了整体的原理之后,再做针对性的分析,关注重点...

    JavaQ
  • 英国首例机器人心脏手术致死案揭晓,机器“暴走”竟是人为!

    2015年2月,英国首例机器人心瓣修复手术进行。原本是一场最尖端医疗AI技术的展示,没想到却成了一场鲜血四溅的惨案。

    新智元
  • AbstractApplicationContext源码分析

    我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite...

    东营浪人
  • 写给前端的算法进阶指南,我是如何两个月零基础刷200题

    最近国内大厂面试中,出现 LeetCode 真题考察的频率越来越高了。我也观察到有越来越多的前端同学开始关注算法这个话题。

    前端迷
  • Flink1.4 图解Watermark

    如果你正在构建实时流处理应用程序,那么事件时间处理是你迟早必须使用的功能之一。因为在现实世界的大多数用例中,消息到达都是无序的,应该有一些方法,通过你建立的系统...

    smartsi

扫码关注云+社区

领取腾讯云代金券