Я использовал инструмент, который вычисляет минимальный набор пакетов, который вы можете установить, чтобы получить текущий набор пакетов, который у вас есть. Это отличается от того, чтобы сказать вам, каковы ваши выборы. Он буквально находит кратчайший список пакетов, который через зависимости даст вам то, что у вас есть в настоящее время.
Я забыл, где найти этот инструмент. Как это называется?
Я написал небольшой скрипт на Python для этого, опубликованный здесь как .
Вы задаете ему набор имен пакетов в командной строке, и он должен предоставлять вам меньший минимальный набор пакетов, которые подразумевают все остальные, которые вы указали в качестве аргументов. Здесь x11-proto-fixes-dev
подразумевается (зависимость) от libgtk2.0-dev
:
fuwaad:~$ python mindeps.py x11proto-fixes-dev libgtk2.0-dev
libgtk2.0-dev
Я попытался ответить на этот и два других похожих вопроса о системе, в которой я работал годами, и самый короткий список, который я мог получить, был 1338 пакетов, большинство из которых были, очевидно, зависимостями или пакетами пакетов.
Однако, на Unix / Linux Stack Exchange я нашел этот ответ , который извлекает список стандартных пакетов для вашей установки из зеркала Ubuntu и фильтрует его. Это привело меня к 404 пакетам, что мне кажется нормальным.
aptitude
поможет вам в большинстве случаев с помощью функции поиска. Вот как вы найдете все установленное, которое не было только автоматической зависимостью:
aptitude search -F "%p" "?installed ?not(?automatic)"
Это не будет оптимальным, некоторые из них могут быть удалены, но я не знаю простого способа решить это. , Возможно, ответ лежит в man aptitude
.
Если подумать, с этим списком вы можете просмотреть его и найти зависимые пакеты (не зависимости) для каждого из них. Если один из них находится в главном списке, удалите текущий пакет из списка ... но только после того, как вы проанализировали весь список, или вы пропустите промежуточные звенья в дереве депо уровня 3+.
Вы находите иждивенцев с таким запросом:
aptitude search '~i~Dpackage'
Я бы попробовал написать сценарий, но я набираю его на крошечной телефонной клавиатуре. Даже у меня есть пределы.
Редактировать: После пяти минут попыток уснуть я начал взламывать это. что-то вроде этого должно сделать эту работу:
orig=$(aptitude search -F "%p" "?installed ?not(?automatic)")
newlist="";
for p in $orig; do
depended=0;
for dependant in `aptitude search -F "%p" "~i~D$p"`; do
if [[ $orig == "* $dependant *" ]]; then
depended=1;
fi;
done;
if [[ $depended == 0 ]]; then
newlist="$newlist $p";
fi;
done;
echo $newlist
Обратите внимание, что для выполнения этого процесса требуется действительно много времени, и это может быть чрезмерным (например, он удалит то, что вы установили вручную, которые вы хотите установить вручную, если они зависят от чего-то еще в списке $ orig, который вы, возможно, установили позже).