На моем сервере запущено приложение Java, которое требует, чтобы я заменил несколько файлов библиотеки Java на те, которые я загрузил самостоятельно. Это связано с расширениями безопасности JCE и не имеет отношения к моему вопросу.
Я обнаружил, что эти файлы библиотеки, как правило, перезаписываются apt при последующем обновлении моего пакета java.
Есть ли удобный способ замаскировать эти конкретные файлы, чтобы apt не трогал их?
Возможные решения
Я подумываю просто удалить флаг записи из файлов, хотя я ожидаю, что это заставит apt изрыгать кишки повсюду, когда он позже попытается их перезаписать?
Возможно, есть каталог пользовательской библиотеки java, о котором я не знаю, где я могу оставить свои файлы, и они будут загружены вместо значений по умолчанию для пакета?
Последний вариант, который я рассматриваю, - это написать задание 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, чтобы проверить его, и, похоже, он работает хорошо. Фактические команды, которые я использовал, находятся здесь:
Мой «ответ» оказался очень специфичным для приложения.
Коротко
Каждый раз, когда мое веб-приложение Java запускается, jar-файлы JCE повторно копируются.
В деталях
Мое приложение Java запускается через Jetty. Я использую специальную выскочку для управления причалом. Я добавил в свою выскочку строфу сценария, которая копируется в JCE jar перед запуском причала.
В ходе тестирования я обнаружил, что если я изменю свою установку java обратно на JCE по умолчанию во время работы моего приложения, мое приложение, похоже, не пострадает. Я думаю, это связано с тем, как Linux обрабатывает дескрипторы чтения файлов. У меня все еще есть дескриптор старого файла, даже после того, как он был заменен в файловой системе, ранее существовавшие дескрипторы все еще работают, пока не будут закрыты.
Посмотрим, приведет ли это к сильной боли. Я не думаю, что это так уж плохо. Это лучший из плохих вариантов, которые я нашел до сих пор. В противном случае нам придется изменить источник нашего приложения, чтобы использовать то, что мне кажется очень обреченным на провал в самом источнике java.