centos7系统下的snapd和certbot的离线安装
什么是snap? 是一个包含应用程序代码和快照的squashFS文件系统。包含特定元数据的snap.yaml文件。它有一个只读文件系统,安装后还有一个可写区域。 是独立的。它捆绑了所需的大多数库和运行时,并且可以在不影响系统其余部分的情况下进行更新和还原。 是通过安全机制限制在OS和其他应用程序中的,但可以根据用户控制的细粒度策略和OS默认值与其他snap交换内容和功能。
什么是Snapd?
Snapd是一个REST API守护进程服务,它在您的Linux系统上运行,用于管理snap包(“snaps”)。它与snap store交互,并提供与之交互的命令客户端snap。在开始管理任何Linux发行版上的snap之前,必须安装snapd。
为什么要使用snap?
Snap为每个Linux桌面、服务器、云或设备打包任何应用程序。Snaps的安装速度更快,创建起来更容易,运行起来更安全,而且它们会自动更新,所以你的应用程序永远是最新的且永不中断。你可以带上你自己的基础架构或使用官方的。
Snappy包管理器是一个跨发行版的包管理器。它最初是为Ubuntu系统构建的,但现在其他主要的Linux发行版( Fedora, Linux Mint, RHEL, OpenSUSE,Arch Linux等)都能使用Snappy。与RPM和Deb不同的是,Snap软件包可以安装并运行在所有Linux发行版。可以简单的理解为这是一个类似yum dnf的包管理器,但,它有一个商店的概念,类似apple商店,而不是源的概念。
Snap包是一个经过压缩的文件系统,由宿主机操作系统动态挂载到/snap目录。其携带的元数据由snapd处理,然后snapd为其创建一个安全的沙盒环境。Snap软件包的优势在于它是一个通用的软件包,缺陷是体积比较大,这是因为snap软件包自带了依赖包和运行库以支持所有Linux发行版。
那么,certbot是snapd商店里的一个软件,如果按照正常的流程安装snapd然后安装certbot,我们可能需要先配置外部yum源,然后使用yum安装snapd,但,常常需要面对网速的考验,并且,snap的软件包通常都是很大的,500兆左右是常态。
经我收集并整理了一套可快速安装snapd和certbot的离线安装包,下载地址为:
链接:https://pan.baidu.com/s/1IF3EMx9aThJnITJiWHg7KQ 提取码:snap
下面简单介绍一下如何使用这个离线安装包。
离线包内有一个文件夹和一个tar.gz 包,文件夹的内容大概为:
[root@centos6 snapd]# ll
total 19620
-rw-r--r-- 1 root root 346256 May 3 23:13 libzstd-1.4.9-1.el7.x86_64.rpm
-rw-r--r-- 1 root root 86572 May 3 23:13 lz4-1.8.3-1.el7.x86_64.rpm
-rw-r--r-- 1 root root 2971301 May 3 23:13 snap-confine-2.49-2.el7.x86_64.rpm
-rw-r--r-- 1 root root 16082953 May 3 23:13 snapd-2.49-2.el7.x86_64.rpm
-rw-r--r-- 1 root root 402221 May 3 23:13 snapd-selinux-2.49-2.el7.noarch.rpm
-rw-r--r-- 1 root root 103552 May 3 23:13 squashfs-tools-4.3-0.21.gitaae0aff4.el7.x86_64.rpm
-rw-r--r-- 1 root root 18514 May 3 23:13 squashfuse-0.1.102-1.el7.x86_64.rpm
-rw-r--r-- 1 root root 24562 May 3 23:13 squashfuse-libs-0.1.102-1.el7.x86_64.rpm
-rw-r--r-- 1 root root 33664 May 3 23:13 yum-plugin-copr-1.1.31-54.el7_8.noarch.rpm
安装顺序为:snapd-selinux-2.49-2.el7.noarch.rpm -->其它rpm包-->snapd-2.49-2.el7.x86_64.rpm
(1)其中snapd-selinux-2.49-2.el7.noarch.rpm安装的时候需要忽略依赖关系,强制安装,安装命令为:
rpm -ivh snapd-selinux-2.49-2.el7.noarch.rpm --nodeps
(2)其它的rpm包安装命令为:
rpm -ivh libzstd-1.4.9-1.el7.x86_64.rpm lz4-1.8.3-1.el7.x86_64.rpm squashfs-tools-4.3-0.21.gitaae0aff4.el7.x86_64.rpm squashfuse-0.1.102-1.el7.x86_64.rpm squashfuse-libs-0.1.102-1.el7.x86_64.rpm snap-confine-2.49-2.el7.x86_64.rpm
(3)snapd-2.49-2.el7.x86_64.rpm安装为正常安装,安装命令为:
rpm -ivh snapd-2.49-2.el7.x86_64.rpm
(4)解压snapd.tar.gz,解压命令为:
tar zxf snapd.tar.gz
(5)删除 /var/lib/snapd 这个文件夹,移动 解压出来的 var这个文件内的snapd文件夹到 /var/lib目录下,软连接/var/lib/snapd/snap 文件夹到 /snap 这个文件夹。具体命令如下:
rm -rf /var/lib/snapd
mv var/lib/snapd /var/lib/
ln -sf /var/lib/snapd/snap/ /snap
ln -sf /snap/bin/certbot /usr/bin/certbot
(6)开启snapd服务,并测试certbot是否安装好
systemctl enable snapd
systemctl start snapd
certbot --nginx 输出应该如下:
[root@centos6 ~]# certbot --nginx
Saving debug log to /var/log/letsencrypt/letsencrypt.log
The nginx plugin is not working; there may be problems with your existing configuration.
The error was: NoInstallationError("Could not find a usable 'nginx' binary. Ensure nginx exists, the binary is executable, and your PATH is set correctly.")
以上,表示certbot并没有发现该系统内安装有nginx,因此,报错,并提示检查nginx的安装。
日志内容如下:
vim /var/log/letsencrypt/letsencrypt.log
2021-05-03 23:49:21,911:DEBUG:urllib3.connectionpool:http://localhost:None "GET /v2/connections?snap=certbot&interface=content HTTP/1.1" 200 97
2021-05-03 23:49:22,485:DEBUG:certbot._internal.main:certbot version: 1.14.0
2021-05-03 23:49:22,486:DEBUG:certbot._internal.main:Location of certbot entry point: /snap/certbot/1093/bin/certbot
2021-05-03 23:49:22,486:DEBUG:certbot._internal.main:Arguments: ['--nginx', '--preconfigured-renewal']
2021-05-03 23:49:22,486:DEBUG:certbot._internal.main:Discovered plugins: PluginsRegistry(PluginEntryPoint#apache,PluginEntryPoint#manual,PluginEntryPoint#nginx,PluginEntryPoint#null,PluginEntryPoint#standalone,PluginEntryPoint#webroot)
2021-05-03 23:49:22,525:DEBUG:certbot._internal.log:Root logging level set at 20
2021-05-03 23:49:22,525:INFO:certbot._internal.log:Saving debug log to /var/log/letsencrypt/letsencrypt.log
2021-05-03 23:49:22,526:DEBUG:certbot._internal.plugins.selection:Requested authenticator nginx and installer nginx
2021-05-03 23:49:22,538:DEBUG:certbot._internal.plugins.disco:No installation (PluginEntryPoint#nginx): Could not find a usable 'nginx' binary. Ensure nginx exists, the binary is executable, and your PATH is set correctly.
Traceback (most recent call last):
File "/var/lib/snapd/snap/certbot/1093/lib/python3.8/site-packages/certbot/_internal/plugins/disco.py", line 158, in prepare
self._initialized.prepare() # type: ignore
File "/var/lib/snapd/snap/certbot/1093/lib/python3.8/site-packages/certbot_nginx/_internal/configurator.py", line 188, in prepare
raise errors.NoInstallationError(
certbot.errors.NoInstallationError: Could not find a usable 'nginx' binary. Ensure nginx exists, the binary is executable, and your PATH is set correctly.
2021-05-03 23:49:22,540:DEBUG:certbot._internal.plugins.selection:No candidate plugin
2021-05-03 23:49:22,540:DEBUG:certbot._internal.plugins.selection:Selected authenticator None and installer None
可以看到certbot是使用了python3.8的环境,运行了python脚本,脚本相关模块是urllib3,自动检测nginx是否安装。如检测安装过nginx,会进入下一步。在此,不演示了。