Skip to content
Branch: master
Find file Copy path
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
63 lines (49 sloc) 1.83 KB
set -eux
# borrowed from
## 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
## 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}"
## 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
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"
mkdir -p "${WORKSPACE}"
chown "${EMACS_UID}":"${EMACS_GID}" "${WORKSPACE}"
su-exec "${UNAME}" "$@"
You can’t perform that action at this time.