# Prerequisites

Before installing the Provisioning platform, ensure your system meets the following requirements.

## Required Software

### Nushell 0.109.1+

Nushell is the primary shell and scripting environment for the platform.

**Installation**:

```bash
# macOS (Homebrew)
brew install nushell

# Linux (Cargo)
cargo install nu

# From source
git clone  [https://github.com/nushell/nushell](https://github.com/nushell/nushell)
cd nushell
cargo install --path .
```

**Verify installation**:

```bash
nu --version
# Should show: 0.109.1 or higher
```

### Nickel 1.15.1+

Nickel is the infrastructure-as-code language providing type-safe configuration with lazy evaluation.

**Installation**:

```bash
# macOS (Homebrew)
brew install nickel

# Linux (Cargo)
cargo install nickel-lang-cli

# From source
git clone  [https://github.com/tweag/nickel](https://github.com/tweag/nickel)
cd nickel
cargo install --path cli
```

**Verify installation**:

```bash
nickel --version
# Should show: 1.15.1 or higher
```

### SOPS 3.10.2+

SOPS (Secrets OPerationS) provides encrypted configuration and secrets management.

**Installation**:

```bash
# macOS (Homebrew)
brew install sops

# Linux (binary download)
wget  [https://github.com/getsops/sops/releases/download/v3.10.2/sops-v3.10.2.linux.amd64](https://github.com/getsops/sops/releases/download/v3.10.2/sops-v3.10.2.linux.amd64)
sudo mv sops-v3.10.2.linux.amd64 /usr/local/bin/sops
sudo chmod +x /usr/local/bin/sops
```

**Verify installation**:

```bash
sops --version
# Should show: 3.10.2 or higher
```

### Age 1.2.1+

Age provides modern encryption for secrets used by SOPS.

**Installation**:

```bash
# macOS (Homebrew)
brew install age

# Linux (binary download)
wget  [https://github.com/FiloSottile/age/releases/download/v1.2.1/age-v1.2.1-linux-amd64.tar.gz](https://github.com/FiloSottile/age/releases/download/v1.2.1/age-v1.2.1-linux-amd64.tar.gz)
tar xzf age-v1.2.1-linux-amd64.tar.gz
sudo mv age/age /usr/local/bin/
sudo chmod +x /usr/local/bin/age
```

**Verify installation**:

```bash
age --version
# Should show: 1.2.1 or higher
```

### K9s 0.50.6+

K9s provides a terminal UI for managing Kubernetes clusters.

**Installation**:

```bash
# macOS (Homebrew)
brew install derailed/k9s/k9s

# Linux (binary download)
wget  [https://github.com/derailed/k9s/releases/download/v0.50.6/k9s_Linux_amd64.tar.gz](https://github.com/derailed/k9s/releases/download/v0.50.6/k9s_Linux_amd64.tar.gz)
tar xzf k9s_Linux_amd64.tar.gz
sudo mv k9s /usr/local/bin/
```

**Verify installation**:

```bash
k9s version
# Should show: 0.50.6 or higher
```

## Optional Software

### mdBook

For building and serving local documentation.

```bash
# Install with Cargo
cargo install mdbook

# Verify
mdbook --version
```

### Docker or Podman

Container runtime for test environments and local development.

```bash
# Docker (macOS)
brew install --cask docker

# Podman (Linux)
sudo apt-get install podman

# Verify
docker --version
# or
podman --version
```

### Cargo (Rust)

Required for building platform services and native plugins.

```bash
# Install Rust and Cargo
curl --proto '=https' --tlsv1.2 -sSf  [https://sh.rustup.rs](https://sh.rustup.rs) | sh

# Verify
cargo --version
```

### Git

Version control for workspace management and configuration.

```bash
# Most systems have Git pre-installed
git --version

# Install if needed (macOS)
brew install git

# Install if needed (Linux)
sudo apt-get install git
```

## System Requirements

### Minimum Hardware

**Development Workstation**:

- CPU: 2 cores
- RAM: 4 GB
- Disk: 20 GB available space
- Network: Internet connection for provider APIs

**Production Control Plane**:

- CPU: 4 cores
- RAM: 8 GB
- Disk: 50 GB available space (SSD recommended)
- Network: Stable internet connection, public IP optional

### Supported Operating Systems

**Primary Support**:

- macOS 12.0+ (Monterey or newer)
- Linux distributions with kernel 5.0+
  - Ubuntu 20.04 LTS or newer
  - Debian 11 or newer
  - Fedora 35 or newer
  - RHEL 8 or newer

**Limited Support**:

- Windows 10/11 via WSL2 (Windows Subsystem for Linux)

### Network Requirements

**Outbound Access**:

- HTTPS (443) to cloud provider APIs
- HTTPS (443) to GitHub (for version updates)
- SSH (22) for server management

**Inbound Access** (optional, for platform services):

- Port 8080: HTTP API
- Port 8081: MCP server
- Port 5000: Orchestrator service

### Cloud Provider Access

At least one cloud provider account with API credentials:

**UpCloud**:

- API username and password
- Account with sufficient quota for servers

**AWS**:

- AWS Access Key ID and Secret Access Key
- IAM permissions for EC2, VPC, EBS operations
- Account with sufficient EC2 quota

**Local Provider**:

- Docker or Podman installed
- Sufficient local system resources

## Permission Requirements

### User Permissions

**Standard User** (recommended):

- Read/write access to workspace directory
- Ability to create symlinks for CLI installation
- SSH key generation capability

**Administrative Tasks** (optional):

- Installing CLI to `/usr/local/bin` (requires sudo)
- Installing system-wide dependencies
- Configuring system services

### File System Permissions

```bash
# Workspace directory
chmod 755 ~/provisioning-workspace

# Configuration files
chmod 600 ~/.config/provisioning/user_config.yaml
chmod 600 ~/.ssh/provisioning_*

# Executable permissions for CLI
chmod +x /path/to/provisioning/core/cli/provisioning
```

## Verification Checklist

Before proceeding to installation, verify all prerequisites:

```bash
# Check required tools
nu --version              # 0.109.1+
nickel --version          # 1.15.1+
sops --version            # 3.10.2+
age --version             # 1.2.1+
k9s version               # 0.50.6+

# Check optional tools
mdbook --version          # Latest
docker --version          # Latest
cargo --version           # Latest
git --version             # Latest

# Verify system resources
nproc                     # CPU cores (2+ minimum)
free -h                   # RAM (4GB+ minimum)
df -h ~                   # Disk space (20GB+ minimum)

# Test network connectivity
curl -I  [https://api.github.com](https://api.github.com)
curl -I  [https://hub.upcloud.com](https://hub.upcloud.com)  # UpCloud API
curl -I  [https://ec2.amazonaws.com](https://ec2.amazonaws.com)  # AWS API
```

## Next Steps

Once all prerequisites are met, proceed to:

- [Installation](installation.md) - Install the Provisioning platform
- [Quick Start](quick-start.md) - Deploy your first infrastructure in 5 minutes
