From 2b8d75bb89cc3e4c21588fe37c56a5c599e4dd2a Mon Sep 17 00:00:00 2001
From: mchyzer <mchyzer@isc.upenn.edu>
Date: Thu, 22 Sep 2022 00:34:30 -0400
Subject: [PATCH] 2.6.16

---
 .gitignore                                    |   1 +
 Dockerfile                                    |  35 ++----
 Dockerfile2                                   |  76 +++++++++++
 build.sh                                      |   3 +
 build2.sh                                     |   3 +
 container_files/api/log4j2.xml                | 119 +++++++++---------
 .../containerDockerfileInstall.sh             |  72 ++++++++---
 .../containerDockerfileInstallDos2unix.sh     |   1 +
 .../containerDockerfileInstallGrouper.sh      |   7 ++
 .../containerDockerfileInstallJava.sh         |  28 +++--
 .../containerDockerfileInstallPermissions.sh  |  22 ++--
 .../tier-support/supervisord-tomee.conf       |   1 +
 .../test/testContainer.Dockerfile             |   2 +-
 container_files/usr-local-bin/libraryPrep.sh  |  16 +++
 .../usr-local-bin/librarySetupFiles.sh        |  89 +++++++++++--
 .../usr-local-bin/librarySetupPipe.sh         |   2 +-
 rm.sh                                         |   3 +
 run.sh                                        |  19 +++
 run2.sh                                       |   4 +
 ssh.sh                                        |   3 +
 20 files changed, 379 insertions(+), 127 deletions(-)
 create mode 100644 Dockerfile2
 create mode 100755 build.sh
 create mode 100755 build2.sh
 rename container_files/{ => docker-build-bin}/containerDockerfileInstall.sh (74%)
 rename container_files/{ => docker-build-bin}/containerDockerfileInstallDos2unix.sh (89%)
 rename container_files/{ => docker-build-bin}/containerDockerfileInstallGrouper.sh (86%)
 rename container_files/{ => docker-build-bin}/containerDockerfileInstallJava.sh (54%)
 rename container_files/{ => docker-build-bin}/containerDockerfileInstallPermissions.sh (88%)
 create mode 100755 rm.sh
 create mode 100755 run.sh
 create mode 100755 run2.sh
 create mode 100755 ssh.sh

diff --git a/.gitignore b/.gitignore
index cb7d7046..288333c8 100644
--- a/.gitignore
+++ b/.gitignore
@@ -8,3 +8,4 @@ bin/start.sh
 bin/stop.sh
 bin/test.sh
 /.project
+**/*~
diff --git a/Dockerfile b/Dockerfile
index 10d12527..08306d82 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -5,15 +5,16 @@ LABEL author="tier-packaging@internet2.edu <tier-packaging@internet2.edu>" \
       ImageType="Grouper" \
       ImageName=$imagename \
       ImageOS=centos7
-      
+
 ARG GROUPER_CONTAINER_VERSION
 
-ENV GROUPER_VERSION=2.6.15 \
+ENV GROUPER_VERSION=2.6.16 \
     GROUPER_CONTAINER_VERSION=$GROUPER_CONTAINER_VERSION \
     JAVA_HOME=/usr/lib/jvm/java-1.8.0-amazon-corretto \
     PATH=$PATH:$JAVA_HOME/bin \
     GROUPER_HOME=/opt/grouper/grouperWebapp/WEB-INF
 
+# net-tools curl mlocate strace telnet man vim rsyslog cron httpd mod_ssl cronie
 RUN yum update -y \
     && yum install -y logrotate python3-pip rsync sudo patch supervisor wget tar unzip dos2unix file \
     && pip3 install --upgrade setuptools \
@@ -24,35 +25,20 @@ RUN yum update -y \
 
 # Install Corretto Java JDK
 #Corretto download page: https://docs.aws.amazon.com/corretto/latest/corretto-8-ug/downloads-list.html
+
 ARG CORRETTO_URL_PERM=https://corretto.aws/downloads/latest/amazon-corretto-8-x64-linux-jdk.rpm
 ARG CORRETTO_RPM=amazon-corretto-8-x64-linux-jdk.rpm
 
-# if we are doing layers for caching while developing the container, can call run from here and not from containreDockerfileInstall.sh...
-#COPY container_files/containerDockerfileInstallJava.sh /opt/container_files/
-#COPY container_files/morphString.properties /opt/container_files/
-#COPY container_files/grouper.installer.properties /opt/container_files/
-#COPY container_files/containerDockerfileInstallGrouper.sh /opt/container_files/
-
-#RUN cd /tmp \
-#    && chmod +x /opt/container_files/*.sh \
-#    && /opt/container_files/containerDockerfileInstallDos2unix.sh /opt/container_files \
-#    && /opt/container_files/containerDockerfileInstallJava.sh $CORRETTO_URL_PERM $CORRETTO_RPM $JAVA_HOME $GROUPER_VERSION \
-#    && /opt/container_files/containerDockerfileInstallGrouper.sh $CORRETTO_URL_PERM $CORRETTO_RPM $JAVA_HOME $GROUPER_VERSION 
 
 # real copy command (if not caching), uncomment this and change comments of COPY above to work on install script
 COPY container_files/ /opt/container_files/
 
-#RUN cd /tmp \
-#    && chmod +x /opt/container_files/*.sh \
-#    && /opt/container_files/containerDockerfileInstallDos2unix.sh /opt/container_files \
-#    && /opt/container_files/containerDockerfileInstall.sh $CORRETTO_URL_PERM $CORRETTO_RPM $JAVA_HOME $GROUPER_VERSION
-
 RUN cd /tmp \
-    && chmod +x /opt/container_files/*.sh \
-    && /opt/container_files/containerDockerfileInstallDos2unix.sh /opt/container_files \
-    && /opt/container_files/containerDockerfileInstallJava.sh $CORRETTO_URL_PERM $CORRETTO_RPM $JAVA_HOME $GROUPER_VERSION \
-    && /opt/container_files/containerDockerfileInstallGrouper.sh $CORRETTO_URL_PERM $CORRETTO_RPM $JAVA_HOME $GROUPER_VERSION \
-    && /opt/container_files/containerDockerfileInstall.sh $CORRETTO_URL_PERM $CORRETTO_RPM $JAVA_HOME $GROUPER_VERSION
+    && chmod +x /opt/container_files/docker-build-bin/*.sh \
+    && /opt/container_files/docker-build-bin/containerDockerfileInstallDos2unix.sh /opt/container_files \
+    && /opt/container_files/docker-build-bin/containerDockerfileInstallJava.sh $CORRETTO_URL_PERM $CORRETTO_RPM $JAVA_HOME $GROUPER_VERSION \
+    && /opt/container_files/docker-build-bin/containerDockerfileInstallGrouper.sh $CORRETTO_URL_PERM $CORRETTO_RPM $JAVA_HOME $GROUPER_VERSION \
+    && /opt/container_files/docker-build-bin/containerDockerfileInstall.sh $CORRETTO_URL_PERM $CORRETTO_RPM $JAVA_HOME $GROUPER_VERSION
 
 
 # testing container
@@ -66,6 +52,3 @@ EXPOSE 80 443
 HEALTHCHECK NONE
 
 ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
-## uncomment ping, and comment out other entrypoint to just have a simple runnable container
-#ENTRYPOINT ["ping"]
-#CMD ["google.com"]
\ No newline at end of file
diff --git a/Dockerfile2 b/Dockerfile2
new file mode 100644
index 00000000..17bfeba9
--- /dev/null
+++ b/Dockerfile2
@@ -0,0 +1,76 @@
+FROM centos:centos7
+
+LABEL author="tier-packaging@internet2.edu <tier-packaging@internet2.edu>" \
+      Vendor="TIER" \
+      ImageType="Grouper" \
+      ImageName=$imagename \
+      ImageOS=centos7
+
+ARG GROUPER_CONTAINER_VERSION
+
+ENV GROUPER_VERSION=2.6.16 \
+    GROUPER_CONTAINER_VERSION=$GROUPER_CONTAINER_VERSION \
+    JAVA_HOME=/usr/lib/jvm/java-1.8.0-amazon-corretto \
+    PATH=$PATH:$JAVA_HOME/bin \
+    GROUPER_HOME=/opt/grouper/grouperWebapp/WEB-INF
+
+RUN ln -sf /usr/share/zoneinfo/UTC /etc/localtime \
+    && echo "NETWORKING=yes" > /etc/sysconfig/network
+RUN rm -fr /var/cache/yum/* && yum clean all && yum -y install --setopt=tsflags=nodocs epel-release && yum -y update && \
+    yum -y install net-tools wget curl tar unzip mlocate logrotate strace telnet man vim rsyslog cron httpd mod_ssl dos2unix cronie supervisor && \
+    yum clean all
+
+RUN yum update -y \
+    && yum install -y logrotate python3-pip rsync sudo patch supervisor wget tar unzip dos2unix file \
+    && pip3 install --upgrade setuptools \
+    && yum clean -y all \
+    && groupadd -r tomcat \
+    && useradd -r -m -s /sbin/nologin -g tomcat tomcat \
+    && mkdir -p /opt/container_files
+
+# Install Corretto Java JDK
+#Corretto download page: https://docs.aws.amazon.com/corretto/latest/corretto-8-ug/downloads-list.html
+
+#ARG CORRETTO_URL_PERM=https://corretto.aws/downloads/latest/amazon-corretto-8-x64-linux-jdk.rpm
+#ARG CORRETTO_RPM=amazon-corretto-8-x64-linux-jdk.rpm
+ARG CORRETTO_URL_PERM=https://corretto.aws/downloads/latest/amazon-corretto-8-aarch64-linux-jdk.rpm
+ARG CORRETTO_RPM=amazon-corretto-8-aarch64-linux-jdk.rpm
+
+
+COPY container_files/docker-build-bin /opt/container_files/docker-build-bin/
+COPY container_files/morphString.properties /opt/container_files/
+COPY container_files/grouper.installer.properties /opt/container_files/
+RUN mkdir /opt/container_files/java-corretto
+COPY container_files/java-corretto/corretto-signing-key.pub /opt/container_files/java-corretto
+COPY container_files/tier-support /opt/container_files/tier-support/
+RUN cd /tmp \
+    && chmod +x /opt/container_files/docker-build-bin/*.sh \
+    && /opt/container_files/docker-build-bin/containerDockerfileInstallDos2unix.sh /opt/container_files \
+    && /opt/container_files/docker-build-bin/containerDockerfileInstallJava.sh $CORRETTO_URL_PERM $CORRETTO_RPM $JAVA_HOME $GROUPER_VERSION \
+    && /opt/container_files/docker-build-bin/containerDockerfileInstallGrouper.sh $CORRETTO_URL_PERM $CORRETTO_RPM $JAVA_HOME $GROUPER_VERSION 
+
+
+# real copy command (if not caching), uncomment this and change comments of COPY above to work on install script
+COPY container_files/ /opt/container_files/
+
+RUN cd /tmp \
+    && /opt/container_files/docker-build-bin/containerDockerfileInstallDos2unix.sh /opt/container_files \
+    && /opt/container_files/docker-build-bin/containerDockerfileInstall.sh $CORRETTO_URL_PERM $CORRETTO_RPM $JAVA_HOME $GROUPER_VERSION
+
+
+# testing container
+# see output with  docker build . --tag my:grouper
+# DOCKER_BUILDKIT=0 docker build --progress=plain -t mygrouper .
+# docker run --detach --name mygrouper mygrouper:latest
+# docker exec -it mygrouper bash
+
+WORKDIR /opt/grouper/grouperWebapp/WEB-INF/
+EXPOSE 80 443
+HEALTHCHECK NONE
+
+#ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
+
+# LOCAL start uncomment ping, and comment out other entrypoint to just have a simple runnable container
+ENTRYPOINT ["ping"]
+CMD ["google.com"]
+# LOCAL end
\ No newline at end of file
diff --git a/build.sh b/build.sh
new file mode 100755
index 00000000..6a1b0f46
--- /dev/null
+++ b/build.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+docker build -t my-grouper .
diff --git a/build2.sh b/build2.sh
new file mode 100755
index 00000000..f51bd2f2
--- /dev/null
+++ b/build2.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+docker build -t my-grouper -f Dockerfile2 .
diff --git a/container_files/api/log4j2.xml b/container_files/api/log4j2.xml
index 8f035ce8..93b596aa 100644
--- a/container_files/api/log4j2.xml
+++ b/container_files/api/log4j2.xml
@@ -10,164 +10,167 @@
         <Console name="stderr" target="SYSTEM_ERR">
           <PatternLayout pattern="${grouplogprefix};${env}${usertoken}${layout}"/>
         </Console>
+        __FILESTART__
         <RollingFile name="file_catalina" fileName="/opt/grouper/logs/catalina.out" filePattern="/opt/grouper/logs/catalina.out.%d{yyyy-MM-dd}" >
-            <PatternLayout pattern="${grouplogprefix};catalina.out;${env}${usertoken}${layout}"/>
+            <PatternLayout pattern="${grouplogprefix}catalina.out;${env}${usertoken}${layout}"/>
             <Policies>
                 <TimeBasedTriggeringPolicy interval="1"/>
             </Policies>
             <DefaultRolloverStrategy max="30" />
         </RollingFile>
         <RollingFile name="file_grouper_error" fileName="/opt/grouper/logs/grouper.log" filePattern="/opt/grouper/logs/grouper.log.%d{yyyy-MM-dd}" >
-            <PatternLayout pattern="${grouplogprefix};grouper_error.log;${env}${usertoken}${layout}"/>
+            <PatternLayout pattern="${grouplogprefix}grouper_error.log;${env}${usertoken}${layout}"/>
             <Policies>
                 <TimeBasedTriggeringPolicy interval="1"/>
             </Policies>
             <DefaultRolloverStrategy max="30" />
         </RollingFile>
         <RollingFile name="file_grouper_daemon" fileName="/opt/grouper/logs/grouperDaemon.log" filePattern="/opt/grouper/logs/grouperDaemon.log.%d{yyyy-MM-dd}" >
-            <PatternLayout pattern="${grouplogprefix};grouperDaemon.log;${env}${usertoken}${layout}"/>
+            <PatternLayout pattern="${grouplogprefix}grouperDaemon.log;${env}${usertoken}${layout}"/>
             <Policies>
                 <TimeBasedTriggeringPolicy interval="1"/>
             </Policies>
             <DefaultRolloverStrategy max="30" />
         </RollingFile>
         <RollingFile name="file_grouper_pspng" fileName="/opt/grouper/logs/pspng.log" filePattern="/opt/grouper/logs/pspng.log.%d{yyyy-MM-dd}" >
-            <PatternLayout pattern="${grouplogprefix};pspng.log;${env}${usertoken}${layout}"/>
+            <PatternLayout pattern="${grouplogprefix}pspng.log;${env}${usertoken}${layout}"/>
             <Policies>
                 <TimeBasedTriggeringPolicy interval="1"/>
             </Policies>
             <DefaultRolloverStrategy max="30" />
         </RollingFile>
         <RollingFile name="file_grouper_provisioning" fileName="/opt/grouper/logs/provisioning.log" filePattern="/opt/grouper/logs/provisioning.log.%d{yyyy-MM-dd}" >
-            <PatternLayout pattern="${grouplogprefix};provisioning.log;${env}${usertoken}${layout}"/>
+            <PatternLayout pattern="${grouplogprefix}provisioning.log;${env}${usertoken}${layout}"/>
             <Policies>
                 <TimeBasedTriggeringPolicy interval="1"/>
             </Policies>
             <DefaultRolloverStrategy max="30" />
         </RollingFile>
         <RollingFile name="file_grouper_ws" fileName="/opt/grouper/logs/grouper_ws.log" filePattern="/opt/grouper/logs/grouper_ws.log.%d{yyyy-MM-dd}" >
-            <PatternLayout pattern="${grouplogprefix};grouper_ws.log;${env}${usertoken}${layout}"/>
+            <PatternLayout pattern="${grouplogprefix}grouper_ws.log;${env}${usertoken}${layout}"/>
             <Policies>
                 <TimeBasedTriggeringPolicy interval="1"/>
             </Policies>
             <DefaultRolloverStrategy max="30" />
         </RollingFile>
         <RollingFile name="file_grouper_ws_longRunning" fileName="/opt/grouper/logs/grouper_ws_longRunning.log" filePattern="/opt/grouper/logs/grouper_ws_longRunning.log.%d{yyyy-MM-dd}" >
-            <PatternLayout pattern="${grouplogprefix};grouper_ws_longRunning.log;${env}${usertoken}${layout}"/>
+            <PatternLayout pattern="${grouplogprefix}grouper_ws_longRunning.log;${env}${usertoken}${layout}"/>
             <Policies>
                 <TimeBasedTriggeringPolicy interval="1"/>
             </Policies>
             <DefaultRolloverStrategy max="30" />
         </RollingFile>
+        __FILEEND__
+        __LOGPIPESTART__
         <File name="logpipe_catalina" fileName="/tmp/logpipe">
-            <PatternLayout pattern="tomee;catalina.out;${sys:ENV}${sys:USERTOKEN}${layout}"/>
+            <PatternLayout pattern="${grouplogprefix}tomee;catalina.out;${env}${usertoken}${layout}"/>
         </File>
         <File name="logpipe_grouper_error" fileName="/tmp/logpipe">
-            <PatternLayout pattern="${grouplogprefix};grouper_error.log;${env}${usertoken}${layout}"/>
+            <PatternLayout pattern="${grouplogprefix}grouper_error.log;${env}${usertoken}${layout}"/>
         </File>
         <File name="logpipe_grouper_daemon" fileName="/tmp/logpipe">
-            <PatternLayout pattern="${grouplogprefix};grouperDaemon.log;${env}${usertoken}${layout}"/>
+            <PatternLayout pattern="${grouplogprefix}grouperDaemon.log;${env}${usertoken}${layout}"/>
         </File>
         <File name="logpipe_grouper_pspng" fileName="/tmp/logpipe">
-            <PatternLayout pattern="${grouplogprefix};pspng.log;${env}${usertoken}${layout}"/>
+            <PatternLayout pattern="${grouplogprefix}pspng.log;${env}${usertoken}${layout}"/>
         </File>
         <File name="logpipe_grouper_provisioning" fileName="/tmp/logpipe">
-            <PatternLayout pattern="${grouplogprefix};provisioning.log;${env}${usertoken}${layout}"/>
+            <PatternLayout pattern="${grouplogprefix}provisioning.log;${env}${usertoken}${layout}"/>
         </File>
         <File name="logpipe_grouper_ws" fileName="/tmp/logpipe">
-            <PatternLayout pattern="${grouplogprefix};grouper_ws.log;${env}${usertoken}${layout}"/>
+            <PatternLayout pattern="${grouplogprefix}grouper_ws.log;${env}${usertoken}${layout}"/>
         </File>
         <File name="logpipe_grouper_ws_longRunning" fileName="/tmp/logpipe">
-            <PatternLayout pattern="${grouplogprefix};grouper_ws_longRunning.log;${env}${usertoken}${layout}"/>
+            <PatternLayout pattern="${grouplogprefix}grouper_ws_longRunning.log;${env}${usertoken}${layout}"/>
         </File>
-        
+        __LOGPIPEEND__
          <!--MOREAPPENDERS-->
  
     </Appenders>
     <Loggers>
         <Root level="error">
-            <AppenderRef ref="logpipe_grouper_error"/>
-            <AppenderRef ref="file_grouper_error"/>
+            __LOGPIPESTART__<AppenderRef ref="logpipe_grouper_error"/>__LOGPIPEEND__
+            __FILESTART__<AppenderRef ref="file_grouper_error"/>__FILEEND__
         </Root>
         <Logger name="org.apache.catalina" level="info" additivity="false">
-            <AppenderRef ref="logpipe_catalina" />
-            <AppenderRef ref="file_catalina"/>
+            __LOGPIPESTART__<AppenderRef ref="logpipe_catalina" />__LOGPIPEEND__
+            __FILESTART__<AppenderRef ref="file_catalina"/>__FILEEND__
         </Logger>
-        <Logger name="edu.internet2.middleware" level="warn" additivity="false">
-            <AppenderRef ref="logpipe_grouper_error"/>
-            <AppenderRef ref="file_grouper_error"/>
+        <Logger name="edu.internet2.middleware" level="info" additivity="false">
+            __LOGPIPESTART__<AppenderRef ref="logpipe_grouper_error"/>__LOGPIPEEND__
+            __FILESTART__<AppenderRef ref="file_grouper_error"/>__FILEEND__
         </Logger>
         <Logger name="edu.internet2.middleware.grouper.app.loader.GrouperLoaderLog" level="debug" additivity="false">
-            <AppenderRef ref="logpipe_grouper_daemon"/>
-            <AppenderRef ref="file_grouper_daemon"/>
+            __LOGPIPESTART__<AppenderRef ref="logpipe_grouper_daemon"/>__LOGPIPEEND__
+            __FILESTART__<AppenderRef ref="file_grouper_daemon"/>__FILEEND__
         </Logger>
         <Logger name="edu.internet2.middleware.grouper.pspng" level="warn" additivity="false">
-            <AppenderRef ref="logpipe_grouper_pspng"/>
-            <AppenderRef ref="file_grouper_pspng"/>
+            __LOGPIPESTART__<AppenderRef ref="logpipe_grouper_pspng"/>__LOGPIPEEND__
+            __FILESTART__<AppenderRef ref="file_grouper_pspng"/>__FILEEND__
         </Logger>
         <Logger name="edu.internet2.middleware.grouper.app.provisioning.GrouperProvisioningObjectLog" level="debug" additivity="false">
-            <AppenderRef ref="logpipe_grouper_provisioning"/>
-            <AppenderRef ref="file_grouper_provisioning"/>
+            __LOGPIPESTART__<AppenderRef ref="logpipe_grouper_provisioning"/>__LOGPIPEEND__
+            __FILESTART__<AppenderRef ref="file_grouper_provisioning"/>__FILEEND__
         </Logger>
         <Logger name="edu.internet2.middleware.grouper.app.syncToGrouper.SyncToGrouperFromSqlDaemon" level="debug" additivity="false">
-            <AppenderRef ref="logpipe_grouper_error"/>
-            <AppenderRef ref="file_grouper_error"/>
+            __LOGPIPESTART__<AppenderRef ref="logpipe_grouper_error"/>__LOGPIPEEND__
+            __FILESTART__<AppenderRef ref="file_grouper_error"/>__FILEEND__
         </Logger>
         <Logger name="edu.internet2.middleware.grouper.app.provisioning.GrouperProvisioningLogCommands" level="debug" additivity="false">
-            <AppenderRef ref="logpipe_grouper_error"/>
-            <AppenderRef ref="file_grouper_error"/>
+            __LOGPIPESTART__<AppenderRef ref="logpipe_grouper_error"/>__LOGPIPEEND__
+            __FILESTART__<AppenderRef ref="file_grouper_error"/>__FILEEND__
         </Logger>
         <Logger name="edu.internet2.middleware.grouper.stem.StemViewPrivilegeEsbListener" level="debug" additivity="false">
-            <AppenderRef ref="logpipe_grouper_error"/>
-            <AppenderRef ref="file_grouper_error"/>
+            __LOGPIPESTART__<AppenderRef ref="logpipe_grouper_error"/>__LOGPIPEEND__
+            __FILESTART__<AppenderRef ref="file_grouper_error"/>__FILEEND__
         </Logger>
         <Logger name="edu.internet2.middleware.grouper.stem.StemViewPrivilegeFullDaemonLogic" level="debug" additivity="false">
-            <AppenderRef ref="logpipe_grouper_error"/>
-            <AppenderRef ref="file_grouper_error"/>
+            __LOGPIPESTART__<AppenderRef ref="logpipe_grouper_error"/>__LOGPIPEEND__
+            __FILESTART__<AppenderRef ref="file_grouper_error"/>__FILEEND__
         </Logger>
         <Logger name="org.apache.tools.ant" level="warn" additivity="false">
-            <AppenderRef ref="logpipe_grouper_error"/>
-            <AppenderRef ref="file_grouper_error"/>
+            __LOGPIPESTART__<AppenderRef ref="logpipe_grouper_error"/>__LOGPIPEEND__
+            __FILESTART__<AppenderRef ref="file_grouper_error"/>__FILEEND__
         </Logger>
         <Logger name="edu.internet2.middleware.grouper.util.PerformanceLogger" level="info" additivity="false">
-            <AppenderRef ref="logpipe_grouper_error"/>
-            <AppenderRef ref="file_grouper_error"/>
+            __LOGPIPESTART__<AppenderRef ref="logpipe_grouper_error"/>__LOGPIPEEND__
+            __FILESTART__<AppenderRef ref="file_grouper_error"/>__FILEEND__
         </Logger>
         <Logger name="edu.internet2.middleware.grouper.ws.util.GrouperWsLog" level="off" additivity="false">
-            <AppenderRef ref="logpipe_grouper_ws"/>
-            <AppenderRef ref="file_grouper_ws"/>
+            __LOGPIPESTART__<AppenderRef ref="logpipe_grouper_ws"/>__LOGPIPEEND__
+            __FILESTART__<AppenderRef ref="file_grouper_ws"/>__FILEEND__
         </Logger>
         <Logger name="edu.internet2.middleware.grouper.ws.util.GrouperWsLongRunningLog" level="off" additivity="false">
-            <AppenderRef ref="logpipe_grouper_ws_longRunning"/>
-            <AppenderRef ref="file_grouper_ws_longRunning"/>
+            __LOGPIPESTART__<AppenderRef ref="logpipe_grouper_ws_longRunning"/>__LOGPIPEEND__
+            __FILESTART__<AppenderRef ref="file_grouper_ws_longRunning"/>__FILEEND__
         </Logger>
         <Logger name="edu.internet2.middleware.grouper.ui.customUi.CustomUiEngine" level="debug" additivity="false">
-            <AppenderRef ref="logpipe_grouper_error"/>
-            <AppenderRef ref="file_grouper_error"/>
+            __LOGPIPESTART__<AppenderRef ref="logpipe_grouper_error"/>__LOGPIPEEND__
+            __FILESTART__<AppenderRef ref="file_grouper_error"/>__FILEEND__
         </Logger>
         <Logger name="edu.upenn.isc.pennGrouper.o365" level="debug" additivity="false">
-            <AppenderRef ref="logpipe_grouper_error"/>
-            <AppenderRef ref="file_grouper_error"/>
+            __LOGPIPESTART__<AppenderRef ref="logpipe_grouper_error"/>__LOGPIPEEND__
+            __FILESTART__<AppenderRef ref="file_grouper_error"/>__FILEEND__
         </Logger>
         <Logger name="edu.internet2.middleware.grouper.app.remedy.GrouperRemedyLog" level="debug" additivity="false">
-            <AppenderRef ref="logpipe_grouper_provisioning"/>
-            <AppenderRef ref="file_grouper_provisioning"/>
+            __LOGPIPESTART__<AppenderRef ref="logpipe_grouper_provisioning"/>__LOGPIPEEND__
+            __FILESTART__<AppenderRef ref="file_grouper_provisioning"/>__FILEEND__
         </Logger>
         <Logger name="edu.internet2.middleware.grouper.app.remedy.digitalMarketplace.GrouperDigitalMarketplaceLog" level="debug" additivity="false">
-            <AppenderRef ref="logpipe_grouper_provisioning"/>
-            <AppenderRef ref="file_grouper_provisioning"/>
+            __LOGPIPESTART__<AppenderRef ref="logpipe_grouper_provisioning"/>__LOGPIPEEND__
+            __FILESTART__<AppenderRef ref="file_grouper_provisioning"/>__FILEEND__
         </Logger>
         <Logger name="edu.internet2.middleware.grouperBox.GrouperBoxLog" level="debug" additivity="false">
-            <AppenderRef ref="logpipe_grouper_provisioning"/>
-            <AppenderRef ref="file_grouper_provisioning"/>
+            __LOGPIPESTART__<AppenderRef ref="logpipe_grouper_provisioning"/>__LOGPIPEEND__
+            __FILESTART__<AppenderRef ref="file_grouper_provisioning"/>__FILEEND__
         </Logger>
         <Logger name="edu.internet2.middleware.grouperClient.jdbc.tableSync.GcTableSyncLog" level="debug" additivity="false">
-            <AppenderRef ref="logpipe_grouper_error"/>
-            <AppenderRef ref="file_grouper_error"/>
+            __LOGPIPESTART__<AppenderRef ref="logpipe_grouper_error"/>__LOGPIPEEND__
+            __FILESTART__<AppenderRef ref="file_grouper_error"/>__FILEEND__
         </Logger>
         <Logger name="edu.internet2.middleware.grouper.app.zoom" level="debug" additivity="false">
-            <AppenderRef ref="logpipe_grouper_provisioning"/>
-            <AppenderRef ref="file_grouper_provisioning"/>
+            __LOGPIPESTART__<AppenderRef ref="logpipe_grouper_provisioning"/>__LOGPIPEEND__
+            __FILESTART__<AppenderRef ref="file_grouper_provisioning"/>__FILEEND__
         </Logger>
 
         <!--MORELOGGERS-->
diff --git a/container_files/containerDockerfileInstall.sh b/container_files/docker-build-bin/containerDockerfileInstall.sh
similarity index 74%
rename from container_files/containerDockerfileInstall.sh
rename to container_files/docker-build-bin/containerDockerfileInstall.sh
index 382a22be..3482397e 100644
--- a/container_files/containerDockerfileInstall.sh
+++ b/container_files/docker-build-bin/containerDockerfileInstall.sh
@@ -8,180 +8,224 @@
 chmod 775 $(find /opt/container_files -type d)
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) chmod 775 \$(find /opt/container_files -type d), result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 chmod 664 $(find /opt/container_files -type f)
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) chmod 664 \$(find /opt/container_files -type f), result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 chmod 775 $(find /opt/container_files -type f -name "*.sh")
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) chmod 775 \$(find /opt/container_files -type f -name \"*.sh\"), result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 mkdir -p /opt/grouper/grouperWebapp/
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) mkdir -p /opt/grouper/grouperWebapp/, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 mkdir -p /opt/tomee/
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) mkdir -p /opt/tomee/, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 mv /opt/grouper/$4/grouperInstaller.jar /opt/grouper/
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) mv /opt/grouper/$4/grouperInstaller.jar /opt/grouper/, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 mv /opt/grouper/$4/container/tomee/* /opt/tomee/
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) mv /opt/grouper/$4/container/tomee/* /opt/tomee/, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 mkdir -p /opt/tomee/temp
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) mkdir -p /opt/tomee/temp, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 mkdir -p /opt/tomee/work
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) mkdir -p /opt/tomee/work, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 mv /opt/grouper/$4/container/webapp/* /opt/grouper/grouperWebapp/
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) mv /opt/grouper/$4/container/webapp/* /opt/grouper/grouperWebapp/, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 rm -rf /opt/grouper/$4
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) rm -rf /opt/grouper/$4, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 rm -rf /opt/tomee/webapps/docs/ /opt/tomee/webapps/host-manager/ /opt/tomee/webapps/manager/ /opt/tomee/logs/* /opt/tomee/temp/* /opt/tomee/work/* /opt/tomee/conf/logging.properties
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) rm -rf /opt/tomee/webapps/docs/ /opt/tomee/webapps/host-manager/ /opt/tomee/webapps/manager/ /opt/tomee/logs/* /opt/tomee/temp/* /opt/tomee/work/*\ /opt/tomee/conf/logging.properties, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 cp -R /opt/container_files/api/* /opt/grouper/grouperWebapp/WEB-INF/classes/
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) cp -R /opt/container_files/api/* /opt/grouper/grouperWebapp/WEB-INF/classes/, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 cp -R /opt/container_files/tomee/* /opt/tomee/
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) cp -R /opt/container_files/tomee/* /opt/tomee/, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 mkdir -p /opt/tomee/conf/Catalina/localhost/
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) mkdir -p /opt/tomee/conf/Catalina/localhost/, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 ln -sf /usr/share/zoneinfo/UTC /etc/localtime
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) ln -sf /usr/share/zoneinfo/UTC /etc/localtime, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 rm -f /etc/alternatives/java
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) rm -f /etc/alternatives/java, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 ln -s $3/bin/java /etc/alternatives/java
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) ln -s $3/bin/java /etc/alternatives/java, result: $returnCode"
-
-mv /opt/container_files/tier-support /opt
-returnCode=$?
-echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) mv /opt/container_files/tier-support /opt, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 mv /opt/container_files/usr-local-bin/* /usr/local/bin/
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) mv /opt/container_files/usr-local-bin/* /usr/local/bin/, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 mv /opt/container_files/httpd/* /etc/httpd/conf.d/
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) mv /opt/container_files/httpd/* /etc/httpd/conf.d/, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 mv /opt/container_files/shibboleth/* /etc/shibboleth/
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) mv /opt/container_files/shibboleth/* /etc/shibboleth/, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 cp /dev/null /etc/httpd/conf.d/ssl.conf
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) cp /dev/null /etc/httpd/conf.d/ssl.conf, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 rm -f /opt/tomee/bin/log4j-*
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) rm -f /opt/tomee/bin/log4j-*, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 mv /opt/tier-support/log4j_fix/tomeeBin/log4j-* /opt/tomee/bin/
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) mv /opt/tier-support/log4j_fix/tomeeBin/log4j-* /opt/tomee/bin/, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 rm -f /opt/tomee/lib/slf4j-*
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) rm -f /opt/tomee/lib/slf4j-*, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 mv /opt/tier-support/log4j_fix/tomeeLib/slf4j-* /opt/tomee/lib/
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) mv /opt/tier-support/log4j_fix/tomeeLib/slf4j-* /opt/tomee/lib/, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 rm -f /opt/grouper/grouperWebapp/WEB-INF/lib/slf4j-api-*
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) rm -f /opt/grouper/grouperWebapp/WEB-INF/lib/slf4j-api-*, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 mv /opt/tier-support/log4j_fix/webinfLib/* /opt/grouper/grouperWebapp/WEB-INF/lib/
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) mv /opt/tier-support/log4j_fix/webinfLib/* /opt/grouper/grouperWebapp/WEB-INF/lib/, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 touch /opt/grouper/grouperEnv.sh
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) touch /opt/grouper/grouperEnv.sh, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 mkdir -p /opt/tomee/work/Catalina/localhost/
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) mkdir -p /opt/tomee/work/Catalina/localhost/, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 mkdir -p /opt/grouper/certs/client
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) mkdir -p /opt/grouper/certs/client, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 mkdir -p /opt/grouper/certs/anchors
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) mkdir -p /opt/grouper/certs/anchors, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 mv /opt/container_files/certs/* /opt/grouper/certs/
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) mv /opt/container_files/certs/* /opt/grouper/certs/, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 echo 'umask 002' >> /home/tomcat/.bashrc
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) echo 'umask 002' >> /home/tomcat/.bashrc, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 mkdir -p /opt/tier-support/originalFiles
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) mkdir -p /opt/tier-support/originalFiles, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 cp /opt/grouper/grouperWebapp/WEB-INF/classes/log4j2.xml /opt/tier-support/originalFiles 2>/dev/null
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) cp /opt/grouper/grouperWebapp/WEB-INF/classes/log4j2.xml /opt/tier-support/originalFiles 2>/dev/null, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 cp /etc/httpd/conf/httpd.conf /opt/tier-support/originalFiles 2>/dev/null
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) cp /etc/httpd/conf/httpd.conf /opt/tier-support/originalFiles 2>/dev/null, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 cp /etc/httpd/conf.d/ssl-enabled.conf /opt/tier-support/originalFiles 2>/dev/null
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) cp /etc/httpd/conf.d/ssl-enabled.conf /opt/tier-support/originalFiles 2>/dev/null, result: $returnCode"
-
-cp /etc/httpd/conf.d/httpd-shib.conf /opt/tier-support/originalFiles 2>/dev/null
-returnCode=$?
-echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) cp /etc/httpd/conf.d/httpd-shib.conf /opt/tier-support/originalFiles 2>/dev/null, result: $returnCode"
-
-cp /etc/httpd/conf.d/shib.conf /opt/tier-support/originalFiles 2>/dev/null
-returnCode=$?
-echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) cp /etc/httpd/conf.d/shib.conf /opt/tier-support/originalFiles 2>/dev/null, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
+
+if [ -f /etc/httpd/conf.d/httpd-shib.conf ]; then
+  cp /etc/httpd/conf.d/httpd-shib.conf /opt/tier-support/originalFiles 2>/dev/null
+  returnCode=$?
+  echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) cp /etc/httpd/conf.d/httpd-shib.conf /opt/tier-support/originalFiles 2>/dev/null, result: $returnCode"
+  if [ $returnCode != 0 ]; then exit $returnCode; fi
+fi
+
+if [ -f /etc/httpd/conf.d/shib.conf ]; then
+  cp /etc/httpd/conf.d/shib.conf /opt/tier-support/originalFiles 2>/dev/null
+  returnCode=$?
+  echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) cp /etc/httpd/conf.d/shib.conf /opt/tier-support/originalFiles 2>/dev/null, result: $returnCode"
+  if [ $returnCode != 0 ]; then exit $returnCode; fi
+fi
 
 cp /opt/tomee/conf/server.xml /opt/tier-support/originalFiles 2>/dev/null
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) cp /opt/tomee/conf/server.xml /opt/tier-support/originalFiles 2>/dev/null, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 cp /opt/tomee/conf/Catalina/localhost/grouper.xml /opt/tier-support/originalFiles 2>/dev/null
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) cp /opt/tomee/conf/Catalina/localhost/grouper.xml /opt/tier-support/originalFiles 2>/dev/null, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 cp /opt/grouper/grouperWebapp/WEB-INF/web.xml /opt/tier-support/originalFiles 2>/dev/null
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) cp /opt/grouper/grouperWebapp/WEB-INF/web.xml /opt/tier-support/originalFiles 2>/dev/null, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
-/opt/container_files/containerDockerfileInstallPermissions.sh tomcat root
+/opt/container_files/docker-build-bin/containerDockerfileInstallPermissions.sh tomcat root
 returnCode=$?
-echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) /opt/container_files/containerDockerfileInstallPermissions.sh tomcat root, result: $returnCode"
+echo "grouperDockerfile; INFO: (containerDockerfileInstall.sh) /opt/container_files/docker-build-bin/containerDockerfileInstallPermissions.sh tomcat root, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
diff --git a/container_files/containerDockerfileInstallDos2unix.sh b/container_files/docker-build-bin/containerDockerfileInstallDos2unix.sh
similarity index 89%
rename from container_files/containerDockerfileInstallDos2unix.sh
rename to container_files/docker-build-bin/containerDockerfileInstallDos2unix.sh
index 6d42356a..9c26c3c3 100644
--- a/container_files/containerDockerfileInstallDos2unix.sh
+++ b/container_files/docker-build-bin/containerDockerfileInstallDos2unix.sh
@@ -5,4 +5,5 @@ if [ $lines -ne 0 ]; then
   dos2unix $(find $1 -type f -name "*.sh" -exec file "{}" ";"   | grep CRLF | cut -d: -f1)
   returnCode=$?
   echo "grouperDockerfile; INFO: (containerDockerfileInstallDos2unix.sh) dos2unix \$(find $1 -type f -name \"*.sh\" -exec file \"{}\" \";\"   | grep CRLF | cut -d: -f1), result: $returnCode"
+  if [ $returnCode != 0 ]; then exit $returnCode; fi
 fi
diff --git a/container_files/containerDockerfileInstallGrouper.sh b/container_files/docker-build-bin/containerDockerfileInstallGrouper.sh
similarity index 86%
rename from container_files/containerDockerfileInstallGrouper.sh
rename to container_files/docker-build-bin/containerDockerfileInstallGrouper.sh
index 58161654..5e5614ce 100644
--- a/container_files/containerDockerfileInstallGrouper.sh
+++ b/container_files/docker-build-bin/containerDockerfileInstallGrouper.sh
@@ -8,29 +8,36 @@
 mv /opt/container_files/tier-support /opt
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstallGrouper.sh) mv /opt/container_files/tier-support /opt, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 mkdir -p /opt/grouper/$GROUPER_VERSION
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstallGrouper.sh) , result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 wget -q -O /opt/grouper/$GROUPER_VERSION/grouperInstaller.jar https://oss.sonatype.org/service/local/repositories/releases/content/edu/internet2/middleware/grouper/grouper-installer/$GROUPER_VERSION/grouper-installer-$GROUPER_VERSION.jar
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstallGrouper.sh) wget -q -O /opt/grouper/$GROUPER_VERSION/grouperInstaller.jar https://oss.sonatype.org/service/local/repositories/releases/content/edu/internet2/middleware/grouper/grouper-installer/$GROUPER_VERSION/grouper-installer-$GROUPER_VERSION.jar, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 mv /opt/container_files/grouper.installer.properties /opt/grouper/$GROUPER_VERSION
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstallGrouper.sh) mv /opt/container_files/grouper.installer.properties /opt/grouper/$GROUPER_VERSION, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 # Temporary morphString file used for building, not used in production
 mv /opt/container_files/morphString.properties /opt/grouper/$GROUPER_VERSION
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstallGrouper.sh) mv /opt/container_files/morphString.properties /opt/grouper/$GROUPER_VERSION, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 cd /opt/grouper/$GROUPER_VERSION/
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstallGrouper.sh) cd /opt/grouper/$GROUPER_VERSION/, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 $JAVA_HOME/bin/java -cp :grouperInstaller.jar edu.internet2.middleware.grouperInstaller.GrouperInstaller
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstallGrouper.sh) $JAVA_HOME/bin/java -cp :grouperInstaller.jar edu.internet2.middleware.grouperInstaller.GrouperInstaller, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
diff --git a/container_files/containerDockerfileInstallJava.sh b/container_files/docker-build-bin/containerDockerfileInstallJava.sh
similarity index 54%
rename from container_files/containerDockerfileInstallJava.sh
rename to container_files/docker-build-bin/containerDockerfileInstallJava.sh
index f8ab88f7..d578be9b 100644
--- a/container_files/containerDockerfileInstallJava.sh
+++ b/container_files/docker-build-bin/containerDockerfileInstallJava.sh
@@ -1,27 +1,37 @@
 #!/bin/bash
 
 # $1 ARG CORRETTO_URL_PERM=https://corretto.aws/downloads/latest/amazon-corretto-8-x64-linux-jdk.rpm
+# $1 ARG CORRETTO_URL_PERM=https://corretto.aws/downloads/latest/amazon-corretto-8-aarch64-linux-jdk.rpm
 # $2 ARG CORRETTO_RPM=amazon-corretto-8-x64-linux-jdk.rpm
 # $3 ARG JAVA_HOME=/usr/lib/jvm/java-1.8.0-amazon-corretto
 # $4 ARG GROUPER_VERSION=2.6.14
 
-curl -O -L $1
+CORRETTO_URL_PERM=$1
+CORRETTO_RPM=$2
+JAVA_HOME=$3
+GROUPER_VERSION=$4
+
+curl -O -L $CORRETTO_URL_PERM
 returnCode=$?
-echo "grouperDockerfile; INFO: (containerDockerfileInstallJava.sh) curl -O -L $1, result: $returnCode"
+echo "grouperDockerfile; INFO: (containerDockerfileInstallJava.sh) curl -O -L $CORRETTO_URL_PERM, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 rpm --import /opt/container_files/java-corretto/corretto-signing-key.pub
 returnCode=$?
 echo "grouperDockerfile; INFO: (containerDockerfileInstallJava.sh) rpm --import /opt/container_files/java-corretto/corretto-signing-key.pub corretto-signing-key.pub, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
-rpm -K $2
+rpm -K $CORRETTO_RPM
 returnCode=$?
-echo "grouperDockerfile; INFO: (containerDockerfileInstallJava.sh) rpm -K $2, result: $returnCode"
+echo "grouperDockerfile; INFO: (containerDockerfileInstallJava.sh) rpm -K $CORRETTO_RPM, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
-rpm -i $2
+rpm -i $CORRETTO_RPM
 returnCode=$?
-echo "grouperDockerfile; INFO: (containerDockerfileInstallJava.sh) rpm -i $2, result: $returnCode"
+echo "grouperDockerfile; INFO: (containerDockerfileInstallJava.sh) rpm -i $CORRETTO_RPM, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
-rm -r $2
+rm -r $CORRETTO_RPM
 returnCode=$?
-echo "grouperDockerfile; INFO: (containerDockerfileInstallJava.sh) rm -r $2, result: $returnCode"
-
+echo "grouperDockerfile; INFO: (containerDockerfileInstallJava.sh) rm -r $CORRETTO_RPM, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
diff --git a/container_files/containerDockerfileInstallPermissions.sh b/container_files/docker-build-bin/containerDockerfileInstallPermissions.sh
similarity index 88%
rename from container_files/containerDockerfileInstallPermissions.sh
rename to container_files/docker-build-bin/containerDockerfileInstallPermissions.sh
index 9c6d8105..00fbb954 100644
--- a/container_files/containerDockerfileInstallPermissions.sh
+++ b/container_files/docker-build-bin/containerDockerfileInstallPermissions.sh
@@ -1,7 +1,7 @@
 #!/bin/bash
 
 if [ $# -lt 2 ]; then
-    echo 'pass in user and group, e.g. /opt/container_files/containerDockerfileInstallPermissions.sh tomcat root'
+    echo 'pass in user and group, e.g. /opt/container_files/docker-build-bin/containerDockerfileInstallPermissions.sh tomcat root'
     exit 1
 fi
 
@@ -13,6 +13,7 @@ if [ $lines -ne 0 ]; then
   chown $user:$group $(find /opt/container_files/ /opt/grouper/ /opt/tier/ /opt/tier-support/ /opt/tomee/ /etc/httpd/conf/ /home/tomcat/ /usr/local/bin /etc/httpd/conf.d/ /usr/lib/jvm/java/jre/lib/security/cacerts ! -user $user -print)
   returnCode=$?
   echo "grouperDockerfile; INFO: (containerDockerfileInstallPermissions.sh) chown $user:$group \$(find /opt/container_files/ /opt/grouper/ /opt/tier/ /opt/tier-support/ /opt/tomee/ /etc/httpd/conf/ /home/tomcat/ /usr/local/bin /etc/httpd/conf.d/ /usr/lib/jvm/java/jre/lib/security/cacerts ! -user $user -print), result: $returnCode"
+  if [ $returnCode != 0 ]; then exit $returnCode; fi
 fi
 
 lines=$(find /opt/container_files/ /opt/grouper/ /opt/tier/ /opt/tier-support/ /opt/tomee/ /etc/httpd/conf/ /home/tomcat/ /usr/local/bin /etc/httpd/conf.d/ /usr/lib/jvm/java/jre/lib/security/cacerts ! -group $group -print | wc -l)
@@ -20,6 +21,7 @@ if [ $lines -ne 0 ]; then
   chown $user:$group $(find /opt/container_files/ /opt/grouper/ /opt/tier/ /opt/tier-support/ /opt/tomee/ /etc/httpd/conf/ /home/tomcat/ /usr/local/bin /etc/httpd/conf.d/ /usr/lib/jvm/java/jre/lib/security/cacerts ! -group $group -print)
   returnCode=$?
   echo "grouperDockerfile; INFO: (containerDockerfileInstallPermissions.sh) chown $user:$group \$(find /opt/container_files/ /opt/grouper/ /opt/tier/ /opt/tier-support/ /opt/tomee/ /etc/httpd/conf/ /home/tomcat/ /usr/local/bin /etc/httpd/conf.d/ /usr/lib/jvm/java/jre/lib/security/cacerts ! -group $group -print), result: $returnCode"
+  if [ $returnCode != 0 ]; then exit $returnCode; fi
 fi
 
 lines=$(find /opt/container_files/ /opt/grouper/ /opt/tier/ /opt/tier-support/ /opt/tomee/ /etc/httpd/conf/ /home/tomcat/ /usr/local/bin /etc/httpd/conf.d/ -type d ! -perm -g+rws | wc -l)
@@ -27,6 +29,7 @@ if [ $lines -ne 0 ]; then
   chmod g+rws $(find /opt/container_files/ /opt/grouper/ /opt/tier/ /opt/tier-support/ /opt/tomee/ /etc/httpd/conf/ /home/tomcat/ /usr/local/bin /etc/httpd/conf.d/ -type d ! -perm -g+rws)
   returnCode=$?
   echo "grouperDockerfile; INFO: (containerDockerfileInstallPermissions.sh) chmod g+rws \$(find /opt/container_files/ /opt/grouper/ /opt/tier/ /opt/tier-support/ /opt/tomee/ /etc/httpd/conf/ /home/tomcat/ /usr/local/bin /etc/httpd/conf.d/ -type d ! -perm -g+rws ), result: $returnCode"
+  if [ $returnCode != 0 ]; then exit $returnCode; fi
 fi
 
 lines=$(find /opt/container_files/ /opt/grouper/ /opt/tier/ /opt/tier-support/ /opt/tomee/ /etc/httpd/conf/ /home/tomcat/ /usr/local/bin /etc/httpd/conf.d/ /usr/lib/jvm/java/jre/lib/security/cacerts -type f ! -perm -g+rw | wc -l)
@@ -34,6 +37,7 @@ if [ $lines -ne 0 ]; then
   chmod g+rw $(find /opt/container_files/ /opt/grouper/ /opt/tier/ /opt/tier-support/ /opt/tomee/ /etc/httpd/conf/ /home/tomcat/ /usr/local/bin /etc/httpd/conf.d/ /usr/lib/jvm/java/jre/lib/security/cacerts -type f ! -perm -g+rw)
   returnCode=$?
   echo "grouperDockerfile; INFO: (containerDockerfileInstallPermissions.sh) chmod g+rw \$(find /opt/container_files/ /opt/grouper/ /opt/tier/ /opt/tier-support/ /opt/tomee/ /etc/httpd/conf/ /home/tomcat/ /usr/local/bin /etc/httpd/conf.d/ /usr/lib/jvm/java/jre/lib/security/cacerts -type f ! -perm -g+rw ), result: $returnCode"
+  if [ $returnCode != 0 ]; then exit $returnCode; fi
 fi
 
 lines=$(find /opt/container_files/ /opt/grouper/ /opt/tier/ /opt/tier-support/ /opt/tomee/ /etc/httpd/conf/ /home/tomcat/ /usr/local/bin /etc/httpd/conf.d/ /usr/lib/jvm/java/jre/lib/security/cacerts -perm -o+w | wc -l)
@@ -41,6 +45,7 @@ if [ $lines -ne 0 ]; then
   chmod o-w $(find /opt/container_files/ /opt/grouper/ /opt/tier/ /opt/tier-support/ /opt/tomee/ /etc/httpd/conf/ /home/tomcat/ /usr/local/bin /etc/httpd/conf.d/ /usr/lib/jvm/java/jre/lib/security/cacerts -perm -o+w)
   returnCode=$?
   echo "grouperDockerfile; INFO: (containerDockerfileInstallPermissions.sh) chmod o-w \$(find /opt/container_files/ /opt/grouper/ /opt/tier/ /opt/tier-support/ /opt/tomee/ /etc/httpd/conf/ /home/tomcat/ /usr/local/bin /etc/httpd/conf.d/ /usr/lib/jvm/java/jre/lib/security/cacerts -perm -o+w ), result: $returnCode"
+  if [ $returnCode != 0 ]; then exit $returnCode; fi
 fi
 
 lines=$(find /opt/container_files/ /opt/grouper/ /opt/tier/ /opt/tier-support/ /opt/tomee/ /etc/httpd/conf/ /home/tomcat/ /etc/httpd/conf.d/ -type f -name "*.sh" ! -perm -g+x | wc -l)
@@ -48,6 +53,7 @@ if [ $lines -ne 0 ]; then
   chmod +x $(find /opt/container_files/ /opt/grouper/ /opt/tier/ /opt/tier-support/ /opt/tomee/ /etc/httpd/conf/ /home/tomcat/ /etc/httpd/conf.d/ -type f -name "*.sh" ! -perm -g+x)
   returnCode=$?
   echo "grouperDockerfile; INFO: (containerDockerfileInstallPermissions.sh) chmod +x \$(find /opt/container_files/ /opt/grouper/ /opt/tier/ /opt/tier-support/ /opt/tomee/ /etc/httpd/conf/ /home/tomcat/ /etc/httpd/conf.d/ -type f -name \"*.sh\" ! -perm -g+x), result: $returnCode"
+  if [ $returnCode != 0 ]; then exit $returnCode; fi
 fi
 
 lines=$(find /opt/container_files/ /opt/grouper/ /opt/tier/ /opt/tier-support/ /opt/tomee/ /etc/httpd/conf/ /home/tomcat/ /etc/httpd/conf.d/ -type f -name "*.sh" ! -perm -u+x | wc -l)
@@ -55,6 +61,7 @@ if [ $lines -ne 0 ]; then
   chmod +x $(find /opt/container_files/ /opt/grouper/ /opt/tier/ /opt/tier-support/ /opt/tomee/ /etc/httpd/conf/ /home/tomcat/ /etc/httpd/conf.d/ -type f -name "*.sh" ! -perm -u+x)
   returnCode=$?
   echo "grouperDockerfile; INFO: (containerDockerfileInstallPermissions.sh) chmod +x \$(find /opt/container_files/ /opt/grouper/ /opt/tier/ /opt/tier-support/ /opt/tomee/ /etc/httpd/conf/ /home/tomcat/ /etc/httpd/conf.d/ -type f -name \"*.sh\" ! -perm -u+x), result: $returnCode"
+  if [ $returnCode != 0 ]; then exit $returnCode; fi
 fi
 
 lines=$(find /opt/container_files/ /opt/grouper/ /opt/tier/ /opt/tier-support/ /opt/tomee/ /etc/httpd/conf/ /home/tomcat/ /etc/httpd/conf.d/ -type f -name "*.sh" ! -perm -o+x | wc -l)
@@ -62,21 +69,20 @@ if [ $lines -ne 0 ]; then
   chmod +x $(find /opt/container_files/ /opt/grouper/ /opt/tier/ /opt/tier-support/ /opt/tomee/ /etc/httpd/conf/ /home/tomcat/ /etc/httpd/conf.d/ -type f -name "*.sh" ! -perm -o+x)
   returnCode=$?
   echo "grouperDockerfile; INFO: (containerDockerfileInstallPermissions.sh) chmod +x \$(find /opt/container_files/ /opt/grouper/ /opt/tier/ /opt/tier-support/ /opt/tomee/ /etc/httpd/conf/ /home/tomcat/ /etc/httpd/conf.d/ -type f -name \"*.sh\" ! -perm -o+x), result: $returnCode"
+  if [ $returnCode != 0 ]; then exit $returnCode; fi
 fi
 
-/opt/container_files/containerDockerfileInstallDos2unix.sh /usr/local/bin
+/opt/container_files/docker-build-bin/containerDockerfileInstallDos2unix.sh /usr/local/bin
 returnCode=$?
-echo "grouperDockerfile; INFO: (containerDockerfileInstallPermissions.sh) /opt/container_files/containerDockerfileInstallDos2unix.sh /usr/local/bin, result: $returnCode"
-
-find /usr/local/bin/ -type f -print0 | xargs -0 dos2unix
-returnCode=$?
-echo "grouperDockerfile; INFO: (containerDockerfileInstallPermissions.sh) find /usr/local/bin/ -type f -print0 | xargs -0 dos2unix, result: $returnCode"
+echo "grouperDockerfile; INFO: (containerDockerfileInstallPermissions.sh) /opt/container_files/docker-build-bin/containerDockerfileInstallDos2unix.sh /usr/local/bin, result: $returnCode"
+if [ $returnCode != 0 ]; then exit $returnCode; fi
 
 lines=$(find /usr/local/bin -type f ! -perm -g+x | wc -l)
 if [ $lines -ne 0 ]; then
   chmod +x $(find /usr/local/bin -type f ! -perm -g+x)
   returnCode=$?
   echo "grouperDockerfile; INFO: (containerDockerfileInstallPermissions.sh) chmod +x \$(find /usr/local/bin -type f ! -perm -g+x), result: $returnCode"
+  if [ $returnCode != 0 ]; then exit $returnCode; fi
 fi
 
 lines=$(find /usr/local/bin -type f ! -perm -o+x | wc -l)
@@ -84,6 +90,7 @@ if [ $lines -ne 0 ]; then
   chmod +x $(find /usr/local/bin -type f ! -perm -o+x)
   returnCode=$?
   echo "grouperDockerfile; INFO: (containerDockerfileInstallPermissions.sh) chmod +x \$(find /usr/local/bin -type f ! -perm -o+x), result: $returnCode"
+  if [ $returnCode != 0 ]; then exit $returnCode; fi
 fi
 
 
@@ -92,4 +99,5 @@ if [ $lines -ne 0 ]; then
   chmod +x $(find /usr/local/bin -type f ! -perm -u+x)
   returnCode=$?
   echo "grouperDockerfile; INFO: (containerDockerfileInstallPermissions.sh) chmod +x \$(find /usr/local/bin -type f ! -perm -u+x), result: $returnCode"
+  if [ $returnCode != 0 ]; then exit $returnCode; fi
 fi
diff --git a/container_files/tier-support/supervisord-tomee.conf b/container_files/tier-support/supervisord-tomee.conf
index 52fe3c43..473b78ad 100644
--- a/container_files/tier-support/supervisord-tomee.conf
+++ b/container_files/tier-support/supervisord-tomee.conf
@@ -5,5 +5,6 @@ stderr_logfile = /tmp/logtomcat
 stderr_logfile_maxbytes=0
 stdout_logfile = /tmp/logtomcat
 stdout_logfile_maxbytes=0
+environment=UMASK=002
 
 
diff --git a/container_files/tier-support/test/testContainer.Dockerfile b/container_files/tier-support/test/testContainer.Dockerfile
index ccc4dd9b..2e67420b 100644
--- a/container_files/tier-support/test/testContainer.Dockerfile
+++ b/container_files/tier-support/test/testContainer.Dockerfile
@@ -7,4 +7,4 @@ FROM i2incommon/grouper:__BASE_CONTAINER__
 # this will overlay all the files from /opt/grouperContainer/slashRoot on to /
 COPY slashRoot /
  
-RUN /opt/container_files/containerDockerfileInstallPermissions.sh tomcat root
\ No newline at end of file
+RUN /opt/container_files/docker-build-bin/containerDockerfileInstallPermissions.sh tomcat root
\ No newline at end of file
diff --git a/container_files/usr-local-bin/libraryPrep.sh b/container_files/usr-local-bin/libraryPrep.sh
index 37962a5f..5a6c4fcc 100644
--- a/container_files/usr-local-bin/libraryPrep.sh
+++ b/container_files/usr-local-bin/libraryPrep.sh
@@ -458,6 +458,22 @@ prep_finishBegin() {
       
       fi
     fi
+    
+    if [ -z "$GROUPER_LOG_TO_HOST" ] ; then 
+      echo "grouperContainer; INFO: (librarySetupFiles.sh-setupFiles_analyzeOriginalFiles) export GROUPER_LOG_TO_HOST=false"
+      export GROUPER_LOG_TO_HOST=false
+    fi
+    
+    if [ -z "$GROUPER_LOG_TO_PIPE" ] ; then 
+      if [ "$GROUPER_LOG_TO_HOST" = "true" ]; then
+        echo "grouperContainer; INFO: (librarySetupFiles.sh-setupFiles_analyzeOriginalFiles) export GROUPER_LOG_TO_PIPE=false"
+        export GROUPER_LOG_TO_PIPE=false
+      else
+        echo "grouperContainer; INFO: (librarySetupFiles.sh-setupFiles_analyzeOriginalFiles) export GROUPER_LOG_TO_PIPE=true"
+        export GROUPER_LOG_TO_PIPE=true
+      fi
+    fi
+
 }
 
 prep_finishEnd() {
diff --git a/container_files/usr-local-bin/librarySetupFiles.sh b/container_files/usr-local-bin/librarySetupFiles.sh
index ad1a33e7..f048669b 100644
--- a/container_files/usr-local-bin/librarySetupFiles.sh
+++ b/container_files/usr-local-bin/librarySetupFiles.sh
@@ -40,14 +40,6 @@ setupFiles_rsyncSlashRoot() {
 }
 
 setupFiles_localLogging() {
-  if [ "$GROUPER_LOG_TO_HOST" = "true" ]; then
-    sed -i "s|__FILE__||g" /opt/grouper/grouperWebapp/WEB-INF/classes/log4j2.xml
-    echo "grouperContainer; INFO: (librarySetupFiles.sh-setupFiles_localLogging) sed -i \"s|__FILE__||g\" /opt/grouper/grouperWebapp/WEB-INF/classes/log4j2.xml, result: $?"
-  else 
-    sed -i "s|__LOGPIPE__||g" /opt/grouper/grouperWebapp/WEB-INF/classes/log4j2.xml
-    echo "grouperContainer; INFO: (librarySetupFiles.sh-setupFiles_localLogging) sed -i \"s|__LOGPIPE__||g\" /opt/grouper/grouperWebapp/WEB-INF/classes/log4j2.xml, result: $?"
-  fi
-  
   additionalLoggersFile=/opt/grouper/grouperWebapp/WEB-INF/classes/log4j2.additionalLoggers.xml.txt
   if [ -f $additionalLoggersFile ]; then
     sed -i "/<!--MORELOGGERS-->/r $additionalLoggersFile" /opt/grouper/grouperWebapp/WEB-INF/classes/log4j2.xml
@@ -64,6 +56,80 @@ setupFiles_localLogging() {
     if [ $returnCode != 0 ]; then exit $returnCode; fi
   fi
 
+  if [ "$GROUPER_LOG_TO_HOST" = "true" ]; then
+    sed -i "s|__FILESTART__||g" /opt/grouper/grouperWebapp/WEB-INF/classes/log4j2.xml
+    returnCode=$?
+    echo "grouperContainer; INFO: (librarySetupFiles.sh-setupFiles_localLogging) sed -i \"s|__FILESTART__||g\" /opt/grouper/grouperWebapp/WEB-INF/classes/log4j2.xml, result: $?"
+    if [ $returnCode != 0 ]; then exit $returnCode; fi
+
+    sed -i "s|__FILEEND__||g" /opt/grouper/grouperWebapp/WEB-INF/classes/log4j2.xml
+    returnCode=$?
+    echo "grouperContainer; INFO: (librarySetupFiles.sh-setupFiles_localLogging) sed -i \"s|__FILEEND__||g\" /opt/grouper/grouperWebapp/WEB-INF/classes/log4j2.xml, result: $?"
+    if [ $returnCode != 0 ]; then exit $returnCode; fi
+  else
+    sed -i "s|__FILESTART__|<!--|g" /opt/grouper/grouperWebapp/WEB-INF/classes/log4j2.xml
+    returnCode=$?
+    echo "grouperContainer; INFO: (librarySetupFiles.sh-setupFiles_localLogging) sed -i \"s|__FILESTART__|<!--|g\" /opt/grouper/grouperWebapp/WEB-INF/classes/log4j2.xml, result: $?"
+    if [ $returnCode != 0 ]; then exit $returnCode; fi
+
+    sed -i "s|__FILEEND__|-->|g" /opt/grouper/grouperWebapp/WEB-INF/classes/log4j2.xml
+    returnCode=$?
+    echo "grouperContainer; INFO: (librarySetupFiles.sh-setupFiles_localLogging) sed -i \"s|__FILEEND__|-->|g\" /opt/grouper/grouperWebapp/WEB-INF/classes/log4j2.xml, result: $?"
+    if [ $returnCode != 0 ]; then exit $returnCode; fi
+  fi
+  if  [ "$GROUPER_LOG_TO_PIPE" = "true" ]; then
+    sed -i "s|__LOGPIPESTART__||g" /opt/grouper/grouperWebapp/WEB-INF/classes/log4j2.xml
+    returnCode=$?
+    echo "grouperContainer; INFO: (librarySetupFiles.sh-setupFiles_localLogging) sed -i \"s|__LOGPIPESTART__||g\" /opt/grouper/grouperWebapp/WEB-INF/classes/log4j2.xml, result: $?"
+    if [ $returnCode != 0 ]; then exit $returnCode; fi
+
+    sed -i "s|__LOGPIPEEND__||g" /opt/grouper/grouperWebapp/WEB-INF/classes/log4j2.xml
+    returnCode=$?
+    echo "grouperContainer; INFO: (librarySetupFiles.sh-setupFiles_localLogging) sed -i \"s|__LOGPIPEEND__||g\" /opt/grouper/grouperWebapp/WEB-INF/classes/log4j2.xml, result: $?"
+    if [ $returnCode != 0 ]; then exit $returnCode; fi
+  else
+    sed -i "s|__LOGPIPESTART__|<!--|g" /opt/grouper/grouperWebapp/WEB-INF/classes/log4j2.xml
+    returnCode=$?
+    echo "grouperContainer; INFO: (librarySetupFiles.sh-setupFiles_localLogging) sed -i \"s|__LOGPIPESTART__|<!--|g\" /opt/grouper/grouperWebapp/WEB-INF/classes/log4j2.xml, result: $?"
+    if [ $returnCode != 0 ]; then exit $returnCode; fi
+
+    sed -i "s|__LOGPIPEEND__|-->|g" /opt/grouper/grouperWebapp/WEB-INF/classes/log4j2.xml
+    returnCode=$?
+    echo "grouperContainer; INFO: (librarySetupFiles.sh-setupFiles_localLogging) sed -i \"s|__LOGPIPEEND__|-->|g\" /opt/grouper/grouperWebapp/WEB-INF/classes/log4j2.xml, result: $?"
+    if [ $returnCode != 0 ]; then exit $returnCode; fi
+  fi
+
+  # add semicolons
+  LOCAL_ENV=
+  if [ ! -z "$ENV" ] ; then 
+    LOCAL_ENV="$ENV;"
+  fi
+
+  LOCAL_USERTOKEN=
+  if [ ! -z "$USERTOKEN" ] ; then 
+    LOCAL_USERTOKEN="$USERTOKEN;"
+  fi
+
+  LOCAL_GROUPER_LOG_PREFIX=
+  if [ ! -z "$GROUPER_LOG_PREFIX" ] ; then 
+    LOCAL_GROUPER_LOG_PREFIX="$GROUPER_LOG_PREFIX;"
+  fi
+
+  sed -i "s|__ENV__|$LOCAL_ENV|g" /opt/grouper/grouperWebapp/WEB-INF/classes/log4j2.xml
+  returnCode=$?
+  echo "grouperContainer; INFO: (librarySetupFiles.sh-setupFiles_localLogging) sed -i \"s|__ENV__|$LOCAL_ENV|g\" /opt/grouper/grouperWebapp/WEB-INF/classes/log4j2.xml, result: $?"
+  if [ $returnCode != 0 ]; then exit $returnCode; fi
+
+  sed -i "s|__USERTOKEN__|$LOCAL_USERTOKEN|g" /opt/grouper/grouperWebapp/WEB-INF/classes/log4j2.xml
+  returnCode=$?
+  echo "grouperContainer; INFO: (librarySetupFiles.sh-setupFiles_localLogging) sed -i \"s|__USERTOKEN__|$LOCAL_USERTOKEN|g\" /opt/grouper/grouperWebapp/WEB-INF/classes/log4j2.xml, result: $?"
+  if [ $returnCode != 0 ]; then exit $returnCode; fi
+
+  sed -i "s|__GROUPER_LOG_PREFIX__|$LOCAL_GROUPER_LOG_PREFIX|g" /opt/grouper/grouperWebapp/WEB-INF/classes/log4j2.xml
+  returnCode=$?
+  echo "grouperContainer; INFO: (librarySetupFiles.sh-setupFiles_localLogging) sed -i \"s|__GROUPER_LOG_PREFIX__|$LOCAL_GROUPER_LOG_PREFIX|g\" /opt/grouper/grouperWebapp/WEB-INF/classes/log4j2.xml, result: $?"
+  if [ $returnCode != 0 ]; then exit $returnCode; fi
+  
 }
 
 setupFiles_loggingPrefix() {
@@ -78,9 +144,9 @@ setupFiles_chownDirs() {
     # do this last
     if [ "$GROUPER_CHOWN_DIRS" = "true" ]
       then
-        /opt/container_files/containerDockerfileInstallPermissions.sh tomcat root
+        /opt/container_files/docker-build-bin/containerDockerfileInstallPermissions.sh tomcat root
         returnCode=$?
-        echo "grouperContainer; INFO: (librarySetupFiles.sh-setupFiles_chownDirs) /opt/container_files/containerDockerfileInstallPermissions.sh tomcat root, result: $returnCode"
+        echo "grouperContainer; INFO: (librarySetupFiles.sh-setupFiles_chownDirs) /opt/container_files/docker-build-bin/containerDockerfileInstallPermissions.sh tomcat root, result: $returnCode"
         if [ $returnCode != 0 ]; then exit $returnCode; fi
     fi
 }
@@ -91,7 +157,7 @@ setupFiles_storeEnvVars() {
 
   echo "#!/bin/sh" > /opt/grouper/grouperEnv.sh
   echo "" >> /opt/grouper/grouperEnv.sh
-
+  echo "UMASK=002" >> /opt/grouper/grouperEnv.sh
   # go through env vars, should start with GROUPER*; this handles quoting but not multiline
   export -p | grep "^declare -x GROUPER" | sort >> /opt/grouper/grouperEnv.sh
   returnCode=$?
@@ -285,6 +351,7 @@ setupFiles_analyzeOriginalFiles() {
       echo "grouperContainer; INFO: (librarySetupFiles.sh-setupFiles_analyzeOriginalFiles) export GROUPER_ORIGFILE_WEBAPP_WEB_XML=false"
       export GROUPER_ORIGFILE_WEBAPP_WEB_XML=false
     fi
+    
 
 }
 
diff --git a/container_files/usr-local-bin/librarySetupPipe.sh b/container_files/usr-local-bin/librarySetupPipe.sh
index 4d8589cc..ce78f52c 100644
--- a/container_files/usr-local-bin/librarySetupPipe.sh
+++ b/container_files/usr-local-bin/librarySetupPipe.sh
@@ -52,7 +52,7 @@ setupPipe_shibdLog() {
 
 setupPipe_tomcatLog() {
   if [ "$GROUPER_USE_PIPES" == "true" ]; then
-    if [ "$GROUPER_RUN_TOMEE" = "true" ] && [ "$GROUPER_LOG_TO_HOST" != "true" ]
+    if [ "$GROUPER_RUN_TOMEE" = "true" ] && [ "$GROUPER_LOG_TO_PIPE" = "true" ]
       then
         setupPipe /tmp/logtomcat
         (cat <> /tmp/logtomcat | awk -v ENV="$ENV" -v UT="$USERTOKEN" '{printf "tomee;console;%s;%s;%s\n", ENV, UT, $0; fflush()}' &>/tmp/logpipe) &
diff --git a/rm.sh b/rm.sh
new file mode 100755
index 00000000..f5af8a3b
--- /dev/null
+++ b/rm.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+docker rm -f my-grouper
diff --git a/run.sh b/run.sh
new file mode 100755
index 00000000..effc3b51
--- /dev/null
+++ b/run.sh
@@ -0,0 +1,19 @@
+#!/bin/bash
+
+docker run -d -p 443:443 --name my-grouper \
+       -e GROUPER_UI_GROUPER_AUTH=true \
+       -e GROUPER_SELF_SIGNED_CERT=true \
+       -e GROUPER_RUN_SHIB_SP=false \
+       -e GROUPER_AUTO_DDL_UPTOVERSION='v2.6.*' \
+       -e GROUPER_UI_CONFIGURATION_EDITOR_SOURCEIPADDRESSES='0.0.0.0/0' \
+       -e GROUPERSYSTEM_QUICKSTART_PASS=pass \
+       -e GROUPER_UI=true \
+       -e GROUPER_DATABASE_URL=jdbc:postgresql://docker.for.mac.localhost:5432/grouper_v2_6?currentSchema=public \
+       -e GROUPER_DATABASE_USERNAME=grouper \
+       -e GROUPER_DATABASE_PASSWORD=pass \
+       -e GROUPER_LOG_TO_HOST=true \
+       -e GROUPER_LOG_TO_PIPE=true \
+       -e ENV="foo(2)" \
+       -e USERTOKEN=myUserToken \
+       my-grouper:latest ui
+
diff --git a/run2.sh b/run2.sh
new file mode 100755
index 00000000..8481628d
--- /dev/null
+++ b/run2.sh
@@ -0,0 +1,4 @@
+#!/bin/bash
+
+docker run -d --name my-grouper my-grouper:latest
+
diff --git a/ssh.sh b/ssh.sh
new file mode 100755
index 00000000..61624a0f
--- /dev/null
+++ b/ssh.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+
+docker exec -it my-grouper bash