Простое решение с использованием файлов и атомарного переименования, которое можно легко реализовать с помощью языков сценариев.
Отправитель
A
A
вB
Переименование является атомарным, и его можно выполнить, пока получатель обрабатывает старый файл.
Отправитель не будет блокироваться, если получатель не прочитает данные.
Ресивер
Если нет проблем дважды обработать одни и те же данные:
B
Эта опция также работает, когда имеется более одного приемника, например. несколько CGI-процессов веб-сервера.
Если приемник не должен дважды обрабатывать одни и те же данные:
B
вC
C
C
Эта опция работает только с одним приемником.
В обоих случаях старые данные будут потеряны, если отправитель записывает данные быстрее, чем получатель может их прочитать.
Конечно, есть и другие варианты.
Вы можете использовать:
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
Я попробовал предложенное выше предложение, но оно не дало мне того, что я ищу. Я сделал следующее:
Я поместил список из 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-файл в качестве входных данных для программы, которая создает из него дерево зависимостей. На самом деле, это может привести к созданию нескольких деревьев. Интересующие меня значения — это корни каждого из этих деревьев.
Я буду работать над этой программой в свободное время в течение следующих нескольких дней и опубликую ее, как только закончу.