258 lines
7.2 KiB
Bash
Executable File
258 lines
7.2 KiB
Bash
Executable File
#!/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
|
|
|
|
|