Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 70e25b7

Browse files
authored
feat: linux install script (menloresearch#1701)
Co-authored-by: Hien To <[email protected]>
1 parent 0ffe3d4 commit 70e25b7

File tree

1 file changed

+281
-0
lines changed

1 file changed

+281
-0
lines changed

engine/templates/linux/install.sh

Lines changed: 281 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,281 @@
1+
#!/bin/bash -e
2+
3+
# Check for root privileges
4+
if [ "$(id -u)" != "0" ]; then
5+
echo "This script must be run as root. Please run again with sudo."
6+
exit 1
7+
fi
8+
9+
# Determine the home directory based on the user
10+
USER_TO_RUN_AS=${SUDO_USER:-$(whoami)}
11+
if [ "$USER_TO_RUN_AS" = "root" ]; then
12+
USER_HOME="/root"
13+
else
14+
USER_HOME="/home/$USER_TO_RUN_AS"
15+
fi
16+
17+
# Check and suggest installing jq and tar if not present
18+
check_install_jq_tar() {
19+
RED='\033[0;31m'
20+
GREEN='\033[0;32m'
21+
NC='\033[0m' # No Color
22+
23+
if ! command -v jq &> /dev/null; then
24+
echo -e "${RED}jq could not be found ...${NC}"
25+
echo -e "${GREEN}Please install jq then rerun this script${NC}"
26+
exit 1
27+
fi
28+
29+
if ! command -v tar &> /dev/null; then
30+
echo -e "${RED}tar could not be found ...${NC}"
31+
echo -e "${GREEN}Please install tar then rerun this script${NC}"
32+
exit 1
33+
fi
34+
}
35+
36+
# Function to fetch the latest version based on channel
37+
get_latest_version() {
38+
local channel=$1
39+
local tag_name
40+
case $channel in
41+
stable)
42+
tag_name=$(curl -s "https://api.github.com/repos/janhq/cortex.cpp/releases/latest" | grep -oP '"tag_name": "\K(.*)(?=")')
43+
;;
44+
beta)
45+
tag_name=$(curl -s "https://api.github.com/repos/janhq/cortex.cpp/releases" | jq -r '.[] | select(.prerelease) | .tag_name' | head -n 1)
46+
;;
47+
nightly)
48+
tag_name=$(curl -s "https://delta.jan.ai/cortex/latest/version.json" | jq -r '.tag_name')
49+
;;
50+
*)
51+
echo "Invalid channel specified."
52+
exit 1
53+
;;
54+
esac
55+
echo "${tag_name#v}"
56+
}
57+
58+
# Default values
59+
CHANNEL="stable"
60+
VERSION=""
61+
IS_UPDATE="false"
62+
DEB_LOCAL="false"
63+
64+
# Function to parse command-line arguments
65+
parse_args() {
66+
while [[ "$#" -gt 0 ]]; do
67+
case $1 in
68+
--channel)
69+
CHANNEL="$2"
70+
shift 2
71+
;;
72+
--version)
73+
VERSION="$2"
74+
shift 2
75+
;;
76+
--deb_local)
77+
DEB_LOCAL="true"
78+
shift 1
79+
;;
80+
--is_update)
81+
IS_UPDATE="true"
82+
shift 1
83+
;;
84+
*)
85+
echo "Unknown option: $1"
86+
exit 1
87+
;;
88+
esac
89+
done
90+
}
91+
92+
# Call parse_args function to handle options
93+
parse_args "$@"
94+
95+
# Check if VERSION is empty and fetch latest if necessary
96+
if [ -z "$VERSION" ]; then
97+
VERSION=$(get_latest_version $CHANNEL)
98+
fi
99+
100+
# Set paths based on channel
101+
case $CHANNEL in
102+
stable)
103+
CLI_BINARY_NAME="cortex"
104+
SERVER_BINARY_NAME="cortex-server"
105+
DATA_DIR="$USER_HOME/cortexcpp"
106+
UNINSTALL_SCRIPT="/usr/bin/cortex-uninstall.sh"
107+
CONFIGURATION_FILE="$USER_HOME/.cortexrc"
108+
DEB_APP_NAME="cortexcpp"
109+
;;
110+
beta)
111+
CLI_BINARY_NAME="cortex-beta"
112+
SERVER_BINARY_NAME="cortex-server-beta"
113+
DATA_DIR="$USER_HOME/cortexcpp-beta"
114+
UNINSTALL_SCRIPT="/usr/bin/cortex-beta-uninstall.sh"
115+
CONFIGURATION_FILE="$USER_HOME/.cortexrc-beta"
116+
DEB_APP_NAME="cortexcpp-beta"
117+
;;
118+
nightly)
119+
CLI_BINARY_NAME="cortex-nightly"
120+
SERVER_BINARY_NAME="cortex-server-nightly"
121+
DATA_DIR="$USER_HOME/cortexcpp-nightly"
122+
UNINSTALL_SCRIPT="/usr/bin/cortex-nightly-uninstall.sh"
123+
CONFIGURATION_FILE="$USER_HOME/.cortexrc-nightly"
124+
DEB_APP_NAME="cortexcpp-nightly"
125+
;;
126+
*)
127+
echo "Invalid channel specified."
128+
exit 1
129+
;;
130+
esac
131+
132+
INSTALL_DIR="/usr/bin"
133+
134+
# Function to download and extract cortex
135+
install_cortex() {
136+
local channel=$1
137+
local version=$2
138+
local is_deb=$3
139+
local url_binary=""
140+
local url_deb_local=""
141+
local url_deb_network=""
142+
143+
case $channel in
144+
stable)
145+
url_binary="https://github.com/janhq/cortex.cpp/releases/download/v${version}/cortex-${version}-linux-amd64.tar.gz"
146+
url_deb_local="https://github.com/janhq/cortex.cpp/releases/download/v${version}/cortex-${version}-linux-amd64-local-installer.deb"
147+
url_deb_network="https://github.com/janhq/cortex.cpp/releases/download/v${version}/cortex-${version}-linux-amd64-network-installer.deb"
148+
;;
149+
beta)
150+
url_binary="https://github.com/janhq/cortex.cpp/releases/download/v${version}/cortex-${version}-linux-amd64.tar.gz"
151+
url_deb_local="https://github.com/janhq/cortex.cpp/releases/download/v${version}/cortex-${version}-linux-amd64-local-installer.deb"
152+
url_deb_network="https://github.com/janhq/cortex.cpp/releases/download/v${version}/cortex-${version}-linux-amd64-network-installer.deb"
153+
;;
154+
nightly)
155+
url_binary="https://delta.jan.ai/cortex/v${version}/linux-amd64/cortex-nightly.tar.gz"
156+
url_deb_local="https://delta.jan.ai/cortex/v${version}/linux-amd64/cortex-${version}-linux-amd64-local-installer.deb"
157+
url_deb_network="https://delta.jan.ai/cortex/v${version}/linux-amd64/cortex-${version}-linux-amd64-network-installer.deb"
158+
;;
159+
esac
160+
161+
if [ "$is_deb" = "true" ]; then
162+
# Download the deb package
163+
if [ "$DEB_LOCAL" = "true" ]; then
164+
echo "Downloading cortex $channel version $version from $url_deb_local"
165+
curl -L $url_deb_local -o /tmp/cortex.deb
166+
else
167+
echo "Downloading cortex $channel version $version from $url_deb_network"
168+
curl -L $url_deb_network -o /tmp/cortex.deb
169+
fi
170+
171+
# Install the deb package
172+
if [ "$IS_UPDATE" = "false" ]; then
173+
apt-get install -y /tmp/cortex.deb
174+
else
175+
echo -e "n\n" | SKIP_POSTINSTALL=true apt-get install -y --allow-downgrades /tmp/cortex.deb
176+
fi
177+
rm -f /tmp/cortex.deb
178+
else
179+
echo "Downloading cortex $channel version $version from $url_binary"
180+
curl -L $url_binary -o /tmp/cortex.tar.gz
181+
tar -xzvf /tmp/cortex.tar.gz -C /tmp
182+
chmod +x /tmp/cortex/*
183+
cp /tmp/cortex/* /usr/bin/
184+
# Check is update or not
185+
if [ "$IS_UPDATE" = "false" ]; then
186+
su -c "$INSTALL_DIR/$CLI_BINARY_NAME engines install llama-cpp" $USER_TO_RUN_AS
187+
su -c "$INSTALL_DIR/$CLI_BINARY_NAME stop > /dev/null 2>&1" $USER_TO_RUN_AS
188+
fi
189+
rm -rf /tmp/cortex
190+
rm -f /tmp/cortex.tar.gz
191+
fi
192+
}
193+
194+
# Function to create uninstall script
195+
create_uninstall_script() {
196+
local is_deb=$1
197+
if [ "$is_deb" = "false" ]; then
198+
cat << EOF > $UNINSTALL_SCRIPT
199+
#!/bin/bash
200+
# Check for root privileges
201+
if [ "\$(id -u)" != "0" ]; then
202+
echo "This script must be run as root. Please run again with sudo."
203+
exit 1
204+
fi
205+
206+
echo "Stopping cortex..."
207+
su -c "$INSTALL_DIR/$CLI_BINARY_NAME stop > /dev/null 2>&1" $USER_TO_RUN_AS
208+
rm -f $INSTALL_DIR/$CLI_BINARY_NAME
209+
rm -f $INSTALL_DIR/$SERVER_BINARY_NAME
210+
rm -f $UNINSTALL_SCRIPT
211+
212+
echo "Do you want to delete the $DATA_DIR data folder and file $CONFIGURATION_FILE? (yes/no) [default: no]"
213+
read -r answer
214+
while true; do
215+
case "\$answer" in
216+
[yY][eE][sS]|[yY])
217+
echo "Deleting cortex data folders..."
218+
if [ -d "$DATA_DIR" ]; then
219+
echo "Removing $DATA_DIR"
220+
rm -rf "$DATA_DIR" > /dev/null 2>&1
221+
fi
222+
if [ -f "$CONFIGURATION_FILE" ]; then
223+
echo "Removing $CONFIGURATION_FILE"
224+
rm -f "$CONFIGURATION_FILE" > /dev/null 2>&1
225+
fi
226+
break
227+
;;
228+
[nN][oO]|[nN]|"")
229+
echo "Keeping the 'cortex' data folders."
230+
break
231+
;;
232+
*)
233+
echo "Invalid response. Please type 'yes', 'no', 'y', or 'n' (case-insensitive)."
234+
read -r answer
235+
;;
236+
esac
237+
done
238+
239+
EOF
240+
241+
else
242+
cat << EOF > $UNINSTALL_SCRIPT
243+
#!/bin/bash
244+
# Check for root privileges
245+
if [ "\$(id -u)" != "0" ]; then
246+
echo "This script must be run as root. Please run again with sudo."
247+
exit 1
248+
fi
249+
250+
apt-get remove -y $DEB_APP_NAME
251+
rm -f $UNINSTALL_SCRIPT
252+
EOF
253+
fi
254+
255+
chmod +x $UNINSTALL_SCRIPT
256+
echo "Uninstall script created at $UNINSTALL_SCRIPT"
257+
}
258+
259+
# Run installation
260+
check_install_jq_tar
261+
262+
IS_DEB="false"
263+
264+
# Check if apt-get command is available
265+
if command -v apt-get &> /dev/null; then
266+
if [ "$IS_UPDATE" = "true" ]; then
267+
# check if cortexcpp deb package is installed
268+
if dpkg -l | grep -q $DEB_APP_NAME; then
269+
IS_DEB="true"
270+
else
271+
IS_DEB="false"
272+
fi
273+
else
274+
IS_DEB="true"
275+
fi
276+
fi
277+
278+
install_cortex $CHANNEL $VERSION $IS_DEB
279+
create_uninstall_script $IS_DEB
280+
281+
echo "Installation complete. Run cortex-uninstall.sh to uninstall."

0 commit comments

Comments
 (0)