update
This commit is contained in:
parent
f25720eb42
commit
5afea426a5
1 changed files with 233 additions and 0 deletions
233
install/docker-install.sh
Normal file
233
install/docker-install.sh
Normal file
|
@ -0,0 +1,233 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#-----------------------------------#
|
||||||
|
# VARIABLES #
|
||||||
|
#-----------------------------------#
|
||||||
|
|
||||||
|
this_script_url="https://example.com/docker-install.sh"
|
||||||
|
this_script_name="Docker Installation Script"
|
||||||
|
formatter_url="https://git.hhf.technology/hhf/TaskFormatter/raw/branch/main/bash_task_formatter/task_formatter.sh"
|
||||||
|
scriptname=$0
|
||||||
|
|
||||||
|
# Initialize success flag
|
||||||
|
success=0
|
||||||
|
|
||||||
|
# Determine the user (use the first argument if provided, otherwise fallback)
|
||||||
|
USER_TO_RUN_AS="${1:-$SUDO_USER}"
|
||||||
|
USER_HOME=$(eval echo ~$USER_TO_RUN_AS)
|
||||||
|
|
||||||
|
#-----------------------------------#
|
||||||
|
# FORMATTER #
|
||||||
|
#-----------------------------------#
|
||||||
|
|
||||||
|
# Download and source the formatter with error handling
|
||||||
|
download_formatter() {
|
||||||
|
if [ ! -f "task_formatter.sh" ]; then
|
||||||
|
if ! wget "$formatter_url" --no-check-certificate -O task_formatter.sh > /dev/null 2>&1; then
|
||||||
|
echo "Error: Failed to download task_formatter.sh"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ ! -f "task_formatter.sh" ]; then
|
||||||
|
echo "Error: task_formatter.sh not found after download attempt"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Make the formatter executable
|
||||||
|
chmod +x task_formatter.sh
|
||||||
|
|
||||||
|
# Source the formatter with error checking
|
||||||
|
source ./task_formatter.sh || { echo "Error: Failed to source task_formatter.sh"; exit 1; }
|
||||||
|
|
||||||
|
# Check if print_header is available after sourcing
|
||||||
|
if ! declare -f print_header > /dev/null; then
|
||||||
|
echo "Error: print_header function not found after sourcing."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Call the download_formatter function
|
||||||
|
download_formatter
|
||||||
|
|
||||||
|
#-----------------------------------#
|
||||||
|
# FUNCTIONS #
|
||||||
|
#-----------------------------------#
|
||||||
|
|
||||||
|
# Function to check system architecture
|
||||||
|
check_architecture() {
|
||||||
|
local arch=$(uname -m)
|
||||||
|
if [[ "$arch" != "x86_64" && "$arch" != "aarch64" ]]; then
|
||||||
|
echo -e "Unsupported architecture: $arch $CROSS_MARK"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
echo -e "Architecture $arch is supported $CHECK_MARK"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to check OS version
|
||||||
|
check_os_version() {
|
||||||
|
if [ ! -f /etc/os-release ]; then
|
||||||
|
echo -e "Cannot determine OS version $CROSS_MARK"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
source /etc/os-release
|
||||||
|
|
||||||
|
case "$ID $VERSION_ID" in
|
||||||
|
"debian 12"|"ubuntu 22.04"|"ubuntu 24.04")
|
||||||
|
echo -e "OS version $ID $VERSION_ID is supported $CHECK_MARK"
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo -e "Unsupported OS version: $ID $VERSION_ID $CROSS_MARK"
|
||||||
|
return 1
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to install dependencies
|
||||||
|
install_dependencies() {
|
||||||
|
sudo apt-get update > /dev/null 2>&1
|
||||||
|
sudo apt-get install -y ca-certificates curl gnupg > /dev/null 2>&1
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo -e "Dependencies installed $CHECK_MARK"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
echo -e "Failed to install dependencies $CROSS_MARK"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to setup Docker repository
|
||||||
|
setup_docker_repo() {
|
||||||
|
# Create directory for keyrings
|
||||||
|
sudo install -m 0755 -d /etc/apt/keyrings
|
||||||
|
|
||||||
|
# Download Docker's official GPG key
|
||||||
|
curl -fsSL https://download.docker.com/linux/$ID/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
|
||||||
|
sudo chmod a+r /etc/apt/keyrings/docker.gpg
|
||||||
|
|
||||||
|
# Add the repository to Apt sources
|
||||||
|
echo \
|
||||||
|
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/$ID \
|
||||||
|
$VERSION_CODENAME stable" | \
|
||||||
|
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
|
||||||
|
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo -e "Docker repository setup completed $CHECK_MARK"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
echo -e "Docker repository setup failed $CROSS_MARK"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to install Docker
|
||||||
|
install_docker() {
|
||||||
|
sudo apt-get update > /dev/null 2>&1
|
||||||
|
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin > /dev/null 2>&1
|
||||||
|
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo -e "Docker installation completed $CHECK_MARK"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
echo -e "Docker installation failed $CROSS_MARK"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to verify Docker installation
|
||||||
|
verify_docker() {
|
||||||
|
if sudo docker run hello-world > /dev/null 2>&1; then
|
||||||
|
echo -e "Docker verification successful $CHECK_MARK"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
echo -e "Docker verification failed $CROSS_MARK"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Function to add user to docker group
|
||||||
|
setup_docker_user() {
|
||||||
|
sudo usermod -aG docker $USER_TO_RUN_AS
|
||||||
|
if [ $? -eq 0 ]; then
|
||||||
|
echo -e "User added to docker group $CHECK_MARK"
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
echo -e "Failed to add user to docker group $CROSS_MARK"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
# Remove the script itself
|
||||||
|
remove_script() {
|
||||||
|
if [ -f "$0" ]; then
|
||||||
|
echo "Deleted docker installation script..."
|
||||||
|
rm -- "$0"
|
||||||
|
fi
|
||||||
|
if [ -f "task_formatter.sh" ]; then
|
||||||
|
rm task_formatter.sh
|
||||||
|
fi
|
||||||
|
echo -e "Cleaned up $CHECK_MARK"
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
|
#-----------------------------------#
|
||||||
|
# MAIN LOGIC #
|
||||||
|
#-----------------------------------#
|
||||||
|
|
||||||
|
# Check if print_header function exists
|
||||||
|
if ! command -v print_header >/dev/null 2>&1; then
|
||||||
|
echo "Error: print_header function not found. Formatter may not be properly sourced."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Print header
|
||||||
|
print_header "$this_script_name" "$this_script_url"
|
||||||
|
|
||||||
|
echo -e "Running as User: $USER_TO_RUN_AS\nUser Home: $USER_HOME\n"
|
||||||
|
|
||||||
|
# Run the installation functions with formatted output
|
||||||
|
if ! format_output check_architecture "Checking System Architecture"; then
|
||||||
|
success=1
|
||||||
|
exit $success
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! format_output check_os_version "Checking OS Version"; then
|
||||||
|
success=1
|
||||||
|
exit $success
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! format_output install_dependencies "Installing Dependencies"; then
|
||||||
|
success=1
|
||||||
|
exit $success
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! format_output setup_docker_repo "Setting up Docker Repository"; then
|
||||||
|
success=1
|
||||||
|
exit $success
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! format_output install_docker "Installing Docker"; then
|
||||||
|
success=1
|
||||||
|
exit $success
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! format_output verify_docker "Verifying Docker Installation"; then
|
||||||
|
success=1
|
||||||
|
exit $success
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! format_output setup_docker_user "Setting up Docker User"; then
|
||||||
|
success=1
|
||||||
|
exit $success
|
||||||
|
fi
|
||||||
|
|
||||||
|
format_output remove_script "Removing script"
|
||||||
|
|
||||||
|
# Print final message
|
||||||
|
final_message "$this_script_name" "$success"
|
||||||
|
|
||||||
|
# Exit with appropriate status
|
||||||
|
exit $success
|
Loading…
Reference in a new issue