Бувають моменти, коли інтернету немає, а програму встановити дуже потрібно: віддалений сервер у полі, ноутбук у дорозі або сувора корпоративна мережа. Давайте разом зберемо офлайн-інсталятор для Debian/Ubuntu: завантажимо всі залежності apt, упакуємо їх у переносний репозиторій на USB і встановимо все без мережі. Це зручно, надійно і швидко — просто потрібні правильні apt команди і трохи терпіння 🙂
Що потрібно заздалегідь
Підготуйте:
- Один комп’ютер з інтернетом (онлайн) з тією ж версією Debian/Ubuntu і архітектурою, що й офлайн-машина.
- USB-носій або зовнішній диск з кількома гігабайтами вільного місця.
- Доступ до термінал Linux і базові права sudo.
Перевірте кодову назву і архітектуру, щоб усе збігалося:
lsb_release -cs # або: . /etc/os-release && echo $VERSION_CODENAME
dpkg --print-architecture
Основний How-to: збір залежностей і створення переносного репозиторію
Крок 1. Підготуйте робоче оточення (онлайн-машина)
sudo apt-get update
sudo apt-get install -y dpkg-dev apt-utils
mkdir -p ~/offline-repo/pool/main
Пакети dpkg-dev і apt-utils знадобляться, щоб згенерувати індекс репозиторію.
Крок 2. Завантажте цільний пакет і всі його залежності
Найпростіше — доручити це apt. Він підтягне всю потрібну дрібноту. Приклад для пакета examplepkg (замініть на ваш):
# Очистіть кеш, щоб не змішувати старі файли
sudo apt-get clean
# Завантажте пакети в нашу папку, не встановлюючи їх
sudo apt-get -y \
-o Dir::Cache::archives=~/offline-repo/pool/main \
install --download-only examplepkg
Команда install --download-only зкачає examplepkg та всі потрібні залежності у ~/offline-repo/pool/main.
Крок 3. Згенеруйте індекс Packages для локального репозиторію
Створимо мінімальну структуру "як у справжнього" репозиторію:
mkdir -p ~/offline-repo/dists/stable/main/binary-$(dpkg --print-architecture)
cd ~/offline-repo
# Згенеруйте індекс Packages і стислі версії
dpkg-scanpackages pool/main > dists/stable/main/binary-$(dpkg --print-architecture)/Packages
gzip -kf dists/stable/main/binary-$(dpkg --print-architecture)/Packages
# Не обов'язково, але красиво: Release-файл (прибере попередження)
apt-ftparchive release dists/stable > dists/stable/Release
Тепер у вас є переносний репозиторій з усіма .deb та індексом. Скопіюйте весь каталог ~/offline-repo на USB.
Крок 4. Підключіть репозиторій на офлайн-машині та встановіть пакети
Під’єднайте USB, визначте шлях (наприклад, /media/$USER/USB) і додайте джерело з типом file::
USB=/media/$USER/USB
sudo tee /etc/apt/sources.list.d/offline-usb.list > /dev/null <<EOF
deb [trusted=yes] file:${USB}/offline-repo stable main
EOF
sudo apt-get update
sudo apt-get install -y examplepkg
Прапорець [trusted=yes] потрібен, бо у нас немає підпису GPG. Це безпечно для локального USB, але не використовуйте так для мережевих репозиторіїв.
Альтернативні способи
Варіант A: apt-offline (ідеально для оновлень і офлайн-робочих місць)
apt-offline дозволяє на офлайн-хості згенерувати запит, а на онлайн-хості — отримати все потрібне (оновлення та/або конкретні пакети) в один бандл.
# На офлайн-машині (створюємо підпис-запит)
sudo apt-offline set offline.sig --install-packages examplepkg
# На онлайн-машині (завантажуємо все необхідне в архів)
apt-offline get offline.sig --bundle bundle.zip
# Назад на офлайн-машині (встановлюємо з бандлу)
sudo apt-offline install bundle.zip
Плюс: один файл, мінімум ручної роботи. Мінус: трохи інший робочий процес, потрібне встановлення apt-offline на обидві системи.
Варіант B: Пряме встановлення з купи .deb
Якщо ви вже маєте всі .deb (цільовий пакет і залежності), можна поставити їх одразу, і apt сам розв’яже порядок:
cd /path/to/debs
sudo apt install ./*.deb
Це простіше за повний репозиторій, але незручно, якщо пакетів багато або планується повторне використання USB-колекції.
GUI-спосіб (через Synaptic)
Любите графіку? Можна підключити локальний репозиторій у Synaptic (для тих, хто обирає як встановити програму в Linux без терміналу):
- Встановіть Synaptic на офлайн-машині заздалегідь або з вашого репозиторію USB.
- Відкрийте Synaptic → Налаштування → Репозиторії → Інше ПЗ → Додати.
- Як рядок джерела вкажіть:
deb [trusted=yes] file:/media/USER/USB/offline-repo stable mainі натисніть ОК. - Оновіть список (Reload) і встановіть потрібний пакет як завжди.
FAQ
Що робити, якщо архітектура або версія системи не збігається?
Переконайтеся, що на онлайн- і офлайн-машині однакова dpkg --print-architecture (amd64/arm64 тощо) і один і той самий реліз (lsb_release -cs). Інакше будуть конфлікти залежностей.
Отримую помилку про відсутній Release-файл
Додайте [trusted=yes] у джерело або згенеруйте Release через apt-ftparchive release dists/stable > dists/stable/Release. Це локальний репозиторій, підпис не є обов’язковим.
Чи можна додати кілька пакетів в один офлайн-репозиторій?
Так! Просто повторіть крок завантаження для кожного пакета (або переліку пакетів), а потім перегенеруйте Packages/Packages.gz.
apt каже, що не може знайти деякі залежності
На онлайн-машині ввімкніть усі ті ж джерела, що й на офлайн (main, universe, restricted, multiverse, backports). Потім знову виконайте apt-get update і повторіть завантаження.
Чи безпечно використовувати [trusted=yes]?
Так, якщо джерело — ваш локальний USB. Не застосовуйте це для мережевих дзеркал і сторонніх репозиторіїв.
Як зекономити місце на USB?
Після інсталяції можна очистити кеш: sudo apt-get clean. Також видаляйте застарілі версії .deb з вашого офлайн-репо перед регенерацією Packages.
Порада від Kernelka
Автоматизуйте рутину невеликим bash скрипти — і ви чемпіони продуктивності 🏁
#!/usr/bin/env bash
set -euo pipefail
PKGS=("$@")
REPO=~/offline-repo
ARCH=$(dpkg --print-architecture)
sudo apt-get update
sudo apt-get install -y dpkg-dev apt-utils
mkdir -p "$REPO/pool/main" "$REPO/dists/stable/main/binary-$ARCH"
sudo apt-get clean
for p in "${PKGS[@]}"; do
sudo apt-get -y -o Dir::Cache::archives="$REPO/pool/main" install --download-only "$p"
done
pushd "$REPO" &>/dev/null
dpkg-scanpackages pool/main > dists/stable/main/binary-$ARCH/Packages
gzip -fk dists/stable/main/binary-$ARCH/Packages
apt-ftparchive release dists/stable > dists/stable/Release || true
popd &>/dev/null
echo "Готово! Скопіюйте $REPO на USB і додайте джерело:"
echo "deb [trusted=yes] file:/media/USER/USB/offline-repo stable main"
Тепер ви маєте повторюваний процес: одна команда — і готовий офлайн-набір. Це саме той випадок, коли термінал Linux працює на вас 😉
Підсумок
- На онлайн-хості: завантажте пакет і залежності
apt-get install --download-onlyуpool/main. - Згенеруйте індекс
dpkg-scanpackagesі (опційно) Release черезapt-ftparchive. - Скопіюйте каталог на USB і додайте джерело типу
file:з[trusted=yes]. - На офлайн-хості:
apt-get updateі встановлюйте пакет як звичайно. - Альтернатива:
apt-offlineабо пряма установкаapt install ./*.deb.
Все! Тепер ви знаєте, як встановити програму в Linux без інтернету і тримати під рукою свій переносний репозиторій. Це не лише зручно, а й чудовий набір трюків для реального життя з Debian/Ubuntu 💡

Прокоментувати
На сайті відображається лише твоє ім'я та коментар. Електронна пошта зберігається виключно для зв'язку з тобою за потреби та в жодному разі не передається стороннім особам.