mirror of
https://github.com/devilbox/docker-php-fpm.git
synced 2025-12-22 17:01:14 +00:00
Rebuild docker-entrypoint scripts
This commit is contained in:
@@ -1,13 +1,8 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Available global variables:
|
||||
# + MY_USER
|
||||
# + MY_GROUP
|
||||
# + DEBUG_LEVEL
|
||||
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -u
|
||||
set -o pipefail
|
||||
|
||||
|
||||
############################################################
|
||||
@@ -18,38 +13,31 @@ set -u
|
||||
### Log to stdout/stderr
|
||||
###
|
||||
log() {
|
||||
log_lvl="${1}"
|
||||
log_msg="${2}"
|
||||
local type="${1}" # ok, warn or err
|
||||
local message="${2}" # msg to print
|
||||
local debug="${3}" # 0: only warn and error, >0: ok and info
|
||||
|
||||
log_clr_ok="\033[0;32m"
|
||||
log_clr_info="\033[0;34m"
|
||||
log_clr_warn="\033[0;33m"
|
||||
log_clr_err="\033[0;31m"
|
||||
log_clr_rst="\033[0m"
|
||||
local clr_ok="\033[0;32m"
|
||||
local clr_info="\033[0;34m"
|
||||
local clr_warn="\033[0;33m"
|
||||
local clr_err="\033[0;31m"
|
||||
local clr_rst="\033[0m"
|
||||
|
||||
if [ "${log_lvl}" = "ok" ]; then
|
||||
if [ "${DEBUG_LEVEL}" -gt "0" ]; then
|
||||
printf "${log_clr_ok}[OK] %s${log_clr_rst}\n" "${log_msg}"
|
||||
if [ "${type}" = "ok" ]; then
|
||||
if [ "${debug}" -gt "0" ]; then
|
||||
printf "${clr_ok}[OK] %s${clr_rst}\n" "${message}"
|
||||
fi
|
||||
elif [ "${log_lvl}" = "info" ]; then
|
||||
if [ "${DEBUG_LEVEL}" -gt "0" ]; then
|
||||
printf "${log_clr_info}[INFO] %s${log_clr_rst}\n" "${log_msg}"
|
||||
elif [ "${type}" = "info" ]; then
|
||||
if [ "${debug}" -gt "0" ]; then
|
||||
printf "${clr_info}[INFO] %s${clr_rst}\n" "${message}"
|
||||
fi
|
||||
elif [ "${log_lvl}" = "warn" ]; then
|
||||
printf "${log_clr_warn}[WARN] %s${log_clr_rst}\n" "${log_msg}" 1>&2 # stdout -> stderr
|
||||
elif [ "${log_lvl}" = "err" ]; then
|
||||
printf "${log_clr_err}[ERR] %s${log_clr_rst}\n" "${log_msg}" 1>&2 # stdout -> stderr
|
||||
elif [ "${type}" = "warn" ]; then
|
||||
printf "${clr_warn}[WARN] %s${clr_rst}\n" "${message}" 1>&2 # stdout -> stderr
|
||||
elif [ "${type}" = "err" ]; then
|
||||
printf "${clr_err}[ERR] %s${clr_rst}\n" "${message}" 1>&2 # stdout -> stderr
|
||||
else
|
||||
printf "${log_clr_err}[???] %s${log_clr_rst}\n" "${log_msg}" 1>&2 # stdout -> stderr
|
||||
printf "${clr_err}[???] %s${clr_rst}\n" "${message}" 1>&2 # stdout -> stderr
|
||||
fi
|
||||
|
||||
unset -v log_lvl
|
||||
unset -v log_msg
|
||||
unset -v log_clr_ok
|
||||
unset -v log_clr_info
|
||||
unset -v log_clr_warn
|
||||
unset -v log_clr_err
|
||||
unset -v log_clr_rst
|
||||
}
|
||||
|
||||
|
||||
@@ -57,29 +45,25 @@ log() {
|
||||
### Wrapper for run_run command
|
||||
###
|
||||
run() {
|
||||
run_cmd="${1}"
|
||||
local cmd="${1}" # command to execute
|
||||
local debug="${2}" # show commands if debug level > 1
|
||||
|
||||
run_clr_red="\033[0;31m"
|
||||
run_clr_green="\033[0;32m"
|
||||
run_clr_reset="\033[0m"
|
||||
local clr_red="\033[0;31m"
|
||||
local clr_green="\033[0;32m"
|
||||
local clr_reset="\033[0m"
|
||||
|
||||
if [ "${DEBUG_LEVEL}" -gt "1" ]; then
|
||||
printf "${run_clr_red}%s \$ ${run_clr_green}${run_cmd}${run_clr_reset}\n" "$( whoami )"
|
||||
if [ "${debug}" -gt "1" ]; then
|
||||
printf "${clr_red}%s \$ ${clr_green}${cmd}${clr_reset}\n" "$( whoami )"
|
||||
fi
|
||||
/bin/sh -c "LANG=C LC_ALL=C ${run_cmd}"
|
||||
|
||||
unset -v run_cmd
|
||||
unset -v run_clr_red
|
||||
unset -v run_clr_green
|
||||
unset -v run_clr_reset
|
||||
/bin/sh -c "LANG=C LC_ALL=C ${cmd}"
|
||||
}
|
||||
|
||||
|
||||
###
|
||||
### Is argument an integer?
|
||||
### Is argument a positive integer?
|
||||
###
|
||||
isint() {
|
||||
echo "${1}" | grep -Eq '^([0-9]|[1-9][0-9]*)$'
|
||||
test -n "${1##*[!0-9]*}"
|
||||
}
|
||||
|
||||
|
||||
@@ -87,11 +71,7 @@ isint() {
|
||||
### Is env variable set?
|
||||
###
|
||||
env_set() {
|
||||
if set | grep "^${1}=" >/dev/null 2>&1; then
|
||||
return 0
|
||||
else
|
||||
return 1
|
||||
fi
|
||||
printenv "${1}" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
|
||||
@@ -99,42 +79,25 @@ env_set() {
|
||||
### Get env variable by name
|
||||
###
|
||||
env_get() {
|
||||
if ! env_set "${1}"; then
|
||||
return 1
|
||||
local env_name="${1}"
|
||||
|
||||
# Did we have a default value specified?
|
||||
if [ "${#}" -gt "1" ]; then
|
||||
if ! env_set "${env_name}"; then
|
||||
echo "${2}"
|
||||
return 0
|
||||
fi
|
||||
fi
|
||||
|
||||
env_get_value="$( set | grep "^${1}=" | awk -F '=' '{for (i=2; i<NF; i++) printf $i "="; print $NF}' )"
|
||||
|
||||
# Remove surrounding quotes
|
||||
env_get_value="$( echo "${env_get_value}" | sed "s/^'//g" )"
|
||||
env_get_value="$( echo "${env_get_value}" | sed 's/^"//g' )"
|
||||
|
||||
env_get_value="$( echo "${env_get_value}" | sed "s/'$//g" )"
|
||||
env_get_value="$( echo "${env_get_value}" | sed 's/"$//g' )"
|
||||
|
||||
echo "${env_get_value}"
|
||||
unset -v env_get_value
|
||||
# Just output the env value
|
||||
printenv "${1}"
|
||||
}
|
||||
|
||||
|
||||
|
||||
############################################################
|
||||
# Sanity Checks
|
||||
############################################################
|
||||
|
||||
if ! command -v grep >/dev/null 2>&1; then
|
||||
log "err" "grep not found, but required."
|
||||
exit 1
|
||||
fi
|
||||
if ! command -v sed >/dev/null 2>&1; then
|
||||
log "err" "sed not found, but required."
|
||||
exit 1
|
||||
fi
|
||||
if ! command -v awk >/dev/null 2>&1; then
|
||||
log "err" "awk not found, but required."
|
||||
exit 1
|
||||
fi
|
||||
if ! command -v getent >/dev/null 2>&1; then
|
||||
log "err" "getent not found, but required."
|
||||
if ! command -v printenv >/dev/null 2>&1; then
|
||||
log "err" "printenv not found, but required." "1"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -1,22 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
set -e
|
||||
set -u
|
||||
|
||||
|
||||
############################################################
|
||||
# Functions
|
||||
############################################################
|
||||
|
||||
###
|
||||
### Debug level
|
||||
###
|
||||
get_debug_level() {
|
||||
if ! env_set "${1}"; then
|
||||
# Return default specified value
|
||||
echo "${2}"
|
||||
else
|
||||
# Return env value
|
||||
env_get "${1}"
|
||||
fi
|
||||
}
|
||||
125
Dockerfiles/base/data/docker-entrypoint.d/01-uid-gid.sh
Executable file
125
Dockerfiles/base/data/docker-entrypoint.d/01-uid-gid.sh
Executable file
@@ -0,0 +1,125 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
set -u
|
||||
set -o pipefail
|
||||
|
||||
|
||||
############################################################
|
||||
# Functions
|
||||
############################################################
|
||||
|
||||
###
|
||||
### Helper
|
||||
###
|
||||
_get_username_by_uid() {
|
||||
if getent="$( getent passwd "${1}" )"; then
|
||||
echo "${getent//:*}"
|
||||
return 0
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
_get_groupname_by_gid() {
|
||||
if getent="$( getent group "${1}" )"; then
|
||||
echo "${getent//:*}"
|
||||
return 0
|
||||
fi
|
||||
return 1
|
||||
}
|
||||
|
||||
|
||||
###
|
||||
### Change UID
|
||||
###
|
||||
set_uid() {
|
||||
local uid_varname="${1}"
|
||||
local username="${2}"
|
||||
local homedir="${3}"
|
||||
local debug="${4}"
|
||||
|
||||
local uid= # new uid
|
||||
local spare_uid=9876 # spare uid to change another user to
|
||||
|
||||
if ! env_set "${uid_varname}"; then
|
||||
log "info" "\$${uid_varname} not set. Keeping default uid for '${username}'." "${debug}"
|
||||
else
|
||||
uid="$( env_get "${uid_varname}" )"
|
||||
|
||||
if ! isint "${uid}"; then
|
||||
log "err" "\$${uid_varname} is not an integer: '${uid}'" "${debug}"
|
||||
exit 1
|
||||
else
|
||||
# Username with this uid already exists
|
||||
if target_username="$( _get_username_by_uid "${uid}" )"; then
|
||||
# It is not our user, so we need to changes his/her uid to something else first
|
||||
if [ "${target_username}" != "${username}" ]; then
|
||||
log "warn" "User with ${uid} already exists: ${target_username}" "${debug}"
|
||||
log "info" "Changing UID of ${target_username} to ${spare_uid}" "${debug}"
|
||||
run "usermod -u ${spare_uid} ${target_username}" "${debug}"
|
||||
fi
|
||||
fi
|
||||
# Change uid and fix homedir permissions
|
||||
log "info" "Changing user '${username}' uid to: ${uid}" "${debug}"
|
||||
run "usermod -u ${uid} ${username}" "${debug}"
|
||||
run "chown -R ${username} ${homedir}" "${debug}"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
###
|
||||
### Change GID
|
||||
###
|
||||
set_gid() {
|
||||
local gid_varname="${1}"
|
||||
local groupname="${2}"
|
||||
local homedir="${3}"
|
||||
local debug="${4}"
|
||||
|
||||
local gid= # new gid
|
||||
local spare_gid=9876 # spare gid to change another group to
|
||||
|
||||
if ! env_set "${gid_varname}"; then
|
||||
log "info" "\$${gid_varname} not set. Keeping default gid for '${groupname}'." "${debug}"
|
||||
else
|
||||
# Retrieve the value from env
|
||||
gid="$( env_get "${gid_varname}" )"
|
||||
|
||||
if ! isint "${gid}"; then
|
||||
log "err" "\$${gid_varname} is not an integer: '${gid}'" "${debug}"
|
||||
exit 1
|
||||
else
|
||||
# Groupname with this gid already exists
|
||||
if target_groupname="$( _get_groupname_by_gid "${gid}" )"; then
|
||||
# It is not our group, so we need to changes his/her gid to something else first
|
||||
if [ "${target_groupname}" != "${groupname}" ]; then
|
||||
log "warn" "Group with ${gid} already exists: ${target_groupname}" "${debug}"
|
||||
log "info" "Changing GID of ${target_groupname} to ${spare_gid}" "${debug}"
|
||||
run "groupmod -g ${spare_gid} ${target_groupname}" "${debug}"
|
||||
fi
|
||||
fi
|
||||
# Change ugd and fix homedir permissions
|
||||
log "info" "Changing group '${groupname}' gid to: ${gid}" "${debug}"
|
||||
run "groupmod -g ${gid} ${groupname}" "${debug}"
|
||||
run "chown -R :${groupname} ${homedir}" "${debug}"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
|
||||
############################################################
|
||||
# Sanity Checks
|
||||
############################################################
|
||||
|
||||
if ! command -v usermod >/dev/null 2>&1; then
|
||||
log "err" "usermod not found, but required." "1"
|
||||
exit 1
|
||||
fi
|
||||
if ! command -v groupmod >/dev/null 2>&1; then
|
||||
log "err" "groupmod not found, but required." "1"
|
||||
exit 1
|
||||
fi
|
||||
if ! command -v getent >/dev/null 2>&1; then
|
||||
log "err" "getent not found, but required." "1"
|
||||
exit 1
|
||||
fi
|
||||
@@ -1,104 +0,0 @@
|
||||
#!/bin/sh
|
||||
#
|
||||
# Available global variables:
|
||||
# + MY_USER
|
||||
# + MY_GROUP
|
||||
# + DEBUG_LEVEL
|
||||
|
||||
set -e
|
||||
set -u
|
||||
|
||||
|
||||
############################################################
|
||||
# Functions
|
||||
############################################################
|
||||
|
||||
###
|
||||
### Change UID
|
||||
###
|
||||
set_uid() {
|
||||
uid_varname="${1}"
|
||||
|
||||
if ! env_set "${uid_varname}"; then
|
||||
log "info" "\$${uid_varname} not set. Keeping default uid for '${MY_USER}'."
|
||||
else
|
||||
uid_env_uid="$( env_get "${uid_varname}" )"
|
||||
|
||||
if ! isint "${uid_env_uid}"; then
|
||||
log "err" "\$${uid_varname} is not an integer: '${uid_env_uid}'"
|
||||
exit 1
|
||||
else
|
||||
if uid_getent_row="$( getent passwd "${uid_env_uid}" )"; then
|
||||
uid_getent_name="$( echo "${uid_getent_row}" | awk -F ':' '{print $1}' )"
|
||||
if [ "${uid_getent_name}" != "${MY_USER}" ]; then
|
||||
log "warn" "User with ${uid_env_uid} already exists: ${uid_getent_name}"
|
||||
log "info" "Changing UID of ${uid_getent_name} to 9999"
|
||||
run "usermod -u 9999 ${uid_getent_name}"
|
||||
fi
|
||||
fi
|
||||
log "info" "Changing user '${MY_USER}' uid to: ${uid_env_uid}"
|
||||
run "usermod -u ${uid_env_uid} ${MY_USER}"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Fix homedir permissions
|
||||
run "chown -R ${MY_USER} /home/${MY_USER}"
|
||||
|
||||
unset -v uid_varname
|
||||
unset -v uid_env_uid
|
||||
unset -v uid_getent_row
|
||||
unset -v uid_getent_name
|
||||
}
|
||||
|
||||
|
||||
###
|
||||
### Change GID
|
||||
###
|
||||
set_gid() {
|
||||
gid_varname="${1}"
|
||||
|
||||
if ! env_set "${gid_varname}"; then
|
||||
log "info" "\$${gid_varname} not set. Keeping default gid for '${MY_GROUP}'."
|
||||
else
|
||||
# Retrieve the value from env
|
||||
gid_env_gid="$( env_get "${gid_varname}" )"
|
||||
|
||||
if ! isint "${gid_env_gid}"; then
|
||||
log "err" "\$${gid_varname} is not an integer: '${gid_env_gid}'"
|
||||
exit 1
|
||||
else
|
||||
if gid_getent_row="$( getent group "${gid_env_gid}" )"; then
|
||||
gid_getent_name="$( echo "${gid_getent_row}" | awk -F ':' '{print $1}' )"
|
||||
if [ "${gid_getent_name}" != "${MY_GROUP}" ]; then
|
||||
log "warn" "Group with ${gid_env_gid} already exists: ${gid_getent_name}"
|
||||
log "info" "Changing GID of ${gid_getent_name} to 9999"
|
||||
run "groupmod -g 9999 ${gid_getent_name}"
|
||||
fi
|
||||
fi
|
||||
log "info" "Changing group '${MY_GROUP}' gid to: ${gid_env_gid}"
|
||||
run "groupmod -g ${gid_env_gid} ${MY_GROUP}"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Fix homedir permissions
|
||||
run "chown -R :${MY_GROUP} /home/${MY_USER}"
|
||||
|
||||
unset -v gid_varname
|
||||
unset -v gid_env_gid
|
||||
unset -v gid_getent_row
|
||||
unset -v gid_getent_name
|
||||
}
|
||||
|
||||
|
||||
############################################################
|
||||
# Sanity Checks
|
||||
############################################################
|
||||
|
||||
if ! command -v usermod >/dev/null 2>&1; then
|
||||
log "err" "usermod not found, but required."
|
||||
exit 1
|
||||
fi
|
||||
if ! command -v groupmod >/dev/null 2>&1; then
|
||||
log "err" "groupmod not found, but required."
|
||||
exit 1
|
||||
fi
|
||||
Reference in New Issue
Block a user