Как скачать пакет .deb и все зависимости?


14

Для всех ответов, которые я нашел по этой теме, было решение создать на определенном компьютере A, где мне нужно установить пакет, файл, содержащий все необходимые ему зависимости, а затем загрузить его на другой компьютер, назовем его B.

Дело в том, что я хочу иметь хранилище определенного критически важного программного обеспечения, которое мне нужно для работы, чтобы иметь возможность устанавливать их в автономном режиме позже, если мне придется отформатировать рабочий стол.

Я действительно не забочусь о том, чтобы на моем компьютере было много избыточных файлов .deb, и я действительно не забочусь, если я собираюсь хранить 1 ГБ файлов для установки программного обеспечения объемом 10 МБ.

Итак, я хочу загрузить любую возможную зависимость. Есть ли способ, которым я могу это сделать?


Ответы:


22

Я бы пошел с этим:

apt-get download PACKAGE && apt-cache depends -i PACKAGE | awk '/Depends:/ {print $2}' | xargs apt-get download

Затем вы можете установить его dpkg -i *.debв каталог, который вы скачали.


1
Я думаю, что это сработало, большое спасибо. Я просто протестирую это еще несколько раз, прежде чем я вернусь, чтобы поблагодарить вас снова :)
ebernardes

Можете ли вы объяснить мне, что делают команды awk и xargs? Я только начинаю использовать Linux и никогда раньше не видел этих 2 команд
ebernardes

apt-cache depends -iпроверим наличие важных зависимостей для ПАКЕТА. Он будет выполнен, только если apt-get download PACKAGEудастся найти ПАКЕТ из репозиториев ppa, к которым вы добавили /etc/apt/sources.list. Теперь, apt-cache depends -i PACKAGEимеет вывод формы Depends: dependency-name. Нам нужны только имена зависимостей, так вот что делает awk - он получает только вторую строку. Например, попробуйте сделать apt-cache depends -i vim | awk '{print $2}' . Обратите внимание, что всю строку справа от && можно считать одним утверждением
Сергей Колодяжный,

1
Спасибо! Но я провел некоторое исследование и использовал команду sed '/ ^ </ d', чтобы удалить некоторые выходные данные из apt-кеша, это было уже хорошо, но теперь это работает в каждом случае, который я пытаюсь. Большое спасибо!
ebernardes

dpkg -i *.debне так хорошо, он не устанавливает пакет по порядку зависимостей. Таким образом, вам может понадобиться повторить попытку несколько раз, чтобы установить весь пакет. В любом случае, чтобы обойти?
Мифрил

1

Это единовременная вещь или что-то, что вы хотите постоянно обновлять? Вы в основном работаете в сети и просто хотите локальную резервную копию всех ваших пакетов, на всякий случай?

Есть несколько сервисов, которые вы можете установить, которые действуют как прокси / кеш APT. Вы указываете APT на свой локальный кеш, он будет загружаться из Интернета и хранить локально кэшированную копию всех пакетов. Это может быть очень полезно, если в вашей сети много компьютеров с одинаковым набором пакетов.

Мой предпочтительный apt кэш - это приблизительно , но есть также apt-cacher-ng и некоторые другие. У каждого есть небольшие различия в том, как можно настроить кэширование.

Я всегда использую минимальные установщики netinst для сборки своих систем на основе Debian, что означает, что в моем apt-кэше обычно есть почти все пакеты для полной сборки моих систем.


Это то, что я хочу сохранить на всякий случай, если мне нужно быстро установить программное обеспечение, даже если это устаревшая версия, прежде чем я смогу обновить его позже. Я проверю это, спасибо :)
ebernardes

0

запустите следующую программу на Python:

import subprocess
package=input("insert package name:")
t=subprocess.run(["apt-cache", "depends", "-i", package], stdout=subprocess.PIPE)
if t.stderr or t.returncode:
    print(t.stdout)
    exit(t.stderr)
#print(":", t.stdout)
needed_pacages=t.stdout.split(b"Depends: ")
print(package, "depends of", needed_pacages)
for choices in needed_pacages:
    one_choice_made=False
    for needed_package in choices.split(b"\n"):
        needed_package=needed_package.strip(b"\n ")
        t=subprocess.run(["apt-get", "download", needed_package])
        if t.stderr or t.returncode:
            print("ERROR: Status: {p.returncode}, stdout: {p.stdout}, stderr: {p.stderr}".format(p=t), "package name:", needed_package)
        else:
            one_choice_made = True
            #print("downloaded",vajalik_pakk)
            break
    if not one_choice_made:
        print("could not get one of dependecies", choices)

1
И почему это лучше, чем принятый ответ?
RalfFriedl

0

запустите следующую программу на python3:

import subprocess
olemas_olevad_pakid=set()
def r(pakk):
    t=subprocess.run(["apt-get", "download", pakk])
    if t.stderr or t.returncode:
        #print("could not load package: Status: {p.returncode}, stdout: {p.stdout}, stderr: {p.stderr}".format(p=t), "paki nimi:", pakk)
        return False
    olemas_olevad_pakid.add(pakk)
    t=subprocess.run(["apt-cache", "depends", "-i", pakk], stdout=subprocess.PIPE)
    if t.stderr or t.returncode:
        print(t.stdout)
        exit(t.stderr)
    #print(":", t.stdout)
    needed_pacages=t.stdout.split(b"Depends: ")[1:]
    #print(pakk, "needs packages:", needed_pacages)
    for choices in needed_pacages:
        one_choice_made=False
        for needed_package in choices.split(b"\n"):
            needed_package=needed_package.strip(b"\n ")
            if needed_package in olemas_olevad_pakid or r(needed_package):
                one_choice_made=True
                break
        if not one_choice_made:
            print("PROBLEM: could not download any of", choices)
            return False
    return True
#for pakk in packages_to_download:
#    print("pakk:",pakk)
#    r(pakk)
r(input("package name:"))

Он загрузит все зависимости всех зависимостей, а не только непосредственные зависимости. Но установить их с помощью dpkg -i *.debне удалось. Может быть, потому что apt-cache depends -i packageдает дезинформацию или некоторые файлы .deb все еще нуждаются в подключении к Интернету для установки.


Может произойти сбой, потому что dpkg не устанавливает пакеты в правильном порядке. Возможно, вы захотите повторить попытку dpkg несколько раз, пока не будут установлены все зависимости.
Черная Сова Кай
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.