Glassfish作为由Sun(现在是Oracle)及社区直接维护的开源Java EE应用服务器,其对Java EE 6标准的全面支持、稳定强劲的运行表现和简单全面的配置界面赢得了Java社区的一致好评,并已逐渐成为架设Java Web App的首选

GF从2.0开始引入了update tool,即服务器在线版本更新工具,大大方便了开发人员对服务器的升级。然而,对于只有CLI环境的系统,比如远程SSH,默认的GUI版本的update tool无法运行,只能使用pkg代替。本文将介绍xUnix系统下如何使用pkg更新glassfish,及使用pkg中遇到的问题的解决方法

进入GF/bin目录,执行

./updatetool

GF将会从远程服务器下载updatetool、pkg的相关文件并生成两个脚本:updatetool和pkg。其中updatetool是GUI版本的更新工具,若在图形界面下可直接执行updatetool使用GUI更新GF。pkg是CLI版本。此时直接执行

./pkg

可能会得到如下错误:

Traceback (most recent call last):
  File "/opt/glassfishv3/pkg/bin/client.py", line 61, in ?
    import pkg.actions as actions
  File "/opt/glassfishv3/pkg/vendor-packages/pkg/actions/__init__.py", line 59, in ?
    globals(), locals(), [modname])
  File "/opt/glassfishv3/pkg/vendor-packages/pkg/actions/generic.py", line 45, in ?
    import pkg.variant as variant
  File "/opt/glassfishv3/pkg/vendor-packages/pkg/variant.py", line 28, in ?
    from pkg.misc import EmptyI
  File "/opt/glassfishv3/pkg/vendor-packages/pkg/misc.py", line 32, in ?
    import OpenSSL.crypto as osc
  File "/opt/glassfishv3/pkg/vendor-packages/OpenSSL/__init__.py", line 11, in ?
    import rand, crypto, SSL, tsafe
ImportError: /opt/glassfishv3/pkg/vendor-packages/OpenSSL/crypto.so: cannot restore segment prot after reloc: Permission denied

根据这篇文章的解决方案,执行

/usr/sbin/setenforce 0

应该就解决了,最后使用如下脚本更新GF

./pkg image-update