Рекурсивный список зависимостей пакета в arch linux

646
Vince

Я пытаюсь скачать драйвер AUR для установки на вновь установленную систему (без подключения к интернету), однако, когда я печатаю

makepkg -s 

Это требует, чтобы другие пакеты были установлены. Поскольку в этой системе нет Интернета, я хотел бы загрузить эти пакеты (и все их зависимости) с другого компьютера, подключенного к Интернету, а затем установить его в новой системе. На сайте archlinux я нашел руководство по установке пакетов в автономном режиме. С помощью

pacman -Sp <package_name> > /myPackages.list 

Создадим список всех пакетов, которые я укажу package_name. Однако мне тоже нужны все их зависимости. Итак, я хочу знать:

  1. Есть ли простой способ сделать это?
  2. Нужно ли вручную вводить команды для каждого необходимого пакета зависимостей?
  3. Можно ли написать сценарий оболочки для этого? Если да, как мне это сделать?
2

1 ответ на вопрос

1
Iskustvo

Ответ

Существует программа pactree, которая устанавливается вместе с пакетом pacman .
Он используется для отображения дерева зависимостей для указанного пакета.

Вы можете использовать это так:

pactree -u <package_name> 

Однако, в отличие от pacman -Sp <package_name>, pactree принимает только одно имя пакета.

Одно решение

Есть несколько способов обойти эту проблему, но, судя по вашему вопросу, у меня нет ощущения, что вы знакомы со скриптами оболочки (извините, если я ошибаюсь), поэтому я объясню одно решение в деталях:

echo "package_name1 package_name2 ..." | xargs -n 1 pactree -u | sort -u | xargs -n 1 pacman -Sp > /myPackages.list 

echo- Встроенная команда оболочки: выводит аргумент в stdout(с добавленной новой строкой).

|- Труба: перенаправляет stdoutот левой команды к stdinправой команде.

xargs- Внешняя команда: принимает stdinи добавляет ее в список аргументов данной команды.
-n 1- xargsопция: выполнить данную команду один раз для каждого аргумента из stdin.

pactree- Внешняя команда: Показать дерево зависимостей для данного пакета.
-u- pactreeoption: вместо графика вывести каждый пакет зависимостей в отдельной строке.

sort- Внешняя команда: сортирует текст из stdinи записывает его в stdout.
-u- sortопция: удаляет дубликаты из отсортированных stdin.
(Это необходимо, потому что некоторые пакеты могут иметь одинаковые зависимости.)

Вы знакомы с остальной частью линии.

Заметка

pacman -Sp сообщит об ошибке, если вы передадите пакет из AUR.

РЕДАКТИРОВАТЬ 17.09.2018

Как указывает JdeBP, pactreeсейчас находится в пакете pacman-contrib .

This answer is out of date. https://unix.stackexchange.com/questions/469545/ JdeBP 5 лет назад 1

Похожие вопросы