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

Обзор

Чтобы установить систему на сервер, на котором отсутствует доступ к интернет, необходимо воспользоваться установщиком пакетов.
Его необходимо запускать на локальной машине с доступом к интернет.
С помощью 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).

Список пакетов

apt install -y rsync \
               net-tools \
               tree \
               curl \
               wget \
               zip \
               sysstat \
               htop \
               iotop \
               locales \
               locales-all \
               nfs-kernel-server \
               nfs-common \
               apt-transport-https \
               ca-certificates \
               software-properties-common \
               gnupg-agent \
               docker-ce \
               docker-ce-cli \
               containerd.io \
               postgresql-12