diff --git a/activemq/Dockerfile b/activemq/Dockerfile index 572e9db3..f3667132 100644 --- a/activemq/Dockerfile +++ b/activemq/Dockerfile @@ -20,6 +20,8 @@ EXPOSE 61616 5672 61613 1883 61614 8161 # Defaults environment variables to be overloaded. ENV \ + ACTIVEMQ_AUDIT_LOG_LEVEL=INFO \ + ACTIVEMQ_LOG_LEVEL=INFO \ ACTIVEMQ_PASSWORD=password \ ACTIVEMQ_USER=admin \ ACTIVEMQ_WEB_ADMIN_NAME=admin \ diff --git a/activemq/README.md b/activemq/README.md index 73251d4c..e8128152 100644 --- a/activemq/README.md +++ b/activemq/README.md @@ -40,18 +40,20 @@ additional settings, volumes, ports, etc. ## Settings -| Environment Variable | Confd Key | Default | Description | -| :-------------------------- | :--------------------------- | :------- | :--------------------------------------- | -| ACTIVEMQ_USER | /activemq/user | admin | See [Security]: credentials.properties | -| ACTIVEMQ_PASSWORD | /activemq/password | password | See [Security]: credentials.properties | -| ACTIVEMQ_WEB_ADMIN_NAME | /activemq/web/admin/name | admin | See [WebConsole]: jetty-realm.properties | -| ACTIVEMQ_WEB_ADMIN_PASSWORD | /activemq/web/admin/password | password | See [WebConsole]: jetty-realm.properties | -| ACTIVEMQ_WEB_ADMIN_ROLES | /activemq/web/admin/roles | admin | See [WebConsole]: jetty-realm.properties | +| Environment Variable | Confd Key | Default | Description | +| :-------------------------- | :--------------------------- | :------- | :----------------------------------------------------------------------------- | +| ACTIVEMQ_AUDIT_LOG_LEVEL | /activemq/audit/log/level | INFO | Log level. Possible Values: OFF, FATAL, ERROR, WARN, INFO, DEBUG, TRACE or ALL | +| ACTIVEMQ_LOG_LEVEL | /activemq/log/level | INFO | Log level. Possible Values: OFF, FATAL, ERROR, WARN, INFO, DEBUG, TRACE or ALL | +| ACTIVEMQ_PASSWORD | /activemq/password | password | See [Security]: credentials.properties | +| ACTIVEMQ_USER | /activemq/user | admin | See [Security]: credentials.properties | +| ACTIVEMQ_WEB_ADMIN_NAME | /activemq/web/admin/name | admin | See [WebConsole]: jetty-realm.properties | +| ACTIVEMQ_WEB_ADMIN_PASSWORD | /activemq/web/admin/password | password | See [WebConsole]: jetty-realm.properties | +| ACTIVEMQ_WEB_ADMIN_ROLES | /activemq/web/admin/roles | admin | See [WebConsole]: jetty-realm.properties | Additional users/groups/etc can be defined by adding more environment variables, following the above conventions: -| Environment Variable | Confd Key | Description | +| Environment Variable | Confd Key | Description | | :-------------------------------- | :--------------------------------- | :--------------------------------------- | | ACTIVEMQ_USER_{USER}_NAME | /activemq/user/{USER}/name | See [Security]: users.properties | | ACTIVEMQ_USER_{USER}_PASSWORD | /activemq/user/{USER}/password | See [Security]: users.properties | @@ -66,7 +68,7 @@ following the above conventions: For example to add a new user `someone` to the [WebConsole] you would need to define the following: -| Environment Variable | Confd Key | Value | +| Environment Variable | Confd Key | Value | | :--------------------------------- | :---------------------------------- | :------- | | ACTIVEMQ_WEB_USER_SOMEONE_NAME | /activemq/web/user/someone/name | someone | | ACTIVEMQ_WEB_USER_SOMEONE_PASSWORD | /activemq/web/user/someone/password | password | @@ -74,11 +76,8 @@ define the following: ## Logs -| Path | Description | -| :------------------------------ | :------------- | -| STDOUT | [ActiveMQ Log] | -| /opt/activemq/data/activemq.log | [ActiveMQ Log] | -| /opt/activemq/data/audit.log | [Audit Log] | +- [ActiveMQ Log] +- [Audit Log] [ActiveMQ Documentation]: https://activemq.apache.org/components/classic/documentation [ActiveMQ Log]: https://activemq.apache.org/how-do-i-change-the-logging diff --git a/activemq/rootfs/etc/confd/conf.d/log4j.properties.toml b/activemq/rootfs/etc/confd/conf.d/log4j.properties.toml new file mode 100644 index 00000000..3627ddeb --- /dev/null +++ b/activemq/rootfs/etc/confd/conf.d/log4j.properties.toml @@ -0,0 +1,7 @@ +[template] +src = "log4j.properties.tmpl" +dest = "/opt/activemq/conf/log4j.properties" +uid = 100 +gid = 1000 +mode = "0640" +keys = [ "/" ] diff --git a/activemq/rootfs/etc/confd/templates/log4j.properties.tmpl b/activemq/rootfs/etc/confd/templates/log4j.properties.tmpl new file mode 100644 index 00000000..badf4751 --- /dev/null +++ b/activemq/rootfs/etc/confd/templates/log4j.properties.tmpl @@ -0,0 +1,67 @@ +## --------------------------------------------------------------------------- +## Licensed to the Apache Software Foundation (ASF) under one or more +## contributor license agreements. See the NOTICE file distributed with +## this work for additional information regarding copyright ownership. +## The ASF licenses this file to You under the Apache License, Version 2.0 +## (the "License"); you may not use this file except in compliance with +## the License. You may obtain a copy of the License at +## +## http://www.apache.org/licenses/LICENSE-2.0 +## +## Unless required by applicable law or agreed to in writing, software +## distributed under the License is distributed on an "AS IS" BASIS, +## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +## See the License for the specific language governing permissions and +## limitations under the License. +## --------------------------------------------------------------------------- + +# +# This file controls most of the logging in ActiveMQ which is mainly based around +# the commons logging API. +# +log4j.rootLogger={{ getenv "ACTIVEMQ_LOG_LEVEL" }}, console +log4j.logger.org.apache.activemq.spring=WARN +log4j.logger.org.apache.activemq.web.handler=WARN +log4j.logger.org.springframework=WARN +log4j.logger.org.apache.xbean=WARN +log4j.logger.org.apache.camel=INFO +log4j.logger.org.eclipse.jetty=WARN + +# When debugging or reporting problems to the ActiveMQ team, +# comment out the above lines and uncomment the next. + +#log4j.rootLogger=DEBUG, logfile, console + +# Or for more fine grained debug logging uncomment one of these +#log4j.logger.org.apache.activemq=DEBUG +#log4j.logger.org.apache.camel=DEBUG + +# Console appender +log4j.appender.console=org.apache.log4j.ConsoleAppender +log4j.appender.console.layout=org.apache.log4j.PatternLayout +log4j.appender.console.layout.ConversionPattern=%d | %-5p | %m | %c | %t%n +log4j.appender.console.threshold={{ getenv "ACTIVEMQ_LOG_LEVEL" }} + +# use some of the following patterns to see MDC logging data +# +# %X{activemq.broker} +# %X{activemq.connector} +# %X{activemq.destination} +# +# e.g. +# +# log4j.appender.logfile.layout.ConversionPattern=%d | %-20.20X{activemq.connector} | %-5p | %m | %c | %t%n + +log4j.throwableRenderer=org.apache.log4j.EnhancedThrowableRenderer + +########### +# Audit log +########### + +log4j.additivity.org.apache.activemq.audit=false +log4j.logger.org.apache.activemq.audit={{ getenv "ACTIVEMQ_AUDIT_LOG_LEVEL" }}, audit + +log4j.appender.audit=org.apache.log4j.ConsoleAppender +log4j.appender.audit.layout=org.apache.log4j.PatternLayout +log4j.appender.audit.layout.ConversionPattern=%d | %-5p | %m | %t%n +log4j.appender.audit.threshold={{ getenv "ACTIVEMQ_AUDIT_LOG_LEVEL" }} \ No newline at end of file diff --git a/activemq/rootfs/etc/cont-init.d/02-activemq-setup.sh b/activemq/rootfs/etc/cont-init.d/02-activemq-setup.sh index b34d4b51..90a74dec 100755 --- a/activemq/rootfs/etc/cont-init.d/02-activemq-setup.sh +++ b/activemq/rootfs/etc/cont-init.d/02-activemq-setup.sh @@ -1,13 +1,6 @@ #!/usr/bin/with-contenv bash set -e -# Change log files to redirect to stdout/stderr -ln -sf /dev/stdout /opt/activemq/data/activemq.log -chown activemq:activemq /opt/activemq/data/activemq.log - -ln -sf /dev/stdout /opt/activemq/data/audit.log -chown activemq:activemq /opt/activemq/data/audit.log - # When bind mounting we need to ensure that we # actually can write to the folder. chown activemq:activemq /opt/activemq/data diff --git a/alpaca/README.md b/alpaca/README.md index 685e59bd..388edeca 100644 --- a/alpaca/README.md +++ b/alpaca/README.md @@ -23,7 +23,7 @@ additional settings, volumes, ports, etc. ## Settings -| Environment Variable | Confd Key | Default | Description | +| Environment Variable | Confd Key | Default | Description | | :----------------------------------------- | :----------------------------------------- | :--------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------- | | ALPACA_ACTIVEMQ_PASSWORD | /alpaca/activemq/password | password | Password to authenticate with | | ALPACA_ACTIVEMQ_URL | /alpaca/activemq/url | tcp://broker:61616 | The url for connecting to the ActiveMQ broker, shared by all components | @@ -61,13 +61,6 @@ additional settings, volumes, ports, etc. | ALPACA_OCR_REDELIVERIES | /alpaca/ocr/redeliveries | 10 | Number of attempts to redeliver if an exception occurs | | ALPACA_OCR_SERVICE | /alpaca/ocr/service | http://hypercube:8000 | Url of micro-service | -## Logs - -| Path | Description | -| :-------------------------------- | :------------ | -| /opt/karaf/data/log/camel.log | Camel Log | -| /opt/karaf/data/log/islandora.log | Islandora Log | - [Alpaca Documentation]: https://islandora.github.io/documentation/ [Alpaca]: https://github.com/Islandora/Alpaca [JMX]: https://karaf.apache.org/manual/latest/#_monitoring_and_management_using_jmx diff --git a/alpaca/rootfs/etc/confd/templates/org.ops4j.pax.logging.cfg.tmpl b/alpaca/rootfs/etc/confd/templates/org.ops4j.pax.logging.cfg.tmpl index bcd6861a..6d1a9737 100644 --- a/alpaca/rootfs/etc/confd/templates/org.ops4j.pax.logging.cfg.tmpl +++ b/alpaca/rootfs/etc/confd/templates/org.ops4j.pax.logging.cfg.tmpl @@ -1,34 +1,18 @@ # Root logger log4j.rootLogger={{ getenv "ALPACA_LOGGER_ROOT_LEVEL" }}, out, osgi:* log4j.throwableRenderer=org.apache.log4j.OsgiThrowableRenderer - -# File appender -log4j.appender.out=org.apache.log4j.RollingFileAppender +log4j.appender.out=org.apache.log4j.ConsoleAppender log4j.appender.out.layout=org.apache.log4j.PatternLayout log4j.appender.out.layout.ConversionPattern=%d{ISO8601} | %-5.5p | %-16.16t | %-32.32c{1} | %X{bundle.id} - %X{bundle.name} - %X{bundle.version} | %m%n -log4j.appender.out.file=${karaf.data}/log/karaf.log -log4j.appender.out.append=true -log4j.appender.out.maxFileSize=1MB -log4j.appender.out.maxBackupIndex=10 # Camel Logger -log4j.appender.camel=org.apache.log4j.RollingFileAppender +log4j.logger.org.apache.camel={{ getenv "ALPACA_LOGGER_CAMEL_LEVEL" }}, camel +log4j.appender.camel=org.apache.log4j.ConsoleAppender log4j.appender.camel.layout=org.apache.log4j.PatternLayout log4j.appender.camel.layout.ConversionPattern=%d{ISO8601} | %-5.5p | %-16.16t | %-32.32c{1} | %X{bundle.id} - %X{bundle.name} - %X{bundle.version} | %m%n -log4j.appender.camel.file=${karaf.data}/log/camel.log -log4j.appender.camel.append=false -log4j.appender.camel.maxFileSize=1MB -log4j.appender.camel.maxBackupIndex=10 - -log4j.logger.org.apache.camel={{ getenv "ALPACA_LOGGER_CAMEL_LEVEL" }}, camel # Islandora Logger -log4j.appender.islandora=org.apache.log4j.RollingFileAppender +log4j.logger.ca.islandora.camel={{ getenv "ALPACA_LOGGER_ISLANDORA_LEVEL" }}, islandora +log4j.appender.islandora=org.apache.log4j.ConsoleAppender log4j.appender.islandora.layout=org.apache.log4j.PatternLayout log4j.appender.islandora.layout.ConversionPattern=%d{ISO8601} | %-5.5p | %-16.16t | %-32.32c{1} | %X{bundle.id} - %X{bundle.name} - %X{bundle.version} | %m%n -log4j.appender.islandora.file=${karaf.data}/log/islandora.log -log4j.appender.islandora.append=false -log4j.appender.islandora.maxFileSize=1MB -log4j.appender.islandora.maxBackupIndex=10 - -log4j.logger.ca.islandora.camel={{ getenv "ALPACA_LOGGER_ISLANDORA_LEVEL" }}, islandora diff --git a/alpaca/rootfs/etc/cont-init.d/04-alpaca-setup.sh b/alpaca/rootfs/etc/cont-init.d/04-alpaca-setup.sh deleted file mode 100755 index 305dcb64..00000000 --- a/alpaca/rootfs/etc/cont-init.d/04-alpaca-setup.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/with-contenv bash -set -e - -# Change log files to redirect to stdout/stderr -ln -sf /dev/stdout /opt/karaf/data/log/camel.log -chown karaf:karaf /opt/karaf/data/log/camel.log - -ln -sf /dev/stdout /opt/karaf/data/log/islandora.log -chown karaf:karaf /opt/karaf/data/log/islandora.log diff --git a/base/rootfs/etc/cont-init.d/00-tty.sh b/base/rootfs/etc/cont-init.d/00-tty.sh new file mode 100644 index 00000000..64ce2aff --- /dev/null +++ b/base/rootfs/etc/cont-init.d/00-tty.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash +set -e + +# If the container is started without allocating a tty, i.e. without `-t`. +# It can cause issues for non-root processes that want to write directly to +# standard out. +# +# If a tty is allocated /dev/stdout will indirectly point to it /dev/pts/0. +# This file allows members of the tty group to write to it. +# +# If no tty is allocated /dev/stdout will point to /proc/self/fd/1 which +# will be a pipe to the hosts users active terminal. This pipe is owned +# root with read/write access only permitted to the root user. +# +# To permit the containers to be started without `tty` we allow all users +# to read/write to the stdout,stderr,stdin pipes. +chmod o+rw /dev/std{in,out,err} diff --git a/blazegraph/README.md b/blazegraph/README.md index 85a71bfe..778b1b5d 100644 --- a/blazegraph/README.md +++ b/blazegraph/README.md @@ -23,15 +23,5 @@ additional settings, volumes, ports, etc. | :---- | :--------------------------- | | /data | Location of the backing file | -## Logs - -| Path | Description | -| :--------------------------------- | :---------- | -| /opt/tomcat/logs/rules.log | | -| /opt/tomcat/logs/queryLog.csv | | -| /opt/tomcat/logs/queryRunState.log | | -| /opt/tomcat/logs/solutions.csv | | -| /opt/tomcat/logs/sparql.txt | | - [Blazegraph Documentation]: https://github.com/blazegraph/database/wiki/About_Blazegraph [Blazegraph]: https://blazegraph.com/ diff --git a/blazegraph/rootfs/etc/cont-init.d/03-blazegraph-setup.sh b/blazegraph/rootfs/etc/cont-init.d/03-blazegraph-setup.sh index e568d6e1..9c67078c 100755 --- a/blazegraph/rootfs/etc/cont-init.d/03-blazegraph-setup.sh +++ b/blazegraph/rootfs/etc/cont-init.d/03-blazegraph-setup.sh @@ -1,22 +1,6 @@ #!/usr/bin/with-contenv bash set -e -# Change log files to redirect to stdout/stderr -ln -sf /dev/stdout /opt/tomcat/logs/rules.log -chown tomcat:tomcat /opt/tomcat/logs/rules.log - -ln -sf /dev/stdout /opt/tomcat/logs/queryLog.csv -chown tomcat:tomcat /dev/stdout /opt/tomcat/logs/queryLog.csv - -ln -sf /dev/stdout /opt/tomcat/logs/queryRunState.log -chown tomcat:tomcat /dev/stdout /opt/tomcat/logs/queryRunState.log - -ln -sf /dev/stdout /opt/tomcat/logs/solutions.csv -chown tomcat:tomcat /dev/stdout /opt/tomcat/logs/solutions.csv - -ln -sf /dev/stdout /opt/tomcat/logs/sparql.txt -chown tomcat:tomcat /dev/stdout /opt/tomcat/logs/sparql.txt - # When bind mounting we need to ensure that we # actually can write to the folder. chown tomcat:tomcat /data diff --git a/blazegraph/rootfs/opt/tomcat/webapps/bigdata/WEB-INF/classes/log4j.properties b/blazegraph/rootfs/opt/tomcat/webapps/bigdata/WEB-INF/classes/log4j.properties index 4f5c76f0..94dbb430 100644 --- a/blazegraph/rootfs/opt/tomcat/webapps/bigdata/WEB-INF/classes/log4j.properties +++ b/blazegraph/rootfs/opt/tomcat/webapps/bigdata/WEB-INF/classes/log4j.properties @@ -34,10 +34,8 @@ log4j.appender.dest2.layout.ConversionPattern=%-5p: %r %X{hostname} %X{serviceUU # Rule execution log. This is a formatted log file (comma delimited). log4j.logger.com.bigdata.relation.rule.eval.RuleLog=INFO,ruleLog log4j.additivity.com.bigdata.relation.rule.eval.RuleLog=false -log4j.appender.ruleLog=org.apache.log4j.FileAppender +log4j.appender.ruleLog=org.apache.log4j.ConsoleAppender log4j.appender.ruleLog.Threshold=ALL -log4j.appender.ruleLog.File=/opt/tomcat/logs/rules.log -log4j.appender.ruleLog.Append=true # I find that it is nicer to have this unbuffered since you can see what # is going on and to make sure that I have complete rule evaluation logs # on shutdown. @@ -49,10 +47,8 @@ log4j.appender.ruleLog.layout.ConversionPattern=%m # Summary query evaluation log (tab delimited file). Uncomment the next line to enable. #log4j.logger.com.bigdata.bop.engine.QueryLog=INFO,queryLog log4j.additivity.com.bigdata.bop.engine.QueryLog=false -log4j.appender.queryLog=org.apache.log4j.FileAppender +log4j.appender.queryLog=org.apache.log4j.ConsoleAppender log4j.appender.queryLog.Threshold=ALL -log4j.appender.queryLog.File=/opt/tomcat/logs/queryLog.csv -log4j.appender.queryLog.Append=true # I find that it is nicer to have this unbuffered since you can see what # is going on and to make sure that I have complete rule evaluation logs # on shutdown. @@ -64,10 +60,8 @@ log4j.appender.queryLog.layout.ConversionPattern=%m # BOp run state trace (tab delimited file). Uncomment the next line to enable. #log4j.logger.com.bigdata.bop.engine.RunState$TableLog=INFO,queryRunStateLog log4j.additivity.com.bigdata.bop.engine.RunState$TableLog=false -log4j.appender.queryRunStateLog=org.apache.log4j.FileAppender +log4j.appender.queryRunStateLog=org.apache.log4j.ConsoleAppender log4j.appender.queryRunStateLog.Threshold=ALL -log4j.appender.queryRunStateLog.File=/opt/tomcat/logs/queryRunState.log -log4j.appender.queryRunStateLog.Append=true # I find that it is nicer to have this unbuffered since you can see what # is going on and to make sure that I have complete rule evaluation logs # on shutdown. @@ -80,10 +74,8 @@ log4j.appender.queryRunStateLog.layout.ConversionPattern=%m #log4j.logger.com.bigdata.bop.engine.SolutionsLog=INFO,solutionsLog log4j.additivity.com.bigdata.bop.engine.SolutionsLog=false log4j.appender.solutionsLog=org.apache.log4j.ConsoleAppender -#log4j.appender.solutionsLog=org.apache.log4j.FileAppender +#log4j.appender.solutionsLog=org.apache.log4j.ConsoleAppender log4j.appender.solutionsLog.Threshold=ALL -log4j.appender.solutionsLog.File=/opt/tomcat/logs/solutions.csv -log4j.appender.solutionsLog.Append=true # I find that it is nicer to have this unbuffered since you can see what # is going on and to make sure that I have complete rule evaluation logs # on shutdown. @@ -97,10 +89,8 @@ log4j.logger.com.bigdata.rdf.sparql.ast.eval.ASTEvalHelper=WARN #log4j.logger.com.bigdata.rdf.sparql.ast.eval.ASTEvalHelper=INFO,sparqlLog log4j.additivity.com.bigdata.rdf.sparql.ast.eval.ASTEvalHelper=false log4j.appender.sparqlLog=org.apache.log4j.ConsoleAppender -#log4j.appender.sparqlLog=org.apache.log4j.FileAppender +#log4j.appender.sparqlLog=org.apache.log4j.ConsoleAppender log4j.appender.sparqlLog.Threshold=ALL -log4j.appender.sparqlLog.File=/opt/tomcat/logs/sparql.txt -log4j.appender.sparqlLog.Append=true # I find that it is nicer to have this unbuffered since you can see what # is going on and to make sure that I have complete rule evaluation logs # on shutdown. diff --git a/download/rootfs/usr/local/bin/create-service-user.sh b/download/rootfs/usr/local/bin/create-service-user.sh index 4b281181..d6594176 100755 --- a/download/rootfs/usr/local/bin/create-service-user.sh +++ b/download/rootfs/usr/local/bin/create-service-user.sh @@ -75,6 +75,8 @@ function main { addgroup ${group} # Users that run services should permit login / do not require passwords. adduser --system --disabled-password --no-create-home --ingroup ${group} --shell /sbin/nologin --home ${install_directory} ${user} + # User also needs to be a member of tty to write directly to /dev/stdout, etc. + addgroup ${user} tty chown ${user}:${group} ${install_directory} } main diff --git a/fcrepo/rootfs/etc/cont-init.d/03-fcrepo-setup.sh b/fcrepo/rootfs/etc/cont-init.d/03-fcrepo-setup.sh index c1206f6a..d68e21c2 100755 --- a/fcrepo/rootfs/etc/cont-init.d/03-fcrepo-setup.sh +++ b/fcrepo/rootfs/etc/cont-init.d/03-fcrepo-setup.sh @@ -56,14 +56,7 @@ function setup_persistence_backend { esac } -# Change log files to redirect to stdout/stderr -function redirect_logs_to_stdout { - ln -sf /dev/stdout /opt/tomcat/logs/velocity.log - chown tomcat:tomcat /opt/tomcat/logs/velocity.log -} - function main { - redirect_logs_to_stdout setup_persistence_backend # When bind mounting we need to ensure that we # actually can write to the folder. diff --git a/fcrepo/rootfs/opt/tomcat/bin/setenv.sh b/fcrepo/rootfs/opt/tomcat/bin/setenv.sh index 855a8d9d..b2113108 100755 --- a/fcrepo/rootfs/opt/tomcat/bin/setenv.sh +++ b/fcrepo/rootfs/opt/tomcat/bin/setenv.sh @@ -2,7 +2,7 @@ export JAVA_OPTS="${TOMCAT_JAVA_OPTS}" export CATALINA_OPTS="${TOMCAT_CATALINA_OPTS}" export CATALINA_OPTS="${CATALINA_OPTS} -Dfcrepo.home=/data/home" -export CATALINA_OPTS="${CATALINA_OPTS} -Dfcrepo.velocity.runtime.log=/opt/tomcat/logs/velocity.log" +export CATALINA_OPTS="${CATALINA_OPTS} -Dfcrepo.velocity.runtime.log=/dev/stdout" export CATALINA_OPTS="${CATALINA_OPTS} -Dfcrepo.modeshape.configuration=${FCREPO_MODESHAPE_CONFIGURATION} -Dfcrepo.jms.baseUrl=http://${HOSTNAME}/fcrepo/rest" if [[ "${FCREPO_DISABLE_SYN}" == "true" ]]; then export CATALINA_OPTS="${CATALINA_OPTS} -Dfcrepo.properties.management=relaxed" diff --git a/fcrepo6/rootfs/etc/cont-init.d/03-fcrepo-setup.sh b/fcrepo6/rootfs/etc/cont-init.d/03-fcrepo-setup.sh index c1206f6a..d68e21c2 100755 --- a/fcrepo6/rootfs/etc/cont-init.d/03-fcrepo-setup.sh +++ b/fcrepo6/rootfs/etc/cont-init.d/03-fcrepo-setup.sh @@ -56,14 +56,7 @@ function setup_persistence_backend { esac } -# Change log files to redirect to stdout/stderr -function redirect_logs_to_stdout { - ln -sf /dev/stdout /opt/tomcat/logs/velocity.log - chown tomcat:tomcat /opt/tomcat/logs/velocity.log -} - function main { - redirect_logs_to_stdout setup_persistence_backend # When bind mounting we need to ensure that we # actually can write to the folder. diff --git a/fcrepo6/rootfs/opt/tomcat/bin/setenv.sh b/fcrepo6/rootfs/opt/tomcat/bin/setenv.sh index 0304103a..01b958d5 100644 --- a/fcrepo6/rootfs/opt/tomcat/bin/setenv.sh +++ b/fcrepo6/rootfs/opt/tomcat/bin/setenv.sh @@ -2,7 +2,7 @@ export JAVA_OPTS="${TOMCAT_JAVA_OPTS}" export CATALINA_OPTS="${TOMCAT_CATALINA_OPTS}" export CATALINA_OPTS="${CATALINA_OPTS} -Dfcrepo.home=/data/home" -export CATALINA_OPTS="${CATALINA_OPTS} -Dfcrepo.velocity.runtime.log=/opt/tomcat/logs/velocity.log" +export CATALINA_OPTS="${CATALINA_OPTS} -Dfcrepo.velocity.runtime.log=/dev/stdout" export CATALINA_OPTS="${CATALINA_OPTS} -Dfcrepo.jms.baseUrl=http://${HOSTNAME}/fcrepo/rest" export CATALINA_OPTS="${CATALINA_OPTS} -Dfcrepo.external.content.allowed=/opt/tomcat/conf/allowed-external-content.txt" export CATALINA_OPTS="${CATALINA_OPTS} -Dfcrepo.autoversioning.enabled=false" diff --git a/fits/Dockerfile b/fits/Dockerfile index fb176668..ea51e09c 100644 --- a/fits/Dockerfile +++ b/fits/Dockerfile @@ -81,7 +81,8 @@ ENV \ FITS_MAX_IN_MEMORY_FILE_SIZE=4 \ FITS_MAX_OBJECTS_IN_POOL=5 \ FITS_MAX_REQUEST_SIZE=2000 \ - FITS_MAX_UPLOAD_FILE_SIZE=2000 + FITS_MAX_UPLOAD_FILE_SIZE=2000 \ + FITS_SERVICE_LOG_LEVEL=INFO COPY rootfs / COPY --chown=tomcat:tomcat rootfs/opt/tomcat /opt/tomcat diff --git a/fits/README.md b/fits/README.md index 6ffae9a6..14f17ec4 100644 --- a/fits/README.md +++ b/fits/README.md @@ -19,18 +19,15 @@ additional settings, volumes, ports, etc. ## Settings -| Environment Variable | Confd Key | Default | Description | +| Environment Variable | Confd Key | Default | Description | | :--------------------------- | :---------------------------- | :------ | :------------------------------------------------------------------------------------------------------------------- | | FITS_MAX_IN_MEMORY_FILE_SIZE | /fits/max/in/memory/file/size | 4 | Maximum size of an uploaded size kept in memory in MiB. Otherwise temporarily persisted to disk. | | FITS_MAX_OBJECTS_IN_POOL | /fits/max/objects/in/pool | 5 | Number of objects in FITSServlet object pool. | | FITS_MAX_REQUEST_SIZE | /fits/max/request/size | 2000 | Maximum size of HTTP Request object in MiB. Must be equal to or larger than the value for /fits/max/upload/file/size | | FITS_MAX_UPLOAD_FILE_SIZE | /fits/max/upload/file/size | 2000 | Maximum allowable size of uploaded file in MiB. | +| FITS_SERVICE_LOG_LEVEL | /activemq/log/level | INFO | Log level. Possible Values: OFF, FATAL, ERROR, WARN, INFO, DEBUG, TRACE or ALL | ## Logs -| Path | Description | -| :-------------------------------- | :---------- | -| /opt/tomcat/logs/fits-service.log | | - [Fits Documentation]: https://wiki.lyrasis.org/display/FF [Fits]: https://github.com/fits4/fits4 diff --git a/fits/rootfs/etc/confd/conf.d/log4j.properties.toml b/fits/rootfs/etc/confd/conf.d/log4j.properties.toml new file mode 100644 index 00000000..1fec58e6 --- /dev/null +++ b/fits/rootfs/etc/confd/conf.d/log4j.properties.toml @@ -0,0 +1,7 @@ +[template] +src = "log4j.properties.tmpl" +dest = "/opt/tomcat/webapps/fits/WEB-INF/classes/log4j.properties" +uid = 100 +gid = 1000 +mode = "0640" +keys = [ "/" ] diff --git a/fits/rootfs/etc/confd/templates/log4j.properties.tmpl b/fits/rootfs/etc/confd/templates/log4j.properties.tmpl new file mode 100644 index 00000000..0bcf6f75 --- /dev/null +++ b/fits/rootfs/etc/confd/templates/log4j.properties.tmpl @@ -0,0 +1,56 @@ +# +# Copyright (c) 2016 by The President and Fellows of Harvard College +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. You may obtain a copy of the License at: +# http://www.apache.org/licenses/LICENSE-2.0 +# Unless required by applicable law or agreed to in writing, software distributed under the License is +# distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permission and limitations under the License. +# + +#------------------------------------------------------------------------------ +# +# The following properties set the logging levels and log appender. The +# log4j.rootCategory variable defines the default log level plus one or more +# appenders. +# +# To override the default (rootCategory) log level, +# define a property of the form (see below for available values): +# +# Available logger names: +# CONSOLE The command line console (defaults to standard error output) +# FILE The log file to write to. +# +# Possible Log Levels: +# ERROR - only errors during processing are logged, or FATAL. +# WARN - warnings, errors and fatal are logged. +# INFO - general info messages and all the above are logged. +# DEBUG - more detailed messages and all the above are logged. +# TRACE - the most detailed messages and all the above are logged. +# +# OFF - This will turn off logging for an appender. +# +#------------------------------------------------------------------------------ + +log4j.rootLogger={{ getenv "FITS_SERVICE_LOG_LEVEL" }}, CONSOLE + +# create substitutions for appenders +date-pattern={yyyy-MM-dd HH:mm:ss} + +#------------------------------------------------------------------------------ +# direct log messages to console +#------------------------------------------------------------------------------ +log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender +log4j.appender.CONSOLE.Target=System.out +log4j.appender.CONSOLE.Threshold={{ getenv "FITS_SERVICE_LOG_LEVEL" }} +log4j.appender.CONSOLE.layout=org.apache.log4j.PatternLayout +log4j.appender.CONSOLE.layout.ConversionPattern=%d${date-pattern} - %5p - %c{1}:%L - %m%n +# Detailed appender for debugging, includes thread name: +#log4j.appender.CONSOLE.layout.ConversionPattern=%d${date-pattern} - %5p - [%t] %c{1}:%L - %m%n + +#---------------------------------------------------------- +# +# Class- and package-specific loggers for debugging if necessary +log4j.logger.uk.gov.nationalarchives.droid=FATAL,CONSOLE +log4j.logger.edu.harvard.hul.ois.jhove=FATAL,CONSOLE +log4j.logger.org.apache.tika=FATAL,CONSOLE diff --git a/fits/rootfs/etc/cont-init.d/03-fits-setup.sh b/fits/rootfs/etc/cont-init.d/03-fits-setup.sh deleted file mode 100755 index 71255b35..00000000 --- a/fits/rootfs/etc/cont-init.d/03-fits-setup.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/with-contenv bash -set -e - -# Change log files to redirect to stdout/stderr -ln -sf /dev/stdout /opt/tomcat/logs/fits-service.log -chown tomcat:tomcat /opt/tomcat/logs/fits-service.log diff --git a/karaf/README.md b/karaf/README.md index 0a981e2b..03c2a6a8 100644 --- a/karaf/README.md +++ b/karaf/README.md @@ -37,7 +37,7 @@ Requires `islandora/karaf` docker image to build. ## Settings -| Environment Variable | Confd Key | Default | Description | +| Environment Variable | Confd Key | Default | Description | | :------------------- | :-------------------- | :------- | :------------------ | | KARAF_ADMIN_NAME | /karaf/admin/name | admin | Admin user name | | KARAF_ADMIN_PASSWORD | /karaf/admin/password | password | Admin user password | @@ -45,7 +45,7 @@ Requires `islandora/karaf` docker image to build. Additional users/groups/etc can be defined by adding more environment variables, following the above conventions: -| Environment Variable | Confd Key | Description | +| Environment Variable | Confd Key | Description | | :------------------------- | :-------------------------- | :------------------------------- | | KARAF_USER_{USER}_NAME | /karaf/user/{USER}/name | See [Security]: users.properties | | KARAF_USER_{USER}_PASSWORD | /karaf/user/{USER}/password | See [Security]: users.properties | @@ -57,9 +57,7 @@ following the above conventions: ## Logs -| Path | Description | -| :---------------------------- | :---------- | -| /opt/karaf/data/log/karaf.log | [Karaf Log] | +- [Karaf Log] [JMX]: https://karaf.apache.org/manual/latest/#_monitoring_and_management_using_jmx [Karaf Directory Structure]: https://karaf.apache.org/manual/latest/#_directory_structure diff --git a/karaf/rootfs/etc/confd/conf.d/config.properties.toml b/karaf/rootfs/etc/confd/conf.d/config.properties.toml new file mode 100644 index 00000000..b56b5e34 --- /dev/null +++ b/karaf/rootfs/etc/confd/conf.d/config.properties.toml @@ -0,0 +1,7 @@ +[template] +src = "config.properties.tmpl" +dest = "/opt/karaf/etc/config.properties" +uid = 100 +gid = 1000 +mode = "0644" +keys = [ "/" ] diff --git a/karaf/rootfs/etc/confd/conf.d/org.ops4j.pax.logging.cfg.toml b/karaf/rootfs/etc/confd/conf.d/org.ops4j.pax.logging.cfg.toml new file mode 100644 index 00000000..b94f8e08 --- /dev/null +++ b/karaf/rootfs/etc/confd/conf.d/org.ops4j.pax.logging.cfg.toml @@ -0,0 +1,7 @@ +[template] +src = "org.ops4j.pax.logging.cfg.tmpl" +dest = "/opt/karaf/etc/org.ops4j.pax.logging.cfg" +uid = 100 +gid = 1000 +mode = "0644" +keys = [ "/" ] diff --git a/karaf/rootfs/etc/confd/templates/config.properties.tmpl b/karaf/rootfs/etc/confd/templates/config.properties.tmpl new file mode 100644 index 00000000..f00793ba --- /dev/null +++ b/karaf/rootfs/etc/confd/templates/config.properties.tmpl @@ -0,0 +1,398 @@ +################################################################################ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +################################################################################ + +# +# This file lists Karaf default settings for this particular version of Karaf. +# For easier maintenance when upgrading Karaf and to better document which +# default values have changed, it is recommended to place any changes to +# these values in a custom.properties file in the same folder as this file. +# Each value specified in custom.properties will override the default value +# here. +# + +# +# Properties file inclusions (as a space separated list of relative paths) +# Included files will override the values specified in this file +# NB: ${includes} properties files are mandatory, it means that Karaf will not start +# if the include file is not found +# +${includes} = jre.properties custom.properties + +# +# Properties file inclusions (as a space separated list of relative paths) +# Included files will override the values specified in this file +# NB: ${optionals} properties files are optionals, it means that Karaf will just +# display a warning message but the bootstrap will be performed +# +# ${optionals} = my.properties + +# +# Framework selection properties +# +karaf.framework=felix + +# +# Location of the OSGi frameworks +# +karaf.framework.equinox=mvn\:org.eclipse.tycho/org.eclipse.osgi/3.10.101.v20150820-1432 +karaf.framework.felix=mvn\:org.apache.felix/org.apache.felix.framework/5.6.1 + +# +# Framework config properties. +# +org.osgi.framework.system.packages= \ + org.osgi.dto;version="1.0",\ + org.osgi.resource;version="1.0",\ + org.osgi.resource.dto;version="1.0";uses:="org.osgi.dto",\ + org.osgi.framework;version="1.8",\ + org.osgi.framework.dto;version="1.8";uses:="org.osgi.dto",\ + org.osgi.framework.hooks.bundle;version="1.1";uses:="org.osgi.framework",\ + org.osgi.framework.hooks.resolver;version="1.0";uses:="org.osgi.framework.wiring",\ + org.osgi.framework.hooks.service;version="1.1";uses:="org.osgi.framework",\ + org.osgi.framework.hooks.weaving;version="1.1";uses:="org.osgi.framework.wiring",\ + org.osgi.framework.launch;version="1.2";uses:="org.osgi.framework",\ + org.osgi.framework.namespace;version="1.1";uses:="org.osgi.resource",\ + org.osgi.framework.startlevel;version="1.0";uses:="org.osgi.framework",\ + org.osgi.framework.startlevel.dto;version="1.0";uses:="org.osgi.dto",\ + org.osgi.framework.wiring;version="1.2";uses:="org.osgi.framework,org.osgi.resource",\ + org.osgi.framework.wiring.dto;version="1.2";uses:="org.osgi.dto,org.osgi.resource.dto",\ + org.osgi.service.condpermadmin;version="1.1.1";uses:="org.osgi.framework,org.osgi.service.permissionadmin",\ + org.osgi.service.packageadmin;version="1.2";uses:="org.osgi.framework",org.osgi.service.permissionadmin;version="1.2",\ + org.osgi.service.resolver;version="1.0";uses:="org.osgi.resource",\ + org.osgi.service.startlevel;version="1.1";uses:="org.osgi.framework",\ + org.osgi.service.url;version="1.0",\ + org.osgi.util.tracker;version="1.5.1";uses:="org.osgi.framework",\ + org.apache.karaf.version;version="4.0.8",\ + org.apache.karaf.jaas.boot.principal;uses:=javax.security.auth;version="4.0.8",\ + org.apache.karaf.jaas.boot;uses:="javax.security.auth,javax.security.auth.callback,javax.security.auth.login,javax.security.auth.spi,org.osgi.framework";version="4.0.8",\ + ${jre-${java.specification.version}} + +# +# Extra packages appended after standard packages +# +org.osgi.framework.system.packages.extra = \ + org.apache.karaf.branding, \ + org.apache.karaf.jaas.boot.principal, \ + org.apache.karaf.jaas.boot, \ + sun.misc, \ + javax.xml.stream;uses:=\"javax.xml.namespace,javax.xml.stream.events,javax.xml.stream.util,javax.xml.transform\";version=1.2, \ + javax.xml.stream.events;uses:=\"javax.xml.namespace,javax.xml.stream\";version=1.2, \ + javax.xml.stream.util;uses:=\"javax.xml.namespace,javax.xml.stream,javax.xml.stream.events\";version=1.2, \ + javax.xml.bind;uses:=\"javax.xml.bind.annotation.adapters,javax.xml.bind.attachment,javax.xml.namespace,javax.xml.stream,javax.xml.transform,javax.xml.validation,org.w3c.dom,org.xml.sax\";version=2.2.1, \ + javax.xml.bind.annotation;uses:=\"javax.xml.bind,javax.xml.parsers,javax.xml.transform,javax.xml.transform.dom,org.w3c.dom\";version=2.2.1, \ + javax.xml.bind.annotation.adapters;version=2.2.1, \ + javax.xml.bind.attachment;uses:=javax.activation;version=2.2.1, \ + javax.xml.bind.helpers;uses:=\"javax.xml.bind,javax.xml.bind.annotation.adapters,javax.xml.bind.attachment,javax.xml.stream,javax.xml.transform,javax.xml.validation,org.w3c.dom,org.xml.sax\";version=2.2.1, \ + javax.xml.bind.util;uses:=\"javax.xml.bind,javax.xml.transform.sax\";version=2.2.1, \ + javax.annotation;version=1.2, \ + javax.annotation.security;version=1.2, \ + javax.annotation.sql;version=1.2, \ + javax.activation;version=1.1, \ + org.apache.xml.serializer;uses:=\"org.xml.sax.helpers,org.xml.sax,org.apache.xml.serializer.utils,javax.xml.transform,org.w3c.dom.ls,org.w3c.dom,org.xml.sax.ext,org.apache.xml.serializer.dom3\";version=2.7.2, \ + org.apache.xml.serializer.utils;uses:=\"org.w3c.dom,org.xml.sax,javax.xml.transform\";version=2.7.2, \ + org.apache.xml.serializer.dom3;uses:=\"org.apache.xml.serializer,org.w3c.dom.ls,org.apache.xml.serializer.utils,org.w3c.dom,org.xml.sax,org.xml.sax.ext,org.xml.sax.helpers\";version=2.7.2, \ + javax.xml.soap;uses:=\"javax.activation,javax.xml.namespace,javax.xml.transform,javax.xml.transform.dom,org.w3c.dom\";version=1.3, \ + javax.xml.ws;uses:=\"javax.xml.bind,javax.xml.bind.annotation,javax.xml.namespace,javax.xml.transform,javax.xml.ws.handler,javax.xml.ws.spi,javax.xml.ws.spi.http,org.w3c.dom\";version=2.2, \ + javax.xml.ws.handler;uses:=\"javax.xml.namespace,javax.xml.ws\";version=2.2, \ + javax.xml.ws.handler.soap;uses:=\"javax.xml.bind,javax.xml.namespace,javax.xml.soap,javax.xml.ws.handler\";version=2.2, \ + javax.xml.ws.http;uses:=javax.xml.ws;version=2.2, \ + javax.xml.ws.soap;uses:=\"javax.xml.soap,javax.xml.ws,javax.xml.ws.spi\";version=2.2, \ + javax.xml.ws.spi;uses:=\"javax.xml.bind,javax.xml.namespace,javax.xml.transform,javax.xml.ws,javax.xml.ws.handler,javax.xml.ws.wsaddressing,org.w3c.dom\";version=2.2, \ + javax.xml.ws.spi.http;version=2.2, \ + javax.xml.ws.wsaddressing;uses:=\"javax.xml.bind.annotation,javax.xml.namespace,javax.xml.transform,javax.xml.ws,org.w3c.dom\";version=2.2, \ + javax.xml;version=1.4, \ + javax.xml.datatype;uses:=javax.xml.namespace;version=1.4, \ + javax.xml.namespace;version=1.4, \ + javax.xml.parsers;uses:=\"javax.xml.validation,org.w3c.dom,org.xml.sax,org.xml.sax.helpers\";version=1.4, \ + javax.xml.transform;version=1.4, \ + javax.xml.transform.dom;uses:=\"javax.xml.transform,org.w3c.dom\";version=1.4, \ + javax.xml.transform.sax;uses:=\"javax.xml.transform,org.xml.sax,org.xml.sax.ext\";version=1.4, \ + javax.xml.transform.stax;uses:=\"javax.xml.stream,javax.xml.transform\";version=1.4, \ + javax.xml.transform.stream;uses:=javax.xml.transform;version=1.4, \ + javax.xml.validation;uses:=\"javax.xml.transform,org.w3c.dom,org.w3c.dom.ls,org.xml.sax\";version=1.4, \ + javax.xml.xpath;uses:=\"javax.xml.namespace,org.xml.sax\";version=1.4, \ + org.w3c.dom;version=1.0, \ + org.w3c.dom.bootstrap;uses:=org.w3c.dom;version=1.0, \ + org.w3c.dom.css;uses:=\"org.w3c.dom,org.w3c.dom.stylesheets,org.w3c.dom.views\";version=1.0, \ + org.w3c.dom.events;uses:=\"org.w3c.dom,org.w3c.dom.views\";version=1.0, \ + org.w3c.dom.html;uses:=org.w3c.dom;version=1.0, \ + org.w3c.dom.ls;uses:=\"org.w3c.dom,org.w3c.dom.events,org.w3c.dom.traversal\";version=1.0, \ + org.w3c.dom.ranges;uses:=org.w3c.dom;version=1.0, \ + org.w3c.dom.stylesheets;uses:=org.w3c.dom;version=1.0, \ + org.w3c.dom.traversal;uses:=org.w3c.dom;version=1.0, \ + org.w3c.dom.views;version=1.0, \ + org.w3c.dom.xpath;uses:=org.w3c.dom;version=1.0, \ + org.xml.sax;version=2.0.2, \ + org.xml.sax.ext;uses:=\"org.xml.sax,org.xml.sax.helpers\";version=2.0.2, \ + org.xml.sax.helpers;uses:=org.xml.sax;version=2.0.2, \ + java_cup.runtime;version=2.7.2, \ + org.apache.xalan;version=2.7.2, \ + org.apache.xalan.xslt;uses:=\"org.w3c.dom,org.xml.sax,org.apache.xalan,org.xml.sax.helpers,javax.xml.transform.sax,org.apache.xalan.res,org.apache.xml.utils,org.apache.xalan.transformer,javax.xml.transform.dom,javax.xml.parsers,javax.xml.transform,org.apache.xalan.trace,javax.xml.transform.stream\";version=2.7.2, \ + org.apache.xalan.transformer;uses:=\"org.apache.xml.dtm,org.xml.sax.ext,org.apache.xml.serializer,org.apache.xalan.serialize,org.xml.sax,org.apache.xml.utils,javax.xml.transform,org.apache.xpath,org.apache.xalan.templates,org.apache.xalan.res,org.apache.xpath.axes,org.apache.xpath.objects,org.w3c.dom,org.xml.sax.helpers,javax.xml.parsers,org.w3c.dom.traversal,javax.xml.transform.sax,org.apache.xml.dtm.ref.sax2dtm,org.apache.xml.dtm.ref,javax.xml.transform.dom,javax.xml.transform.stream,org.apache.xpath.functions,org.apache.xalan.trace,org.apache.xalan.extensions\";version=2.7.2, \ + org.apache.xalan.xsltc.trax;uses:=\"org.xml.sax.ext,org.xml.sax.helpers,org.w3c.dom,org.xml.sax,org.apache.xalan.xsltc.dom,org.apache.xml.serializer,org.apache.xalan.xsltc.runtime,javax.xml.parsers,javax.xml.transform.sax,javax.xml.transform,org.apache.xalan.xsltc.compiler.util,org.apache.xalan.xsltc.compiler,javax.xml,org.apache.xalan.xsltc,org.apache.xml.utils,javax.xml.transform.dom,org.apache.xalan.xsltc.runtime.output,org.apache.xml.dtm,javax.xml.transform.stream\";version=2.7.2, \ + org.apache.xalan.xsltc.compiler.util;uses:=\"org.apache.bcel.generic,org.apache.xalan.xsltc.compiler,org.apache.bcel.classfile,org.apache.xml.utils\";version=2.7.2, \ + org.apache.xalan.xsltc.cmdline.getopt;uses:=org.apache.xalan.xsltc.compiler.util;version=2.7.2, \ + org.apache.xalan.lib;uses:=\"org.w3c.dom,org.apache.xml.dtm.ref,org.apache.xml.dtm,org.apache.xpath,org.apache.xpath.axes,org.apache.xalan.extensions,org.apache.xpath.objects,org.xml.sax,org.apache.xalan.res,org.apache.xml.utils,javax.xml.parsers,javax.xml.transform,org.apache.xalan.xslt,org.w3c.dom.traversal,org.xml.sax.helpers,org.apache.xml.serializer,javax.xml.transform.sax,org.apache.xalan.templates,org.apache.xalan.transformer,javax.xml.transform.stream\";version=2.7.2, \ + org.apache.xalan.xsltc.runtime;uses:=\"org.apache.xml.serializer,org.w3c.dom,org.apache.xalan.xsltc.runtime.output,javax.xml.parsers,javax.xml.transform,org.apache.xml.dtm,org.apache.xalan.xsltc,org.apache.xalan.xsltc.dom,org.xml.sax,org.apache.xml.utils,javax.xml.transform.dom,org.apache.xml.dtm.ref\";version=2.7.2, \ + org.apache.xalan.extensions;uses:=\"org.w3c.dom,org.apache.xpath,org.apache.xpath.objects,org.apache.xml.utils,javax.xml.transform,org.w3c.dom.traversal,org.apache.xpath.functions,org.apache.xalan.templates,org.apache.xalan.transformer,org.apache.xalan.res,org.apache.xml.dtm,org.apache.xml.dtm.ref,org.apache.xalan.trace,javax.xml.namespace,javax.xml.xpath,org.apache.xml.serializer,org.xml.sax,org.apache.xalan.serialize,org.apache.xpath.axes\";version=2.7.2, \ + org.apache.xalan.processor;uses:=\"org.xml.sax.helpers,org.w3c.dom,org.apache.xalan.templates,org.xml.sax,org.apache.xml.utils,javax.xml.transform,javax.xml.transform.sax,org.apache.xalan.res,javax.xml.parsers,javax.xml.transform.dom,javax.xml.transform.stream,org.apache.xpath,org.apache.xpath.compiler,org.apache.xalan.extensions,org.apache.xalan.transformer\";version=2.7.2, \ + org.apache.xalan.xsltc.runtime.output;uses:=\"org.xml.sax.ext,org.apache.xml.serializer,org.w3c.dom,org.xml.sax,javax.xml.parsers,org.apache.xalan.xsltc.trax\";version=2.7.2, \ + org.apache.xalan.templates;uses:=\"org.apache.xpath,org.xml.sax,org.apache.xalan.res,org.apache.xml.utils,org.apache.xalan.processor,javax.xml.transform,org.apache.xpath.compiler,org.apache.xpath.objects,org.apache.xpath.operations,org.apache.xpath.functions,org.apache.xpath.axes,org.apache.xalan.transformer,org.apache.xalan.trace,org.apache.xml.dtm,org.apache.xml.serializer,org.apache.xalan.serialize,org.apache.xml.dtm.ref,org.w3c.dom,org.apache.xalan.extensions,org.apache.xml.utils.res,org.xml.sax.helpers,org.apache.xpath.patterns\";version=2.7.2, \ + org.apache.xalan.xsltc.compiler;uses:=\"org.apache.bcel.generic,org.apache.xalan.xsltc.compiler.util,org.apache.xml.utils,java_cup.runtime,org.apache.xml.serializer,org.apache.xalan.xsltc.runtime,org.xml.sax,org.apache.bcel.util,org.apache.bcel.classfile,javax.xml.parsers,org.apache.xml.dtm\";version=2.7.2, \ + org.apache.xalan.res;uses:=org.apache.xpath.res;version=2.7.2, \ + org.apache.xalan.trace;uses:=\"org.w3c.dom,org.apache.xpath,org.apache.xpath.objects,org.apache.xalan.templates,org.apache.xalan.transformer,org.xml.sax,org.apache.xml.utils,javax.xml.transform,org.apache.xml.dtm,org.apache.xml.dtm.ref\";version=2.7.2, \ + org.apache.xalan.client;uses:=\"javax.xml.transform.stream,org.apache.xalan.res,javax.xml.transform\";version=2.7.2, \ + org.apache.xalan.lib.sql;uses:=\"org.apache.xalan.res,org.w3c.dom,org.xml.sax,org.apache.xml.dtm,org.xml.sax.ext,org.apache.xml.utils,org.apache.xml.dtm.ref,javax.xml.transform,javax.naming,org.apache.xpath,org.apache.xalan.extensions,org.apache.xpath.objects\";version=2.7.2, \ + org.apache.xalan.xsltc;uses:=\"org.apache.xml.dtm,org.apache.xml.serializer,org.w3c.dom,org.apache.xalan.xsltc.runtime,org.xml.sax\";version=2.7.2, \ + org.apache.xalan.xsltc.cmdline;uses:=\"org.apache.xalan.xsltc.cmdline.getopt,org.apache.xalan.xsltc.compiler,org.apache.xalan.xsltc.compiler.util,org.apache.xml.serializer,javax.xml.transform.sax,org.apache.xalan.xsltc.runtime.output,javax.xml.parsers,javax.xml.transform,org.apache.xml.dtm,org.apache.xalan.xsltc,org.xml.sax,org.apache.xalan.xsltc.runtime,org.apache.xalan.xsltc.dom\";version=2.7.2, \ + org.apache.xalan.serialize;uses:=\"org.apache.xml.serializer,org.xml.sax,org.w3c.dom,org.apache.xml.dtm,org.apache.xpath.objects,org.apache.xpath,org.apache.xml.utils,org.apache.xalan.transformer,javax.xml.transform\";version=2.7.2, \ + org.apache.xalan.xsltc.dom;uses:=\"org.apache.xml.dtm,org.apache.xalan.xsltc.runtime,org.apache.xml.dtm.ref,org.xml.sax.ext,org.apache.xml.serializer,org.w3c.dom,org.apache.xalan.xsltc,org.xml.sax,org.apache.xml.utils,javax.xml.transform,org.apache.xalan.xsltc.util,javax.xml.transform.sax,javax.xml.parsers,javax.xml.transform.stream,org.apache.xalan.xsltc.trax,org.apache.xml.dtm.ref.sax2dtm,javax.xml.transform.dom,org.apache.xml.res\";version=2.7.2, \ + org.apache.xalan.xsltc.util;version=2.7.2, \ + org.apache.xml.dtm.ref.dom2dtm;uses:=\"org.w3c.dom,org.xml.sax,org.apache.xml.dtm,org.xml.sax.ext,org.apache.xml.res,org.apache.xml.utils,org.apache.xml.dtm.ref,javax.xml.transform.dom,javax.xml.transform\";version=2.7.2, \ + org.apache.xml.dtm;uses:=\"org.xml.sax.ext,org.w3c.dom,org.xml.sax,org.apache.xml.utils,javax.xml.transform,org.apache.xml.res\";version=2.7.2, \ + org.apache.xml.dtm.ref;uses:=\"org.apache.xml.res,org.xml.sax.ext,org.xml.sax,org.apache.xml.dtm,org.w3c.dom,org.apache.xml.utils,javax.xml.transform,org.xml.sax.helpers,javax.xml.transform.sax,org.apache.xml.dtm.ref.sax2dtm,org.apache.xml.dtm.ref.dom2dtm,javax.xml.parsers,javax.xml.transform.dom,javax.xml.transform.stream,org.w3c.dom.traversal,org.apache.xpath,org.apache.xerces.parsers,org.apache.xml.serialize\";version=2.7.2, \ + org.apache.xml.dtm.ref.sax2dtm;uses:=\"org.apache.xml.dtm,org.xml.sax.ext,org.apache.xml.res,org.xml.sax,org.apache.xml.utils,org.apache.xml.dtm.ref,javax.xml.transform,org.apache.xml.serializer\";version=2.7.2, \ + org.apache.xml.res;version=2.7.2, \ + org.apache.xml.serializer;uses:=\"org.xml.sax.helpers,org.xml.sax,org.apache.xml.serializer.utils,javax.xml.transform,org.w3c.dom,org.w3c.dom.ls,org.xml.sax.ext,org.apache.xml.serializer.dom3\";version=2.7.2, \ + org.apache.xml.serializer.dom3;uses:=\"org.apache.xml.serializer,org.w3c.dom,org.w3c.dom.ls,org.xml.sax,org.apache.xml.serializer.utils,org.xml.sax.ext,org.xml.sax.helpers\";version=2.7.2, \ + org.apache.xml.utils.res;version=2.7.2, \ + org.apache.xml.utils;uses:=\"org.w3c.dom,org.xml.sax,javax.xml.parsers,javax.xml.transform,org.xml.sax.ext,org.apache.xml.res,org.apache.xml.dtm.ref,org.xml.sax.helpers,javax.xml.transform.sax,org.apache.xml.dtm.ref.dom2dtm\";version=2.7.2, \ + org.apache.xpath;uses:=\"org.apache.xpath.objects,org.apache.xml.utils,org.w3c.dom,javax.xml.transform,org.w3c.dom.traversal,org.apache.xml.dtm,org.xml.sax,org.apache.xalan.res,org.apache.xpath.functions,org.apache.xpath.axes,org.xml.sax.helpers,javax.xml.transform.sax,javax.xml.transform.stream,javax.xml.parsers,org.apache.xalan.templates,org.apache.xpath.compiler,org.apache.xalan.extensions,org.apache.xml.dtm.ref,org.apache.xml.dtm.ref.sax2dtm,org.apache.xpath.operations,org.apache.xpath.patterns\";version=2.7.2, \ + org.apache.xpath.compiler;uses:=\"org.apache.xpath.operations,org.apache.xpath,org.apache.xpath.functions,org.apache.xalan.res,org.apache.xml.utils,javax.xml.transform,org.apache.xml.dtm,org.apache.xpath.objects,org.apache.xpath.axes,org.apache.xpath.patterns,org.apache.xalan.templates,org.apache.xpath.domapi\";version=2.7.2, \ + org.apache.xpath.res;uses:=org.apache.xml.res;version=2.7.2, \ + org.apache.xpath.objects;uses:=\"org.apache.xml.utils,org.apache.xml.dtm,org.apache.xpath,javax.xml.transform,org.w3c.dom,org.xml.sax,org.apache.xpath.axes,org.apache.xml.dtm.ref,org.w3c.dom.traversal,org.apache.xalan.res,org.xml.sax.ext\";version=2.7.2, \ + org.apache.xpath.patterns;uses:=\"org.apache.xml.dtm,org.apache.xpath,org.apache.xpath.objects,org.apache.xpath.axes,javax.xml.transform\";version=2.7.2, \ + org.apache.xpath.operations;uses:=\"org.apache.xpath,org.apache.xpath.objects,javax.xml.transform,org.apache.xml.utils,org.apache.xml.dtm,org.w3c.dom,org.apache.xalan.templates,org.apache.xalan.res,org.apache.xpath.axes\";version=2.7.2, \ + org.apache.xpath.domapi;uses:=\"org.w3c.dom,org.apache.xpath.res,org.apache.xml.utils,org.w3c.dom.xpath,org.apache.xpath,javax.xml.transform,org.apache.xpath.objects,org.w3c.dom.events,org.w3c.dom.traversal\";version=2.7.2, \ + org.apache.xpath.functions;uses:=\"org.apache.xpath,org.apache.xpath.objects,javax.xml.transform,org.apache.xalan.res,org.apache.xml.dtm,org.apache.xpath.axes,org.apache.xpath.patterns,org.apache.xalan.templates,org.apache.xml.utils,org.apache.xalan.transformer,org.apache.xpath.res,org.apache.xpath.compiler,org.xml.sax\";version=2.7.2, \ + org.apache.xpath.jaxp;uses:=\"org.w3c.dom,javax.xml.namespace,org.apache.xpath.objects,org.apache.xpath,org.apache.xpath.functions,org.apache.xalan.res,org.apache.xml.utils,javax.xml.transform,javax.xml.xpath,javax.xml.parsers,org.w3c.dom.traversal,org.xml.sax\";version=2.7.2, \ + org.apache.xpath.axes;uses:=\"org.apache.xml.dtm,org.apache.xpath.compiler,javax.xml.transform,org.apache.xpath,org.apache.xalan.res,org.apache.xpath.patterns,org.apache.xml.utils,org.w3c.dom,org.w3c.dom.traversal,org.apache.xpath.objects,org.apache.xpath.operations,org.apache.xpath.functions,org.xml.sax\";version=2.7.2, \ + org.apache.html.dom;uses:=\"org.apache.xerces.dom,org.w3c.dom,org.xml.sax\";version=2.11.0, \ + org.apache.wml;uses:=org.w3c.dom;version=2.11.0, \ + org.apache.wml.dom;uses:=\"org.apache.wml,org.apache.xerces.dom,org.w3c.dom\";version=2.11.0, \ + org.apache.xerces.dom;uses:=\"org.apache.xerces.dom3.as,org.apache.xerces.impl,org.apache.xerces.impl.dv,org.apache.xerces.impl.validation,org.apache.xerces.impl.xs,org.apache.xerces.util,org.apache.xerces.xni,org.apache.xerces.xni.parser,org.apache.xerces.xs,org.w3c.dom,org.w3c.dom.events,org.w3c.dom.ls,org.w3c.dom.ranges,org.w3c.dom.traversal\";version=2.11.0, \ + org.apache.xerces.dom.events;uses:=\"org.w3c.dom,org.w3c.dom.events,org.w3c.dom.views\";version=2.11.0, \ + org.apache.xerces.dom3.as;uses:=\"org.w3c.dom,org.w3c.dom.ls\";version=2.11.0, \ + org.apache.xerces.impl;uses:=\"org.apache.xerces.impl.dtd,org.apache.xerces.impl.validation,org.apache.xerces.util,org.apache.xerces.xni,org.apache.xerces.xni.grammars,org.apache.xerces.xni.parser,org.xml.sax\";version=2.11.0, \ + org.apache.xerces.impl.dtd;uses:=\"org.apache.xerces.impl,org.apache.xerces.impl.dtd.models,org.apache.xerces.impl.dv,org.apache.xerces.impl.validation,org.apache.xerces.util,org.apache.xerces.xni,org.apache.xerces.xni.grammars,org.apache.xerces.xni.parser\";version=2.11.0, \ + org.apache.xerces.impl.dtd.models;uses:=org.apache.xerces.xni;version=2.11.0, \ + org.apache.xerces.impl.dv;uses:=\"org.apache.xerces.impl.xs.util,org.apache.xerces.util,org.apache.xerces.xs\";version=2.11.0, \ + org.apache.xerces.impl.dv.dtd;uses:=org.apache.xerces.impl.dv;version=2.11.0, \ + org.apache.xerces.impl.dv.util;uses:=\"org.apache.xerces.xs,org.apache.xerces.xs.datatypes\";version=2.11.0, \ + org.apache.xerces.impl.dv.xs;uses:=\"javax.xml.datatype,org.apache.xerces.impl.dv,org.apache.xerces.impl.xs,org.apache.xerces.impl.xs.util,org.apache.xerces.util,org.apache.xerces.xs,org.apache.xerces.xs.datatypes,org.w3c.dom\";version=2.11.0, \ + org.apache.xerces.impl.io;uses:=org.apache.xerces.util;version=2.11.0, \ + org.apache.xerces.impl.msg;uses:=org.apache.xerces.util;version=2.11.0, \ + org.apache.xerces.impl.validation;uses:=\"org.apache.xerces.impl.dv,org.apache.xerces.util,org.apache.xerces.xni\";version=2.11.0, \ + org.apache.xerces.impl.xpath;uses:=\"org.apache.xerces.util,org.apache.xerces.xni\";version=2.11.0, \ + org.apache.xerces.impl.xpath.regex;version=2.11.0, \ + org.apache.xerces.impl.xs;uses:=\"org.apache.xerces.dom,org.apache.xerces.impl,org.apache.xerces.impl.dv,org.apache.xerces.impl.dv.xs,org.apache.xerces.impl.validation,org.apache.xerces.impl.xs.identity,org.apache.xerces.impl.xs.models,org.apache.xerces.impl.xs.util,org.apache.xerces.util,org.apache.xerces.xni,org.apache.xerces.xni.grammars,org.apache.xerces.xni.parser,org.apache.xerces.xs,org.apache.xerces.xs.datatypes,org.w3c.dom,org.w3c.dom.ls\";version=2.11.0, \ + org.apache.xerces.impl.xs.identity;uses:=\"org.apache.xerces.impl.xpath,org.apache.xerces.impl.xs,org.apache.xerces.util,org.apache.xerces.xni,org.apache.xerces.xs\";version=2.11.0, \ + org.apache.xerces.impl.xs.models;uses:=\"org.apache.xerces.impl.dtd.models,org.apache.xerces.impl.xs,org.apache.xerces.xni,org.apache.xerces.xni.parser\";version=2.11.0, \ + org.apache.xerces.impl.xs.opti;uses:=\"org.apache.xerces.impl,org.apache.xerces.impl.dv,org.apache.xerces.impl.validation,org.apache.xerces.parsers,org.apache.xerces.util,org.apache.xerces.xni,org.apache.xerces.xni.grammars,org.apache.xerces.xni.parser,org.w3c.dom\";version=2.11.0, \ + org.apache.xerces.impl.xs.traversers;uses:=\"org.apache.xerces.impl.dv,org.apache.xerces.impl.xs,org.apache.xerces.impl.xs.util,org.apache.xerces.util,org.apache.xerces.xni,org.apache.xerces.xni.parser,org.w3c.dom\";version=2.11.0, \ + org.apache.xerces.impl.xs.util;uses:=\"org.apache.xerces.impl.xs,org.apache.xerces.util,org.apache.xerces.xni,org.apache.xerces.xni.parser,org.apache.xerces.xs,org.apache.xerces.xs.datatypes,org.w3c.dom.ls\";version=2.11.0, \ + org.apache.xerces.jaxp;uses:=\"javax.xml.parsers,javax.xml.validation,org.apache.xerces.parsers,org.apache.xerces.xs,org.w3c.dom,org.xml.sax,org.xml.sax.helpers\";version=2.11.0, \ + org.apache.xerces.jaxp.datatype;uses:=javax.xml.datatype;version=2.11.0, \ + org.apache.xerces.jaxp.validation;uses:=\"javax.xml.transform,javax.xml.validation,org.apache.xerces.xni.grammars,org.w3c.dom.ls,org.xml.sax\";version=2.11.0, \ + org.apache.xerces.parsers;uses:=\"org.apache.xerces.dom,org.apache.xerces.dom3.as,org.apache.xerces.impl,org.apache.xerces.impl.dtd,org.apache.xerces.impl.dv,org.apache.xerces.impl.validation,org.apache.xerces.impl.xs,org.apache.xerces.util,org.apache.xerces.xinclude,org.apache.xerces.xni,org.apache.xerces.xni.grammars,org.apache.xerces.xni.parser,org.apache.xerces.xs,org.w3c.dom,org.w3c.dom.ls,org.xml.sax,org.xml.sax.ext\";version=2.11.0, \ + org.apache.xerces.stax;uses:=\"javax.xml.namespace,javax.xml.stream,javax.xml.stream.events\";version=2.11.0, \ + org.apache.xerces.stax.events;uses:=\"javax.xml.namespace,javax.xml.stream,javax.xml.stream.events\";version=2.11.0, \ + org.apache.xerces.util;uses:=\"javax.xml.namespace,javax.xml.stream,org.apache.xerces.dom,org.apache.xerces.impl,org.apache.xerces.xni,org.apache.xerces.xni.grammars,org.apache.xerces.xni.parser,org.w3c.dom,org.w3c.dom.ls,org.xml.sax,org.xml.sax.ext\";version=2.11.0, \ + org.apache.xerces.xinclude;uses:=\"org.apache.xerces.impl,org.apache.xerces.util,org.apache.xerces.xni,org.apache.xerces.xni.parser,org.apache.xerces.xpointer\";version=2.11.0, \ + org.apache.xerces.xni;uses:=org.apache.xerces.xni.parser;version=2.11.0, \ + org.apache.xerces.xni.grammars;uses:=\"org.apache.xerces.xni,org.apache.xerces.xni.parser,org.apache.xerces.xs\";version=2.11.0, \ + org.apache.xerces.xni.parser;uses:=org.apache.xerces.xni;version=2.11.0, \ + org.apache.xerces.xpointer;uses:=\"org.apache.xerces.impl,org.apache.xerces.util,org.apache.xerces.xinclude,org.apache.xerces.xni,org.apache.xerces.xni.parser\";version=2.11.0, \ + org.apache.xerces.xs;uses:=\"org.apache.xerces.xs.datatypes,org.w3c.dom,org.w3c.dom.ls\";version=2.11.0, \ + org.apache.xerces.xs.datatypes;uses:=\"javax.xml.datatype,javax.xml.namespace,org.apache.xerces.xni,org.apache.xerces.xs\";version=2.11.0, \ + org.apache.xml.serialize;uses:=\"org.apache.xerces.dom,org.apache.xerces.util,org.w3c.dom,org.w3c.dom.ls,org.xml.sax,org.xml.sax.ext\";version=2.11.0, \ + org.apache.karaf.diagnostic.core;uses:=org.osgi.framework;version=4.0.8, \ + org.apache.karaf.diagnostic.core.common;uses:=org.apache.karaf.diagnostic.core;version=4.0.8, \ + org.apache.karaf.jaas.boot.principal;uses:=javax.security.auth;version=4.0.8, \ + org.apache.karaf.jaas.boot;uses:=\"javax.security.auth,javax.security.auth.callback,javax.security.auth.login,javax.security.auth.spi,org.osgi.framework\";version=4.0.8 + +org.osgi.framework.system.capabilities= \ + ${eecap-${java.specification.version}}, \ + osgi.service;effective:=active;objectClass=org.osgi.service.packageadmin.PackageAdmin, \ + osgi.service;effective:=active;objectClass=org.osgi.service.resolver.Resolver, \ + osgi.service;effective:=active;objectClass=org.osgi.service.startlevel.StartLevel, \ + osgi.service;effective:=active;objectClass=org.osgi.service.url.URLHandlers + +eecap-1.8= osgi.ee; osgi.ee="OSGi/Minimum"; version:List="1.0,1.1,1.2", \ + osgi.ee; osgi.ee="JavaSE"; version:List="1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7,1.8" +eecap-1.7= osgi.ee; osgi.ee="OSGi/Minimum"; version:List="1.0,1.1,1.2", \ + osgi.ee; osgi.ee="JavaSE"; version:List="1.0,1.1,1.2,1.3,1.4,1.5,1.6,1.7" +eecap-1.6= osgi.ee; osgi.ee="OSGi/Minimum"; version:List="1.0,1.1,1.2", \ + osgi.ee; osgi.ee="JavaSE"; version:List="1.0,1.1,1.2,1.3,1.4,1.5,1.6" +eecap-1.5= osgi.ee; osgi.ee="OSGi/Minimum"; version:List="1.0,1.1,1.2", \ + osgi.ee; osgi.ee="JavaSE"; version:List="1.0,1.1,1.2,1.3,1.4,1.5" +eecap-1.4= osgi.ee; osgi.ee="OSGi/Minimum"; version:List="1.0,1.1,1.2", \ + osgi.ee; osgi.ee="JavaSE"; version:List="1.0,1.1,1.2,1.3,1.4" +eecap-1.3= osgi.ee; osgi.ee="OSGi/Minimum"; version:List="1.0,1.1", \ + osgi.ee; osgi.ee="JavaSE"; version:List="1.0,1.1,1.2,1.3" +eecap-1.2= osgi.ee; osgi.ee="OSGi/Minimum"; version:List="1.0,1.1", \ + osgi.ee; osgi.ee="JavaSE"; version:List="1.0,1.1,1.2" + +# +# javax.transaction is needed to avoid class loader constraint violation when using javax.sql +# +org.osgi.framework.bootdelegation = \ + com.sun.*, \ + javax.transaction, \ + javax.transaction.*, \ + javax.xml.crypto, \ + javax.xml.crypto.*, \ + sun.*, \ + org.apache.karaf.jaas.boot, \ + org.apache.karaf.jaas.boot.principal, \ + org.apache.html.dom, \ + org.apache.wml, \ + org.apache.wml.dom, \ + org.apache.xerces.dom, \ + org.apache.xerces.dom.events, \ + org.apache.xerces.dom3.as, \ + org.apache.xerces.impl, \ + org.apache.xerces.impl.dtd, \ + org.apache.xerces.impl.dtd.models, \ + org.apache.xerces.impl.dv, \ + org.apache.xerces.impl.dv.dtd, \ + org.apache.xerces.impl.dv.util, \ + org.apache.xerces.impl.dv.xs, \ + org.apache.xerces.impl.io, \ + org.apache.xerces.impl.msg, \ + org.apache.xerces.impl.validation, \ + org.apache.xerces.impl.xpath, \ + org.apache.xerces.impl.xpath.regex, \ + org.apache.xerces.impl.xs, \ + org.apache.xerces.impl.xs.identity, \ + org.apache.xerces.impl.xs.models, \ + org.apache.xerces.impl.xs.opti, \ + org.apache.xerces.impl.xs.traversers, \ + org.apache.xerces.impl.xs.util, \ + org.apache.xerces.jaxp, \ + org.apache.xerces.jaxp.datatype, \ + org.apache.xerces.jaxp.validation, \ + org.apache.xerces.parsers, \ + org.apache.xerces.stax, \ + org.apache.xerces.stax.events, \ + org.apache.xerces.util, \ + org.apache.xerces.xinclude, \ + org.apache.xerces.xni, \ + org.apache.xerces.xni.grammars, \ + org.apache.xerces.xni.parser, \ + org.apache.xerces.xpointer, \ + org.apache.xerces.xs, \ + org.apache.xerces.xs.datatypes, \ + org.apache.xml.serialize + +# jVisualVM support +# in order to use Karaf with jvisualvm, the org.osgi.framework.bootdelegation property has to contain the org.netbeans.lib.profiler.server package +# and, so, it should look like: +# +# org.osgi.framework.bootdelegation=org.apache.karaf.jaas.boot,org.apache.karaf.jaas.boot.principal,sun.*,com.sun.*,javax.transaction,javax.transaction.*,javax.xml.crypto,javax.xml.crypto.*,org.apache.xerces.jaxp.datatype,org.apache.xerces.stax,org.apache.xerces.parsers,org.apache.xerces.jaxp,org.apache.xerces.jaxp.validation,org.apache.xerces.dom,org.netbeans.lib.profiler.server +# +# YourKit support +# in order to use Karaf with YourKit, the org.osgi.framework.bootdelegation property has to contain the com.yourkit.* packages +# and, so, it should look like: +# +# org.osgi.framework.bootdelegation=org.apache.karaf.jaas.boot,org.apache.karaf.jaas.boot.principal,sun.*,com.sun.*,javax.transaction,javax.transaction.*,javax.xml.crypto,javax.xml.crypto.*,org.apache.xerces.jaxp.datatype,org.apache.xerces.stax,org.apache.xerces.parsers,org.apache.xerces.jaxp,org.apache.xerces.jaxp.validation,org.apache.xerces.dom,com.yourkit.* +# + +# +# OSGi Execution Environment +# +org.osgi.framework.executionenvironment=J2SE-1.7,JavaSE-1.7,J2SE-1.6,JavaSE-1.6,J2SE-1.5,JavaSE-1.5,J2SE-1.4,JavaSE-1.4,J2SE-1.3,JavaSE-1.3,J2SE-1.2,,JavaSE-1.2,CDC-1.1/Foundation-1.1,CDC-1.0/Foundation-1.0,J2ME,OSGi/Minimum-1.1,OSGi/Minimum-1.0 + +# +# Set the parent classloader for the bundle to the classloader that loads the Framework (i.e. everything in lib/*.jar) +# +org.osgi.framework.bundle.parent=framework + +# +# Definition of the default bundle start level +# +org.osgi.framework.startlevel.beginning=100 +karaf.startlevel.bundle=80 + +# +# The location of the Karaf shutdown port file used to stop instance +# +karaf.shutdown.port.file=${karaf.data}/port + +# +# The location of the Karaf pid file +# +karaf.pid.file=${karaf.base}/karaf.pid + +# +# Configuration FileMonitor properties +# +felix.fileinstall.enableConfigSave = true +felix.fileinstall.dir = ${karaf.etc} +felix.fileinstall.filter = .*\\.cfg +felix.fileinstall.poll = 1000 +felix.fileinstall.noInitialDelay = true +felix.fileinstall.log.level = 3 +felix.fileinstall.log.default = jul + +# Use cached urls for bundle CodeSource to avoid +# problems with JCE cached informations, see KARAF-3974 +felix.bundlecodesource.usecachedurls = true + +# +# Delay for writing the framework state to disk in equinox +# must be >= 1000 and <= 1800000 +# +eclipse.stateSaveDelayInterval = 1000 + +# +# OBR Repository list +# This property will be modified by the obr:addUrl and obr:removeUrl commands. +# +obr.repository.url = + +# +# Start blueprint bundles synchronously when possible +# +org.apache.aries.blueprint.synchronous=true + +# +# Do not weave all any classes by default +# +org.apache.aries.proxy.weaving.enabled= + +# +# mvn url handler requires config instance configuration +# +org.ops4j.pax.url.mvn.requireConfigAdminConfig=true + +# +# Don't delay the console startup. Set to true if you want the console to start after all other bundles +# +karaf.delay.console=false + +# +# Generated command shutdown +# +karaf.shutdown.command = f4264d98-6a2d-476f-9c4f-e9d0281080b0 + +# +# Bootstap log +# +karaf.bootstrap.log = /dev/stdout diff --git a/karaf/rootfs/etc/confd/templates/org.ops4j.pax.logging.cfg.tmpl b/karaf/rootfs/etc/confd/templates/org.ops4j.pax.logging.cfg.tmpl new file mode 100644 index 00000000..57d980ad --- /dev/null +++ b/karaf/rootfs/etc/confd/templates/org.ops4j.pax.logging.cfg.tmpl @@ -0,0 +1,52 @@ +################################################################################ +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +################################################################################ + +# Root logger +log4j.rootLogger=INFO, out, osgi:* +log4j.throwableRenderer=org.apache.log4j.OsgiThrowableRenderer + +# Avoid extensive logging +log4j.logger.org.apache.aries.spifly.dynamic.bundle=WARN + +# Security audit logger +log4j.logger.org.apache.karaf.jaas.modules.audit=INFO, audit +log4j.additivity.org.apache.karaf.jaas.modules.audit=false + +# Root appender +log4j.appender.out=org.apache.log4j.ConsoleAppender +log4j.appender.out.layout=org.apache.log4j.PatternLayout +log4j.appender.out.layout.ConversionPattern=%d{ISO8601} | %-5.5p | %-16.16t | %-32.32c{1} | %X{bundle.id} - %X{bundle.name} - %X{bundle.version} | %m%n + +# Audit appender +log4j.appender.audit=org.apache.log4j.ConsoleAppender +log4j.appender.audit.layout=org.apache.log4j.PatternLayout +log4j.appender.audit.layout.ConversionPattern=%d{ISO8601} | %-5.5p | %-16.16t | %-32.32c{1} | %X{bundle.id} - %X{bundle.name} - %X{bundle.version} | %m%n + +# Sift appender +log4j.appender.sift=org.apache.log4j.sift.MDCSiftingAppender +log4j.appender.sift.key=bundle.name +log4j.appender.sift.default=karaf +log4j.appender.sift.appender=org.apache.log4j.ConsoleAppender +log4j.appender.sift.appender.layout=org.apache.log4j.PatternLayout +log4j.appender.sift.appender.layout.ConversionPattern=%d{ISO8601} | %-5.5p | %-16.16t | %-32.32c{1} | %m%n + +# help with identification of maven-related problems with pax-url-aether +#log4j.logger.shaded.org.eclipse.aether = TRACE +#log4j.logger.shaded.org.apache.http.headers = DEBUG +#log4j.logger.org.ops4j.pax.url.mvn = TRACE \ No newline at end of file diff --git a/karaf/rootfs/etc/cont-init.d/03-karaf-startup.sh b/karaf/rootfs/etc/cont-init.d/03-karaf-startup.sh index cb575c48..a5c90f91 100755 --- a/karaf/rootfs/etc/cont-init.d/03-karaf-startup.sh +++ b/karaf/rootfs/etc/cont-init.d/03-karaf-startup.sh @@ -1,8 +1,5 @@ #!/usr/bin/with-contenv bash set -e -# On startup if we exit with sigterm the pid file is left behind sometimes. -rm /opt/karaf/instances/instance.properties &> /dev/null || true -# Change log files to redirect to stdout/stderr -ln -sf /dev/stdout /opt/karaf/data/log/karaf.log -chown karaf:karaf /opt/karaf/data/log/karaf.log +# On startup if we exit with sigterm the pid file is left behind sometimes. +rm /opt/karaf/instances/instance.properties &> /dev/null || true \ No newline at end of file diff --git a/nginx/rootfs/etc/cont-init.d/02-ngnix-install.sh b/nginx/rootfs/etc/cont-init.d/02-ngnix-install.sh index b952b50f..aa820314 100755 --- a/nginx/rootfs/etc/cont-init.d/02-ngnix-install.sh +++ b/nginx/rootfs/etc/cont-init.d/02-ngnix-install.sh @@ -2,10 +2,3 @@ set -e mkdir /run/nginx &> /dev/null || true - -# Change log files to redirect to stdout/stderr -ln -sf /dev/stdout /var/log/nginx/access.log -chown nginx:nginx /var/log/nginx/access.log - -ln -sf /dev/stderr /var/log/nginx/error.log -chown nginx:nginx /var/log/nginx/error.log diff --git a/solr/Dockerfile b/solr/Dockerfile index e4527de5..87541462 100644 --- a/solr/Dockerfile +++ b/solr/Dockerfile @@ -18,6 +18,10 @@ FROM ${repository}/java:${tag} EXPOSE 8983 +# Defaults environment variables to be overloaded. +ENV \ + SOLR_LOG_LEVEL=INFO + COPY --from=download /etc/group /etc/group COPY --from=download /etc/passwd /etc/passwd COPY --from=download /etc/shadow /etc/shadow diff --git a/solr/README.md b/solr/README.md index e64cb57a..7de7d512 100644 --- a/solr/README.md +++ b/solr/README.md @@ -17,6 +17,12 @@ Requires `islandora/java` docker image to build. Please refer to the [Java Image README](../java/README.md) for additional information including additional settings, volumes, ports, etc. +## Settings + +| Environment Variable | Confd Key | Default | Description | +| :------------------- | :-------------- | :------ | :----------------------------------------------------------------------------- | +| SOLR_LOG_LEVEL | /solr/log/level | INFO | Log level. Possible Values: OFF, FATAL, ERROR, WARN, INFO, DEBUG, TRACE or ALL | + ## Ports | Port | Description | @@ -31,9 +37,7 @@ additional settings, volumes, ports, etc. ## Logs -| Path | Description | -| :----------------------------- | :------------- | -| /opt/solr/server/logs/solr.log | [Solr Logging] | +- [Solr Logging] [Solr Documentation]: https://lucene.apache.org/solr/guide/7_1/ [Solr Logging]: https://lucene.apache.org/solr/guide/7_1/configuring-logging.html diff --git a/solr/rootfs/etc/confd/conf.d/log4j.properties.toml b/solr/rootfs/etc/confd/conf.d/log4j.properties.toml new file mode 100644 index 00000000..d9984e55 --- /dev/null +++ b/solr/rootfs/etc/confd/conf.d/log4j.properties.toml @@ -0,0 +1,7 @@ +[template] +src = "log4j.properties.tmpl" +dest = "/opt/solr/server/resources/log4j.properties" +uid = 100 +gid = 1000 +mode = "0640" +keys = [ "/" ] diff --git a/solr/rootfs/etc/confd/templates/log4j.properties.tmpl b/solr/rootfs/etc/confd/templates/log4j.properties.tmpl new file mode 100644 index 00000000..ebcb44be --- /dev/null +++ b/solr/rootfs/etc/confd/templates/log4j.properties.tmpl @@ -0,0 +1,19 @@ +# Default Solr log4j config +# rootLogger log level may be programmatically overridden by -Dsolr.log.level +solr.log=${solr.log.dir} +log4j.rootLogger={{ getenv "SOLR_LOG_LEVEL" }}, CONSOLE + +# Console appender will be programmatically disabled when Solr is started with option -Dsolr.log.muteconsole +log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender +log4j.appender.CONSOLE.layout=org.apache.log4j.EnhancedPatternLayout +log4j.appender.CONSOLE.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %-5p (%t) [%X{collection} %X{shard} %X{replica} %X{core}] %c{1.} %m%n + +# Adjust logging levels that should differ from root logger +log4j.logger.org.apache.zookeeper=WARN +log4j.logger.org.apache.hadoop=WARN +log4j.logger.org.eclipse.jetty=WARN +log4j.logger.org.eclipse.jetty.server.Server=INFO +log4j.logger.org.eclipse.jetty.server.ServerConnector=INFO + +# set to INFO to enable infostream log messages +log4j.logger.org.apache.solr.update.LoggingInfoStream=OFF \ No newline at end of file diff --git a/tomcat/Dockerfile b/tomcat/Dockerfile index fc43a24d..539ffb1d 100644 --- a/tomcat/Dockerfile +++ b/tomcat/Dockerfile @@ -31,7 +31,7 @@ ENV \ TOMCAT_CONNECTION_TIMEOUT=20000 \ TOMCAT_CATALINA_OPTS= \ TOMCAT_JAVA_OPTS= \ - TOMCAT_LOG_LEVEL=ALL \ + TOMCAT_LOG_LEVEL=INFO \ TOMCAT_MANAGER_REMOTE_ADDRESS_VALVE=^.*$ COPY --from=download /opt /opt diff --git a/tomcat/README.md b/tomcat/README.md index 6a79db54..f49101d9 100644 --- a/tomcat/README.md +++ b/tomcat/README.md @@ -37,7 +37,7 @@ additional settings, volumes, ports, etc. | TOMCAT_ADMIN_ROLES | /tomcat/admin/roles | manager-gui | Comma separated list of roles the user has | | TOMCAT_CATALINA_OPTS | /tomcat/catalina/opts | | | | TOMCAT_JAVA_OPTS | /tomcat/java/opts | | | -| TOMCAT_LOG_LEVEL | /tomcat/log/level | ALL | Log level. Possible Values: SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST or ALL | +| TOMCAT_LOG_LEVEL | /tomcat/log/level | INFO | Log level. Possible Values: SEVERE, WARNING, INFO, CONFIG, FINE, FINER, FINEST or ALL | | TOMCAT_MANAGER_REMOTE_ADDRESS_VALVE | /tomcat/manager/remote/address/valve | ^.*$ | Allows / blocks access to manager app to addresses which match this regex | Additional users/groups/etc can be defined by adding more environment variables, diff --git a/tomcat/rootfs/etc/confd/templates/server.xml.tmpl b/tomcat/rootfs/etc/confd/templates/server.xml.tmpl index ae6a5f31..bc394fdb 100644 --- a/tomcat/rootfs/etc/confd/templates/server.xml.tmpl +++ b/tomcat/rootfs/etc/confd/templates/server.xml.tmpl @@ -161,9 +161,12 @@ - +