2024-10-03 14:40:36 -04:00
|
|
|
#!/bin/bash
|
|
|
|
|
|
2025-04-09 18:04:45 +01:00
|
|
|
available() {
|
|
|
|
|
command -v "$1" >/dev/null
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
nvidia_lshw() {
|
|
|
|
|
lshw -c display -numeric -disable network | grep -q 'vendor: .* \[10DE\]'
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
amd_lshw() {
|
|
|
|
|
lshw -c display -numeric -disable network | grep -q 'vendor: .* \[1002\]'
|
2024-10-03 14:40:36 -04:00
|
|
|
}
|
|
|
|
|
|
2025-05-14 14:32:24 +08:00
|
|
|
mthreads_lshw() {
|
|
|
|
|
lshw -c display -numeric -disable network | grep -q 'vendor: .* \[1ED5\]'
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-23 15:24:15 +00:00
|
|
|
dnf_install() {
|
2025-03-12 11:10:16 +00:00
|
|
|
if grep -q ostree= /proc/cmdline; then
|
|
|
|
|
return 1
|
|
|
|
|
fi
|
|
|
|
|
|
2025-02-24 23:19:19 +00:00
|
|
|
$sudo dnf install -y "$1"
|
2025-03-12 11:10:16 +00:00
|
|
|
|
|
|
|
|
return 0
|
2025-02-24 23:19:19 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
dnf_install_podman() {
|
2025-01-23 15:24:15 +00:00
|
|
|
if ! available podman; then
|
2025-02-24 23:19:19 +00:00
|
|
|
dnf_install podman || true
|
2025-01-23 15:24:15 +00:00
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
2025-02-16 17:20:06 +00:00
|
|
|
apt_install() {
|
|
|
|
|
apt install -y "$1"
|
2025-01-23 13:46:00 +00:00
|
|
|
}
|
|
|
|
|
|
2025-02-16 17:20:06 +00:00
|
|
|
apt_update_install() {
|
2025-01-23 15:24:15 +00:00
|
|
|
if ! available podman; then
|
2025-02-16 17:20:06 +00:00
|
|
|
$sudo apt update || true
|
2025-01-23 15:24:15 +00:00
|
|
|
|
|
|
|
|
# only install docker if podman can't be
|
2025-02-16 17:20:06 +00:00
|
|
|
if ! $sudo apt_install podman; then
|
2025-01-23 15:24:15 +00:00
|
|
|
if ! available docker; then
|
2025-02-16 17:20:06 +00:00
|
|
|
$sudo apt_install docker || true
|
2025-01-23 15:24:15 +00:00
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
fi
|
|
|
|
|
}
|
|
|
|
|
|
2025-01-31 16:10:42 +00:00
|
|
|
install_mac_dependencies() {
|
|
|
|
|
if [ "$EUID" -eq 0 ]; then
|
|
|
|
|
echo "This script is intended to run as non-root on macOS"
|
|
|
|
|
|
|
|
|
|
return 1
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
if ! available "brew"; then
|
2025-04-15 12:02:00 +01:00
|
|
|
echo "RamaLama requires brew to complete installation."
|
|
|
|
|
echo
|
|
|
|
|
echo "To install brew please run:"
|
|
|
|
|
echo
|
|
|
|
|
echo "curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh | bash"
|
|
|
|
|
echo
|
2025-01-31 16:10:42 +00:00
|
|
|
|
|
|
|
|
return 2
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
brew install llama.cpp
|
2025-03-21 22:55:29 +00:00
|
|
|
echo
|
2025-01-31 16:10:42 +00:00
|
|
|
}
|
|
|
|
|
|
2024-10-03 14:40:36 -04:00
|
|
|
check_platform() {
|
2025-01-31 16:10:42 +00:00
|
|
|
if [ "$os" = "Darwin" ]; then
|
|
|
|
|
install_mac_dependencies
|
2024-10-03 14:40:36 -04:00
|
|
|
elif [ "$os" = "Linux" ]; then
|
|
|
|
|
if [ "$EUID" -ne 0 ]; then
|
2024-12-11 15:50:51 +00:00
|
|
|
if ! available sudo; then
|
|
|
|
|
error "This script is intended to run as root on Linux"
|
2025-01-31 16:10:42 +00:00
|
|
|
|
2024-12-11 15:50:51 +00:00
|
|
|
return 3
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
sudo="sudo"
|
2024-10-03 14:40:36 -04:00
|
|
|
fi
|
|
|
|
|
else
|
|
|
|
|
echo "This script is intended to run on Linux and macOS only"
|
2025-01-31 16:10:42 +00:00
|
|
|
|
2024-10-03 14:40:36 -04:00
|
|
|
return 4
|
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
return 0
|
|
|
|
|
}
|
|
|
|
|
|
2025-02-24 23:19:19 +00:00
|
|
|
parse_arguments() {
|
2025-01-31 16:10:42 +00:00
|
|
|
while [[ $# -gt 0 ]]; do
|
|
|
|
|
case "$1" in
|
|
|
|
|
-l)
|
|
|
|
|
local_install="true"
|
|
|
|
|
shift
|
|
|
|
|
;;
|
|
|
|
|
*)
|
|
|
|
|
break
|
|
|
|
|
esac
|
|
|
|
|
done
|
2025-02-24 23:19:19 +00:00
|
|
|
}
|
|
|
|
|
|
2025-03-21 22:55:29 +00:00
|
|
|
print_banner() {
|
|
|
|
|
echo -e " _____ _\n" \
|
|
|
|
|
"| __ \ | |\n" \
|
|
|
|
|
"| |__) |__ _ _ __ ___ __ _| | __ _ _ __ ___ __ _\n" \
|
|
|
|
|
"| _ // _\` | '_ \` _ \ / _\` | | / _\` | '_ \` _ \ / _\` |\n" \
|
|
|
|
|
"| | \ \ (_| | | | | | | (_| | |___| (_| | | | | | | (_| |\n" \
|
|
|
|
|
"|_| \_\__,_|_| |_| |_|\__,_|______\__,_|_| |_| |_|\__,_|\n"
|
|
|
|
|
}
|
|
|
|
|
|
2025-04-13 10:57:15 +08:00
|
|
|
print_success_info() {
|
2025-04-13 10:49:33 +08:00
|
|
|
echo
|
|
|
|
|
echo "====================== Installation Completed ======================"
|
2025-04-25 16:56:01 +02:00
|
|
|
echo "Success! RamaLama has been installed successfully."
|
2025-04-13 10:49:33 +08:00
|
|
|
echo "For further details, check the documentation at:"
|
|
|
|
|
echo "https://github.com/containers/ramalama/tree/main/docs"
|
|
|
|
|
echo "Or use the '--help' flag to learn more about usage."
|
|
|
|
|
echo "===================================================================="
|
|
|
|
|
}
|
|
|
|
|
|
2025-06-10 17:24:38 +01:00
|
|
|
is_python3_at_least_310() {
|
|
|
|
|
python3 -c 'import sys; exit(0 if sys.version_info >= (3, 10) else 1)'
|
|
|
|
|
}
|
|
|
|
|
|
2025-07-08 15:20:13 +01:00
|
|
|
install_uv() {
|
|
|
|
|
local host="raw.githubusercontent.com"
|
|
|
|
|
local install_uv_url="https://$host/containers/ramalama/s/install-uv.sh"
|
|
|
|
|
curl -fsSL "$install_uv_url" | bash
|
|
|
|
|
echo
|
|
|
|
|
}
|
|
|
|
|
|
2025-02-24 23:19:19 +00:00
|
|
|
main() {
|
|
|
|
|
set -e -o pipefail
|
|
|
|
|
|
2025-03-21 22:55:29 +00:00
|
|
|
print_banner
|
2025-02-24 23:19:19 +00:00
|
|
|
local local_install="false"
|
|
|
|
|
parse_arguments "$@"
|
2025-01-31 16:10:42 +00:00
|
|
|
|
2024-10-03 14:40:36 -04:00
|
|
|
local os
|
|
|
|
|
os="$(uname -s)"
|
2024-12-11 15:50:51 +00:00
|
|
|
local sudo=""
|
2024-10-03 14:40:36 -04:00
|
|
|
check_platform
|
2025-04-09 18:04:45 +01:00
|
|
|
if ! $local_install && [ -z "$BRANCH" ]; then
|
2025-06-10 17:24:38 +01:00
|
|
|
if available dnf; then
|
|
|
|
|
dnf_install_podman
|
2025-07-14 10:13:49 -04:00
|
|
|
if is_python3_at_least_310 && dnf_install "ramalama"; then
|
2025-06-10 17:24:38 +01:00
|
|
|
return 0
|
|
|
|
|
fi
|
|
|
|
|
elif available apt; then
|
|
|
|
|
apt_update_install
|
2025-04-09 18:04:45 +01:00
|
|
|
fi
|
2024-10-03 14:40:36 -04:00
|
|
|
|
2025-04-09 18:04:45 +01:00
|
|
|
if available brew && brew install ramalama; then
|
2025-07-08 15:20:13 +01:00
|
|
|
install_uv
|
|
|
|
|
uv tool install mlx-lm
|
2025-04-09 18:04:45 +01:00
|
|
|
return 0
|
|
|
|
|
fi
|
|
|
|
|
fi
|
2025-04-13 10:49:33 +08:00
|
|
|
|
2025-07-08 15:20:13 +01:00
|
|
|
install_uv
|
2025-07-25 11:36:36 +01:00
|
|
|
uv tool install --force --python python3.11 ramalama
|
2025-04-09 18:04:45 +01:00
|
|
|
print_success_info
|
2024-10-03 14:40:36 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
main "$@"
|