Rebuild docker-entrypoint scripts

This commit is contained in:
cytopia
2018-02-27 09:32:49 +01:00
parent 7d41e38374
commit f5491d91fc
27 changed files with 530 additions and 610 deletions

View File

@@ -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

View File

@@ -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
}

View 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

View File

@@ -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