离线安装

如何在没有互联网访问的环境中安装 Pigsty?以及如何制作离线软件安装包。

Pigsty 的 标准安装 流程需要访问互联网,然而生产环境的数据库服务器通常是与互联网隔离的。

因此 Pigsty 提供了离线安装的功能,允许您在没有互联网访问的环境中,同样完成安装与部署。

如果您有互联网访问,提前下载好预制的 离线软件包 也可以帮助您加速安装的过程,并增强安装过程的确定性与可靠性。


简短版本

在执行 标准安装 前首先下载好 Pigsty 软件包与 离线软件包

VERSION=v2.6.0   # Pigsty 版本号
DISTRO=el8       # 离线包系统版本可选值:el7, el8, el9, debian11, debian12, ubuntu20, ubuntu22
curl "https://get.pigsty.cc/${VERSION}/pigsty-${VERSION}.tgz"                      -o ~/pigsty.tgz  # 软件包,通常放置于 ~/pigsty.tgz
curl "https://get.pigsty.cc/${VERSION}/pigsty-pkg-${VERSION}.${distro}.x86_64.tgz" -o /tmp/pkg.tgz  # 离线包,默认放置于 /tmp/pkg.tgz

上传 Pigsty 软件包与离线软件包至管理节点,将离线包放置于 /tmp/pkg.tgz,然后通过 bootstrap 过程启用。

./bootstrap      # 变体:如果本机有互联网访问,使用 ./bootstrap -y 可自动下载对应系统的离线软件包

# 继续后面的配置与安装任务
./configure      # 执行环境检测,并生成相应的推荐配置文件,如果你知道如何配置 Pigsty 可以跳过
./install.yml    # 根据生成的配置文件开始在当前节点上执行安装,使用离线安装包大概需要10分钟完成

离线安装基本原理

Pigsty 会在安装过程中从互联网上游的 yum/apt 软件仓库,下载所需的 rpm/deb 包并构建一个本地软件源(默认位于 /www/pigsty)。

本地软件源由 Nginx 对外提供服务,后续无论是本机还是其他节点,都默认会使用本地软件源进行安装,而不再需要访问互联网。

使用本地软件源有三个主要好处:

  1. 本地软件源可以避免重复的下载请求与流量消耗,显著加速安装速度并提高安装过程的可靠性。
  2. 构建本地软件源会对当前可用软件版本取快照,确保部署环境内节点所安装软件版本的一致性。
  3. 构建好的本地软件源可以整体打包,复制到安装有相同操作系统的隔离环境中用于离线安装

离线安装的原理是:首先在一台具有相同操作系统,且有互联网访问的节点上,完成 标准安装 流程。 然后对构建好的本地软件源(默认位于 /www/pigsty )取快照并打包,制作 成为 离线软件包,供安装有同样操作系统的生产环境网络隔离节点使用。

当 Pigsty 执行 安装 时,如果发现本地软件源已经存在,就会进入离线安装模式。 在此模式下,Pigsty 将跳过从互联网下载并构建本地软件源的过程,使用本地软件源完成整个安装过程,期间无需互联网访问。


离线软件包

离线软件包是一个使用 gziptar 制作的标准 Tarball,以 .tgz 后缀结尾。通常放置于 /tmp/pkg.tgz 路径,并解压至 /www/pigsty 使用。 Pigsty 为 支持 的操作系统发行版提供了预制离线软件包。如果您使用相同的操作系统版本,可以开箱即用。

https://github.com/Vonng/pigsty/releases/download/v2.6.0/pigsty-pkg-v2.6.0.el7.x86_64.tgz      # EL 7.9
https://github.com/Vonng/pigsty/releases/download/v2.6.0/pigsty-pkg-v2.6.0.el8.x86_64.tgz      # EL 8.9
https://github.com/Vonng/pigsty/releases/download/v2.6.0/pigsty-pkg-v2.6.0.el9.x86_64.tgz      # EL 9.3
https://github.com/Vonng/pigsty/releases/download/v2.6.0/pigsty-pkg-v2.6.0.debian11.x86_64.tgz # Debian 11.8
https://github.com/Vonng/pigsty/releases/download/v2.6.0/pigsty-pkg-v2.6.0.debian12.x86_64.tgz # Debian 12.4
https://github.com/Vonng/pigsty/releases/download/v2.6.0/pigsty-pkg-v2.6.0.ubuntu20.x86_64.tgz # Ubuntu 20.04.6
https://github.com/Vonng/pigsty/releases/download/v2.6.0/pigsty-pkg-v2.6.0.ubuntu22.x86_64.tgz # Ubuntu 22.04.3
https://get.pigsty.cc/${VERSION}/pigsty-pkg-v2.6.0.el7.x86_64.tgz       # EL 7.9
https://get.pigsty.cc/${VERSION}/pigsty-pkg-v2.6.0.el8.x86_64.tgz       # EL 8.9
https://get.pigsty.cc/${VERSION}/pigsty-pkg-v2.6.0.el9.x86_64.tgz       # EL 9.3
https://get.pigsty.cc/${VERSION}/pigsty-pkg-v2.6.0.debian11.x86_64.tgz  # Debian 11.8
https://get.pigsty.cc/${VERSION}/pigsty-pkg-v2.6.0.debian12.x86_64.tgz  # Debian 12.4
https://get.pigsty.cc/${VERSION}/pigsty-pkg-v2.6.0.ubuntu20.x86_64.tgz  # Ubuntu 20.04.6
https://get.pigsty.cc/${VERSION}/pigsty-pkg-v2.6.0.ubuntu22.x86_64.tgz  # Ubuntu 22.04.3

Bootstrap

Ansible 是 Pigsty 的核心依赖,离线安装首先需要解决如何在没有互联网访问或本地源的情况下,离线安装 Ansible 的问题。

Pigsty 的离线软件包中默认已经包含了 ansible 及其依赖,从离线软件包中提取并安装 ansible 的这一过程,称为 Bootstrap

Bootstrap 过程的逻辑
  1. 检查安装的前提条件是否满足(操作系统,芯片架构,内核)
  2. 检查本地离线安装包(/tmp/pkg.tgz)是否存在?
  • 是 -> 解压到 /www/pigsty 并配置本地FS软件源启用它。
  • 否 -> 进一步决定是否从互联网下载离线软件包?
    • 是 -> 从 GitHub 或 CDN 下载离线软件包并解压
    • 否 -> 是否添加操作系统基础的上游源地址以供从互联网下载 ?
      • 是 -> 根据地区与操作系统版本写入对应的上游源:/etc/yum.repos.d//etc/apt/source.list.d
      • 否 -> 用户自己搞定,或者当前系统的默认配置就带有 Ansible
    • 现在,我们有了一个可用的本地软件源,可用来安装 Pigsty 所需的软件包,特别是 Ansible。
    • 优先级顺序: 本地的 pkg.tgz > 下载的 pkg.tgz > 原始上游 > 默认配置
  1. 从上一步配置的软件源中,安装一些基本的重要软件,不同版本的软件略有不同:
    • el7: ansible createrepo_c unzip wget yum-utils sshpass
    • el8: ansible python3-jmespath python3.11-jmespath createrepo_c unzip wget dnf-utils sshpass modulemd-tools
    • el9: ansible python3-jmespath python3.11-jmespath createrepo_c unzip wget dnf-utils sshpass modulemd-tools
    • ubuntu/debian: ansible python3-jmespath dpkg-dev unzip wget sshpass acl
  2. 检查 ansible 是否成功安装。

bootstrap 脚本会帮助您自动解压位于 /tmp/pkg.tgz 的离线软件包,向节点添加并启用本地源,并安装 Ansible 及其依赖。

首先将离线软件包拷贝至生产环境管理节点上,并放置于 /tmp/pkg.tgz 路径下备用,然后执行 bootstrap 命令即可:

./bootstrap       # 解压 /tmp/pkg.tgz,创建并启用本地软件源,然后从中安装 Ansible
从离线软件包本地 Bootstrap 的样例输出

如果离线软件包存在于 /tmp/pkg.tgz, bootstrap 会直接使用它:

bootstrap pigsty v2.6.0 begin
[ OK ] region = china
[ OK ] kernel = Linux
[ OK ] machine = x86_64
[ OK ] release = 7.9.2009
[ OK ] sudo = vagrant ok
[ OK ] cache = /tmp/pkg.tgz exists
[ OK ] repo = extract from /tmp/pkg.tgz
[ OK ] repo file = use /etc/yum.repos.d/pigsty-local.repo
[ OK ] repo cache = created
[ OK ] install el7 utils
....(yum install ansible output)
[ OK ] ansible = ansible 2.9.27
[ OK ] boostrap pigsty complete
proceed with ./configure

如果您的环境有互联网访问,那么可以使用 bootstrap 的变体:

./bootstrap       # 如果 /tmp/pkg.tgz 不存在,添加全球/中国/欧洲的仓库镜像并尝试在线安装 Ansible
./bootstrap -y    # 如果 /tmp/pkg.tgz 不存在,从互联网下载预先制作好的离线软件包
从互联网下载离线软件包,在线 Bootstrap 的样例输出

从 Github / CDN 下载 pkg.tgz 并解压使用:

bootstrap pigsty v2.6.0 begin
[ OK ] region = china
[ OK ] kernel = Linux
[ OK ] machine = x86_64
[ OK ] release = 7.9.2009
[ OK ] sudo = vagrant ok
[ IN ] Cache /tmp/pkg.tgz not exists, download? (y/n):
=> y
[ OK ] download from Github https://get.pigsty.cc/v2.6.0/pigsty-pkg-v2.6.0.el7.x86_64.tgz to /tmp/pkg.tgz
....
[ OK ] repo = extract from /tmp/pkg.tgz
[ OK ] repo file = use /etc/yum.repos.d/pigsty-local.repo
[ OK ] repo cache = created
[ OK ] install el7 utils
...... (yum install createrepo_c sshpass unzip output)
==================================================================================================================
 Package                        Arch                Version                       Repository                 Size
==================================================================================================================
Installing:
 createrepo_c                   x86_64              0.10.0-20.el7                 pigsty-local               65 k
 sshpass                        x86_64              1.06-2.el7                    pigsty-local               21 k
 unzip                          x86_64              6.0-24.el7_9                  pigsty-local              172 k
Installing for dependencies:
 createrepo_c-libs              x86_64              0.10.0-20.el7                 pigsty-local               89 k

Transaction Summary
==================================================================================================================
...... (yum install ansible output)
==================================================================================================================
 Package                                      Arch            Version                 Repository             Size
==================================================================================================================
Installing:
 ansible                                      noarch          2.9.27-1.el7            pigsty-local           17 M
Installing for dependencies:
 PyYAML                                       x86_64          3.10-11.el7             pigsty-local          153 k
 libyaml                                      x86_64          0.1.4-11.el7_0          pigsty-local           55 k
 python-babel                                 noarch          0.9.6-8.el7             pigsty-local          1.4 M
 python-backports                             x86_64          1.0-8.el7               pigsty-local          5.8 k
 python-backports-ssl_match_hostname          noarch          3.5.0.1-1.el7           pigsty-local           13 k
 python-cffi                                  x86_64          1.6.0-5.el7             pigsty-local          218 k
 python-enum34                                noarch          1.0.4-1.el7             pigsty-local           52 k
 python-idna                                  noarch          2.4-1.el7               pigsty-local           94 k
 python-ipaddress                             noarch          1.0.16-2.el7            pigsty-local           34 k
 python-jinja2                                noarch          2.7.2-4.el7             pigsty-local          519 k
 python-markupsafe                            x86_64          0.11-10.el7             pigsty-local           25 k
 python-paramiko                              noarch          2.1.1-9.el7             pigsty-local          269 k
 python-ply                                   noarch          3.4-11.el7              pigsty-local          123 k
 python-pycparser                             noarch          2.14-1.el7              pigsty-local          104 k
 python-setuptools                            noarch          0.9.8-7.el7             pigsty-local          397 k
 python-six                                   noarch          1.9.0-2.el7             pigsty-local           29 k
 python2-cryptography                         x86_64          1.7.2-2.el7             pigsty-local          502 k
 python2-httplib2                             noarch          0.18.1-3.el7            pigsty-local          125 k
 python2-jmespath                             noarch          0.9.4-2.el7             pigsty-local           41 k
 python2-pyasn1                               noarch          0.1.9-7.el7             pigsty-local          100 k

Transaction Summary
==================================================================================================================
...
Complete!
[ OK ] ansible = ansible 2.9.27
[ OK ] boostrap pigsty complete
proceed with ./configure


制作离线软件包

Pigsty 提供了制作离线软件包的脚本 bin/cache 。默认会将 /www/pigsty 目录压缩打包,放置于 /tmp/pkg.tgz 下。

bin/cache [version=v2.6.0]
          [pkg_path=/tmp/pkg.tgz]
          [repo_dir=/www/pigsty]

制作完成后,将其拷贝至生产环境管理节点,参考 bootstrap 过程使用即可,您也可以手工完成这一过程:

sudo rm -rf /www/pigsty            # 谨慎清理先前遗留软件
sudo tar -xf /tmp/pkg.tgz -C /www  # 解压离线软件包至目录
制作离线软件安装包的样例输出

例如,在标准安装完成后的 Ubuntu 22.04 系统上执行 bin/cache 脚本,即可创建离线软件包(/tmp/pkg.tgz)。

vagrant@ubuntu22:~/pigsty$ bin/cache
[ OK ] create offline package on ubuntu22
[ OK ] pkg type = deb
[ OK ] repo dir = /www/pigsty
[ OK ] copy /www/pigsty to /tmp/pigsty-build/pigsty
[ OK ] grafana plugins = found, overwrite /tmp/pigsty-build/pigsty/plugins.tgz
knightss27-weathermap-panel  marcusolsson-dynamictext-panel	marcusolsson-json-datasource	marcusolsson-treemap-panel  volkovlabs-form-panel	 volkovlabs-image-panel
marcusolsson-calendar-panel  marcusolsson-hourly-heatmap-panel	marcusolsson-static-datasource	volkovlabs-echarts-panel    volkovlabs-grapi-datasource  volkovlabs-variable-panel
[ OK ] ubuntu 22 = no packages needs to be cleansed
[ OK ] package = making pigsty-pkg-v2.6.0.ubuntu22.x86_64.tgz

pigsty/
pigsty/liblua5.2-0_5.2.4-2_amd64.deb
.................. # 许多软件包
pigsty/distro-info-data_0.52ubuntu0.6_all.deb

[ OK ] package = finish pigsty-pkg-v2.6.0.ubuntu22.x86_64.tgz 48f9cb2dd2cabb61b115bfe2ac9e002d
-rw-rw-r-- 1 vagrant vagrant 1.2G Feb 29 03:09 /tmp/pkg.tgz
scp ubuntu22:/tmp/pkg.tgz v2.6.0/pigsty-pkg-v2.6.0.ubuntu22.x86_64.tgz



Last modified 2024-02-29: update content (34b2b75)