feat: add portable NexusOS CLI and packaging
This commit is contained in:
@@ -0,0 +1,66 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user