Как бороться с `apt-get autoremove` в Ubuntu

Вы всегда можете выбрать Ubuntu Gnome и установить его. В случае, если вы используете Unity и хотите переключиться на GNOME, так как это будет стандартная среда рабочего стола по умолчанию с 18.04, вы можете использовать указанную выше команду.

sudo apt install gnome-shell

Выберите gdm3 над lightdm, и вы получите возможность входа в систему на сеанс Ubuntu GNome при следующем запуске.

Установите GNOME в Ubuntu

2
задан 12 March 2018 в 06:31

2 ответа

Правила autoremoval на самом деле довольно просты.

Конкретный ответ на ваш вопрос «Самый безопасный подход для удаления нежелательных приложений / библиотек в Ubuntu, который не включает проверку всех пакетов и их зависимостей один на один »:« Пусть Ап делает свою работу ». Вы можете сделать это, когда лучше поймете, как apt делает его решения. Для большинства новых пользователей это нормальная часть кривой обучения. Итак, давайте обсудим логику Apt ....

Apt понятия не имеет, если вы самый безопасный подход для удаления нежелательных приложений / библиотек в Ubuntu, который не включает проверку всех пакетов и их зависимостей один на один пакет или нет. Это не экстрасенс. Он знает только зависимости каждого пакета и то, что вы ему рассказываете. Для того, чтобы любой пакет имел право на autoremoval (осиротевший), он должен соответствовать двум критериям:

Он должен быть помечен как auto (вместо manual) Нет manual package зависит - прямо или косвенно - на упаковке.

Есть два критерия , которые путают пользователей.

Он должен быть помечен как auto (вместо manual) [ ! d7] Установщик Ubuntu отмечает все начальные пакеты на новой установке manual. Это должно заставить новых людей случайно удалять огромные плиты своей системы. Пакет manual пакета не зависит - прямо или косвенно - от пакета.

Вот и все - два правила и три специальных поведения.

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

Пример # 1: sudo apt install foo libfoo

Довольно очевидно, что все, что называется libfoo, вероятно, является зависимостью от foo. И это тоже знает. Однако мы явно сказали apt установить libfoo - он будет отмечен manual и не будет иметь права на автовосстановление. Если бы мы вместо этого сказали только sudo apt install foo, и пусть apt вычисляет зависимости, тогда libfoo будет (должным образом) отмечен auto и будет иметь право на автоопределение при удалении foo.

Пример # 1 : sudo apt remove ubuntu-desktop

Если вы создаете систему Ubuntu с минимального изображения или устанавливаете стеки LAMP или новые окружения рабочего стола после начальной установки, тогда Metapackages, например ubuntu-desktop отлично - весь стек в одной команде. Но посмотрите на это с точки зрения apt: один пакет manual и десятки (сотни) зависимостей auto. Когда вы удалите метапакет из-за попыток другого приложения ... ну, вы получите эту идею.

Выход состоит в том, чтобы просто отметить ваши ключевые приложения верхнего уровня как manual:

sudo apt install foo // Even if foo is already installed sudo apt-mark manual foo // Does the same thing sudo apt-mark auto libfoo // Makes libfoo eligible for autoremoval someday when foo gets removed sudo apt remove foo // Apt will remove foo *regardless* of apt-mark

Помните, что apt-marking просто сообщает apt, какие пакеты являются вашими приложениями верхнего уровня, непригодными для autoremoval - это НЕ защищает их от человеческой глупости.

Простой способ просмотреть autoremoval список для большинства людей - это просто поиск пакетов приложений верхнего уровня - вашего почтового клиента, вашего веб-браузера, вашей среды IDE, вашей любимой игры. Найдите foo, игнорируйте libfoo. Когда кто-то проскальзывает и удаляется, просто переустановите его - помните, что указание системе установить пакет отметит его manual. Однако ваш конкретный прецедент более сложный, поскольку вы компилируете программное обеспечение и используете пакеты -dev. Нет волшебного решения для вас (извините) - вы должны потратить время, чтобы узнать, какие пакеты важны для вас ... как и все мы.

Простой способ просмотра список autoremoval : все это относится к пакетам deb из репозиториев Ubuntu. Если вы добавите много странных пакетов из какого-то другого места, тогда вам потребуется больше обслуживания по пакетам. Помните, что apt не знает и не контролирует pip, snap, flatpack, appimage software, загруженные двоичные файлы или скрипты или скомпилированный код.

3
ответ дан 17 July 2018 в 19:03

Правила autoremoval на самом деле довольно просты.

Конкретный ответ на ваш вопрос «Самый безопасный подход для удаления нежелательных приложений / библиотек в Ubuntu, который не включает проверку всех пакетов и их зависимостей один на один »:« Пусть Ап делает свою работу ». Вы можете сделать это, когда лучше поймете, как apt делает его решения. Для большинства новых пользователей это нормальная часть кривой обучения. Итак, давайте обсудим логику Apt ....

Apt понятия не имеет, если вы самый безопасный подход для удаления нежелательных приложений / библиотек в Ubuntu, который не включает проверку всех пакетов и их зависимостей один на один пакет или нет. Это не экстрасенс. Он знает только зависимости каждого пакета и то, что вы ему рассказываете. Для того, чтобы любой пакет имел право на autoremoval (осиротевший), он должен соответствовать двум критериям:

Он должен быть помечен как auto (вместо manual) Нет manual package зависит - прямо или косвенно - на упаковке.

Есть два критерия , которые путают пользователей.

Он должен быть помечен как auto (вместо manual) [ ! d7] Установщик Ubuntu отмечает все начальные пакеты на новой установке manual. Это должно заставить новых людей случайно удалять огромные плиты своей системы. Пакет manual пакета не зависит - прямо или косвенно - от пакета.

Вот и все - два правила и три специальных поведения.

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

Пример # 1: sudo apt install foo libfoo

Довольно очевидно, что все, что называется libfoo, вероятно, является зависимостью от foo. И это тоже знает. Однако мы явно сказали apt установить libfoo - он будет отмечен manual и не будет иметь права на автовосстановление. Если бы мы вместо этого сказали только sudo apt install foo, и пусть apt вычисляет зависимости, тогда libfoo будет (должным образом) отмечен auto и будет иметь право на автоопределение при удалении foo.

Пример # 1 : sudo apt remove ubuntu-desktop

Если вы создаете систему Ubuntu с минимального изображения или устанавливаете стеки LAMP или новые окружения рабочего стола после начальной установки, тогда Metapackages, например ubuntu-desktop отлично - весь стек в одной команде. Но посмотрите на это с точки зрения apt: один пакет manual и десятки (сотни) зависимостей auto. Когда вы удалите метапакет из-за попыток другого приложения ... ну, вы получите эту идею.

Выход состоит в том, чтобы просто отметить ваши ключевые приложения верхнего уровня как manual:

sudo apt install foo // Even if foo is already installed sudo apt-mark manual foo // Does the same thing sudo apt-mark auto libfoo // Makes libfoo eligible for autoremoval someday when foo gets removed sudo apt remove foo // Apt will remove foo *regardless* of apt-mark

Помните, что apt-marking просто сообщает apt, какие пакеты являются вашими приложениями верхнего уровня, непригодными для autoremoval - это НЕ защищает их от человеческой глупости.

Простой способ просмотреть autoremoval список для большинства людей - это просто поиск пакетов приложений верхнего уровня - вашего почтового клиента, вашего веб-браузера, вашей среды IDE, вашей любимой игры. Найдите foo, игнорируйте libfoo. Когда кто-то проскальзывает и удаляется, просто переустановите его - помните, что указание системе установить пакет отметит его manual. Однако ваш конкретный прецедент более сложный, поскольку вы компилируете программное обеспечение и используете пакеты -dev. Нет волшебного решения для вас (извините) - вы должны потратить время, чтобы узнать, какие пакеты важны для вас ... как и все мы.

Простой способ просмотра список autoremoval : все это относится к пакетам deb из репозиториев Ubuntu. Если вы добавите много странных пакетов из какого-то другого места, тогда вам потребуется больше обслуживания по пакетам. Помните, что apt не знает и не контролирует pip, snap, flatpack, appimage software, загруженные двоичные файлы или скрипты или скомпилированный код.

3
ответ дан 23 July 2018 в 19:50
  • 1
    Правила могут быть простыми, но ... Как указывает OP, apt и используемые им правила не могут определить, используется ли пакет, например, удаление пакета -dev, который OP цитирует в его / ее вопросе как они компилируются из исходного кода, используя заголовки из репозиториев ubuntu. Лично я советую просмотреть список пакетов, предлагаемых для удаления, apt может делать предложения, но только конечный пользователь может определить, имеют ли такие предложения смысл. Если вы сомневаетесь, не удаляйте как IMHO, apt не так хорош при удалении пакетов. – Panther 12 March 2018 в 09:33
  • 2
    @Panther отредактирован на основе ваших комментариев. Спасибо. – user535733 12 March 2018 в 15:44
  • 3
    @ user535733 Большое спасибо за ваш подробный ответ. Как насчет ограничения удаления пакетов, которые пользователь явно установил с помощью команды apt-get install? Это может быть сделано скриптом для создания списка этих приложений, а затем найти их зависимости и проверить их на список пакетов, которые предлагает autoremove? Это гарантирует, что ни один из системных пакетов не будет затронут. Я прав? – NESHOM 13 March 2018 в 06:21
  • 4
    Чтобы ограничить удаление, превосходные советы @ Panther еще проще, чем писать сценарий. Если вы можете предложить «системный пакет», который autoremove хочет удалить, возможно, мы можем предложить более конкретные рекомендации. Глядя на список, который вы уже предоставили, все они выглядят как дополнения; никто не выглядит так, как будто они были включены в первоначальную установку. – user535733 13 March 2018 в 07:17
  • 5
    @NESHOM - "проблема" у вас есть многофакторный. Часть проблемы заключается в том, что ни один сценарий не может определить, используется ли установленный пакет или «нужен». вам, конечному пользователю. Часть проблемы заключается в разработке функции autoremove, она не разработана так, как вы себе представляете. Наконец, и, возможно, слон в комнате, apt не предназначен для удаления пакетов или возврата изменений. Например, удаление мета-пакета, такого как ununtu-desktop, никогда не бывает простым. Другие менеджеры пакетов / ОС (yum / dnf / arch / gentoo) имеют больше функций удаления или возврата, встроенных (не идеально). – Panther 13 March 2018 в 07:44

Другие вопросы по тегам:

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