Ответ 1
# aptitude clean
# aptitude --download-only install <your_package_here>
# cp /var/cache/apt/archives/*.deb <your_directory_here>
Я пытаюсь установить пакет на компьютере без подключения к Интернету. То, что я хочу сделать, это загрузить все пакеты и зависимости на машине с подключением к Интернету, а затем скрыть все сетевые компьютеры.
Я играл с apt-get
и apt-cache
, но я не вычислил быстрый и простой способ загрузки пакета и зависимостей одним махом в каталог по своему выбору. Как мне это сделать? Правильно ли я делаю эту проблему?
Как установить автономные пакеты с большим количеством зависимостей?
# aptitude clean
# aptitude --download-only install <your_package_here>
# cp /var/cache/apt/archives/*.deb <your_directory_here>
Помеченный ответ имеет проблему с тем, что доступные пакеты на компьютере, на котором выполняется загрузка, могут отличаться от целевого компьютера, и, следовательно, набор пакетов может быть неполным.
Чтобы избежать этого и получить все зависимости, используйте следующее:
apt-get download $(apt-rdepends <package>|grep -v "^ ")
Некоторые пакеты, возвращенные из apt-rdepends
, не существуют с точным именем для apt-get download
для загрузки (например, libc-dev
). В этих случаях отфильтруйте эти точные имена (обязательно используйте ^<NAME>$
, чтобы другие связанные имена, например libc-dev-bin
, которые существуют, не пропускались).
apt-get download $(apt-rdepends <package>|grep -v "^ " |grep -v "^libc-dev$")
После загрузки вы можете переместить файлы .deb
на компьютер без Интернета и установить их:
sudo dpkg -i *.deb
Тот же вопрос уже ответил здесь: Как перечислить/загрузить рекурсивные зависимости пакета debian?
попробовать:
PACKAGES="wget unzip"
apt-get download $(apt-cache depends --recurse --no-recommends --no-suggests \
--no-conflicts --no-breaks --no-replaces --no-enhances \
--no-pre-depends ${PACKAGES} | grep "^\w")
Подход aptitude --download-only ...
работает, только если у вас есть дистрибутив Debian с подключением к Интернету.
Если вы этого не сделаете, я думаю, что лучше запустить следующий скрипт на отключенном компьютере с Debian:
apt-get --print-uris --yes install <my_package_name> | grep ^\' | cut -d\' -f2 >downloads.list
переместите файл downloads.list на подключенный компьютер linux (или не linux) и запустите:
wget --input-file myurilist
при этом все ваши файлы загружаются в текущий каталог. После этого вы можете скопировать их на USB-ключ и установить на отключенный компьютер Debian.
кредиты: http://www.tuxradar.com/answers/517
PS Я в основном скопировал сообщение в блоге, потому что оно было не очень читабельным, и в случае, если сообщение исчезнет.
Несколько упрощен (и то, что сработало для меня), который работал у меня (на основе всего вышеизложенного)
Обратите внимание, что иерархия зависимостей может идти глубже, чем один уровень
Получить зависимости вашего пакета
$ apt-cache depends mongodb | grep Depends:
Depends: mongodb-dev
Depends: mongodb-server
Получить URL-адреса:
sudo apt-get --print-uris --yes -d --reinstall install mongodb-org mongodb-org-server mongodb-org-shell mongodb-org-tools | grep "http://" | awk '{print$1}' | xargs -I'{}' echo {} | tee files.list
wget --input-file files.list
Это загрузит все Debs в текущий каталог и не сработает, если не сможет найти кандидата.
Также НЕ требуется sudo для запуска sript!
nano getdebs.sh && chmod +x getdebs.sh && ./getdebs.sh
#!/bin/bash
package=ssmtp
apt-cache depends "$package" | grep Depends: >> deb.list
sed -i -e 's/[<>|:]//g' deb.list
sed -i -e 's/Depends//g' deb.list
sed -i -e 's/ //g' deb.list
filename="deb.list"
while read -r line
do
name="$line"
apt-get download "$name"
done < "$filename"
apt-get download "$package"
Примечание. Я использовал это в качестве своего примера, потому что на самом деле я пытался DL Deps для SSMTP, и он не работал на debconf-2.0, но этот script получил мне то, что мне нужно! Надеюсь, что это поможет.
Я использовал apt-cache depends package
, чтобы получить все необходимые пакеты в любом случае, если уже установлены в системе или нет.
Так что это будет работать всегда правильно.
Поскольку команда apt-cache работает по-разному, в зависимости от языка, вы должны попробовать эту команду в своей системе и адаптировать команду.
apt-cache зависит от вашего пакета
В системе englisch вы получаете:
$ apt-cache depends yourpackage
node
Depends: libax25
Depends: libc6
По немецкой системе вы получаете:
node
Hängt ab von: libax25
Hängt ab von: libc6
Версия Englisch со словом:
"Depends:
"
Вы должны изменить термин "yourpackage
" на свое желание дважды в этой команде, позаботьтесь об этом!
$ sudo apt-get --print-uris --yes -d --reinstall install yourpackage $(apt-cache depends yourpackage | grep " Depends:" | sed 's/ Depends://' | sed ':a;N;$!ba;s/\n//g') | grep ^\' | cut -d\' -f2 >downloads.list
И немецкая версия с термином:
"Hängt ab von:
"
Вы должны изменить термин "yourpackage
" на свое желание дважды в этой команде, позаботьтесь об этом!
Этот текст используется дважды в этой команде, если вы хотите адаптировать его к своему языку, позаботьтесь об этом!
$ sudo apt-get --print-uris --yes -d --reinstall install yourpackage $(apt-cache depends yourpackage | grep "Hängt ab von:" | sed 's/ Hängt ab von://' | sed ':a;N;$!ba;s/\n//g') | grep ^\' | cut -d\' -f2 >downloads.list
Вы получаете список ссылок в файлах downloads.list
Проверьте список, перейдите в свою папку и запустите список:
$ cd yourpathToYourFolder
$ wget --input-file downloads.list
Все необходимые пакеты находятся в:
$ ls yourpathToYourFolder
Я предполагаю, что у вас хороший жирный USB HD и хорошее соединение с сетью. Вы можете использовать apt-mirror, чтобы создать собственное зеркальное отражение.
Это загрузит все пакеты и зависимости (еще не установлены) в каталог по вашему выбору:
sudo apt-get install -d -o Dir::Cache=/path-to/directory/apt/cache -o Dir::State::Lists=/path-to/directory/apt/lists packages
Убедитесь, что /path-to/directory/apt/cache
и /path-to/directory/apt/lists
существуют.
Если вы не установите -o Dir::Cache
, он указывает на /var/cache/apt
,
Dir::State::Lists
указывает на /var/lib/apt/lists
(который хранит индексные файлы доступных пакетов)
Обе опции -o
можно использовать с обновлением и обновлением вместо установки.
На другом компьютере выполните одну и ту же команду без '-d
'