Created script to configure ZFS and admin accounts and then install services

This commit is contained in:
Adam Parler 2023-07-09 16:09:38 -07:00
parent a42690c99b
commit 7d38d85f68

206
setup_server.sh Executable file
View file

@ -0,0 +1,206 @@
#!/bin/bash
## Define admin user account
export ADMIN_ACCOUNT=sys-admin
## Define bulk storage location
export ZFS_DIR=/data
## Check if user is root
if [ 'whoami' != 'root' ];then
su -
fi
## Ensure HOME directories are stored in ${ZFS_DIR}/home
awk '{sub("#HOME=/home","HOME=/home")} {print}' /etc/default/useradd > /tmp/temp.txt && mv /tmp/temp.txt /etc/default/useradd
awk '{sub("# HOME=/home","HOME=/home")} {print}' /etc/default/useradd > /tmp/temp.txt && mv /tmp/temp.txt /etc/default/useradd
awk -v dir=${ZFS_DIR}/home '{sub("HOME=/home","HOME="dir)} {print}' /etc/default/useradd > /tmp/temp.txt && mv /tmp/temp.txt /etc/default/useradd
## Install a few helpful packages
apt update
apt install -y cockpit
apt update
apt install -y htop nano rsync wget tree
## Check if administrator account exists
if id ${ADMIN_ACCOUNT} &>/dev/null; then
echo 'Admin User account found'
else
## Create and su into sys-admin
echo 'Creating Admin User account ...'
useradd -m -d ${ZFS_DIR}/home/${ADMIN_ACCOUNT} -G sudo ${ADMIN_ACCOUNT}
passwd ${ADMIN_ACCOUNT}
# adduser ${ADMIN_ACCOUNT}
echo "User account created"
fi
su - ${ADMIN_ACCOUNT}
echo "Setting up Docker ..."
## Uninstall old versions
sudo apt remove docker docker-engine docker.io containerd runc
## Set up repository
# sudo apt-get remove docker docker-engine docker.io containerd runc
sudo apt update
sudo apt install -y ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg
echo \
"deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian \
"$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
## Install Docker Engine
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
## Installation of GitLab
echo "Installing GitLab ..."
GITLAB_HOME=${ZFS_DIR}/gitlab
GITLAB_ADDRESS=gitlab.adamhome.dev
GITLAB_EXTERN_HTTPS=14443
GITLAB_EXTERN_HTTP=14080
GITLAB_EXTERN_SSH=14022
sudo docker run --detach \
--hostname ${GITLAB_ADDRESS} \
--publish ${GITLAB_EXTERN_HTTPS}:443 --publish ${GITLAB_EXTERN_HTTP}:80 --publish ${GITLAB_EXTERN_SSH}:22 \
--name gitlab \
--restart always \
--volume ${GITLAB_HOME}/config:/etc/gitlab \
--volume ${GITLAB_HOME}/logs:/var/log/gitlab \
--volume ${GITLAB_HOME}/data:/var/opt/gitlab \
--shm-size 512m \
gitlab/gitlab-ce:latest
## Uncomment if you want to monitor boot-up
# sudo docker logs -f gitlab
# sudo docker exec -it gitlab /bin/bash
# edit /etc/gitlab/gitlab.rb so that gitlab_rails['gitlab_shell_ssh_port'] = ${GITLAB_EXTERN_SSH}
# while still in gitlab env, run gitlab-ctl reconfigure
sudo docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password
echo "Successfully installed GitLab"
## Installation of MineOS
echo "Installing MineOS ..."
USER_NAME=mcadmin
USER_PASSWORD=rootWord
MINEOS_EXTERN_HTTP=13443
sudo docker run -td \
--name=mineos \
-p ${MINEOS_EXTERN_HTTP}:8443 \
-p 25565:25565 \
-e USER_PASSWORD=${USER_PASSWORD} \
-e USER_NAME=${USER_NAME} \
-v ${ZFS_DIR}/minecraft:/var/games/minecraft \
--restart=unless-stopped \
hexparrot/mineos:latest
echo "Successfully installed MineOS"
## Installation of JupyterHub
echo "Installing JupyterHub ..."
export TLJH_INSTALL_PREFIX=${ZFS_DIR}/jupyter
sudo ln -s ${TLJH_INSTALL_PREFIX} /opt/tljh
SYS_MEM=$(grep MemTotal /proc/meminfo | awk '{print $2}')
SYS_CPU=$(grep -c ^processor /proc/cpuinfo)
JUPYTER_EXTERN_HTTP=15080
JUPYTER_EXTERN_HTTPS=15443
if [ $SYS_MEM -gt 2097152 ]
then
let "SYS_MEM = $SYS_MEM - 1048576"
else
let "SYS_MEM = $SYS_MEM / 2"
fi
if [ $SYS_CPU -gt 1 ]
then
let "SYS_CPU = $SYS_CPU - 1"
fi
cat << EOT >> /tmp/requirements.txt
numpy
scipy
matplotlib
pandas
tensorflow
tensorrt
torch
torchvision
torchaudio
EOT
sudo apt install python3 python3-dev git curl
curl -L https://tljh.jupyter.org/bootstrap.py | \
sudo -E python3 - \
--show-progress-page \
--admin ${ADMIN_ACCOUNT}:systemPassword \
--user-requirements-txt-url /tmp/requirements.txt
## Edit Jupyter Environment
sudo tljh-config set http.port ${JUPYTER_EXTERN_HTTP}
sudo tljh-config set https.port ${JUPYTER_EXTERN_HTTPS}
sudo tljh-config set limits.memory ${SYS_MEM}K
sudo tljh-config set limits.cpu ${SYS_CPU}
# sudo tljh-config set user_environment.default_app jupyterlab
sudo tljh-config reload proxy
sudo tljh-config reload
echo "Successfully installed JupyterHub"
## Installation of Nextcloud AIO
echo "Installing Nextcloud AIO ..."
let "AIO_MEM = $SYS_MEM / 1024"
sudo docker run \
--sig-proxy=false \
--name nextcloud-aio-mastercontainer \
--restart always \
--publish 11080:80 \
--publish 8080:8080 \
--publish 11443:8443 \
--env NEXTCLOUD_DATADIR=${ZFS_DIR}/nextcloud/data \
--env NEXTCLOUD_MOUNT=${ZFS_DIR}/nextcloud \
--env APACHE_PORT=11000 \
--env APACHE_IP_BINDING=127.0.0.1 \
--env NEXTCLOUD_MEMORY_LIMIT=${AIO_MEM}M \
--volume nextcloud_aio_mastercontainer:/mnt/docker-aio-config \
--volume /var/run/docker.sock:/var/run/docker.sock:ro \
nextcloud/all-in-one:latest
echo "Successfully installed Nextcloud AIO"
# ./gitlab_install.sh
# ./nextcloud_install.sh
# ./jupyterhub_install.sh
# ./mineos_install.sh
echo "Setup Complete!"
###########################################