@@ -28,6 +28,7 @@ ARG PRODUCT
2828ARG STATSD_EXPORTER
2929ARG PYTHON
3030ARG TARGETARCH
31+ ARG STACKABLE_USER_UID
3132
3233COPY airflow/constraints-${PRODUCT}-python${PYTHON}.txt /tmp/constraints.txt
3334COPY --from=opa-auth-manager-builder /tmp/opa-auth-manager/dist/opa_auth_manager-0.1.0-py3-none-any.whl /tmp/
8586end)' /tmp/sbom.json > /stackable/app/airflow-${PRODUCT}.cdx.json
8687EOF
8788
88- WORKDIR /stackable
8989COPY --from=statsd_exporter-builder /statsd_exporter/statsd_exporter /stackable/statsd_exporter
9090COPY --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+
91100
92101FROM stackable/image/vector AS airflow-main-image
93102
@@ -99,22 +108,26 @@ ARG TARGETARCH
99108ARG STACKABLE_USER_UID
100109
101110LABEL 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."
112117
113118ENV HOME=/stackable
114119ENV AIRFLOW_USER_HOME_DIR=/stackable
115120ENV PATH=$PATH:/bin:$HOME/app/bin
116121ENV AIRFLOW_HOME=$HOME/airflow
117122
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+
118131# Update image and install needed packages
119132RUN <<EOF
120133microdnf update
@@ -142,33 +155,33 @@ rm -rf /var/cache/yum
142155# Get the correct `tini` binary for our architecture.
143156# It is used as an init alternative in the entrypoint
144157curl -o /usr/bin/tini "https://repo.stackable.tech/repository/packages/tini/tini-${TINI}-${TARGETARCH}"
158+
159+ # fix missing permissions
145160chmod a+x /entrypoint.sh
146161chmod a+x /run-airflow.sh
147162chmod +x /usr/bin/tini
163+ EOF
148164
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+ # ----------------------------------------
152171
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
157176EOF
158177
159178# ----------------------------------------
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.
164180# ----------------------------------------
165181
166182USER ${STACKABLE_USER_UID}
167183WORKDIR /stackable
168184
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-
172185ENTRYPOINT ["/usr/bin/tini" , "--" , "/run-airflow.sh" ]
173186CMD []
174187
0 commit comments