Рассмотрим задачу подготовки некоторого deb-пакета для установки в оффлайн режиме, например, на другой машине с той же версией операционной системы.
В отличие от Windows, где каждая программа поставляется с мегатоннами библиотек и может быть запущена на компьютерах с различными версиями Windows, в Linux каждый пакет собирается под конкретную версию конкретного семейства дистрибутивов. Поэтому просто так взять пакет, скачанный в одном месте, и установить его на другой машине может быть непросто. Однако, всё упрощается в том случае, если помимо целевого компьютера у вас есть свободный компьютер с такой же версией операционной системы. С развитием технологий виртуализации разворачивание аналогичной системы и вовсе перестало быть проблемой.
В качестве примера я возьму довольно внушительный по объёму зависимостей пакет библиотек Boost C++ под названием libboost1.55-all-dev.
Создание локального репозитория пакета
1. На компьютере-источнике, подключенному к интернет, создаём папку для скачивания нужных для сборки нашего пакета deb-файлов и переходим в неё:
# mkdir repository
# cd repository
2. Получим список адресов пакетов, необходимых для установки данного пакета:
# apt-get -y --print-uris install libboost1.55-all-dev | grep "'" | cut -f1 -d' ' | tr -d "'" > packet-list.txt
3. Получим список пакетов build-dep.txt, необходимых для сборки указанного пакета:
# apt-get -s build-dep libboost1.55-all-dev | grep "^ " > build-dep.txt
4. Получим список адресов build-dep-urls.txt, откуда их можно скачать:
# apt-get -y --print-uris install `cat build-dep.txt` | cut -f1 -d' ' | tr -d "'" | sort | uniq > build-dep-urls.txt
5. Скачиваем найденные пакеты:
# wget -i paket-list.txt
# wget -i build-dep-urls.txt
Всё, локальный репозиторий готов.
Таким образом, для подготовки пакета мало скачать файлы, которые идут вместе с ним (их 56), необходимо скачать также и все пакеты, от которых он зависит в процессе установки (их 60). Зависимости для установки выясняются с помощью опции build-dep установщика apt-get. А опция ––print–uris вместе с командой install позволяет узнать адреса, по которым они находятся.
Установка пакета на другой машине в режиме оффлайн
Копируем все .deb файлы с компьютера-источника source_comp в стандартный каталог кэша пакетов apt на целевом компьютере. Если компьютеры доступны по сети, то это легко сделать с помощью команды scp:
# scp user@source_comp:/путь_до_repository/*.deb /var/cache/apt/archives/
где user — пользователь, под которым мы логинимся на компьютер-источник.
Заставим apt обновить информацию о своём локальном репозитории:
# apt-get update
После этого необходимо сначала установить зависимости для сборки требуемого пакета:
# apt-get build-dep libboost1.55-all-dev
а затем и сам пакет:
# apt-get install libboost1.55-all-dev