installs/docker.sh
2025-05-22 11:14:54 +02:00

173 lines
6 KiB
Bash

#!/usr/bin/env bash
# ─< Check if the given command exists silently >─────────────────────────────────────────
command_exists() {
command -v "$@" >/dev/null 2>&1
}
# WHY:
# This import will give you the following variables:
# _sudo="sudo -E" <- only if non root user
# distro = <distro name, like 'arch', 'debian', 'fedora'..>
# arch = bool
# fedora = bool
# opensuse = bool....
# You can then use it for, `if $arch; then`
# Also this gives you the _install command, which installs a package pased on the packagemanager/distro used.
# CAUTION:
# This only wokrs for generic package names, like neovim, or vim, or tmux etc..
# not every package packagemanager has the same packagenames for their packages..
getImports() {
local url="$1"
local import="$(mktemp)"
# ─< if $1 is a local file, source this one instead >─────────────────────────────────────
if [ -f "$url" ]; then
source "$url"
sleep 0.1
return 0
else
# ─< if $1 is a url, grab it and source it, also deletes afterwards >─────────────────────
if command_exists curl; then
curl -fsSL $url -o $import
elif command_exists wget; then
wget -o $import $url
else
echo "curl/wget is required, but missing.."
exit 69
fi
source "$import"
echo_info "Sourcing external script:${NC} $url"
sleep 0.1
rm -f "$import"
fi
}
init_docker() {
if command_exists docker; then
if confirm "Docker was installed correctly. Do you want to add $(whoami) to the docker group?" </dev/tty; then
$_sudo usermod -aG docker "$(whoami)"
fi
# spin and run
spin bold grey "Enabling docker service.."
if run --err err $_sudo systemctl enable --now docker; then
check "Docker service is enabled!"
else
throw "Could not setup the service.."
echo_error "${err:-}"
fi
echo_info "$(whoami) is now part of the docker group. Restart your session to enable the changes. Also docker was addet as a service. Should autostart from now on."
else
echo_error "Something went wrong!"
fi
}
_arch() {
local err
# run _install docker docker-compose --noconfirm
# spin blue bold "Executing arch.."
# sleep 1.3
spin bold grey "Executing arch.. installing $PACKAGE"
if run --err err _install docker docker-compose --noconfirm; then
check "Docker was installed"
else
throw "Could not install docker"
echo_error "${err:-}"
fi
}
_debian() {
if ! $trixie; then
echo_info "executing debian"
sleep 1.3
run $_sudo apt-get update &&
run $_sudo apt-get install -y ca-certificates curl &&
run $_sudo install -m 0755 -d /etc/apt/keyrings &&
run $_sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc &&
run $_sudo chmod a+r /etc/apt/keyrings/docker.asc &&
sleep 0.5
if [ "$VERSION_CODENAME" == "trixie" ]; then
VERSION_CODENAME="bookworm"
fi
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/debian \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | $_sudo tee /etc/apt/sources.list.d/docker.list >/dev/null
echo_info "Addet repository. Updating and installing now.."
sleep 1
run $_sudo apt-get update
run checkAndInstall "docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin"
else
echo_info "executing trixie.."
run _install docker.io docker-compose
fi
}
_ubuntu() {
echo_info "executing ubuntu"
sleep 2
run $_sudo apt-get update &&
run $_sudo apt-get install -y ca-certificates curl &&
run $_sudo install -m 0755 -d /etc/apt/keyrings &&
run $_sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc &&
run $_sudo chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | $_sudo tee /etc/apt/sources.list.d/docker.list >/dev/null
echo_info "Addet repository. Updating and installing now.."
sleep 0.5
run $_sudo apt-get update
run checkAndInstall "docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin"
}
_fedora() {
echo_info "executing fedora"
sleep 2
run _install dnf-plugins-core
run $_sudo dnf config-manager --add-repo https://download.docker.com/linux/fedora/docker-ce.repo
run checkAndInstall "docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin"
}
main() {
case "$distro" in
arch) _arch ;;
debian) _debian ;;
ubuntu) _ubuntu ;;
fedora) _fedora ;;
*) echo "$distro is not supported by this script" ;;
esac
}
if getImports "https://git.k4li.de/scripts/beddu/raw/branch/main/dist/beddu.sh" && getImports "https://git.k4li.de/scripts/imports/raw/branch/main/distros.sh"; then
# ─< package variable >───────────────────────────────────────────────────────────────────
unset PACKAGE
# ─< argument list variables >────────────────────────────────────────────────────────────
silent=false
sleep 0.1
PACKAGE=docker
if command_exists "$PACKAGE"; then
echo_warning "$PACKAGE is already installed!"
echo_warning "Exiting now!"
exit 69
fi
# ─< parse arguments and get variable contents >──────────────────────────────────────────
for arg in "$@"; do
case "$arg" in
--silent | -s)
export silent=true
;;
esac
done
if main; then
init_docker
fi
fi