Столкнулся с вопросом: как установить программу в debian/ubuntu без интернета. Дело в том, для переноса уже установленных программ используют aptoncd, который делает мини-репозиторий из кэша пакетов. Но как быть если кэш чистился и в нем лежат не все необходимые пакеты? Или необходимо принести программу на ubuntu а на компьютере стоит Debian ? Да и архитектур много.Для получения пакетов со всеми зависимостями для установки на конкретную машину нам понадобится файл "/var/lib/dpkg/status" с исходной машины. В нем содержится список установленных пакетов и их состояние. На целевой системе не должно быть пакетов, установленных с ошибками иначе apt откажется работать.
Если нужно использовать альтернативный sources.list, то его следует создать. Затем создаем директорию, где будет наш кэш и директорию partial в ней. Далее дело техники.
Получаем список пакетов из soutce.list:
sudo apt-get -o Dir::State::status='наш файл status' -o Dir::Cache::archives="куда кладем пакеты" \
-o Dir::Etc::sourcelist="файл sources.list" -o APT::Architecture "архитектура" updateСоздаем кэш:
sudo apt-get -d -o Dir::State::status='наш файл status' -o Dir::Cache::archives="куда кладем пакеты" \
-o Dir::Etc::sourcelist="файл sources.list" -o APT::Architecture "архитектура" install <нужные пакеты>В результате в подготовленной директории появятся все пакеты, которые необходимы для установки указанных пакетов на нужную нам машину, которые мы определяем в мини-репозиторий с помощью aptoncd.
URL:
Обсуждается: http://www.opennet.me/tips/info/2241.shtml
Для примера, как это делается на FreeBSD:1. Устанавливаем ПО и попутно создаём бинарные пакеты в каталоге /usr/ports/packages/All/
portupgrade -p port_name
2. Копируем каталог с бинарными пакетами /usr/ports/packages/All/ на флэшку или делаем доступным в сети по NFS.
3. Устанавливаем новые пакеты на целевой машине:
pkg_add -r /mnt/packages/All/port_name-version.tbz
или
4. Обновляем уже установленные пакеты на новые версии (локальное дерево портов должно быть синхронным с той машиной, откуда скопировали пакеты):
env PKG_PATH=/mnt/packages/All/ portupgrade -aiPP
где "i" - интерактивно; "PP" — исключительно бинарное обновление без сборки из исходников.
Итого: никакие репозитории не нужны. Есть каталог с бинарными пакетами, который обновляется централизованно. Предыдущие версии пакетов из этого каталога не удаляются, так что можно откатиться на предыдущую версию какого-то ПО (pkg_delete -f pkg_name-failversion && pkg_add -f pkg_name-goodversion).
Угу. Только в оригинальном посте речь о другой ситуации - в аналогии с FreeBSD это будет "бинарные пакеты не создавали или стерли". Во фре в этом случае вообще получится перенести ТОЧНО то, что есть на первой машине, на вторую? В дебиане это грантируется как раз бинарностью пакетов. А на фре придется второй раз собирать - и не факт, что получишь тот же самый результат.
> Для примера, как это делается на FreeBSD:А как то же самое сделать в случае разных архитектур? А если устанавливать скачиваемый софт на подключённой к Интернету системе нельзя?
E: Значение параметра APT::Architecture должно иметь вид =<val>E: Архивный каталог /home/xen/<имя_пакета>/partial отсутствует.
E: Не удалось открыть файл /var/lib/apt/<пакет> status - open (2: No such file or directory)
E: Списки пакетов или status-файл не могут быть открыты или прочитаны.
Короче пользоваться невозможно, нужно оформить в виде скрипта, можно даже без гуя. пока продолжаю пользоваться семью вытянутыми двд-образами.
В подобном случае пользовался apt-mirror,
правда выкачивать полное зеркало довольно долгое занятие, в моем случае оно было у локального провайдера.
Для убунты занимало около 45 гб примерно год назад,
конфиг в /etc/apt/mirror.list,
выглядит как sources.list + дополнительные параметры, типа архитектуры, локального каталога куда сохранять и количества потоков.
До недавнего времени этим методом и пользовался. Он мне не нравился т.к. не очень удобно - для установки нескольких прог пставлять по очереди несколько DVD, читать список пакетов, выбирать софт, а потом еще раз вставлять эти диски, чтоб забрать пакеты.
Знак "=" действительно забыл.Я же русским я зыком написал
> создаем директорию, где будет наш кэш и директорию partial в нейЭта надпись говорит о том, что apt не нашел указанный тобой файл.
Ну и четвертая ошибка следует из третей.
Еще раз уточню, что файл "/var/lib/dpkg/status" надо брать с машины на которую несем пакеты для установки.
Где ж Вы были 2 года назад? -:)
Теперь у ня и домашний инет справляется.
А так с работы было неудобно таскать.
Если б я сам это знал, то поставил бы Ubuntu на домашней машине на 3 года раньше.А началось все как раз с желания написать софтину, которая вытягивает все необходимые пакеты для установки софта на машину без инета, а оказалось, что все уже написано до меня.
PS внимательнее читаем маны.
классная хаутушка, спасибо! ...если бы действительно, оформить это в виде пары скриптов (собственные знания пока не позволяют), то было бы вообще супер.
Сейчас рассматриваю возможность написания утилитки и, возможно, GUI к ней. Смысл в предоставлении возможности собирать и хранить файлы status от свежеустановленных осей для большего удобства. Ну и автоматизировать все это безобразие.
Еще небольшое дополнение. Если для скачивания пакетов использовать Ubuntu и собственный sources.list, то нужно предварительно отключить все PPA репозитории т.к. ссылки на них хранятся в отдельных файлах в каталоге /etc/apt/sources.list.d и не перекрываются вашим sources.list