|
1 | 1 | #!/usr/bin/env bash |
2 | 2 | set -euo pipefail |
3 | 3 |
|
| 4 | +# Load file-based secrets: support envs like FILE__PASSWORD=/path |
| 5 | +load_file_envs() { |
| 6 | + while IFS='=' read -r name value; do |
| 7 | + if [[ $name == FILE__* ]]; then |
| 8 | + key="${name#FILE__}" |
| 9 | + if [[ -f "$value" ]]; then |
| 10 | + export "${key}=$(<"$value")" |
| 11 | + fi |
| 12 | + fi |
| 13 | + done < <(env) |
| 14 | +} |
| 15 | + |
| 16 | +load_file_envs |
| 17 | + |
4 | 18 | # Ensure required directories and ownership exist for logging and data |
5 | 19 | mkdir -p /config/{extensions,data,workspace,.ssh} |
6 | 20 | mkdir -p /config/.local/share/code-server/coder-logs |
7 | 21 |
|
8 | | -# If running as root, fix ownership and perms, then drop privileges |
| 22 | +# If running as root, align user IDs, sudo and permissions, then drop privileges |
9 | 23 | if [[ "${EUID}" -eq 0 ]]; then |
10 | | - chown -R 911:911 /config || true |
| 24 | + # Map user/group ids if provided |
| 25 | + CURRENT_UID=$(id -u abc) |
| 26 | + CURRENT_GID=$(id -g abc) |
| 27 | + TARGET_UID=${PUID:-$CURRENT_UID} |
| 28 | + TARGET_GID=${PGID:-$CURRENT_GID} |
| 29 | + |
| 30 | + if [[ "$CURRENT_GID" != "$TARGET_GID" ]]; then |
| 31 | + EXISTING_GROUP=$(getent group "$TARGET_GID" | cut -d: -f1 || true) |
| 32 | + if [[ -n "${EXISTING_GROUP}" ]]; then |
| 33 | + usermod -g "$EXISTING_GROUP" abc |
| 34 | + else |
| 35 | + groupmod -g "$TARGET_GID" abc |
| 36 | + fi |
| 37 | + fi |
| 38 | + |
| 39 | + if [[ "$CURRENT_UID" != "$TARGET_UID" ]]; then |
| 40 | + usermod -u "$TARGET_UID" abc |
| 41 | + fi |
| 42 | + |
| 43 | + # Configure sudo access if requested |
| 44 | + if [[ -n "${SUDO_PASSWORD_HASH:-}" || -n "${SUDO_PASSWORD:-}" ]]; then |
| 45 | + usermod -aG wheel abc || true |
| 46 | + if [[ -n "${SUDO_PASSWORD_HASH:-}" ]]; then |
| 47 | + echo "abc:${SUDO_PASSWORD_HASH}" | chpasswd -e |
| 48 | + elif [[ -n "${SUDO_PASSWORD:-}" ]]; then |
| 49 | + echo "abc:${SUDO_PASSWORD}" | chpasswd |
| 50 | + fi |
| 51 | + fi |
| 52 | + |
| 53 | + # Fix ownership and perms for config |
| 54 | + chown -R $(id -u abc):$(id -g abc) /config || true |
11 | 55 | chmod 700 /config/.ssh || true |
| 56 | + |
12 | 57 | # Drop to user abc to run code-server |
13 | 58 | exec runuser -u abc -- "$0" "$@" |
14 | 59 | fi |
|
0 commit comments