# 离线安装

> 如何在没有互联网访问的情况下安装 pigsty？
---

Pigsty 默认从互联网上游 [**安装**](/zh/docs/install) 所需软件包，但有些环境与互联网隔离。
为了解决这个问题，Pigsty 支持使用 [**离线软件包**](#offline-package) 进行离线安装。


### 步骤 1
        下载 pigsty 离线软件包，将其放到 `/tmp/pkg.tgz`

### 步骤 2
        下载 pigsty 源码包，解压（假设解压到 `~/pigsty`）

### 步骤 3
        `cd ~/pigsty; ./bootstrap`，它将解压软件包并使用本地仓库

### 步骤 4
        `vi ~/pigsty.yml`，覆盖 [`node_repo_modules`](/zh/docs/node/param#node_repo_modules) 设为 `local` 以使用本地仓库

### 步骤 5
        照常运行 `./install.yml`。它将从本地仓库安装所有内容。



------

## 什么是离线软件包？ {#what-is-offline-package}

离线软件包打包了所有需要的 RPM/DEB 软件包及其依赖；
它本质上是在正常 [安装](/zh/docs/install/start) 后采取的本地 APT / YUM 仓库的快照压缩包。

您可以从 [GitHub 发布页面](https://github.com/pgsty/pigsty/releases/latest) 找到这些软件包，例如：

```bash
d6e9d6fa73620460ceb373a0c2f41ebe  pigsty-v3.7.0.tgz
987529769d85a3a01776caefefa93ecb  pigsty-pkg-v3.7.0.d12.aarch64.tgz
2d8272493784ae35abeac84568950623  pigsty-pkg-v3.7.0.d12.x86_64.tgz
090cc2531dcc25db3302f35cb3076dfa  pigsty-pkg-v3.7.0.d13.x86_64.tgz
ddc54a9c4a585da323c60736b8560f55  pigsty-pkg-v3.7.0.el10.aarch64.tgz
d376e75c490e8f326ea0f0fbb4a8fd9b  pigsty-pkg-v3.7.0.el10.x86_64.tgz
8c2deeba1e1d09ef3d46d77a99494e71  pigsty-pkg-v3.7.0.el8.aarch64.tgz
9795e059bd884b9d1b2208011abe43cd  pigsty-pkg-v3.7.0.el8.x86_64.tgz
08b860155d6764ae817ed25f2fcf9e5b  pigsty-pkg-v3.7.0.el9.aarch64.tgz
1ac430768e488a449d350ce245975baa  pigsty-pkg-v3.7.0.el9.x86_64.tgz
e033aaf23690755848db255904ab3bcd  pigsty-pkg-v3.7.0.u22.aarch64.tgz
cc022ea89181d89d271a9aaabca04165  pigsty-pkg-v3.7.0.u22.x86_64.tgz
0e978598796db3ce96caebd76c76e960  pigsty-pkg-v3.7.0.u24.aarch64.tgz
48223898ace8812cc4ea79cf3178476a  pigsty-pkg-v3.7.0.u24.x86_64.tgz
```

我们通常为以下 [Linux 发行版](/zh/docs/prepare/linux) 发布离线软件包，使用最新的操作系统次要版本。

| EL Distribution |                        Code                         |                          Arch                          |                                            OS Code                                            |                                                              Package                                                              |
|:----------------|:---------------------------------------------------:|:------------------------------------------------------:|:---------------------------------------------------------------------------------------------:|:---------------------------------------------------------------------------------------------------------------------------------:|
| RockyLinux 9.6  | <span class="font-bold text-sky-700">EL9</span> | <span class="font-bold text-sky-600">x86_64</span> |  [`el9.x86_64`](https://github.com/pgsty/pigsty/blob/v3.7.0/roles/node_id/vars/el9.x86_64.yml)  |  [`pigsty-pkg-v3.7.0.el9.x86_64.tgz`](https://github.com/pgsty/pigsty/releases/download/v3.7.0/pigsty-pkg-v3.7.0.el9.x86_64.tgz)  |
| Ubuntu 24.04.2  | <span class="font-bold text-sky-700">U24</span> | <span class="font-bold text-sky-600">x86_64</span> |  [`u24.x86_64`](https://github.com/pgsty/pigsty/blob/v3.7.0/roles/node_id/vars/u24.x86_64.yml)  |  [`pigsty-pkg-v3.7.0.u24.x86_64.tgz`](https://github.com/pgsty/pigsty/releases/download/v3.7.0/pigsty-pkg-v3.7.0.u24.x86_64.tgz)  |
| Debian 12.11    | <span class="font-bold text-sky-700">D12</span> | <span class="font-bold text-sky-600">x86_64</span> |  [`d12.x86_64`](https://github.com/pgsty/pigsty/blob/v3.7.0/roles/node_id/vars/d12.x86_64.yml)  |  [`pigsty-pkg-v3.7.0.d12.x86_64.tgz`](https://github.com/pgsty/pigsty/releases/download/v3.7.0/pigsty-pkg-v3.7.0.d12.x86_64.tgz)  |
| RockyLinux 9.6  | <span class="font-bold text-sky-700">EL9</span> | <span class="font-bold text-sky-600">x86_64</span> | [`el9.aarch64`](https://github.com/pgsty/pigsty/blob/v3.7.0/roles/node_id/vars/el9.aarch64.yml) | [`pigsty-pkg-v3.7.0.el9.aarch64.tgz`](https://github.com/pgsty/pigsty/releases/download/v3.7.0/pigsty-pkg-v3.7.0.el9.aarch64.tgz) |
| Ubuntu 24.04.2  | <span class="font-bold text-sky-700">U24</span> | <span class="font-bold text-sky-600">x86_64</span> | [`u24.aarch64`](https://github.com/pgsty/pigsty/blob/v3.7.0/roles/node_id/vars/u24.aarch64.yml) | [`pigsty-pkg-v3.7.0.u24.aarch64.tgz`](https://github.com/pgsty/pigsty/releases/download/v3.7.0/pigsty-pkg-v3.7.0.u24.aarch64.tgz) |
| Debian 12.11    | <span class="font-bold text-sky-700">D12</span> | <span class="font-bold text-sky-600">x86_64</span> | [`d12.aarch64`](https://github.com/pgsty/pigsty/blob/v3.7.0/roles/node_id/vars/d12.aarch64.yml) | [`pigsty-pkg-v3.7.0.d12.aarch64.tgz`](https://github.com/pgsty/pigsty/releases/download/v3.7.0/pigsty-pkg-v3.7.0.d12.aarch64.tgz) |

https://github.com/pgsty/pigsty/releases/download/v3.7.0/pigsty-pkg-v3.7.0.el9.x86_64.tgz

**离线软件包是为特定的 Linux 操作系统小版本制作的**

在较低的操作系统小版本上使用更高小版本的离线软件包，大概率可以使用，但也有失败的可能


------

## 使用离线软件包？ {#use-offline-package}

将离线软件包放置于 `/tmp/pkg.tgz` 路径下，进入 `~/pigsty` 目录执行 `./bootstrap`，即可解包使用离线安装包。
Pigsty 会将其解压至 `/www/pigsty`，然后配置系统仓库列表启用此仓库，并从中安装 `ansible`。

自从 Pigsty v3.6 版本起，大部份配置模板都默认不再构建本地软件仓库，而是直接从互联网上游安装软件包。
少部分配置模板如 `rich` 与 `full` 依然保留了旧版本的行为 —— 先构建本地仓库再使用。

如果您想要在自己的配置中使用已经解包配置好的离线软件包，请修改以下配置：

- [`repo_enabled`](/zh/docs/infra/param#repo_enabled)：将此参数打开，设置为 `true`，则会构建本地软件源（在大部份配置中被显式关闭）
- [`node_repo_modules`](/zh/docs/node/param#node_repo_modules)：将此参数设置为 `local`，则环境中所有节点都从本地软件仓库安装
  - 在大部份模板中，此参数现在被显式配置为：`node,infra,pgsql`，即直接从这些上游软件仓库安装。
  - 将其设置为 `local`，则会使用本地软件仓库安装所有软件包，速度最快，没有其他仓库的变数干扰。
  - 如果你想同时使用本地软件仓库和上游软件仓库，可以将其设置为 `local,node,infra,pgsql`



--------

## 优缺点 {#pros-and-cons}

如果您使用的是上述列表中给出的操作系统（精确匹配的小版本），那么建议使用离线软件包。
Pigsty 为这些系统提供了开箱即用的预制离线软件包，在 GitHub 上提供免费下载。

**使用离线软件包的优点**

- 官方离线软件包经过测试。
- 在与互联网隔离的环境中交付的最简单方法。
- 通过一次性预下载所有软件包来加速安装过程。
- 快照确保可以正常工作，无需担心上游依赖项的变动导致依赖错漏。


**使用离线软件包的缺点**

- 如果操作系统次要版本不匹配，操作系统的 rpm/deb 软件包可能会出现问题
- 可能不包含最新的更新和操作系统安全补丁。

如果你使用的操作系统版本不在上述列表中，你可以考虑自制离线安装包，我们也提供针对更多操作系统大小版本的离线安装包预制服务（¥200）



------

## 引导程序 {#bootstrap}

`bootstrap` 脚本将自动检测 `/tmp/pkg.tgz` 并默认将其解压到 `/www/pigsty`。
它还将设置操作系统软件包管理器的仓库文件，并安装 `ansible` 和其他工具。

**我的仓库文件在哪里？**

引导程序默认会 **清除** 现有仓库，以确保只安装所需的仓库。

您可以在 `/etc/yum.repos.d/backup` (EL) 或 `/etc/apt/backup` (Debian / Ubuntu) 中找到它们


**如果您想保留现有仓库**

您可以使用 `-k|--keep` 参数来保持现有仓库文件不变：

```bash
./bootstrap -k # 或 --keep
```



------

## 制作离线软件包 {#make-offline-package}

如果您选择的操作系统不在默认列表中，
您可以使用内置的 [**`cache.yml`**](https://github.com/pgsty/pigsty/blob/v3.7.0/cache.yml) 剧本制作自己的离线软件包。


### 步骤 1
        找到一台运行完全相同操作系统版本，且可以访问互联网的节点

### 步骤 2
        运行标准 [在线安装](/zh/docs/install) （建议使用 `rich` 配置模板：`configure -c rich`）

### 步骤 3
        `cd ~/pigsty; ./cache.yml`：制作并获取离线软件包到 `~/pigsty/dist/${version}/`

### 步骤 4
        将离线软件包复制到没有互联网访问的环境中（ftp、scp、usb 等），通过 `bootstrap` 解包使用




**v3.6 的行为变化**

自从 Pigsty v3.6 开始，大部份配置模板都直接从互联网上游安装软件包，而不是先下载到管理节点本地构建软件仓库，再从中安装。
你可以通过调整参数来恢复此前的默认行为，如果你需要构建自己的离线软件包，这很有用：

- [`repo_enabled`](/zh/docs/infra/param#repo_enabled)：将此参数打开，则会构建本地软件源（在大部份配置中被显式关闭）
- [`node_repo_modules`](/zh/docs/node/param#node_repo_modules)：将此参数设置为 `local`，则环境中所有节点都从本地软件仓库安装

部分配置模板，例如 `rich` 与 `full` 依然直接保留旧版本的行为 —— 先构建本地仓库再使用，故无需调整。


我们提供[付费服务](/zh/docs/service)，提供经过测试的预制 Linux 主版本.次版本制作离线软件包。（¥200）




------

## 混合方法 {#hybrid-approach}

有一种混合方法可以使用离线软件包作为基础，并在线补足不匹配的增量软件包，这种办法可以融合离线安装与在线安装的优点。

例如，假设您使用的是 RockyLinux 9.5，但官方离线软件包是为 RockyLinux 9.6 制作的。
您可以使用 `el9` 离线软件包，（虽然是针对 9.6 制作的）
然后在执行正式安装前，执行 `make repo-build` 重新下载 9.5 对应的缺失软件包，
Pigsty 将从上游仓库重新下载所需的增量。
