@@ -28,6 +28,7 @@ ARG PRODUCT
28
28
ARG STATSD_EXPORTER
29
29
ARG PYTHON
30
30
ARG TARGETARCH
31
+ ARG STACKABLE_USER_UID
31
32
32
33
COPY airflow/constraints-${PRODUCT}-python${PYTHON}.txt /tmp/constraints.txt
33
34
COPY --from=opa-auth-manager-builder /tmp/opa-auth-manager/dist/opa_auth_manager-0.1.0-py3-none-any.whl /tmp/
85
86
end)' /tmp/sbom.json > /stackable/app/airflow-${PRODUCT}.cdx.json
86
87
EOF
87
88
88
- WORKDIR /stackable
89
89
COPY --from=statsd_exporter-builder /statsd_exporter/statsd_exporter /stackable/statsd_exporter
90
90
COPY --from=statsd_exporter-builder /statsd_exporter/statsd_exporter-${STATSD_EXPORTER}.cdx.json /stackable/statsd_exporter-${STATSD_EXPORTER}.cdx.json
91
+ COPY --from=gitsync-image --chown=${STACKABLE_USER_UID}:0 /git-sync /stackable/git-sync
92
+
93
+ RUN <<EOF
94
+ mkdir -pv /stackable/airflow
95
+ mkdir -pv /stackable/airflow/dags
96
+ mkdir -pv /stackable/airflow/logs
97
+ chmod --recursive g=u /stackable
98
+ EOF
99
+
91
100
92
101
FROM stackable/image/vector AS airflow-main-image
93
102
@@ -99,22 +108,26 @@ ARG TARGETARCH
99
108
ARG STACKABLE_USER_UID
100
109
101
110
LABEL name="Apache Airflow" \
102
-
103
- vendor="Stackable GmbH" \
104
- version="${PRODUCT}" \
105
- release="${RELEASE}" \
106
- summary="The Stackable image for Apache Airflow." \
107
- description="This image is deployed by the Stackable Operator for Apache Airflow."
108
-
109
- COPY airflow/licenses /licenses
110
- COPY --chown=${STACKABLE_USER_UID}:0 airflow/stackable/utils/entrypoint.sh /entrypoint.sh
111
- COPY --chown=${STACKABLE_USER_UID}:0 airflow/stackable/utils/run-airflow.sh /run-airflow.sh
111
+
112
+ vendor="Stackable GmbH" \
113
+ version="${PRODUCT}" \
114
+ release="${RELEASE}" \
115
+ summary="The Stackable image for Apache Airflow." \
116
+ description="This image is deployed by the Stackable Operator for Apache Airflow."
112
117
113
118
ENV HOME=/stackable
114
119
ENV AIRFLOW_USER_HOME_DIR=/stackable
115
120
ENV PATH=$PATH:/bin:$HOME/app/bin
116
121
ENV AIRFLOW_HOME=$HOME/airflow
117
122
123
+ COPY --from=airflow-build-image --chown=${STACKABLE_USER_UID}:0 /stackable/ ${HOME}/
124
+ COPY --from=airflow-build-image --chown=${STACKABLE_USER_UID}:0 /stackable/git-sync ${HOME}/git-sync
125
+
126
+ COPY --chown=${STACKABLE_USER_UID}:0 airflow/stackable/utils/entrypoint.sh /entrypoint.sh
127
+ COPY --chown=${STACKABLE_USER_UID}:0 airflow/stackable/utils/run-airflow.sh /run-airflow.sh
128
+
129
+ COPY airflow/licenses /licenses
130
+
118
131
# Update image and install needed packages
119
132
RUN <<EOF
120
133
microdnf update
@@ -142,33 +155,33 @@ rm -rf /var/cache/yum
142
155
# Get the correct `tini` binary for our architecture.
143
156
# It is used as an init alternative in the entrypoint
144
157
curl -o /usr/bin/tini "https://repo.stackable.tech/repository/packages/tini/tini-${TINI}-${TARGETARCH}"
158
+
159
+ # fix missing permissions
145
160
chmod a+x /entrypoint.sh
146
161
chmod a+x /run-airflow.sh
147
162
chmod +x /usr/bin/tini
163
+ EOF
148
164
149
- mkdir -pv ${AIRFLOW_HOME}
150
- mkdir -pv ${AIRFLOW_HOME}/dags
151
- mkdir -pv ${AIRFLOW_HOME}/logs
165
+ # ----------------------------------------
166
+ # Checks
167
+ # This section is to run final checks to ensure the created final images
168
+ # adhere to several minimal requirements like:
169
+ # - check file permissions and ownerships
170
+ # ----------------------------------------
152
171
153
- # All files and folders owned by root to support running as arbitrary users
154
- # This is best practice as all container users will belong to the root group (0)
155
- chown -R ${STACKABLE_USER_UID}:0 /stackable
156
- chmod -R g=u /stackable
172
+ # Check that permissions and ownership in ${HOME} are set correctly
173
+ # This will fail and stop the build if any mismatches are found.
174
+ RUN <<EOF
175
+ /bin/check-permissions-ownership.sh ${HOME} ${STACKABLE_USER_UID} 0
157
176
EOF
158
177
159
178
# ----------------------------------------
160
- # Attention: We are changing the group of all files in /stackable directly above
161
- # If you do any file based actions (copying / creating etc.) below this comment you
162
- # absolutely need to make sure that the correct permissions are applied!
163
- # chown ${STACKABLE_USER_UID}:0
179
+ # Attention: Do not perform any file based actions (copying/creating etc.) below this comment because the permissions would not be checked.
164
180
# ----------------------------------------
165
181
166
182
USER ${STACKABLE_USER_UID}
167
183
WORKDIR /stackable
168
184
169
- COPY --from=airflow-build-image --chown=${STACKABLE_USER_UID}:0 /stackable/ ${HOME}/
170
- COPY --from=gitsync-image --chown=${STACKABLE_USER_UID}:0 /git-sync /stackable/git-sync
171
-
172
185
ENTRYPOINT ["/usr/bin/tini" , "--" , "/run-airflow.sh" ]
173
186
CMD []
174
187
0 commit comments