From e6ad76382d2f1a24bdce279ff1706ea18304141d Mon Sep 17 00:00:00 2001 From: AJ ONeal Date: Sun, 17 May 2026 18:30:21 -0600 Subject: [PATCH] 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. --- ollama/install.sh | 113 ++++++++++++++++++++++++++-------------------- 1 file changed, 65 insertions(+), 48 deletions(-) diff --git a/ollama/install.sh b/ollama/install.sh index fa19e24..2d0100f 100644 --- a/ollama/install.sh +++ b/ollama/install.sh @@ -2,62 +2,79 @@ # shellcheck disable=SC2034 __init_ollama() { - set -e - set -u + set -e + set -u - ################## - # Install ollama # - ################## + ################## + # Install ollama # + ################## - # Every package should define these 6 variables - pkg_cmd_name="ollama" + # Every package should define these 6 variables + pkg_cmd_name="ollama" - pkg_dst_cmd="${HOME}/.local/opt/ollama/bin/ollama" - pkg_dst_dir="${HOME}/.local/opt/ollama" - pkg_dst="${pkg_dst_dir}" + pkg_dst_dir="${HOME}/.local/opt/ollama" + pkg_dst="${pkg_dst_dir}" - pkg_src_cmd="${HOME}/.local/opt/ollama-v${WEBI_VERSION}/bin/ollama" - pkg_src_dir="${HOME}/.local/opt/ollama-v${WEBI_VERSION}" - pkg_src="${pkg_src_dir}" + pkg_src_dir="${HOME}/.local/opt/ollama-v${WEBI_VERSION}" + pkg_src="${pkg_src_dir}" - # pkg_install must be defined by every package - pkg_install() { - # ~/.local/opt/ - mkdir -p "$(dirname "${pkg_src_dir}")" + # linux default: bin/ollama + lib/ollama/ hierarchy + pkg_dst_cmd="${HOME}/.local/opt/ollama/bin/ollama" + pkg_src_cmd="${HOME}/.local/opt/ollama-v${WEBI_VERSION}/bin/ollama" - if test -d ./ollama-*/; then - # the de facto way (in case it's supported in the future) - # mv ./ollama-*/ ~/.local/opt/ollama-v3.27.0/ - mv ./ollama-*/ "${pkg_src}" - elif test -d ./bin; then - # how linux is presently done - mkdir -p "${pkg_src_dir}" - mv ./bin "${pkg_src_dir}" - if test -f ./lib; then - mv ./lib "${pkg_src_dir}" - fi - else - # how macOS is presently done - mkdir -p "$(dirname "${pkg_src_cmd}")" - mv ./ollama-* "${pkg_src_cmd}" - fi + my_os=$(uname -s) + if test "Darwin" = "${my_os}"; then + pkg_dst_cmd="${HOME}/.local/opt/ollama/ollama" + pkg_src_cmd="${HOME}/.local/opt/ollama-v${WEBI_VERSION}/ollama" + fi - # remove previous location - if test -f ~/.local/bin/ollama; then - rm ~/.local/bin/ollama - fi - } + # pkg_install must be defined by every package + pkg_install() { + if test -f ./ollama; then + # macOS tgz: flat — bare binary + dylibs/mlx backends in root + mkdir -p "${pkg_src_dir}" + mv ./* "${pkg_src_dir}/" + chmod a+x "${pkg_src_cmd}" + elif test -d ./bin; then + # linux tar.zst: bin/ollama + lib/ollama/ + mkdir -p "${pkg_src_dir}" + mv ./bin "${pkg_src_dir}/bin" + if test -d ./lib; then + mv ./lib "${pkg_src_dir}/lib" + fi + elif test -d ./Ollama.app; then + # macOS zip: install app bundle to /Applications + mv -f ./Ollama.app /Applications/Ollama.app + elif test -f ./ollama-*; then + # older bare binary format + mkdir -p "$(dirname "${pkg_src_cmd}")" + mv ./ollama-* "${pkg_src_cmd}" + chmod a+x "${pkg_src_cmd}" + else + echo "error: unrecognized ollama archive format" >&2 + return 1 + fi + } - pkg_get_current_version() { - # 'ollama --version' has output in this format: - # ollama version is 0.3.10 - # This trims it down to just the version number: - # 0.3.10 - ollama --version 2> /dev/null | - head -n 1 | - cut -d' ' -f4 | - sed 's:^v::' - } + pkg_link() { + if test -d /Applications/Ollama.app; then + mkdir -p "${HOME}/.local/bin" + ln -sf /Applications/Ollama.app/Contents/Resources/ollama "${HOME}/.local/bin/ollama" + return 0 + fi + webi_link + } + + pkg_get_current_version() { + # 'ollama --version' has output in this format: + # ollama version is 0.3.10 + # This trims it down to just the version number: + # 0.3.10 + ollama --version 2> /dev/null | + head -n 1 | + cut -d' ' -f4 | + sed 's:^v::' + } } __init_ollama