apt/aptitude -Как отобразить дерево зависимостей пакетов для набора пакетов, взятых как единое целое?

Простое решение с использованием файлов и атомарного переименования, которое можно легко реализовать с помощью языков сценариев.

Отправитель

  • записать данные в файлA
  • переименовать файл AвB

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

Отправитель не будет блокироваться, если получатель не прочитает данные.

Ресивер

  1. Если нет проблем дважды обработать одни и те же данные:

    • открыть файлB
    • чтение данных
    • закрыть файл

    Эта опция также работает, когда имеется более одного приемника, например. несколько CGI-процессов веб-сервера.

  2. Если приемник не должен дважды обрабатывать одни и те же данные:

    • переименовать файл BвC
    • в случае успеха прочитать и обработать файлC
    • опционально удалить файлC

    Эта опция работает только с одним приемником.

В обоих случаях старые данные будут потеряны, если отправитель записывает данные быстрее, чем получатель может их прочитать.

Конечно, есть и другие варианты.

1
07.04.2021, 19:10
2 ответа

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

apt depend <package>
apt-cache depend <package>   

Или должник

sudo apt install debtree
debtree <package>

мужчина должник:

Generates dependency graphs (in `dot' syntax) for the specified package...

Dependency graphs will by default show (pre-)dependencies, recommended packages, unversioned conflicts, and virtual packages provided by the requested package. Optionally also suggested packages and versioned conflicts can be included.

Поместите список пакетов в файл, затем:

cat file |xargs -n 1 apt-cache depends
cat file |xargs -n 1 debtree
2
28.04.2021, 22:53

Я попробовал предложенное выше предложение, но оно не дало мне того, что я ищу. Я сделал следующее:

Я поместил список из 1400+ имен пакетов в файл с именем no-longer-in-use.txt, по одному имени пакета в строке.

Затем я выполнил эту команду:

% xargs -n 1 debtree <no-longer-in-use.txt | dot -Tjpg >depgraph.jpg

Он выполнялся в течение 2 или 3 часов, и результирующий файл depgraph.jpgзанял более 3,4 Гб дискового пространства.

Когда я попытался просмотреть этот файл, все, что я увидел, это один маленький график из 4 -элементов. Я предполагаю, что команда создала более 1400 отдельных графиков, а затем просто добавила их один за другим в вывод. Это означало, что мой просмотрщик изображений видел только первый.

В любом случае, я хочу, чтобы они были объединены в один график, а не в несколько отдельных графиков. Я думаю, что для этого выводdebtree(или apt-cache depends, если уж на то пошло, )должен быть предварительно -обработан во что-то, что представляет собой объединение всех зависимостей отдельных пакетов в один, охватывающий дерево зависимостей.

Ичтоэто то, что можно было питать через dot.

Но это все равно может оказаться огромным файлом изображения, и мне не нужен такой вид.

Вместо этого подхода я попробую следующий:

Запустите apt-cache dependsдля каждого пакета и отформатируйте выходные данные в файл CSV, используя имя пакета и данные из каждой строки Depends:следующим образом. Например, используя пакет ftp:

apt-cache depends ftpвыход:

ftp
  Depends: libc6
  Depends: libreadline8
  Depends: netbase
  Replaces: <netstd>

Обработанный вывод CSV:

ftp,libc6
ftp,libreadline8
ftp,netbase

Сделайте это для всех 1400+ пакетов,а затем объединить их отдельные выходные данные CSV в один большой файл CSV

.

Затем используйте этот большой CSV-файл в качестве входных данных для программы, которая создает из него дерево зависимостей. На самом деле, это может привести к созданию нескольких деревьев. Интересующие меня значения — это корни каждого из этих деревьев.

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

0
28.04.2021, 22:53

Теги

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