219 lines
6.6 KiB
Bash
219 lines
6.6 KiB
Bash
#!/bin/bash
|
|
|
|
# Iran Docker Management Script
|
|
# Author: https://github.com/Linuxmaster14
|
|
|
|
RED='\033[1;31m'
|
|
GREEN='\033[1;32m'
|
|
CYAN='\033[1;36m'
|
|
NC='\033[0m'
|
|
|
|
# Check if script is running with root privileges
|
|
if [ "$EUID" -ne 0 ]; then
|
|
echo -e "${RED}Error:${NC} Please run this script as root (use sudo)"
|
|
exit 1
|
|
fi
|
|
|
|
# Main menu options
|
|
main_menu_items=("Set DNS" "Install Docker" "Update Docker" "Set Docker Proxy" "Exit")
|
|
|
|
# Available DNS providers and their servers
|
|
dns_options=("Shecan" "Radar" "Electro" "Begzar" "DNS Pro" "403" "Google" "Cloudflare" "Reset to Default")
|
|
declare -A dns_servers=(
|
|
["Shecan"]="178.22.122.100 185.51.200.2"
|
|
["Radar"]="10.202.10.10 10.202.10.11"
|
|
["Electro"]="78.157.42.100 78.157.42.101"
|
|
["Begzar"]="185.55.226.26 185.55.226.25"
|
|
["DNS Pro"]="87.107.110.109 87.107.110.110"
|
|
["403"]="10.202.10.202 10.202.10.102"
|
|
["Google"]="8.8.8.8 8.8.4.4"
|
|
["Cloudflare"]="1.1.1.1 1.0.0.1"
|
|
["Reset to Default"]="127.0.0.53"
|
|
)
|
|
|
|
# Iranian Docker registry mirrors
|
|
registry_proxies=(
|
|
"docker.iranserver.com"
|
|
"docker.haiocloud.com"
|
|
"registry.docker.ir"
|
|
"docker.arvancloud.ir"
|
|
"focker.ir"
|
|
)
|
|
|
|
# DNS Management Functions
|
|
backup_resolv() {
|
|
cp /etc/resolv.conf "/etc/resolv.conf.bak.$(date +%Y%m%d_%H%M%S)"
|
|
}
|
|
|
|
# Set DNS servers based on user selection
|
|
set_dns() {
|
|
echo
|
|
for i in "${!dns_options[@]}"; do
|
|
echo " $((i + 1))) ${dns_options[$i]}"
|
|
done
|
|
echo " 0) Back"
|
|
echo
|
|
read -rp "Select DNS (0-${#dns_options[@]}): " dns_choice
|
|
|
|
if [[ "$dns_choice" == "0" ]]; then return; fi
|
|
if [[ ! "$dns_choice" =~ ^[0-9]+$ ]] || (( dns_choice < 1 || dns_choice > ${#dns_options[@]} )); then
|
|
echo -e "${RED}Invalid DNS option${NC}"; return
|
|
fi
|
|
|
|
provider="${dns_options[$((dns_choice - 1))]}"
|
|
dns_list="${dns_servers[$provider]}"
|
|
|
|
# Create backup before making changes
|
|
backup_resolv
|
|
|
|
# Write new DNS configuration
|
|
{
|
|
echo "# DNS updated on $(date) by iran-docker script"
|
|
for dns in $dns_list; do
|
|
echo "nameserver $dns"
|
|
done
|
|
if [ "$provider" != "Reset to Default" ]; then
|
|
echo "options edns0 trust-ad"
|
|
grep "^search" /etc/resolv.conf 2>/dev/null
|
|
fi
|
|
} > /etc/resolv.conf
|
|
|
|
echo -e "${GREEN}DNS updated to:${NC} $provider"
|
|
}
|
|
|
|
# Docker Management Functions
|
|
|
|
install_docker() {
|
|
# Check if Docker is already installed
|
|
if command -v docker >/dev/null 2>&1; then
|
|
version=$(docker version --format '{{.Server.Version}}' 2>/dev/null)
|
|
if [ -n "$version" ]; then
|
|
echo -e "${GREEN}Docker is already installed. Version: $version${NC}"
|
|
return
|
|
fi
|
|
fi
|
|
|
|
echo -e "${CYAN}Starting Docker installation...${NC}"
|
|
|
|
# Update package lists
|
|
echo -e "${GREEN}Updating package lists...${NC}"
|
|
if ! apt-get update -qq >/dev/null 2>&1; then
|
|
echo -e "${RED}Error:${NC} Failed to update package lists."
|
|
return 1
|
|
fi
|
|
|
|
# Upgrade system packages
|
|
echo -e "${GREEN}Upgrading system packages...${NC}"
|
|
if ! apt-get upgrade -y -qq >/dev/null 2>&1; then
|
|
echo -e "${RED}Error:${NC} Failed to upgrade packages."
|
|
return 1
|
|
fi
|
|
|
|
# Install required dependencies
|
|
echo -e "${GREEN}Installing required packages (curl)...${NC}"
|
|
if ! apt-get install -y -qq curl >/dev/null 2>&1; then
|
|
echo -e "${RED}Error:${NC} Failed to install prerequisites."
|
|
return 1
|
|
fi
|
|
|
|
# Download and run Docker installation script
|
|
echo -e "${GREEN}Downloading and installing Docker...${NC}"
|
|
if ! curl -fsSL https://get.docker.com | sh >/dev/null 2>&1; then
|
|
echo -e "${RED}Error:${NC} Docker installation script failed."
|
|
return 1
|
|
fi
|
|
|
|
# Verify Docker installation
|
|
if ! command -v docker >/dev/null 2>&1; then
|
|
echo -e "${RED}Error:${NC} Docker command not found after installation."
|
|
return 1
|
|
fi
|
|
|
|
# Get and display Docker version
|
|
version=$(docker version --format '{{.Server.Version}}' 2>/dev/null)
|
|
if [ -z "$version" ]; then
|
|
echo -e "${RED}Error:${NC} Could not retrieve Docker version."
|
|
return 1
|
|
fi
|
|
|
|
echo -e "${GREEN}Docker installed successfully. Version: $version${NC}"
|
|
}
|
|
|
|
# Update Docker to the latest version
|
|
update_docker() {
|
|
# Check if Docker is installed
|
|
if ! command -v docker >/dev/null 2>&1; then
|
|
echo -e "${RED}Docker is not installed.${NC} Please install it first."
|
|
return
|
|
fi
|
|
|
|
echo -e "${CYAN}Updating Docker to the latest version...${NC}"
|
|
|
|
# Download and run Docker installation script (also works for updates)
|
|
echo -e "${GREEN}Downloading and installing Docker...${NC}"
|
|
if ! curl -fsSL https://get.docker.com | sh >/dev/null 2>&1; then
|
|
echo -e "${RED}Error:${NC} Docker update script failed."
|
|
return 1
|
|
fi
|
|
|
|
# Display updated version
|
|
version=$(docker version --format '{{.Server.Version}}' 2>/dev/null)
|
|
echo -e "${GREEN}Docker updated successfully. Version: $version${NC}"
|
|
}
|
|
|
|
# Configure Docker to use Iranian registry mirrors
|
|
set_docker_proxy() {
|
|
echo
|
|
echo -e "${CYAN}Select Docker Registry Mirror:${NC}"
|
|
for i in "${!registry_proxies[@]}"; do
|
|
echo " $((i + 1))) https://${registry_proxies[$i]}"
|
|
done
|
|
echo " 0) Back"
|
|
echo
|
|
read -rp "Select (0-${#registry_proxies[@]}): " proxy_choice
|
|
|
|
if [[ "$proxy_choice" == "0" ]]; then return; fi
|
|
if [[ ! "$proxy_choice" =~ ^[0-9]+$ ]] || (( proxy_choice < 1 || proxy_choice > ${#registry_proxies[@]} )); then
|
|
echo -e "${RED}Invalid option${NC}"; return
|
|
fi
|
|
|
|
mirror="${registry_proxies[$((proxy_choice - 1))]}"
|
|
|
|
# Create Docker configuration directory
|
|
mkdir -p /etc/docker
|
|
|
|
# Create daemon.json with registry mirror configuration
|
|
echo -e "{\n \"registry-mirrors\": [\"https://$mirror\"]\n}" > /etc/docker/daemon.json
|
|
|
|
# Restart Docker service to apply changes
|
|
systemctl daemon-reexec
|
|
systemctl restart docker
|
|
|
|
echo -e "${GREEN}Docker proxy set to:${NC} $mirror"
|
|
}
|
|
|
|
# Main Menu and Program Entry Point
|
|
main_menu() {
|
|
while true; do
|
|
echo
|
|
echo -e "${CYAN}Main Menu:${NC}"
|
|
for i in "${!main_menu_items[@]}"; do
|
|
echo " $((i + 1))) ${main_menu_items[$i]}"
|
|
done
|
|
echo
|
|
read -rp "Select an option (1-${#main_menu_items[@]}): " choice
|
|
|
|
case "$choice" in
|
|
1) set_dns ;;
|
|
2) install_docker ;;
|
|
3) update_docker ;;
|
|
4) set_docker_proxy ;;
|
|
5) echo -e "${CYAN}Bye.${NC}"; exit 0 ;;
|
|
*) echo -e "${RED}Invalid choice${NC}" ;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
# Start the program
|
|
main_menu
|