This commit is contained in:
0xGlitch 2026-03-26 13:30:28 +00:00 committed by GitHub
commit d614a5926c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 188 additions and 46 deletions

View File

@ -17,13 +17,22 @@
Project N.O.M.A.D. is a self-contained, offline-first knowledge and education server packed with critical tools, knowledge, and AI to keep you informed and empowered—anytime, anywhere. Project N.O.M.A.D. is a self-contained, offline-first knowledge and education server packed with critical tools, knowledge, and AI to keep you informed and empowered—anytime, anywhere.
## Installation & Quickstart ## Installation & Quickstart
Project N.O.M.A.D. can be installed on any Debian-based operating system (we recommend Ubuntu). Installation is completely terminal-based, and all tools and resources are designed to be accessed through the browser, so there's no need for a desktop environment if you'd rather setup N.O.M.A.D. as a "server" and access it through other clients. Project N.O.M.A.D. can be installed on most Linux distributions. The install script automatically detects your distro and uses the appropriate package manager. Installation is completely terminal-based, and all tools and resources are designed to be accessed through the browser, so there's no need for a desktop environment if you'd rather setup N.O.M.A.D. as a "server" and access it through other clients.
#### Supported Distributions
| Family | Distros |
|--------|---------|
| Debian/Ubuntu | Debian, Ubuntu, Raspbian, Linux Mint, Pop!_OS, Elementary, Zorin, Kali |
| Arch | Arch Linux, Manjaro, EndeavourOS, Garuda, CachyOS |
| Fedora/RHEL | Fedora, RHEL, CentOS, Rocky, AlmaLinux, Nobara |
| openSUSE | openSUSE Leap, openSUSE Tumbleweed, SLES |
| Other | Void Linux, Alpine Linux |
*Note: sudo/root privileges are required to run the install script* *Note: sudo/root privileges are required to run the install script*
### Quick Install (Debian-based OS Only) ### Quick Install (Debian-based OS Only)
```bash ```bash
sudo apt-get update && sudo apt-get install -y curl && curl -fsSL https://raw.githubusercontent.com/Crosstalk-Solutions/project-nomad/refs/heads/main/install/install_nomad.sh -o install_nomad.sh && sudo bash install_nomad.sh curl -fsSL https://raw.githubusercontent.com/Crosstalk-Solutions/project-nomad/refs/heads/main/install/install_nomad.sh -o install_nomad.sh && sudo bash install_nomad.sh
``` ```
Project N.O.M.A.D. is now installed on your device! Open a browser and navigate to `http://localhost:8080` (or `http://DEVICE_IP:8080`) to start exploring! Project N.O.M.A.D. is now installed on your device! Open a browser and navigate to `http://localhost:8080` (or `http://DEVICE_IP:8080`) to start exploring!
@ -72,7 +81,7 @@ At it's core, however, N.O.M.A.D. is still very lightweight. For a barebones ins
- Processor: 2 GHz dual-core processor or better - Processor: 2 GHz dual-core processor or better
- RAM: 4GB system memory - RAM: 4GB system memory
- Storage: At least 5 GB free disk space - Storage: At least 5 GB free disk space
- OS: Debian-based (Ubuntu recommended) - OS: Any supported Linux distribution (see [Supported Distributions](#supported-distributions))
- Stable internet connection (required during install only) - Stable internet connection (required during install only)
To run LLM's and other included AI tools: To run LLM's and other included AI tools:
@ -82,7 +91,7 @@ To run LLM's and other included AI tools:
- RAM: 32 GB system memory - RAM: 32 GB system memory
- Graphics: NVIDIA RTX 3060 or AMD equivalent or better (more VRAM = run larger models) - Graphics: NVIDIA RTX 3060 or AMD equivalent or better (more VRAM = run larger models)
- Storage: At least 250 GB free disk space (preferably on SSD) - Storage: At least 250 GB free disk space (preferably on SSD)
- OS: Debian-based (Ubuntu recommended) - OS: Any supported Linux distribution (see [Supported Distributions](#supported-distributions))
- Stable internet connection (required during install only) - Stable internet connection (required during install only)
**For detailed build recommendations at three price points ($150$1,000+), see the [Hardware Guide](https://www.projectnomad.us/hardware).** **For detailed build recommendations at three price points ($150$1,000+), see the [Hardware Guide](https://www.projectnomad.us/hardware).**

View File

@ -3,6 +3,7 @@
## Version 1.30.3 - March 25, 2026 ## Version 1.30.3 - March 25, 2026
### Features ### Features
- **Install**: Added multi-distro Linux support — the install script now detects and supports Arch, Fedora/RHEL, openSUSE, Void, and Alpine in addition to Debian/Ubuntu
### Bug Fixes ### Bug Fixes
- **Benchmark**: Fixed an issue where CPU and Disk Write scores could be displayed as 0 if the measured values was less than half of the reference mark. Thanks @bortlesboat for the fix! - **Benchmark**: Fixed an issue where CPU and Disk Write scores could be displayed as 0 if the measured values was less than half of the reference mark. Thanks @bortlesboat for the fix!
@ -52,7 +53,6 @@
- **Utility Scripts**: Added an additional warning to the installation script to inform about potential overwriting of existing customized configurations and the importance of backing up data before running the installation script again. - **Utility Scripts**: Added an additional warning to the installation script to inform about potential overwriting of existing customized configurations and the importance of backing up data before running the installation script again.
- **Documentation**: Updated installation instructions to reflect the new option for manual deployment via Docker Compose without the install script. - **Documentation**: Updated installation instructions to reflect the new option for manual deployment via Docker Compose without the install script.
## Version 1.29.0 - March 11, 2026 ## Version 1.29.0 - March 11, 2026
### Features ### Features

View File

@ -76,14 +76,101 @@ check_is_bash() {
echo -e "${GREEN}#${RESET} This script is running in bash.\\n" echo -e "${GREEN}#${RESET} This script is running in bash.\\n"
} }
check_is_debian_based() { detect_distro() {
if [[ ! -f /etc/debian_version ]]; then # Detect the Linux distribution family for package manager selection
header_red DISTRO_FAMILY="unknown"
echo -e "${RED}#${RESET} This script is designed to run on Debian-based systems only.\\n" DISTRO_ID="unknown"
echo -e "${RED}#${RESET} Please run this script on a Debian-based system and try again."
exit 1 if [[ -f /etc/os-release ]]; then
. /etc/os-release
DISTRO_ID="${ID}"
case "${ID}" in
debian|ubuntu|raspbian|linuxmint|pop|elementary|zorin|kali)
DISTRO_FAMILY="debian"
;;
arch|manjaro|endeavouros|garuda|artix|cachyos)
DISTRO_FAMILY="arch"
;;
fedora|rhel|centos|rocky|alma|ol|nobara)
DISTRO_FAMILY="rhel"
;;
opensuse*|sles)
DISTRO_FAMILY="suse"
;;
void)
DISTRO_FAMILY="void"
;;
alpine)
DISTRO_FAMILY="alpine"
;;
*)
# Fallback: check ID_LIKE for parent distro
case "${ID_LIKE}" in
*debian*|*ubuntu*)
DISTRO_FAMILY="debian"
;;
*arch*)
DISTRO_FAMILY="arch"
;;
*rhel*|*fedora*|*centos*)
DISTRO_FAMILY="rhel"
;;
*suse*)
DISTRO_FAMILY="suse"
;;
*)
DISTRO_FAMILY="unknown"
;;
esac
;;
esac
fi fi
echo -e "${GREEN}#${RESET} This script is running on a Debian-based system.\\n"
if [[ "$DISTRO_FAMILY" == "unknown" ]]; then
header_red
echo -e "${RED}#${RESET} Unable to detect your Linux distribution.\\n"
echo -e "${RED}#${RESET} Supported distro families: Debian/Ubuntu, Arch, Fedora/RHEL, openSUSE, Void, Alpine."
echo -e "${RED}#${RESET} You may try continuing, but package installation may fail."
read -p "Continue anyway? (y/N): " choice
case "$choice" in
y|Y ) echo -e "${YELLOW}#${RESET} Continuing with unknown distro...\\n" ;;
* ) exit 1 ;;
esac
else
echo -e "${GREEN}#${RESET} Detected distro: ${DISTRO_ID} (family: ${DISTRO_FAMILY})\\n"
fi
}
# Distro-agnostic package install wrapper
pkg_install() {
case "$DISTRO_FAMILY" in
debian)
sudo apt-get update -qq && sudo apt-get install -y "$@"
;;
arch)
sudo pacman -Sy --noconfirm "$@"
;;
rhel)
if command -v dnf &> /dev/null; then
sudo dnf install -y "$@"
else
sudo yum install -y "$@"
fi
;;
suse)
sudo zypper install -y "$@"
;;
void)
sudo xbps-install -Sy "$@"
;;
alpine)
sudo apk add "$@"
;;
*)
echo -e "${RED}#${RESET} Cannot auto-install packages on this distro. Please install manually: $*"
return 1
;;
esac
} }
ensure_dependencies_installed() { ensure_dependencies_installed() {
@ -101,8 +188,7 @@ ensure_dependencies_installed() {
if [[ ${#missing_deps[@]} -gt 0 ]]; then if [[ ${#missing_deps[@]} -gt 0 ]]; then
echo -e "${YELLOW}#${RESET} Installing required dependencies: ${missing_deps[*]}...\\n" echo -e "${YELLOW}#${RESET} Installing required dependencies: ${missing_deps[*]}...\\n"
sudo apt-get update pkg_install "${missing_deps[@]}"
sudo apt-get install -y "${missing_deps[@]}"
# Verify installation # Verify installation
for dep in "${missing_deps[@]}"; do for dep in "${missing_deps[@]}"; do
@ -140,11 +226,8 @@ ensure_docker_installed() {
if ! command -v docker &> /dev/null; then if ! command -v docker &> /dev/null; then
echo -e "${YELLOW}#${RESET} Docker not found. Installing Docker...\\n" echo -e "${YELLOW}#${RESET} Docker not found. Installing Docker...\\n"
# Update package database
sudo apt-get update
# Install prerequisites # Install prerequisites
sudo apt-get install -y ca-certificates curl pkg_install ca-certificates curl
# Create directory for keyrings # Create directory for keyrings
# sudo install -m 0755 -d /etc/apt/keyrings # sudo install -m 0755 -d /etc/apt/keyrings
@ -165,18 +248,33 @@ ensure_docker_installed() {
# # Install Docker packages # # Install Docker packages
# sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin # sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
# Download the Docker convenience script # Install Docker using the best method for this distro
curl -fsSL https://get.docker.com -o get-docker.sh case "$DISTRO_FAMILY" in
arch)
# Run the Docker installation script # Arch has docker in the official repos; iptables-nft needed for networking
sudo sh get-docker.sh sudo pacman -Sy --noconfirm docker docker-compose docker-buildx iptables-nft
;;
suse)
# openSUSE has docker in official repos
sudo zypper install -y docker docker-compose docker-buildx
;;
*)
# For Debian, Fedora/RHEL, and others: use the convenience script
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
rm -f get-docker.sh
;;
esac
# Check if Docker was installed successfully # Check if Docker was installed successfully
if ! command -v docker &> /dev/null; then if ! command -v docker &> /dev/null; then
echo -e "${RED}#${RESET} Docker installation failed. Please check the logs and try again." echo -e "${RED}#${RESET} Docker installation failed. Please check the logs and try again."
exit 1 exit 1
fi fi
# Enable and start Docker service
sudo systemctl enable --now docker
echo -e "${GREEN}#${RESET} Docker installation completed.\\n" echo -e "${GREEN}#${RESET} Docker installation completed.\\n"
else else
echo -e "${GREEN}#${RESET} Docker is already installed.\\n" echo -e "${GREEN}#${RESET} Docker is already installed.\\n"
@ -242,26 +340,57 @@ setup_nvidia_container_toolkit() {
fi fi
echo -e "${YELLOW}#${RESET} Installing NVIDIA container toolkit...\\n" echo -e "${YELLOW}#${RESET} Installing NVIDIA container toolkit...\\n"
# Install dependencies per https://docs.ollama.com/docker - wrapped in error handling # Add NVIDIA container toolkit repo and install - method varies by distro family
if ! curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey 2>/dev/null | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg 2>/dev/null; then local nvidia_install_success=false
echo -e "${YELLOW}#${RESET} Warning: Failed to add NVIDIA container toolkit GPG key. Continuing anyway...\\n"
return 0 case "$DISTRO_FAMILY" in
fi debian)
if curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey 2>/dev/null | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg 2>/dev/null \
if ! curl -fsSL https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list 2>/dev/null \ && curl -fsSL https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list 2>/dev/null \
| sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' \ | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' \
| sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list > /dev/null 2>&1; then | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list > /dev/null 2>&1 \
echo -e "${YELLOW}#${RESET} Warning: Failed to add NVIDIA container toolkit repository. Continuing anyway...\\n" && sudo apt-get update 2>/dev/null \
return 0 && sudo apt-get install -y nvidia-container-toolkit 2>/dev/null; then
fi nvidia_install_success=true
fi
if ! sudo apt-get update 2>/dev/null; then ;;
echo -e "${YELLOW}#${RESET} Warning: Failed to update package list. Continuing anyway...\\n" rhel)
return 0 if curl -fsSL https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo 2>/dev/null \
fi | sudo tee /etc/yum.repos.d/nvidia-container-toolkit.repo > /dev/null 2>&1; then
if command -v dnf &> /dev/null; then
if ! sudo apt-get install -y nvidia-container-toolkit 2>/dev/null; then sudo dnf install -y nvidia-container-toolkit 2>/dev/null && nvidia_install_success=true
else
sudo yum install -y nvidia-container-toolkit 2>/dev/null && nvidia_install_success=true
fi
fi
;;
suse)
if curl -fsSL https://nvidia.github.io/libnvidia-container/stable/rpm/nvidia-container-toolkit.repo 2>/dev/null \
| sudo tee /etc/zypp/repos.d/nvidia-container-toolkit.repo > /dev/null 2>&1 \
&& sudo zypper install -y nvidia-container-toolkit 2>/dev/null; then
nvidia_install_success=true
fi
;;
arch)
# nvidia-container-toolkit is available in the AUR or community repos
if command -v yay &> /dev/null; then
yay -S --noconfirm nvidia-container-toolkit 2>/dev/null && nvidia_install_success=true
elif command -v paru &> /dev/null; then
paru -S --noconfirm nvidia-container-toolkit 2>/dev/null && nvidia_install_success=true
elif sudo pacman -Sy --noconfirm nvidia-container-toolkit 2>/dev/null; then
nvidia_install_success=true
else
echo -e "${YELLOW}#${RESET} nvidia-container-toolkit requires an AUR helper (yay/paru) or manual install on Arch.\\n"
fi
;;
*)
echo -e "${YELLOW}#${RESET} Automatic NVIDIA container toolkit installation not supported for ${DISTRO_FAMILY}.\\n"
echo -e "${YELLOW}#${RESET} Please install nvidia-container-toolkit manually: https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/install-guide.html\\n"
;;
esac
if ! $nvidia_install_success; then
echo -e "${YELLOW}#${RESET} Warning: Failed to install NVIDIA container toolkit. Continuing anyway...\\n" echo -e "${YELLOW}#${RESET} Warning: Failed to install NVIDIA container toolkit. Continuing anyway...\\n"
return 0 return 0
fi fi
@ -459,7 +588,11 @@ start_management_containers() {
} }
get_local_ip() { get_local_ip() {
local_ip_address=$(hostname -I | awk '{print $1}') # Try hostname -I first, fall back to ip command if it fails or isn't available
local_ip_address=$(hostname -I 2>/dev/null | awk '{print $1}')
if [[ -z "$local_ip_address" ]]; then
local_ip_address=$(ip -4 -o addr show scope global | awk '{print $4}' | cut -d/ -f1 | head -1)
fi
if [[ -z "$local_ip_address" ]]; then if [[ -z "$local_ip_address" ]]; then
echo -e "${RED}#${RESET} Unable to determine local IP address. Please check your network configuration." echo -e "${RED}#${RESET} Unable to determine local IP address. Please check your network configuration."
exit 1 exit 1
@ -533,8 +666,8 @@ success_message() {
################################################################################################################################################################################################### ###################################################################################################################################################################################################
# Pre-flight checks # Pre-flight checks
check_is_debian_based
check_is_bash check_is_bash
detect_distro
check_has_sudo check_has_sudo
ensure_dependencies_installed ensure_dependencies_installed
check_is_debug_mode check_is_debug_mode