diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..e91ea02 --- /dev/null +++ b/install.sh @@ -0,0 +1,257 @@ +#!/bin/bash + +ask_envs() { + + echo "Public proxy? (y/N)"; + read -r ANSWER; + if [ "$ANSWER" == "y" ] || [ "$ANSWER" == "Y" ]; then + PUBLIC_PROXY="yes"; + else + PUBLIC_PROXY="no"; + fi + + echo "Smarthost proxy? (Y/n)"; + read -r ANSWER; + if [ "$ANSWER" == "n" ] || [ "$ANSWER" == "N" ]; then + SMARTHOST_PROXY="no"; + else + SMARTHOST_PROXY="yes"; + fi + + echo "Local proxy? (Y/n)"; + read -r ANSWER; + if [ "$ANSWER" == "n" ] || [ "$ANSWER" == "N" ]; then + LOCAL_PROXY="no"; + else + LOCAL_PROXY="yes"; + fi + + echo "VPN proxy? (Y/n)"; + read -r ANSWER; + if [ "$ANSWER" == "n" ] || [ "$ANSWER" == "N" ]; then + VPN_PROXY="no"; + else + VPN_PROXY="yes"; + fi + + echo "Cron? (Y/n)"; + read -r ANSWER; + if [ "$ANSWER" == "n" ] || [ "$ANSWER" == "N" ]; then + CRON="no"; + else + CRON="yes"; + fi + + echo "Please add the letsencrypt mail address:"; + while read -r LETSENCRYPT_MAIL; do + if [ "$LETSENCRYPT_MAIL" != "" ]; then + if [ "$(echo "$LETSENCRYPT_MAIL" | grep '@')" != "" ]; then + if [ "$(echo "$LETSENCRYPT_MAIL" | grep '\.')" != "" ]; then + break; + fi; + fi; + fi; + echo "Invalid email address."; + done +} + +check_dirs_and_files() { + + if [ ! -d "/etc/user/config" ]; then + mkdir -p "/etc/user/config" + fi; + if [ ! -d "/etc/system" ]; then + mkdir "/etc/system" + fi; + + if [ ! -f "/etc/user/config/system.json" ]; then + { + echo ' +{ + "NETWORK": { + "IP_POOL_START": "172.19.0.0", + "IP_POOL_END": "172.19.254.0", + "IP_SUBNET": "24" + } +} +'; + } > "/etc/user/config/system.json" + fi; + + { + echo "alias service-debian='docker run --rm \ + -w /services/ \ + -e DOCKER_REGISTRY_URL=registry.format.hu \ + -e USER_INIT_PATH=/etc/user/config \ + -e CA_PATH=/etc/ssl/certs \ + -e DNS_DIR=/etc/system/data/dns \ + -e HOST_FILE=/etc/dns/hosts.local \ + -v /etc/system/data/dns:/etc/dns:rw \ + -v /etc/ssl/certs:/etc/ssl/certs:ro \ + -v /etc/user/config/user.json:/etc/user/config/user.json:ro \ + -v /etc/user/config/system.json:/etc/user/config/system.json:ro \ + -v /etc/user/config/services/:/services/:ro \ + -v /etc/user/config/services/tmp:/services/tmp:rw \ + -v /var/run/docker.sock:/var/run/docker.sock \ + -v /usr/bin/docker:/usr/bin/docker:ro \ + registry.format.hu/setup'"; + + echo "alias service-galaxis='docker run --rm \ + -w /services/ \ + -e DOCKER_REGISTRY_URL=registry.galaxis.xyz \ + -e USER_INIT_PATH=/etc/user/data/galaxis \ + -e CA_PATH=/etc/ssl/certs \ + -e DNS_DIR=/etc/system/data/dns \ + -e HOST_FILE=/etc/dns/hosts.local \ + -v /etc/system/data/dns:/etc/dns:rw \ + -v /etc/ssl/certs:/etc/ssl/certs:ro \ + -v /etc/user/data/galaxis/user.json:/etc/user/data/galaxis/user.json:ro \ + -v /etc/user/data/galaxis/system.json:/etc/user/data/galaxis/system.json:ro \ + -v /etc/user/data/galaxis/services/:/services/:ro \ + -v /etc/user/data/galaxis/services/tmp:/services/tmp:rw \ + -v /var/run/docker.sock:/var/run/docker.sock \ + -v /usr/bin/docker:/usr/bin/docker:ro \ + registry.galaxis.xyz/setup'"; + + } > $HOME/.bash_aliases + +} + +check_running() { + + DOCKERD_STATUS=$(systemctl status docker | grep running | wc -l) + if [ "$DOCKERD_STATUS" == "0" ]; then + systemctl start docker + sleep 5; + DOCKERD_STATUS=$(systemctl status docker | grep running | wc -l) + if [ "$DOCKERD_STATUS" == "0" ]; then + echo "Docker daemon not running, please check and execute again install script"; + exit; + fi + fi + + # bridge check + BRIDGE_NUM=$(docker network ls | grep bridge | awk '{print $2":"$3}' | sort | uniq | wc -l); + + CONTAINER_NUM=$(docker ps -a | wc -l); + + if [ "$BRIDGE_NUM" != "1" ] && [ "$CONTAINER_NUM" != "1" ]; then + + echo "There are existsing containers and/or networks."; + echo "Please select from the following options (1/2/3):"; + + echo "1 - Delete all existing containers and networks before installation"; + echo "2 - Stop the installation process"; + echo "3 - Just continue on my own risk"; + + read -r ANSWER; + + if [ "$ANSWER" == "1" ]; then + echo "1 - Removing exising containers and networks"; + # delete and continue + docker stop $(docker ps |grep Up | awk '{print $1}') + docker system prune -a + + elif [ "$ANSWER" == "3" ]; then + echo "3 - You have chosen to continue installation process." + + else # default: 2 - stop installastion + echo "2 - Installation process was stopped"; + exit; + fi; + + fi; +} + +install_docker() { + + # set package names + CONTAINERD="containerd.io_"$CONTAINERD_VERSION"_"$DOCKER_ARCH".deb"; + DOCKER_CE="docker-ce_"$DOCKER_VERSION"_"$DOCKER_ARCH".deb"; + DOCKER_CE_CLI="docker-ce-cli_"$DOCKER_VERSION"_"$DOCKER_ARCH".deb"; + #DOCKER_BUILDX="docker-buildx-plugin_"$DOCKER_VERSION"_"$DOCKER_ARCH".deb"; + #DOCKER_COMPOSE="docker-compose-plugin_"$DOCKER_VERSION"_"$DOCKER_ARCH".deb"; + + CONTAINERD_INSTALLED=$(dpkg -s containerd.io | wc -l); + if [ "$CONTAINERD_INSTALLED" == "0" ]; then + # Download debian package + echo "Download package from: " $DOCKER_URL$CONTAINERD; + wget -O $PKG_DIR/$CONTAINERD $DOCKER_URL$CONTAINERD; + + # Install package + dpkg -i $PKG_DIR/$CONTAINERD; + fi; + + DOCKERCE_INSTALLED=$(dpkg -s docker-ce | wc -l); + if [ "$DOCKERCE_INSTALLED" == "0" ]; then + # Download debian package + echo "Download package from: " $DOCKER_URL$DOCKER_CE; + wget -O $PKG_DIR/$DOCKER_CE $DOCKER_URL$DOCKER_CE; + + # Install package + dpkg -i $PKG_DIR/$DOCKER_CE; + fi; + + DOCKERCECLI_INSTALLED=$(dpkg -s docker-ce-cli | wc -l); + if [ "$DOCKERCECLI_INSTALLED" == "0" ]; then + # Download debian package + echo "Download package from: " $DOCKER_URL$DOCKER_CE_CLI; + wget -O $PKG_DIR/$DOCKER_CE_CLI $DOCKER_URL$DOCKER_CE_CLI; + + # Install package + dpkg -i $PKG_DIR/$DOCKER_CE_CLI; + fi; + + # verify ??? + systemctl start docker + + # remove downloaded packages ??? + # rm $PKG_DIR/$CONTAINERD $PKG_DIR/$DOCKER_CE $PKG_DIR/$DOCKER_CE_CLI $PKG_DIR/$DOCKER_BUILDX $PKG_DIR/$DOCKER_COMPOSE + +} + +# set variables to install docker from debian packages +DOCKER_URL="https://download.docker.com/linux/debian/dists/bullseye/pool/stable/amd64/"; +CONTAINERD_VERSION="1.6.20-1"; +DOCKER_VERSION="23.0.5-1~debian.11~bullseye"; +DOCKER_ARCH="amd64"; +PKG_DIR="/tmp" + +#install_docker; +# install docker using apt-get +echo exit 101 > /usr/sbin/policy-rc.d +chmod +x /usr/sbin/policy-rc.d +apt-get update +apt-get install ca-certificates curl gnupg +install -m 0755 -d /etc/apt/keyrings +curl -fsSL https://download.docker.com/linux/debian/gpg | gpg --dearmor -o /etc/apt/keyrings/docker.gpg +chmod a+r /etc/apt/keyrings/docker.gpg +. /etc/os-release; +echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian "$VERSION_CODENAME" stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null + +apt-get -y install --no-install-recommends docker-ce docker-ce-cli containerd.io +sleep 5 + +check_running; + +check_dirs_and_files; + +ask_envs; + +docker run \ +--volume $HOME/.ssh/installer:/root/.ssh/id_rsa \ +--env PUBLIC_PROXY=$PUBLIC_PROXY \ +--env SMARTHOST_PROXY=$SMARTHOST_PROXY \ +--env LOCAL_PROXY=$LOCAL_PROXY \ +--env VPN_PROXY=$VPN_PROXY \ +--env CRON=$CRON \ +--volume /etc/user/:/etc/user/ \ +--volume /etc/system/:/etc/system/ \ +--env LETSENCRYPT_MAIL=$LETSENCRYPT_MAIL registry.format.hu/proxy-deployment-tool + +# test - alias doesn't work inside a function +shopt -s expand_aliases +source $HOME/.bash_aliases +service-debian core-dns start info + +