기동 로그에 설치된 확장이 우선순위 순서로 나열된다. 여기 의도하지 않은 확장이 들어 있으면 그 자체가 원인이다.
Multiple extensions are installed and will be loaded in order of decreasing priority:
- [mysql] "MySQL Authentication" (/opt/guacamole/conf/extensions/guacamole-auth-jdbc-mysql-1.6.0.jar)
- [postgresql] "PostgreSQL Authentication" (/opt/guacamole/conf/extensions/guacamole-auth-jdbc-postgresql-1.6.0.jar)
JDBC 인증 확장을 하나만 쓸 생각이었는데 둘이 모두 들어 있으면, 쓰지 않는 쪽이 필수 설정을 찾지 못해 기동 중 실패한다.
authentication provider extension failed to start: Property postgresql-database is required.
이 오류가 나도 웹 애플리케이션 자체는 뜬다. 뒤이어 기동 완료 메시지가 찍히므로 정상으로 오인하기 쉽다. 실제로는 해당 인증 제공자가 비활성 상태다.
확장 디렉터리는 GUACAMOLE_HOME/extensions 다. 파일이 거기 있는 것만으로 로드를 시도하므로, 쓰지 않는 jar 는 디렉터리 밖으로 옮긴다. 파일 이름만 바꿔 두면 확장자가 jar 인 한 계속 로드된다.
mkdir -p /opt/guacamole/conf/extensions-disabled
mv /opt/guacamole/conf/extensions/guacamole-auth-jdbc-postgresql-*.jar \
/opt/guacamole/conf/extensions-disabled/
systemctl restart tomcat
공식 컨테이너 이미지를 쓴다면 어떤 확장을 넣을지는 환경 변수로 결정된다. MySQL 용 변수와 PostgreSQL 용 변수를 함께 넣지 않는다.
여러 인증 제공자를 의도적으로 함께 쓰는 경우, 예를 들어 LDAP 으로 인증하고 JDBC 로 연결 정의를 관리하는 구성에서는 순서가 동작을 바꾼다. 기본 순서는 파일 이름 정렬이며 설정으로 명시할 수 있다.
extension-priority: ldap, mysql
앞에 적힌 확장이 먼저 인증을 시도한다.
대소문자 구분 경고는 데이터베이스 콜레이션이 대소문자를 구분하지 않는 형식이어서 사용자 이름 비교도 구분하지 않는다는 알림이다. 의도한 동작이라면 무시해도 된다. 구분이 필요하면 설정과 데이터베이스 콜레이션을 함께 바꿔야 한다.
JAXBContext 구현을 찾지 못했다는 경고는 REST API 문서화 기능이 꺼진다는 뜻으로 운영에 영향이 없다.
grep -Ei "extension|failed to start|has started" /opt/guacamole/conf/logs/catalina.out | tail -20
쓰려는 확장만 나열되고 실패 메시지가 없어야 한다.