From 63fab6a47a42fc28ae11522cc38502380570d8bc Mon Sep 17 00:00:00 2001
From: Jim Van Fleet <jim.van.fleet@levvel.io>
Date: Mon, 12 Sep 2016 15:45:11 -0400
Subject: [PATCH] Adding autoexec support

---
 Dockerfile                      | 11 ++++++++++-
 README.md                       |  6 +++++-
 container_files/bin/firstrun.sh |  6 ++++++
 container_files/bin/onbuild.sh  |  6 ++++++
 tests/base.bats                 | 16 ++++++++++++++++
 5 files changed, 43 insertions(+), 2 deletions(-)
 create mode 100755 container_files/bin/firstrun.sh
 create mode 100755 container_files/bin/onbuild.sh

diff --git a/Dockerfile b/Dockerfile
index 99fed6b..b840c3d 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -25,13 +25,22 @@ RUN ln -sf /usr/share/zoneinfo/UTC /etc/localtime \
 RUN yum -y install --setopt=tsflags=nodocs epel-release && \
     yum -y install net-tools wget curl tar unzip mlocate logrotate strace telnet man unzip vim wget rsyslog cron && \
     yum clean all && \
-    mkdir -p /opt/tier
+    mkdir -p \
+      /opt/autoexec/bin  \
+      /opt/autoexec/onbuild  \
+      /opt/autoexec/firstrun \
+      /opt/bin  \
+      /opt/etc  \
+      /opt/tier \
 
 # Install Trusted Certificates
 RUN update-ca-trust force-enable
 ADD ./cert/InCommon.crt /etc/pki/ca-trust/source/anchors/
 RUN update-ca-trust extract
 
+ADD container_files/bin/firstrun.sh /opt/autoexec/bin/firstrun.sh
+ADD container_files/bin/onbuild.sh /opt/autoexec/bin/onbuild.sh
+
 # Set default environment variables.
 ENV HOME /opt/tier
 
diff --git a/README.md b/README.md
index 99032bb..5cbde40 100644
--- a/README.md
+++ b/README.md
@@ -7,4 +7,8 @@ Internet2 managed CentOS 7 base image
 
 ## purpose
 
-This container allows I2/TIER to insulate itself against upstream changes from CentOS managed images that may be unwanted.  It can also be used to trigger global changes (e.g. a new InCommon.crt) when appropriate.
\ No newline at end of file
+This container allows I2/TIER to insulate itself against upstream changes from CentOS managed images that may be unwanted.  It can also be used to trigger global changes (e.g. a new InCommon.crt) when appropriate.
+
+## autorun
+
+You are encouraged to include /opt/autorun/bin/onbuild.sh when closing your Dockerfiles, and to include /opt/autorun/bin/firstrun.sh in your CMD entrypoints.
\ No newline at end of file
diff --git a/container_files/bin/firstrun.sh b/container_files/bin/firstrun.sh
new file mode 100755
index 0000000..491f2b9
--- /dev/null
+++ b/container_files/bin/firstrun.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+for file in /opt/autoexec/firstrun/*
+do
+  cmd "$file" >> /opt/etc/autoexec.firstrun.log
+done
\ No newline at end of file
diff --git a/container_files/bin/onbuild.sh b/container_files/bin/onbuild.sh
new file mode 100755
index 0000000..f193cde
--- /dev/null
+++ b/container_files/bin/onbuild.sh
@@ -0,0 +1,6 @@
+#!/bin/bash
+
+for file in /opt/autoexec/build/*
+do
+  cmd "$file" >> /opt/etc/autoexec.build.log
+done
\ No newline at end of file
diff --git a/tests/base.bats b/tests/base.bats
index 7ebaccf..a5d301d 100644
--- a/tests/base.bats
+++ b/tests/base.bats
@@ -14,3 +14,19 @@ load ../common
   [ "$status" -eq 0 ]
   [[ ${output} == *"302"* || ${output} == *"200"* ]]
 }
+
+@test "Onbuild support script" {
+  docker run -i $maintainer/$imagename find /opt/autoexec/bin/onbuild.sh
+}
+
+@test "Onbuild support home" {
+  docker run -i $maintainer/$imagename find /opt/autoexec/onbuild
+}
+
+@test "Firstrun support bin" {
+  docker run -i $maintainer/$imagename find /opt/autoexec/bin/firstrun.sh
+}
+
+@test "Firstrun support home" {
+  docker run -i $maintainer/$imagename find /opt/autoexec/firstrun
+}
\ No newline at end of file