blob: f97a3032bd81aaac3993535438c92b9773dd2aba (
plain)
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
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
|
# Copyright 2026 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=8
inherit cmake go-module systemd
DESCRIPTION="Get up and running with Llama 3, Mistral, Gemma, and other language models"
HOMEPAGE="https://ollama.com"
LLAMA_CPP_tag=b11963
SRC_URI="
https://github.com/ollama/${PN}/archive/refs/tags/v${PV}.tar.gz -> ${P}.gh.tar.gz
https://github.com/gentoo-golang-dist/${PN}/releases/download/v${PV}/${P}-deps.tar.xz
https://github.com/ggml-org/llama.cpp/archive/refs/tags/${LLAMA_CPP_tag}.tar.gz
-> llama.cpp-${LLAMA_CPP_tag}.tar.gz
"
LICENSE="MIT"
SLOT="0"
KEYWORDS="~amd64"
RESTRICT="mirror test"
DEPEND="
acct-group/ollama
acct-user/ollama
>=sci-ml/ggml-0.28.0:=
"
RDEPEND="
${DEPEND}
net-misc/curl:=
"
BDEPEND="
>=dev-lang/go-1.26.10
dev-libs/stb
"
PATCHES=(
"${FILESDIR}"/${PN}-0.31.1-ggml.patch
"${FILESDIR}"/${PN}-0.34.2-cmake.patch
)
src_prepare() {
cmake_src_prepare
local llama_src="${BUILD_DIR}/_deps/llama_cpp-src"
local llama_patch_dir="${WORKDIR}/${P}/llama/compat"
mkdir -p "${BUILD_DIR}"/_deps || die
ln -s "${WORKDIR}"/llama.cpp-${LLAMA_CPP_tag} "${llama_src}" || die
# Switch to the llama.cpp source directory
pushd "${llama_src}" > /dev/null || die
eapply "${llama_patch_dir}"/*.patch
# Remove vendored
cmake_comment_add_subdirectory -f vendor stb
rm -r vendor/stb || die
sed -i \
-e "s|vendor::stb ||" \
tools/mtmd/CMakeLists.txt \
|| die
popd > /dev/null || die
}
src_configure() {
# Configure Embedded local Server
local llama_src="${BUILD_DIR}/_deps/llama_cpp-src"
local mycmakeargs=(
-DCMAKE_INSTALL_PREFIX="${BUILD_DIR}"
-DOLLAMA_RUNNER_DIR=""
-DFETCHCONTENT_SOURCE_DIR_LLAMA_CPP="${llama_src}"
-DOLLAMA_LLAMA_CPP_SKIP_COMPAT_PATCH=ON
-DBUILD_SHARED_LIBS=ON
-DLLAMA_USE_SYSTEM_GGML=ON
)
local CMAKE_USE_DIR="${S}/llama/server"
local BUILD_DIR="${BUILD_DIR}/llama-server-local"
cmake_src_configure
}
src_compile() {
local SAVE_BUILD_DIR="${BUILD_DIR}"
# Compile Embedded Local Server
local BUILD_DIR="${BUILD_DIR}"/llama-server-local
local cmake_src_compile_opts=(
--target llama-server
--target llama-quantize
)
cmake_src_compile
# Install/Stage Local Server Component
"${CMAKE_BINARY}" \
--install "${BUILD_DIR}" \
--prefix "${SAVE_BUILD_DIR}" \
--component llama-server \
|| die "Failed to stage server component"
# Expose CGO to Go and establish compiler optimization paths
export CGO_ENABLED=1
# Replicate the linker flags dynamically from your ebuild version
local mygoldflags="-X github.com/ollama/ollama/version.Version=${PV} \
-X github.com/ollama/ollama/server.mode=release"
# Call the Go build engine natively with standard Gentoo flags
ego build \
-trimpath \
-ldflags "${mygoldflags}" \
-o "${BUILD_DIR}/ollama" \
. || die "Go build failed"
}
src_install() {
dobin "${BUILD_DIR}"/llama-server-local/ollama
insinto usr
doins -r "${BUILD_DIR}"/lib
local libdir="/usr/lib/ollama"
fperms -R +x ${libdir}
# Symlink system GGML libraries into Ollama's expected path
# Bug 983804
for lib in "${EPREFIX}"/usr/$(get_libdir)/libggml*.so; do
local libname=$(basename "${lib}")
dosym ../../$(get_libdir)/${libname} /usr/lib/ollama/${libname}
done
einstalldocs
newinitd "${FILESDIR}/ollama.init" "${PN}"
newconfd "${FILESDIR}/ollama.confd" "${PN}"
systemd_dounit "${FILESDIR}/ollama.service"
}
pkg_preinst() {
keepdir /var/log/ollama
fperms 750 /var/log/ollama
fowners "${PN}:${PN}" /var/log/ollama
}
pkg_postinst() {
if [[ -z ${REPLACING_VERSIONS} ]] ; then
einfo "Quick guide:"
einfo "\tollama serve"
einfo "\tollama run llama3:70b"
einfo
einfo "See available models at https://ollama.com/library"
fi
einfo
einfo "Ollama binds 127.0.0.1 port 11434 by default."
einfo "Change the bind address with the OLLAMA_HOST environment variable."
einfo "See https://docs.ollama.com/faq for more info"
einfo
}
|