Skip to content

Commit e6ad763

Browse files
committed
fix(ollama): handle macOS tgz flat layout
macOS releases are a flat tgz (bare ollama binary + libggml dylibs + mlx_metal dirs at the archive root), unlike Linux (bin/ollama + lib/ollama/ hierarchy). Detect macOS via uname -s, set pkg_src_cmd/pkg_dst_cmd to the root-level binary, and move the full archive root into ~/.local/opt/ollama-vX.Y.Z/ in one pass.
1 parent 3fc6dcd commit e6ad763

1 file changed

Lines changed: 73 additions & 56 deletions

File tree

ollama/install.sh

Lines changed: 73 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -2,62 +2,79 @@
22
# shellcheck disable=SC2034
33

44
__init_ollama() {
5-
set -e
6-
set -u
7-
8-
##################
9-
# Install ollama #
10-
##################
11-
12-
# Every package should define these 6 variables
13-
pkg_cmd_name="ollama"
14-
15-
pkg_dst_cmd="${HOME}/.local/opt/ollama/bin/ollama"
16-
pkg_dst_dir="${HOME}/.local/opt/ollama"
17-
pkg_dst="${pkg_dst_dir}"
18-
19-
pkg_src_cmd="${HOME}/.local/opt/ollama-v${WEBI_VERSION}/bin/ollama"
20-
pkg_src_dir="${HOME}/.local/opt/ollama-v${WEBI_VERSION}"
21-
pkg_src="${pkg_src_dir}"
22-
23-
# pkg_install must be defined by every package
24-
pkg_install() {
25-
# ~/.local/opt/
26-
mkdir -p "$(dirname "${pkg_src_dir}")"
27-
28-
if test -d ./ollama-*/; then
29-
# the de facto way (in case it's supported in the future)
30-
# mv ./ollama-*/ ~/.local/opt/ollama-v3.27.0/
31-
mv ./ollama-*/ "${pkg_src}"
32-
elif test -d ./bin; then
33-
# how linux is presently done
34-
mkdir -p "${pkg_src_dir}"
35-
mv ./bin "${pkg_src_dir}"
36-
if test -f ./lib; then
37-
mv ./lib "${pkg_src_dir}"
38-
fi
39-
else
40-
# how macOS is presently done
41-
mkdir -p "$(dirname "${pkg_src_cmd}")"
42-
mv ./ollama-* "${pkg_src_cmd}"
43-
fi
44-
45-
# remove previous location
46-
if test -f ~/.local/bin/ollama; then
47-
rm ~/.local/bin/ollama
48-
fi
49-
}
50-
51-
pkg_get_current_version() {
52-
# 'ollama --version' has output in this format:
53-
# ollama version is 0.3.10
54-
# This trims it down to just the version number:
55-
# 0.3.10
56-
ollama --version 2> /dev/null |
57-
head -n 1 |
58-
cut -d' ' -f4 |
59-
sed 's:^v::'
60-
}
5+
set -e
6+
set -u
7+
8+
##################
9+
# Install ollama #
10+
##################
11+
12+
# Every package should define these 6 variables
13+
pkg_cmd_name="ollama"
14+
15+
pkg_dst_dir="${HOME}/.local/opt/ollama"
16+
pkg_dst="${pkg_dst_dir}"
17+
18+
pkg_src_dir="${HOME}/.local/opt/ollama-v${WEBI_VERSION}"
19+
pkg_src="${pkg_src_dir}"
20+
21+
# linux default: bin/ollama + lib/ollama/ hierarchy
22+
pkg_dst_cmd="${HOME}/.local/opt/ollama/bin/ollama"
23+
pkg_src_cmd="${HOME}/.local/opt/ollama-v${WEBI_VERSION}/bin/ollama"
24+
25+
my_os=$(uname -s)
26+
if test "Darwin" = "${my_os}"; then
27+
pkg_dst_cmd="${HOME}/.local/opt/ollama/ollama"
28+
pkg_src_cmd="${HOME}/.local/opt/ollama-v${WEBI_VERSION}/ollama"
29+
fi
30+
31+
# pkg_install must be defined by every package
32+
pkg_install() {
33+
if test -f ./ollama; then
34+
# macOS tgz: flat — bare binary + dylibs/mlx backends in root
35+
mkdir -p "${pkg_src_dir}"
36+
mv ./* "${pkg_src_dir}/"
37+
chmod a+x "${pkg_src_cmd}"
38+
elif test -d ./bin; then
39+
# linux tar.zst: bin/ollama + lib/ollama/
40+
mkdir -p "${pkg_src_dir}"
41+
mv ./bin "${pkg_src_dir}/bin"
42+
if test -d ./lib; then
43+
mv ./lib "${pkg_src_dir}/lib"
44+
fi
45+
elif test -d ./Ollama.app; then
46+
# macOS zip: install app bundle to /Applications
47+
mv -f ./Ollama.app /Applications/Ollama.app
48+
elif test -f ./ollama-*; then
49+
# older bare binary format
50+
mkdir -p "$(dirname "${pkg_src_cmd}")"
51+
mv ./ollama-* "${pkg_src_cmd}"
52+
chmod a+x "${pkg_src_cmd}"
53+
else
54+
echo "error: unrecognized ollama archive format" >&2
55+
return 1
56+
fi
57+
}
58+
59+
pkg_link() {
60+
if test -d /Applications/Ollama.app; then
61+
mkdir -p "${HOME}/.local/bin"
62+
ln -sf /Applications/Ollama.app/Contents/Resources/ollama "${HOME}/.local/bin/ollama"
63+
return 0
64+
fi
65+
webi_link
66+
}
67+
68+
pkg_get_current_version() {
69+
# 'ollama --version' has output in this format:
70+
# ollama version is 0.3.10
71+
# This trims it down to just the version number:
72+
# 0.3.10
73+
ollama --version 2> /dev/null |
74+
head -n 1 |
75+
cut -d' ' -f4 |
76+
sed 's:^v::'
77+
}
6178
}
6279

6380
__init_ollama

0 commit comments

Comments
 (0)