Установка пакетов на сервер без доступа к интернет

Варианты подготоки сервера

  1. Сервер на "свежей" версии debian или ubuntu. Используется prerequisites.sh.

  2. Сервер с иной версией ОС, в наличии образ для разворота ОС. Используется prerequisites.sh с предварительной ручной подготовкой пакетов.

  3. Сервер имеет доступ к локальным копиям репозиториев. Рекомендуемый вариант.

  4. Установка необходимых пакетов вручную. Список пакетов.


1. Сервер на "свежей" версии debian или ubuntu. Используется prerequisites.sh.

Обзор

Чтобы установить систему на сервер, на котором отсутствует доступ к интернет, необходимо воспользоваться установщиком пакетов.
Его необходимо запускать на локальной машине с доступом к интернет.
С помощью docker-контейнера с идентичным экземпляром ОС, совпадающей с установленной на сервере, установщик загружает необходимые пакеты, копирует на сервер и устанавливает там со всеми зависимостями. Таким образом если разница между дистрибутивами существенная (например более новая ОС в контейнере), то установка подготовленных пакетов на сервере может завершиться с ошибкой, в этом случае рекомендуется обновить ОС на сервере или воспользоваться другим вариантом подготовки сервера.

Процесс имеет около 10 этапов и может занять до 15 минут.

В случае доступа к серверу через VPN может отсутствовать одновременный доступ к сети интернет на локальной машине.
Для этого скрипт установщика уведомляет о необходимости подготовиться и обеспечить то или иное подключение, и ожидает подтверждения от человека.

После завершения скрипта-установщика все необходимые пакеты будут установлены на сервере, и в ходе основного процесса установки можно выбрать режим установки без доступа к сети интернет.

Алгоритм

1) Распаковать или скопировать инсталлятор era. Например в каталог /tmp

2) Установить docker на локальной машине.

sudo apt install -y docker-ce docker-ce-cli containerd.io

3) Запустить скрипт-установщик пререквизитов.

cd /tmp/debian_ubuntu
bash prerequisites.sh

4) Ввести адрес сервера, на который производится установка, и логин пользователя на сервере. При запросе ввести пароль пользователя.

Welcome to era prerequisites installer.
NOTE! You need docker installed on local host.

===============================================================
Install packages script started
===============================================================

Enter remote server IP-address: 192.168.0.115
Enter remote server login: admin

5) По мере работы установщика подтверждать наличие подключения к серверу и к сети интернет на локальной машине.

Список этапов скрипта установки

1) Подключение к удаленному серверу по ssh, загрузка скриптов на сервер.
2) Определение типа и версии операционной системы на сервере (osver.sh).
3) Определение списка необходимых пакетов, которые отсутствуют на сервере (filter_packages.sh).
4) Запуск на локальной машине docker-контейнера с операционной системой, аналогичной удаленному серверу. Установка в контейнере пакетов. (container_start.sh)
5) Построение списка зависимостей для необходимых пакетов в контейнере (container_deps.sh).
6) Фильтрация списка зависимостей, которые отсутствуют на сервере (filter_packages.sh).
7) Скачивание пакетов в docker-контейнере в папку с подключенным волюмом для доступа из хоста (container_download.sh).
8) Остановка docker-контейнера.
9) Загрузка скачанных пакетов на сервер (upload.sh).
10) Установка скачанных пакетов на сервере (install_packages.sh).


2. Сервер с иной версией ОС, в наличии образ для разворота ОС. Используется prerequisites.sh с предварительной ручной подготовкой пакетов.

Вариант применяется когда на сервере и на рабочей машине (с которой происходит настройка) отсутствует интернет. В этом случае необходимо развернуть идентичную серверу ОС с доступом в интернет и подготовить пакеты вручную. После подготовки пакетов выполняется алгоритм из варианта 1, скрипт prerequisites.sh при наличии файлов в prepared_packages, в каталоге совпадающем с версией ОС на сервере, будет использовать их.

Пакеты необходимо сохранить в дереве файлов инсталлятора - prerequisites/prepared_packages. prepared_packages может cодержать каталоги для различных ОС и версий ОС. Вложенные папки должены быть в формате: ID/VERSION_ID и содержать .deb файлы (допускается вложенность в дополнительные каталоги)
Например для ALSE 1.7.4: astra/1.7_x86-64/*.deb

Алгоритм сборки пакетов для ОС (на примере debian 11):
  1. Подготовить требуемую ОС (установить в виртуальной или железной машине)

  2. Перейти в каталог /var/cache/apt/archives - в каталоге присутствуют deb архивы уже установленных пакетов (если они не нужны - игнорируем)

  3. Создать каталог ID/VERSION_ID для скаченных пакетов:

    • получить ID: cat /etc/os-release | grep -E "^ID=" | sed -E 's/ID=//g'

    • получить VERSION_ID: cat /etc/os-release | grep -E "^VERSION_ID=" | sed -E 's/VERSION_ID="?([^"]+)"?/\1/g'

    • создать в домашней папке: mkdir -p ~/ID/VERSION_ID

  4. Устанавить требуемый пакет

  5. Перенести пакет и все его зависимости из /var/cache/apt/archives в каталог: ~/ID/VERSION_ID

    • пакеты с большим количеством зависимостей можно устанавливать и переносить в подкаталоги, например tshark со всеми зависимостями скопировать в ~/ID/VERSION_ID/tshark - так их будет удобнее обновлять при необходимости.

    • отображение списка пакетов сортированных по ctime, новые архивы будут в конце списка: ls -asltrc

  6. Повторить для всех необходимых пакетов

  7. Перенести каталог ~/ID/VERSION_ID в каталог инсталлятора prerequisites/prepared_packages

  8. Выполнить подготовку сервера согласно варианту 1, разворот образа для подготовки пакетов будет пропущен автоматически если скрипт обнаружит *.deb файлы в соответствующем подкаталоге prepared_packages.


3. Сервер имеет доступ к локальным копиям репозиториев.

Рекомендуемый вариант, т.к. дополнительных действий для подготовки сервера выполнять не требуется.

Разворот локальных копий репозиториев выходит за рамки статьи.


4. Установка необходимых пакетов вручную. Список пакетов.

Обязательные пакеты:

  • rsync - используется при копировании файлов на сервер.

  • curl, wget - используются в процессе установки

  • docker-ce, docker-ce-cli, containerd.io - пакеты для установки docker

Опциональные пакеты (в некоторых случаях необходимы для установки/настройки платформы):

  • nfs-kernel-server, nfs-common, cifs-utils

  • postgresql-14

apt install -y rsync \
               net-tools \
               tree \
               curl \
               wget \
               zip \
               sshpass \
               sysstat \
               htop \
               iotop \
               dstat \
               smartmontools \
               tshark \
               nfs-kernel-server \
               nfs-common \
               cifs-utils \
               apt-transport-https \
               ca-certificates \
               lsb-release \
               perl-base \
               gnupg-agent \
               docker-ce \
               docker-ce-cli \
               containerd.io \
               postgresql-14