From 7d38d85f6883724d43d4b45f5a115cfdcb1ae745 Mon Sep 17 00:00:00 2001 From: Adam Parler Date: Sun, 9 Jul 2023 16:09:38 -0700 Subject: [PATCH] Created script to configure ZFS and admin accounts and then install services --- setup_server.sh | 206 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 206 insertions(+) create mode 100755 setup_server.sh diff --git a/setup_server.sh b/setup_server.sh new file mode 100755 index 0000000..8e0956d --- /dev/null +++ b/setup_server.sh @@ -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!" + + + + + + + + + +########################################### + + + + +