Назад | Перейти на главную страницу

Удалите последние n портов / пакетов

При компиляции какого-то порта я понял, что он зависит от 1000+ других портов и будет устанавливаться вечно, пока я не умру или мой диск не заполнится (мой жесткий диск действительно мал).

Я прервал make install clean.

Как я uninstall и clean те зависимости, которые уже построены и установлены? (их не менее 100+)

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

Пожалуйста помоги.

FreeBSD 9.0-ВЫПУСК amd64

РЕДАКТИРОВАТЬ: Другой способ задать этот вопрос: как я могу увидеть все зависимости для незарегистрированного порта и все подзависимости для этих зависимостей, независимо от ранее установленных портов или их [под] зависимостей?

В следующий раз беги make all-depends-list перед вы начинаете строить порт.
Если вам не нравится то, что вы видите в списке, не идите дальше.
Этот и другие жемчужины можно найти в /usr/ports/Mk/bsd.port.mk. Но не для дружеского чтения.

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

  • Опция 1 - Запустите команду выше, выясните, что вам не нужно, и удалите его.
    Это, наверное, наименее болезненный вариант.

  • Вариант 2 - бегать pkg_info -aR и ищите пакеты без зависимостей.
    Определите, какие из них вам не нужны, и удалите их.
    (Это хорошая практика ведения домашнего хозяйства каждый год или около того, ИМХО, но это раздражает.)

С точки зрения очистки от строительного детрита простой make clean в каталоге порта-нарушителя должна вызвать очистку зависимостей. Вы также можете сделать make clean в /usr/ports, но, вероятно, быстрее сдувать дерево и повторно извлекать его с помощью portsnap если хочешь пойти по этому пути ...


В качестве другого (более грязного) варианта, который очень специфичен для этой ситуации: если вы знаете, что не устанавливали никаких других портов с момента «ошибки», и последний раз, когда вы устанавливали порты, было некоторое время назад, вы можете использовать даты создания каталогов в /var/db/pkg - Просто удалите пакеты, записи в базе которых были созданы во время прерванной установки.

Как и в случае с другими вариантами выше, вам все равно нужно будет посмотреть на пакеты, которые вы удаляете, чтобы убедиться, что вы не сдуваете ничего важного, но этот список должен быть значительно короче, чем два других варианта, если он работает. для вашей ситуации.

Решение довольно простое, если вы знаете дату / время, когда вы начали make install:

  • Получить список всех установленных пакетов и отсортировать по дате изменения: ls -ltr /var/db/pkg
  • Скопируйте результаты в свой любимый текстовый редактор
  • Удалите строки с пакетами, которые вам нужно сохранить
  • Удалить все столбцы, кроме только имени файла
  • Добавьте pkg_delete перед каждым именем файла
  • Скопируйте результат на консоль ssh несколько раз ***, пока выбранные пакеты не будут удалены.

*** Одного запуска недостаточно, потому что в этом списке пакетов, который вы создали, есть пакеты, зависящие друг от друга.

make install clean завершает install на всех зависимостях до его начала clean. Если ваше дерево портов было чистым при запуске, значит, вы только что установили зависимости, с которыми work подкаталоги и .install_done* файлы в этих подкаталогах.

find /usr/ports -mindepth 3 -maxdepth 3 -type d -name work -print |
while read wrkdir; do
  ls -1a "$wrkdir" | grep -q '^\.install_done' && dirname "$wrkdir"
done

Дайте portmaster -s попытка. Он предложит вам удалить порты, от которых ничего не зависит в вашей системе. (Если он у вас не установлен, сначала установите его из ports-mgmt / portmaster.)