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

Запретить APT перезаписывать пользовательские файлы

На моем сервере запущено приложение Java, которое требует, чтобы я заменил несколько файлов библиотеки Java на те, которые я загрузил самостоятельно. Это связано с расширениями безопасности JCE и не имеет отношения к моему вопросу.

Я обнаружил, что эти файлы библиотеки, как правило, перезаписываются apt при последующем обновлении моего пакета java.

Есть ли удобный способ замаскировать эти конкретные файлы, чтобы apt не трогал их?

Возможные решения

  1. Я подумываю просто удалить флаг записи из файлов, хотя я ожидаю, что это заставит apt изрыгать кишки повсюду, когда он позже попытается их перезаписать?

  2. Возможно, есть каталог пользовательской библиотеки java, о котором я не знаю, где я могу оставить свои файлы, и они будут загружены вместо значений по умолчанию для пакета?

  3. Последний вариант, который я рассматриваю, - это написать задание cron для периодической замены файлов моими версиями. Ненавижу этот вариант.

Детальное объяснение

Мы работаем с довольно тяжелым веб-приложением на Java (настроенная сборка GeoServer). Приложение шифрует пользовательские данные с помощью Расширение криптографии Java.

Версия JCE, которую устанавливает apt, является международной версией, однако эта версия относительно урезана. Есть еще одна версия (которую мы должны использовать). Эта версия может быть установлена ​​только в определенных регионах. Мы установили его, заменив стандартные jar-файлы JCE (в /usr/lib/jvm/java-7-oracle/jre/lib/security) с соответствующими версиями этих банок, которые нам требуются. Именно эти два конкретных файла jar в этом месте периодически заменяются apt и в конечном итоге нарушают работу нашего приложения. В свою очередь боюсь запускать обновления ПО.

Как бы то ни было, у вас будет такая же проблема, если вы используете CentOS. Я только что столкнулся с той же проблемой с RHEL. Одно из решений, которое я нашел, заключалось в использовании вместо этого OpenJDK, который предположительно поставляется с неограниченной мощностью JCE, включая:

Nevermind JCE неограниченная сила, используйте OpenJDK

Для меня это был не вариант, но я тоже наткнулся на это:

Обновление безопасного развертывания JCE для Java на RHEL

Это предлагает указать на банки JCE с помощью альтернативы команда. Я пошел с этим методом и понизил / обновил Java, чтобы проверить его, и, похоже, он работает хорошо. Фактические команды, которые я использовал, находятся здесь:

https://gist.github.com/bmaupin/4396be4bb29c5ad440b6

Мой «ответ» оказался очень специфичным для приложения.

Коротко

Каждый раз, когда мое веб-приложение Java запускается, jar-файлы JCE повторно копируются.

В деталях

Мое приложение Java запускается через Jetty. Я использую специальную выскочку для управления причалом. Я добавил в свою выскочку строфу сценария, которая копируется в JCE jar перед запуском причала.

В ходе тестирования я обнаружил, что если я изменю свою установку java обратно на JCE по умолчанию во время работы моего приложения, мое приложение, похоже, не пострадает. Я думаю, это связано с тем, как Linux обрабатывает дескрипторы чтения файлов. У меня все еще есть дескриптор старого файла, даже после того, как он был заменен в файловой системе, ранее существовавшие дескрипторы все еще работают, пока не будут закрыты.

Посмотрим, приведет ли это к сильной боли. Я не думаю, что это так уж плохо. Это лучший из плохих вариантов, которые я нашел до сих пор. В противном случае нам придется изменить источник нашего приложения, чтобы использовать то, что мне кажется очень обреченным на провал в самом источнике java.