Предотвратить dist-upgrade от удаления пакета без использования apt-mark hold

Вопрос или проблема

На момент написания этого текста пакеты lxqt в debian unstable в настоящее время повреждены, и apt dist-upgrade удалил их, потому что они несовместимы с обновленным qt5. Это означало, что я потерял свою единственную среду рабочего стола, и машина загружалась в sddm без выбора типа сессии.

Краткосрочное решение (после восстановления системы с помощью дебиевских снимков) — использовать apt-mark hold lxqt, чтобы заблокировать dist-upgrade от любых изменений в пакете lxqt.

Мне нужно постоянное решение — в конечном итоге хранители пакетов lxqt для debian обновят свои пакеты, и появится новый lxqt, совместимый с доступным libqt5core5t64, но поскольку я использовал apt-mark hold, dist-upgrade не обновит его.

Как я могу сделать так, чтобы apt считал lxqt “критически важным для системы” (как это делает с такими пакетами, как libc), чтобы он продолжал разрешать обновления для него, но не позволял его удаление с помощью dist-upgrade?

“Критически важные для системы” пакеты — это те, которые помечены как существенные, а также все пакеты, от которых они зависят (последние известны как транзитивно существенные). Чтобы заставить apt считать lxqt критически важным для системы, вы можете создать зависимый пакет и сделать его существенным.

Для этого установите пакет equivs и выполните

equivs-control essential-lxqt.control

Затем отредактируйте essential-lxqt.control:

  • измените строку Package: на Package: essential-lxqt
  • после строки Package: добавьте Priority: required и Essential:yes
  • раскомментируйте строку Depends: и измените ее на Depends: lxqt

Чтобы собрать пакет, выполните

equivs-build essential-lxqt.control

и установите полученный пакет.

Для будущего может быть полезно запускать apt upgrade вместо apt dist-upgrade; это обновит и установит новые пакеты по мере необходимости, без удаления каких-либо пакетов. apt dist-upgrade необходим только в том случае, если apt upgrade указывает, что он не может обновить один или несколько пакетов; в таких обстоятельствах, запустите apt upgrade все равно (чтобы обновить то, что он может обновить), затем apt dist-upgrade, но проверьте, что последний собирается сделать, прежде чем позволить ему обрабатывать (поэтому не запускайте apt -y dist-upgrade).

Ответ или решение

Как предотвратить удаление пакета при дистрибутивном обновлении без использования apt-mark hold

Ваша проблема с удалением пакетов LXQt в Debian Unstable, из-за несовместимости с обновленной версией Qt5, затрагивает важные аспекты управления пакетами в Debian. Удаление LXQt от системы могло привести к утрате рабочего стола и, как следствие, к затруднениям в управлении системой. Решение с использованием apt-mark hold — временная мера и не является идеальным вариантом по причине необходимости в последующем обновлении LXQt. В этом ответе я расскажу о том, как можно обойти данную проблему на постоянной основе.

Понимание системной критичности пакетов

В Debian-пакеты, которые помечены как essential (существенные) или те, которые являются зависимостями этих пакетов (то есть транзитивно существенные), являются системно критичными. Так, вы можете сделать LXQt критичным для системы, создав специальный зависимый пакет, который будет иметь такую статус.

Шаги для создания зависимого пакета

  1. Установка инструмента equivs:
    Убедитесь, что у вас установлен пакет equivs. Вы можете сделать это с помощью следующей команды:

    sudo apt install equivs
  2. Создание файла управления для зависимого пакета:
    Создайте файл управления пакетом. Сначала выполните команду:

    equivs-control essential-lxqt.control

    Это создаст файл essential-lxqt.control, который вы будете редактировать.

  3. Редактирование файла управления:
    Откройте созданный файл в текстовом редакторе и внесите следующие изменения:

    • Измените строку Package: на:
      Package: essential-lxqt
    • Добавьте строки:
      Priority: required
      Essential: yes
    • Раскомментируйте строку Depends: и измените ее на:
      Depends: lxqt
  4. Сборка и установка пакета:
    Теперь соберите пакет с помощью команды:

    equivs-build essential-lxqt.control

    Установите полученный пакет с помощью следующей команды:

    sudo dpkg -i essential-lxqt_*.deb

Альтернативные рекомендации

В дополнение к вышеописанным шагам, вам стоит рассмотреть возможность использования команды apt upgrade вместо apt dist-upgrade. Команда apt upgrade осуществляет обновление и установку новых пакетов без удаления существующих. Используйте apt dist-upgrade только в случаях, когда это действительно необходимо, и внимательно следите за тем, что будет сделано.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...