github.com/cozy/cozy-stack@v0.0.0-20240603063001-31110fa4cae1/scripts/docker/production/docker-entrypoint.sh (about)

     1  #!/bin/sh
     2  set -eu
     3  
     4  
     5  
     6  echo "=========================================================================="
     7  echo "Starting $0, $(date)"
     8  echo "=========================================================================="
     9  
    10  
    11  # Prepare stepping down from root to applicative user with chosen UID/GID
    12  USER_ID=${LOCAL_USER_ID:-3552}
    13  GROUP_ID=${LOCAL_GROUP_ID:-3552}
    14  getent group cozy >/dev/null 2>&1 || \
    15      groupadd -g "${GROUP_ID}" -o cozy
    16  getent passwd cozy >/dev/null 2>&1 || \
    17      useradd --shell /bin/bash -u "${USER_ID}" -g cozy -o -c "Cozy Stack user" -d /var/lib/cozy -m cozy
    18  chown -R cozy: /var/lib/cozy
    19  
    20  # Generate passphrase if missing
    21  if [ ! -f /etc/cozy/cozy-admin-passphrase ]; then
    22    if [ -z "${COZY_ADMIN_PASSPHRASE:-}" ]; then
    23      echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
    24      echo "COZY_ADMIN_PASSPHRASE not set."
    25      echo "Using random Cozy admin passphrase !!!"
    26      COZY_ADMIN_PASSPHRASE="$(tr -dc '[:alpha:]' </dev/urandom | fold -w 12 | head -n 1)"
    27      echo "COZY_ADMIN_PASSPHRASE set to ${COZY_ADMIN_PASSPHRASE}"
    28      echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
    29    fi
    30    echo "Generating /var/lib/cozy/cozy-admin-passphrase..."
    31    COZY_ADMIN_PASSPHRASE="${COZY_ADMIN_PASSPHRASE}" cozy-stack -c /dev/null config passwd /etc/cozy/cozy-admin-passphrase
    32    chown cozy: /etc/cozy/cozy-admin-passphrase
    33    chmod u=r,og= /etc/cozy/cozy-admin-passphrase
    34  fi
    35  
    36  # Generate vault keys if needed
    37  if [ ! -f /etc/cozy/vault.enc ] || [ ! -f /etc/cozy/vault.dec ]; then
    38    cozy-stack -c /dev/null config gen-keys /etc/cozy/vault
    39    chown cozy: /etc/cozy/vault.enc /etc/cozy/vault.dec
    40    chmod u=rw,og= /etc/cozy/vault.enc /etc/cozy/vault.dec
    41  fi
    42  
    43  # Start postfix if required
    44  if [ "${START_EMBEDDED_POSTFIX:-}" = "true" ]; then
    45    # Set-up dns resolution in postfix chroot at runtime and start postfix
    46    [ ! -d /var/spool/postfix/etc ] && mkdir -p /var/spool/postfix/etc
    47    cp /etc/resolv.conf /var/spool/postfix/etc
    48    chown -R postfix /var/spool/postfix/etc
    49    postfix start
    50  fi
    51  
    52  if echo "$@" | grep -q "cozy-stack "; then
    53    # Ensure CouchDB is ready if running an applicative subcommand
    54    echo "Waiting for CouchDB to be available..."
    55    wait-for-it.sh -h "${COUCHDB_HOST}" -p "${COUCHDB_PORT}" -t 60
    56  
    57    echo "Init CouchDB databases, nothing will happen if they already exists..."
    58    for db in _users _replicator; do
    59      curl -sSL -X PUT --user "${COUCHDB_USER}:${COUCHDB_PASSWORD}" "${COUCHDB_PROTOCOL}://${COUCHDB_HOST}:${COUCHDB_PORT}/${db}" || ( echo "Failed to create database ${db}"; exit 1 )
    60    done
    61  
    62    # Then run the command itself as applicative user
    63    echo "Now running CMD with UID ${USER_ID} and GID ${GROUP_ID}"
    64    exec gosu cozy "$@"
    65  else
    66    # Otherwise run the command as root
    67    exec "$@"
    68  fi