diff --git a/pgrx-build/debian_bullseye/Dockerfile.debian_bullseye b/pgrx-build/debian_bullseye/Dockerfile.debian_bullseye index 82678ba..be0a56c 100644 --- a/pgrx-build/debian_bullseye/Dockerfile.debian_bullseye +++ b/pgrx-build/debian_bullseye/Dockerfile.debian_bullseye @@ -63,3 +63,9 @@ RUN echo "Running cargo install --version =${PGRX_VERSION} --force cargo-pgrx $C # Initialize cargo pgrx so that we can run the tests RUN cargo pgrx init --pg$PG_MAJOR_VERSION=$(which pg_config) + +# Run as root to map host user to container user +USER root +COPY entrypoint.sh / +ENTRYPOINT ["/entrypoint.sh"] +CMD ["/bin/bash"] diff --git a/pgrx-build/debian_bullseye/entrypoint.sh b/pgrx-build/debian_bullseye/entrypoint.sh new file mode 100644 index 0000000..f73f1d7 --- /dev/null +++ b/pgrx-build/debian_bullseye/entrypoint.sh @@ -0,0 +1,28 @@ +#!/bin/bash + +export USER=rust +export HOME=/home/$USER + +# カレントディレクトリの uid と gid を調べる +uid=$(stat -c "%u" .) +gid=$(stat -c "%g" .) + +if [ "$uid" -ne 0 ]; then + if [ "$(id -g $USER)" -ne $gid ]; then + # rust ユーザーの gid とカレントディレクトリの gid が異なる場合、 + # rust の gid をカレントディレクトリの gid に変更し、ホームディレクトリの + # gid も正常化する。 + getent group $gid >/dev/null 2>&1 || groupmod -g $gid $USER + chgrp -R $gid $HOME + fi + if [ "$(id -u $USER)" -ne $uid ]; then + # rust ユーザーの uid とカレントディレクトリの uid が異なる場合、 + # rust の uid をカレントディレクトリの uid に変更する。 + # ホームディレクトリは usermod によって正常化される。 + usermod -u $uid $USER + fi +fi + +# このスクリプト自体は root で実行されているので、uid/gid 調整済みの rust ユーザー +# として指定されたコマンドを実行する。 +exec setpriv --reuid=$USER --regid=$USER --init-groups "$@"