11#! /bin/bash
22
3+ set -e # Exit on any error
4+
35# Check if script is run as root
46if [ " $( id -u) " -ne 0 ]; then
57 echo " Error: This script must be run as root (sudo ./install-postgresus.sh)" >&2
2729 log " Directory already exists: $INSTALL_DIR "
2830fi
2931
32+ # Detect OS
33+ detect_os () {
34+ if [ -f /etc/os-release ]; then
35+ . /etc/os-release
36+ OS=$ID
37+ VERSION_CODENAME=${VERSION_CODENAME:- }
38+ else
39+ log " ERROR: Cannot detect OS. /etc/os-release not found."
40+ exit 1
41+ fi
42+ }
43+
3044# Check if Docker is installed
3145if ! command -v docker & > /dev/null; then
3246 log " Docker not found. Installing Docker..."
3347
34- # Install Docker
48+ detect_os
49+ log " Detected OS: $OS , Codename: $VERSION_CODENAME "
50+
51+ # Install prerequisites
3552 apt-get update
36- apt-get remove -y docker docker-engine docker.io containerd runc
37- apt-get install -y ca-certificates curl gnupg lsb-release
38- mkdir -p /etc/apt/keyrings
39- curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
40- echo " deb [arch=$( dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $( lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
53+ apt-get install -y ca-certificates curl gnupg
54+
55+ # Set up Docker repository
56+ install -m 0755 -d /etc/apt/keyrings
57+
58+ # Determine Docker repo URL based on OS
59+ case " $OS " in
60+ ubuntu)
61+ DOCKER_URL=" https://download.docker.com/linux/ubuntu"
62+ # Fallback for unsupported versions
63+ case " $VERSION_CODENAME " in
64+ plucky|oracular) VERSION_CODENAME=" noble" ;; # Ubuntu 25.x -> 24.04
65+ esac
66+ ;;
67+ debian)
68+ DOCKER_URL=" https://download.docker.com/linux/debian"
69+ # Fallback for unsupported versions
70+ case " $VERSION_CODENAME " in
71+ trixie|forky) VERSION_CODENAME=" bookworm" ;; # Debian 13/14 -> 12
72+ esac
73+ ;;
74+ * )
75+ log " ERROR: Unsupported OS: $OS . Please install Docker manually."
76+ exit 1
77+ ;;
78+ esac
79+
80+ log " Using Docker repository: $DOCKER_URL with codename: $VERSION_CODENAME "
81+
82+ # Download and add Docker GPG key (no sudo needed - already root)
83+ curl -fsSL " $DOCKER_URL /gpg" | gpg --dearmor -o /etc/apt/keyrings/docker.gpg
84+ chmod a+r /etc/apt/keyrings/docker.gpg
85+
86+ # Add Docker repository
87+ echo " deb [arch=$( dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] $DOCKER_URL $VERSION_CODENAME stable" > /etc/apt/sources.list.d/docker.list
88+
4189 apt-get update
42- apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
90+ apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
91+
92+ # Verify Docker installation
93+ if ! command -v docker & > /dev/null; then
94+ log " ERROR: Docker installation failed!"
95+ exit 1
96+ fi
97+
4398 log " Docker installed successfully"
4499else
45100 log " Docker already installed"
46101fi
47102
48- # Check if docker-compose is installed
49- if ! command -v docker-compose & > /dev/null && ! command -v docker compose & > /dev/null; then
50- log " Docker Compose not found. Installing Docker Compose..."
51- apt-get update
52- apt-get install -y docker-compose-plugin
53- log " Docker Compose installed successfully"
103+ # Check if docker compose is available
104+ if ! docker compose version & > /dev/null; then
105+ log " ERROR: Docker Compose plugin not available!"
106+ exit 1
54107else
55- log " Docker Compose already installed "
108+ log " Docker Compose available "
56109fi
57110
58111# Write docker-compose.yml
59112log " Writing docker-compose.yml to $INSTALL_DIR "
60113cat > " $INSTALL_DIR /docker-compose.yml" << 'EOF '
61- version: "3"
62-
63114services:
64115 postgresus:
65116 container_name: postgresus
@@ -75,11 +126,15 @@ log "docker-compose.yml created successfully"
75126# Start PostgresUS
76127log " Starting PostgresUS..."
77128cd " $INSTALL_DIR "
78- docker compose up -d
79- log " PostgresUS started successfully"
129+ if docker compose up -d; then
130+ log " PostgresUS started successfully"
131+ else
132+ log " ERROR: Failed to start PostgresUS!"
133+ exit 1
134+ fi
80135
81136log " Postgresus installation completed successfully!"
82137log " -------------------------------------------"
83138log " To launch:"
84139log " > cd $INSTALL_DIR && docker compose up -d"
85- log " Access Postgresus at: http://localhost:4005"
140+ log " Access Postgresus at: http://localhost:4005"
0 commit comments