Вопрос или проблема
Я установил transform-encoder через caddy addpackage github.com/caddyserver/transform-encoder
(на Rocky Linux 9, если это имеет значение). Похоже, это обновляет бинарный файл caddy
в /usr/bin
. В любом случае, позже я сделал dnf update
для системы, и установка transform-encoder теряется и должна быть переустановлена после обновления.
Есть ли какой-то способ сделать этот пакет caddy
постоянным, чтобы он как-то пережил dnf update
?
К вашему сведению, когда я делал оригинальный addpackage
, была установлена самая новая версия caddy
(2.9.1). Но я думаю, что это, вероятно, не имеет отношения к вопросу.
Вот вывод из dnf update
, если это поможет:
Running scriptlet: caddy-2.9.1-1.el9.x86_64 112/236
Upgrading : caddy-2.9.1-1.el9.x86_64 112/236
Running scriptlet: caddy-2.9.1-1.el9.x86_64 112/236
File context for /usr/bin/caddy already defined, modifying instead
File context for /usr/share/caddy(/.*)? already defined, modifying instead
File context for /etc/caddy(/.*)? already defined, modifying instead
File context for /var/lib/caddy(/.*)? already defined, modifying instead
Port udp/80 already defined, modifying instead
Port udp/443 already defined, modifying instead
Port tcp/2019 already defined, modifying instead
Ответ или решение
Обновление системы с использованием DNF, которое приводит к удалению ранее установленных пакетов или их изменений, является распространенной проблемой для пользователей Linux. В данном случае, проблема заключается в том, что установленный модуль transform-encoder
для Caddy теряется после выполнения команды dnf update
. Давайте подробно разберем, почему это происходит и какие шаги можно предпринять для решения этой проблемы.
Теория
Caddy — это веб-сервер с открытым исходным кодом, известный своей простотой в установке и использовании. Caddy позволяет добавлять модули или плагины, что позволяет расширять функциональность сервера. Команда caddy addpackage
, которую вы использовали для установки transform-encoder
, загружает и интегрирует модуль непосредственно в двоичный файл caddy
. Такое подход означает, что модуль фактически "встраивается" в исполняемый файл Caddy.
Когда вы выполняете dnf update
, пакетный менеджер DNF обновляет пакеты до последней версии, замещая старые версии новыми из репозиториев. В случае Caddy, обновление пакета приводит к перезаписи двоичного файла в /usr/bin/caddy
, что приводит к потере всех установленных модулей, таких как transform-encoder
, которые не являются частью стандартного дистрибутива.
Пример
Предположим, вы установили Caddy версии 2.9.1 и добавили модуль transform-encoder
. Исполняемый файл Caddy в директории /usr/bin
был модифицирован для включения этого модуля. Однако, при выполнении dnf update
, система перезаписывает файл /usr/bin/caddy
новой версией Caddy 2.9.1-1.el9.x86_64 из репозитория, что приводит к удалению всех нестандартных модулей и модификаций.
Применение
Для предотвращения удаления модулей при обновлении, можно рассмотреть несколько подходов:
-
Использование уникальной директории: Вместо использования системного пути
/usr/bin/caddy
, рассмотрите возможность установки Caddy в отдельную директорию, такую как/opt/caddy
. Это позволит вам вручную управлять обновлениями и изменениями исполняемого файла без вмешательства пакетного менеджера. -
Создание пользовательских пакетов: Рассмотрите возможность создания собственного RPM-пакета, который бы включал необходимый модуль. Это позволит вам управлять обновлением Caddy и его модулей централизованно и безопасно через систему управления пакетами.
-
Автоматизация восстановления модулей: Создайте скрипт, который автоматически переустанавливает необходимые модули после выполнения обновления системы. Этот скрипт можно запускать вручную или встраивать в процесс обновления.
-
Изоляция в контейнере: Используйте Docker или другой контейнерный сервис для изоляции веб-сервера Caddy с установленными модулями. Контейнеризация позволяет легче управлять версиями приложений и их зависимостей.
-
Проверка обновлений вручную: Перед выполнением
dnf update
, вручную проверяйте, какие пакеты будут обновлены, и временно исключайте Caddy из этого списка, добавляя его в исключения с помощьюdnf versionlock
.
Заключение
Проблема потери установленных модулей при обновлении системы является значительной для пользователей, добавляющих нестандартные модули к приложениям, таким как Caddy. Несмотря на то, что непосредственное решение может потребовать нескольких изменений в текущих процессах установки и обновления, понимание природы проблемы и знание альтернативных подходов позволит вам более эффективно управлять серверной инфраструктурой на базе Linux. Используя указанные методы, вы сможете создать более устойчивую и гибкую систему, способную легко адаптироваться к изменениям и обновлениям без потери функциональности.