Ctrl K
ComunidadGuías…

asEnvUser

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
#!/bin/bash
set -eux

# borrowed from https://github.com/JAremko/docker-emacs

## Create(if needed) this user and run command as the user:
# ENV UNAME="emacser" \
#     GNAME="emacs" \
#     UHOME="/home/emacs" \
#     UID="1000" \
#     GID="1000" \
#     WORKSPACE="/mnt/workspace" \
#     SHELL="/bin/bash"
## NOTE: ^^^^ Those are default values only in docker-emacs
## NOTE: The user will have "no password" sudo privilege

## Create user if it doesn't exists
if ! id "${UNAME}" >/dev/null 2>&1; then
	## Prepend the user to /etc/passwd to ensure that it will
	## override already existing users with the same IDs
	echo -e "${UNAME}:x:${EMACS_UID}:${EMACS_GID}:${UNAME},,,:${UHOME}:${SHELL}\\n$(cat /etc/passwd)" > /etc/passwd
	echo "${UNAME}::17032:0:99999:7:::" >> /etc/shadow
fi

## Make sure that user is sudoer (if sudo is present)
if [[ -d "/etc/sudoers.d" ]] && [[ ! -f "/etc/sudoers.d/${UNAME}" ]]; then
	echo "${UNAME} ALL=(ALL) NOPASSWD: ALL" > "/etc/sudoers.d/${UNAME}"
	chmod 0440 "/etc/sudoers.d/${UNAME}"
fi

## Create user's group if it doesn't exists
set +e
u_group=$(grep -E -i "^${GNAME}" /etc/group)
if [ $? -ne 0 ]; then
	echo "${GNAME}:x:${EMACS_GID}:${UNAME}" >> /etc/group
elif [[ ${u_group} != *"${UNAME}"* ]]; then
	sed -i -e "s/${u_group}/${u_group},${UNAME}/g" /etc/group
fi
set -e


# no harm in doing it every time? should be idempotent and shouldn't mess permissions because it's special emacs home dir
mkdir -p "${UHOME}"
chown "${EMACS_UID}":"${EMACS_GID}" "${UHOME}"


function check_permissions {
    find "$UHOME" -not -user "$EMACS_UID" -or -not -group "$EMACS_GID"
}

count=$(check_permissions | wc -l)

if [ "$count" -ne 0 ]; then
   echo "WARNING: some files have wrong permissions"
   check_permissions
fi


mkdir -p "${WORKSPACE}"
chown "${EMACS_UID}":"${EMACS_GID}" "${WORKSPACE}"
cd "${WORKSPACE}"

su-exec "${UNAME}" "$@"