This repository has been archived by the owner on Dec 4, 2023. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathupdate.sh
134 lines (106 loc) · 4.75 KB
/
update.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#!/usr/bin/env bash
[ ! -n "$BASH_VERSION" ] && echo "You can only run this script with bash, not sh / dash." && exit 1
set -eou pipefail
echo ""
echo -e "🤖 Prem updater"
echo -e "This script will update Prem to latest versions"
echo ""
ORIGINAL_HOME=$(eval echo ~$SUDO_USER)
# Check if the Prem configuration directory exists
if [ ! -f "$ORIGINAL_HOME/prem/config" ]; then
echo "Prem configuration directory ($ORIGINAL_HOME/prem/config) not found."
echo "You need to install Prem first. Run 'sudo bash install.sh'."
exit 1
fi
DEFAULT_PREM_BOX_USER=premai-io
DEFAULT_PREM_BOX_BRANCH=main
DEFAULT_PREM_REGISTRY_BRANCH=main
PREM_BOX_REPO=prem-box
PREM_BOX_USER=${1:-$DEFAULT_PREM_BOX_USER}
PREM_BOX_BRANCH=${2:-$DEFAULT_PREM_BOX_BRANCH}
PREM_REGISTRY_BRANCH=${3:-$DEFAULT_PREM_REGISTRY_BRANCH}
PREM_REGISTRY_URL=https://raw.githubusercontent.com/premAI-io/prem-registry/$PREM_REGISTRY_BRANCH/manifests.json
# update all to latest release images
echo "⬇️ Pulling latest versions..."
curl --silent https://raw.githubusercontent.com/$PREM_BOX_USER/$PREM_BOX_REPO/$PREM_BOX_BRANCH/versions.json -o $ORIGINAL_HOME/prem/versions.json
versions_json=$(cat "$ORIGINAL_HOME"/prem/versions.json)
# Extract the 'app' details
app_version=$(echo "$versions_json" | jq -r '.prem.app.version')
app_image=$(echo "$versions_json" | jq -r '.prem.app.image')
app_digest=$(echo "$versions_json" | jq -r '.prem.app.digest')
echo "Prem-App Version: $app_version"
echo "Prem-App Image: $app_image"
echo "Prem-App Digest: $app_digest"
# Extract the 'daemon' details
daemon_version=$(echo "$versions_json" | jq -r '.prem.daemon.version')
daemon_image=$(echo "$versions_json" | jq -r '.prem.daemon.image')
daemon_digest=$(echo "$versions_json" | jq -r '.prem.daemon.digest')
echo "Prem-Daemon Version: $daemon_version"
echo "Prem-Daemon Image: $daemon_image"
echo "Prem-Daemon Digest: $daemon_digest"
# Extract the 'dnsd' details
dnsd_version=$(echo "$versions_json" | jq -r '.prem.dnsd.version')
dnsd_image=$(echo "$versions_json" | jq -r '.prem.dnsd.image')
dnsd_digest=$(echo "$versions_json" | jq -r '.prem.dnsd.digest')
echo "Dnsd Version: $dnsd_version"
echo "Dnsd Image: $dnsd_image"
echo "Dnsd Digest: $dnsd_digest"
# Extract the 'controllerd' details
controllerd_version=$(echo "$versions_json" | jq -r '.prem.controllerd.version')
controllerd_image=$(echo "$versions_json" | jq -r '.prem.controllerd.image')
controllerd_digest=$(echo "$versions_json" | jq -r '.prem.controllerd.digest')
echo "Controllerd Version: $controllerd_version"
echo "Controllerd Image: $controllerd_image"
echo "Controllerd Digest: $controllerd_digest"
# Extract the 'authd' details
authd_version=$(echo "$versions_json" | jq -r '.prem.authd.version')
authd_image=$(echo "$versions_json" | jq -r '.prem.authd.image')
authd_digest=$(echo "$versions_json" | jq -r '.prem.authd.digest')
echo "Authd Version: $authd_version"
echo "Authd Image: $authd_image"
echo "Authd Digest: $authd_digest"
set -e
echo ""
echo "🔧 Configure Prem..."
# Check if the network exists
if ! docker network inspect prem-gateway >/dev/null 2>&1; then
docker network create prem-gateway
fi
export PREM_APP_IMAGE=${app_image}:${app_version}@${app_digest}
export PREM_DAEMON_IMAGE=${daemon_image}:${daemon_version}@${daemon_digest}
export PREMG_DNSD_IMAGE=${dnsd_image}:${dnsd_version}@${dnsd_digest}
export PREMG_CONTROLLERD_IMAGE=${controllerd_image}:${controllerd_version}@${controllerd_digest}
export PREMG_AUTHD_IMAGE=${authd_image}:${authd_version}@${authd_digest}
export PREM_REGISTRY_URL=${PREM_REGISTRY_URL}
has_gpu() {
lspci | grep -i 'NVIDIA' > /dev/null 2>&1
}
echo ""
echo "🏁 Starting Prem..."
# Check for GPU
if has_gpu; then
docker-compose -f $ORIGINAL_HOME/prem/docker-compose.premapp.premd.yml -f $ORIGINAL_HOME/prem/docker-compose.gpu.yml -f $ORIGINAL_HOME/prem/docker-compose.premg.yml up -d || exit 1
else
echo "No NVIDIA GPU detected. Running without gpu support..."
docker-compose -f $ORIGINAL_HOME/prem/docker-compose.premapp.premd.yml -f $ORIGINAL_HOME/prem/docker-compose.premg.yml up -d || exit 1
fi
# Loop to check for 'OK' from curl command with maximum 10 retries
retries=0
while [ $retries -lt 10 ]; do
response=$(set +e; curl -s --fail http://localhost:8080/ping; set -e)
if [ "$response" == "OK" ]; then
echo "Received OK. Proceeding to next step."
break
else
echo "Waiting for OK response..."
sleep 2
retries=$((retries + 1))
fi
done
[ "$response" == "OK" ] || { echo "Failed to receive OK response."; exit 1; }
echo -e "🥳 Your Prem instance is updated to the latest version."
echo ""
echo "Please visit http://$(curl -4s https://ifconfig.io) to get started."
echo ""
echo "You secrets are stored in $ORIGINAL_HOME/prem/secrets"
echo "ie. cat $ORIGINAL_HOME/prem/secrets"