Я пытаюсь заменить некоторые старые серверы каталогов SunOne на 389 DS. У меня есть фирменная новая установка CentOS, в которой я выполнил шаги, указанные в общих чертах. Вот. Моя рабочая станция - RHEL7, на которой я установил 389-консоль для удаленного подключения к вышеупомянутому новому серверу LDAP.
Однако когда я пытаюсь запустить 389-консоль локально, я получаю java.awt.HeadlessException
ошибка. Я прыгал по google abit, и почти все, кого я видел, публиковали эту проблему, где возникала та же проблема, только они пытались перенаправить консоль 389 через X.
Я ожидал, что это просто запустится локально без проблем, и ошибки будут связаны с удаленным подключением:
mose@localhost ~ $ 389-console
Exception in thread "main" java.awt.HeadlessException
at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:204)
at java.awt.Window.<init>(Window.java:536)
at java.awt.Frame.<init>(Frame.java:420)
at java.awt.Frame.<init>(Frame.java:385)
at javax.swing.JFrame.<init>(JFrame.java:189)
at com.netscape.management.client.console.Console.<init>(Unknown Source)
at com.netscape.management.client.console.Console.main(Unknown Source)
Информация о рабочей станции:
mose@localhost ~ $ cat /etc/redhat-release
Red Hat Enterprise Linux Client release 7.3 (Maipo)
mose@localhost ~ $ java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b31)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b31, mixed mode)
mose@localhost ~ $ env | grep -i display
DISPLAY=:0
mose@localhost ~ $ sudo rpm -qa | grep 389
389-console-1.1.18-1.el7.noarch
mose@localhost ~ $ sudo rpm -qa | grep xauth
xorg-x11-xauth-1.0.9-1.el7.x86_64
Я использую KDE в качестве графического интерфейса пользователя. Я также изменил, какую Java я использую для обновлений (между openJDK и oracleJDK).
Полная трассировка отладки ниже:
mose@workstation ~ $ 389-console -D 9
java.util.prefs.userRoot=/home/mose/.389-console
java.runtime.name=OpenJDK Runtime Environment
sun.boot.library.path=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-0.b13.el7_3.x86_64/jre/lib/amd64
java.vm.version=25.121-b13
java.vm.vendor=Oracle Corporation
java.vendor.url=http://java.oracle.com/
path.separator=:
java.vm.name=OpenJDK 64-Bit Server VM
file.encoding.pkg=sun.io
user.country=US
sun.java.launcher=SUN_STANDARD
sun.os.patch.level=unknown
java.vm.specification.name=Java Virtual Machine Specification
user.dir=/home/mose
java.runtime.version=1.8.0_121-b13
java.awt.graphicsenv=sun.awt.X11GraphicsEnvironment
java.endorsed.dirs=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-0.b13.el7_3.x86_64/jre/lib/endorsed
os.arch=amd64
java.io.tmpdir=/tmp
line.separator=
java.vm.specification.vendor=Oracle Corporation
os.name=Linux
sun.jnu.encoding=UTF-8
java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
java.specification.name=Java Platform API Specification
java.class.version=52.0
sun.management.compiler=HotSpot 64-Bit Tiered Compilers
os.version=3.10.0-514.10.2.el7.x86_64
user.home=/home/mose
user.timezone=America/New_York
java.awt.printerjob=sun.print.PSPrinterJob
file.encoding=UTF-8
java.specification.version=1.8
java.class.path=/usr/lib/java/jss4.jar:/usr/share/java/ldapjdk.jar:/usr/share/java/idm-console-base.jar:/usr/share/java/idm-console-mcc.jar:/usr/share/java/idm-console-mcc_en.jar:/usr/share/java/idm-console-nmclf.jar:/usr/share/java/idm-console-nmclf_en.jar:/usr/share/java/389-console_en.jar
user.name=michael.moser
java.vm.specification.version=1.8
sun.java.command=com.netscape.management.client.console.Console -D 9
java.home=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-0.b13.el7_3.x86_64/jre
sun.arch.data.model=64
java.util.prefs.systemRoot=/home/mose/.389-console
user.language=en
java.specification.vendor=Oracle Corporation
awt.toolkit=sun.awt.X11.XToolkit
java.vm.info=mixed mode
java.version=1.8.0_121
java.ext.dirs=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-0.b13.el7_3.x86_64/jre/lib/ext:/usr/java/packages/lib/ext
sun.boot.class.path=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-0.b13.el7_3.x86_64/jre/lib/resources.jar:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-0.b13.el7_3.x86_64/jre/lib/rt.jar:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-0.b13.el7_3.x86_64/jre/lib/sunrsasign.jar:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-0.b13.el7_3.x86_64/jre/lib/jsse.jar:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-0.b13.el7_3.x86_64/jre/lib/jce.jar:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-0.b13.el7_3.x86_64/jre/lib/charsets.jar:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-0.b13.el7_3.x86_64/jre/lib/jfr.jar:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-0.b13.el7_3.x86_64/jre/classes
java.awt.headless=true
java.vendor=Oracle Corporation
file.separator=/
java.vendor.url.bug=http://bugreport.sun.com/bugreport/
sun.io.unicode.encoding=UnicodeLittle
sun.cpu.endian=little
sun.cpu.isalist=
389-Management-Console/1.1.17 B2016.291.2035
RemoteImage: NOT found in cache loader589431969:com/netscape/management/nmclf/icons/Error.gif
RemoteImage: Create RemoteImage cache for loader589431969
RemoteImage: NOT found in cache loader589431969:com/netscape/management/nmclf/icons/Inform.gif
RemoteImage: NOT found in cache loader589431969:com/netscape/management/nmclf/icons/Warn.gif
RemoteImage: NOT found in cache loader589431969:com/netscape/management/nmclf/icons/Question.gif
ResourceSet: NOT found in cache loader589431969:com.netscape.management.client.components.components
Exception in thread "main" java.awt.HeadlessException
at java.awt.GraphicsEnvironment.checkHeadless(GraphicsEnvironment.java:204)
at java.awt.Window.<init>(Window.java:536)
at java.awt.Frame.<init>(Frame.java:420)
at java.awt.Frame.<init>(Frame.java:385)
at javax.swing.JFrame.<init>(JFrame.java:189)
at com.netscape.management.client.console.Console.<init>(Unknown Source)
at com.netscape.management.client.console.Console.main(Unknown Source)
Проблема здесь:
sun.boot.library.path=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.121-0.b13.el7_3.x86_64/jre/lib/amd64
java.vm.version=25.121-b13
Создайте эту переменную:
export JAVA_HOME="DIRECTORY OF ORACLE JAVA"
и снова запускаем:
389-console -D 9
В трассировке отладки я обнаружил, что, несмотря на настройку альтернативных обновлений для Oracle JRE, консоль 389 использовала openJDK. Пока был установлен openJDK, у меня была только его версия без головы, которой недостаточно для запуска библиотеки AWT.