9cecc5051a
-Changed demo to take in input from demoConfig.yaml file -Readme changes for demo.md
123 lines
4.1 KiB
Bash
Executable File
123 lines
4.1 KiB
Bash
Executable File
#! /bin/bash
|
|
|
|
CMD=
|
|
|
|
# Functions
|
|
# TOOD: Check if we can use: getent passwd $USER to extract all variables
|
|
# TODO: Check for valid inputs, cause now it will go through even with bad inputs
|
|
check_envs () {
|
|
DOCKER_CUSTOM_USER_OK=true;
|
|
if [ -z ${DOCKER_USER_NAME+x} ]; then
|
|
DOCKER_CUSTOM_USER_OK=false;
|
|
return;
|
|
fi
|
|
|
|
if [ -z ${DOCKER_USER_ID+x} ]; then
|
|
DOCKER_CUSTOM_USER_OK=false;
|
|
return;
|
|
else
|
|
if ! [ -z "${DOCKER_USER_ID##[0-9]*}" ]; then
|
|
echo -e "\033[1;33mWarning: User-ID should be a number. Falling back to defaults.\033[0m"
|
|
DOCKER_CUSTOM_USER_OK=false;
|
|
return;
|
|
fi
|
|
fi
|
|
|
|
if [ -z ${DOCKER_USER_GROUP_NAME+x} ]; then
|
|
DOCKER_CUSTOM_USER_OK=false;
|
|
return;
|
|
fi
|
|
|
|
if [ -z ${DOCKER_USER_GROUP_ID+x} ]; then
|
|
DOCKER_CUSTOM_USER_OK=false;
|
|
return;
|
|
else
|
|
if ! [ -z "${DOCKER_USER_GROUP_ID##[0-9]*}" ]; then
|
|
echo -e "\033[1;33mWarning: Group-ID should be a number. Falling back to defaults.\033[0m"
|
|
DOCKER_CUSTOM_USER_OK=false;
|
|
return;
|
|
fi
|
|
fi
|
|
}
|
|
|
|
setup_env_user () {
|
|
USER=$1
|
|
USER_ID=$2
|
|
GROUP=$3
|
|
GROUP_ID=$4
|
|
|
|
## Create user
|
|
useradd -m $USER
|
|
|
|
## Copy zsh/sh configs
|
|
cp /root/.profile /home/$USER/
|
|
cp /root/.bashrc /home/$USER/
|
|
cp /root/.zshrc /home/$USER/
|
|
## Copy terminator configs
|
|
mkdir -p /home/$USER/.config/terminator
|
|
cp /root/.config/terminator/config /home/$USER/.config/terminator/config
|
|
cp /root/.config/terminator/background.png /home/$USER/.config/terminator/background.png
|
|
cp -rf /root/.oh-my-zsh /home/$USER/
|
|
cp -rf /root/tkDNN /home/$USER/
|
|
rm -rf /home/$USER/.oh-my-zsh/custom/pure.zsh-theme /home/$USER/.oh-my-zsh/custom/async.zsh
|
|
ln -s /home/$USER/.oh-my-zsh/custom/pure/pure.zsh-theme /home/$USER/.oh-my-zsh/custom/
|
|
ln -s /home/$USER/.oh-my-zsh/custom/pure/async.zsh /home/$USER/.oh-my-zsh/custom/
|
|
sed -i -e 's@ZSH=\"/root@ZSH=\"/home/$USER@g' /home/$USER/.zshrc
|
|
# Copy SSH keys & fix owner
|
|
if [ -d "/root/.ssh" ]; then
|
|
cp -rf /root/.ssh /home/$USER/
|
|
chown -R $USER:$GROUP /home/$USER/.ssh
|
|
fi
|
|
|
|
## Fix owner
|
|
chown $USER:$GROUP /home/$USER
|
|
chown -R $USER:$GROUP /home/$USER/.config
|
|
chown $USER:$GROUP /home/$USER/.profile
|
|
chown $USER:$GROUP /home/$USER/.bashrc
|
|
chown $USER:$GROUP /home/$USER/.zshrc
|
|
chown -R $USER:$GROUP /home/$USER/.oh-my-zsh
|
|
chown -R $USER:$GROUP /home/$USER/tkDNN
|
|
|
|
## This a trick to keep the evnironmental variables of root which is important!
|
|
echo "if ! [ \"$DOCKER_USER_NAME\" = \"$(id -un)\" ]; then" >> /root/.bashrc
|
|
echo " cd /home/$DOCKER_USER_NAME" >> /root/.bashrc
|
|
echo " su $DOCKER_USER_NAME" >> /root/.bashrc
|
|
echo "fi" >> /root/.bashrc
|
|
|
|
echo "if ! [ \"$DOCKER_USER_NAME\" = \"$(id -un)\" ]; then" >> /root/.zshrc
|
|
echo " cd /home/$DOCKER_USER_NAME" >> /root/.zshrc
|
|
echo " su $DOCKER_USER_NAME" >> /root/.zshrc
|
|
echo "fi" >> /root/.zshrc
|
|
|
|
## Setup Password-file
|
|
PASSWDCONTENTS=$(grep -v "^${USER}:" /etc/passwd)
|
|
GROUPCONTENTS=$(grep -v -e "^${GROUP}:" -e "^docker:" /etc/group)
|
|
|
|
(echo "${PASSWDCONTENTS}" && echo "${USER}:x:$USER_ID:$GROUP_ID::/home/$USER:/bin/bash") > /etc/passwd
|
|
(echo "${GROUPCONTENTS}" && echo "${GROUP}:x:${GROUP_ID}:") > /etc/group
|
|
(if test -f /etc/sudoers ; then echo "${USER} ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers ; fi)
|
|
}
|
|
|
|
|
|
# ---Main---
|
|
|
|
# Create new user
|
|
## Check Inputs
|
|
check_envs
|
|
|
|
## Determine user & Setup Environment
|
|
if [ $DOCKER_CUSTOM_USER_OK == true ]; then
|
|
echo " -->DOCKER_USER Input is set to '$DOCKER_USER_NAME:$DOCKER_USER_ID:$DOCKER_USER_GROUP_NAME:$DOCKER_USER_GROUP_ID'";
|
|
echo -e "\033[0;32mSetting up environment for user=$DOCKER_USER_NAME\033[0m"
|
|
setup_env_user $DOCKER_USER_NAME $DOCKER_USER_ID $DOCKER_USER_GROUP_NAME $DOCKER_USER_GROUP_ID
|
|
else
|
|
echo " -->DOCKER_USER* variables not set. Using 'root'.";
|
|
echo -e "\033[0;32mSetting up environment for user=root\033[0m"
|
|
DOCKER_USER_NAME="root"
|
|
fi
|
|
|
|
# Change shell to zsh
|
|
chsh -s /usr/bin/zsh $DOCKER_USER_NAME
|
|
|
|
# Run CMD from Docker
|
|
"$@" |