67 lines
2.1 KiB
Bash
67 lines
2.1 KiB
Bash
#!/usr/bin/env bash
|
|
# Install the portable NexusOS wheel in Termux.
|
|
#
|
|
# NEXUS_PACKAGE may be a PyPI requirement, wheel URL, or local wheel path.
|
|
# NEXUS_ANDROID_WHEEL_INDEX may point at a trusted PEP 503 index containing
|
|
# Android pydantic-core wheels for the device's Python/CPU combination.
|
|
set -euo pipefail
|
|
|
|
if [[ "${PREFIX:-}" != *com.termux* ]]; then
|
|
echo "This installer must be run inside Termux." >&2
|
|
exit 2
|
|
fi
|
|
|
|
PACKAGE_SPEC="${1:-${NEXUS_PACKAGE:-nexusos-ai}}"
|
|
|
|
echo "==> Installing Termux prerequisites"
|
|
pkg update -y
|
|
pkg install -y python python-pip curl clang make
|
|
|
|
PYTHON_TAG="$(python -c 'import sys; print(f"cp{sys.version_info.major}{sys.version_info.minor}")')"
|
|
ARCH="$(uname -m)"
|
|
echo "==> Python ${PYTHON_TAG}; architecture ${ARCH}"
|
|
|
|
PIP_INDEX_ARGS=()
|
|
if [[ -n "${NEXUS_ANDROID_WHEEL_INDEX:-}" ]]; then
|
|
PIP_INDEX_ARGS+=(--extra-index-url "${NEXUS_ANDROID_WHEEL_INDEX}")
|
|
fi
|
|
|
|
# Pydantic 2 is required on Python 3.14+, and its Rust extension is not built
|
|
# reliably on-device. Require a binary before asking pip to resolve NexusOS so
|
|
# failures are immediate and actionable. Older Termux environments also benefit
|
|
# from using a wheel instead of compiling the extension on a phone.
|
|
echo "==> Checking for an Android pydantic-core wheel"
|
|
if ! python -m pip install \
|
|
--only-binary=pydantic-core \
|
|
"${PIP_INDEX_ARGS[@]}" \
|
|
"pydantic>=2.7,<3"; then
|
|
cat >&2 <<EOF
|
|
|
|
No compatible pydantic-core wheel was found for ${PYTHON_TAG}/${ARCH}.
|
|
PyPI does not currently publish Android wheels for this native dependency.
|
|
Set NEXUS_ANDROID_WHEEL_INDEX to a trusted NexusOS Android wheel index and
|
|
run this installer again. Do not force a source build on a memory-limited phone.
|
|
EOF
|
|
exit 1
|
|
fi
|
|
|
|
echo "==> Installing ${PACKAGE_SPEC}"
|
|
python -m pip install "${PACKAGE_SPEC}"
|
|
|
|
echo "==> Initializing NexusOS"
|
|
nexus init
|
|
|
|
if [[ -n "${NEXUS_PROVIDER_URL:-}" ]]; then
|
|
nexus provider use remote --url "${NEXUS_PROVIDER_URL}"
|
|
fi
|
|
|
|
nexus doctor
|
|
cat <<'EOF'
|
|
|
|
NexusOS is installed. Configure an Ollama-compatible provider, then run:
|
|
nexus provider use remote --url http://YOUR-OLLAMA-HOST:11434
|
|
nexus serve
|
|
|
|
Open http://127.0.0.1:8000 in the Android browser.
|
|
EOF
|