# Prerequisites

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

## Hardware Requirements

### Minimum Requirements (Solo Mode)

- **CPU**: 2 cores
- **RAM**: 4 GB
- **Disk**: 20 GB available space
- **Network**: Internet connection for downloading dependencies

### Recommended Requirements (Multi-User Mode)

- **CPU**: 4 cores
- **RAM**: 8 GB
- **Disk**: 50 GB available space
- **Network**: Reliable internet connection

### Production Requirements (Enterprise Mode)

- **CPU**: 16 cores
- **RAM**: 32 GB
- **Disk**: 500 GB available space (SSD recommended)
- **Network**: High-bandwidth connection with static IP

## Operating System

### Supported Platforms

- **macOS**: 12.0 (Monterey) or later
- **Linux**:
  - Ubuntu 22.04 LTS or later
  - Fedora 38 or later
  - Debian 12 (Bookworm) or later
  - RHEL 9 or later

### Platform-Specific Notes

**macOS**:

- Xcode Command Line Tools required
- Homebrew recommended for package management

**Linux**:

- systemd-based distribution recommended
- sudo access required for some operations

## Required Software

### Core Dependencies

| Software | Version | Purpose |
|----------|---------|---------|
| **Nushell** | 0.107.1+ | Shell and scripting language |
| **Nickel** | 1.15.0+ | Configuration language |
| **Docker** | 20.10+ | Container runtime (for platform services) |
| **SOPS** | 3.10.2+ | Secrets management |
| **Age** | 1.2.1+ | Encryption tool |

### Optional Dependencies

| Software | Version | Purpose |
|----------|---------|---------|
| **Podman** | 4.0+ | Alternative container runtime |
| **OrbStack** | Latest | macOS-optimized container runtime |
| **K9s** | 0.50.6+ | Kubernetes management interface |
| **glow** | Latest | Markdown renderer for guides |
| **bat** | Latest | Syntax highlighting for file viewing |

## Installation Verification

Before proceeding, verify your system has the core dependencies installed:

### Nushell

```bash
# Check Nushell version
nu --version

# Expected output: 0.107.1 or higher
```

### Nickel

```bash
# Check Nickel version
nickel --version

# Expected output: 1.15.0 or higher
```

### Docker

```bash
# Check Docker version
docker --version

# Check Docker is running
docker ps

# Expected: Docker version 20.10+ and connection successful
```

### SOPS

```bash
# Check SOPS version
sops --version

# Expected output: 3.10.2 or higher
```

### Age

```bash
# Check Age version
age --version

# Expected output: 1.2.1 or higher
```

## Installing Missing Dependencies

### macOS (using Homebrew)

```bash
# Install Homebrew if not already installed
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

# Install Nushell
brew install nushell

# Install Nickel
brew install nickel

# Install Docker Desktop
brew install --cask docker

# Install SOPS
brew install sops

# Install Age
brew install age

# Optional: Install extras
brew install k9s glow bat
```

### Ubuntu/Debian

```bash
# Update package list
sudo apt update

# Install prerequisites
sudo apt install -y curl git build-essential

# Install Nushell (from GitHub releases)
curl -LO https://github.com/nushell/nushell/releases/download/0.107.1/nu-0.107.1-x86_64-linux-musl.tar.gz
tar xzf nu-0.107.1-x86_64-linux-musl.tar.gz
sudo mv nu /usr/local/bin/

# Install Nickel (using Rust cargo)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
cargo install nickel

# Install Docker
sudo apt install -y docker.io
sudo systemctl enable --now docker
sudo usermod -aG docker $USER

# Install SOPS
curl -LO https://github.com/getsops/sops/releases/download/v3.10.2/sops-v3.10.2.linux.amd64
chmod +x sops-v3.10.2.linux.amd64
sudo mv sops-v3.10.2.linux.amd64 /usr/local/bin/sops

# Install Age
sudo apt install -y age
```

### Fedora/RHEL

```bash
# Install Nushell
sudo dnf install -y nushell

# Install Nickel (using Rust cargo)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
source $HOME/.cargo/env
cargo install nickel

# Install Docker
sudo dnf install -y docker
sudo systemctl enable --now docker
sudo usermod -aG docker $USER

# Install SOPS
sudo dnf install -y sops

# Install Age
sudo dnf install -y age
```

## Network Requirements

### Firewall Ports

If running platform services, ensure these ports are available:

| Service | Port | Protocol | Purpose |
|---------|------|----------|---------|
| Orchestrator | 8080 | HTTP | Workflow API |
| Control Center | 9090 | HTTP | Policy engine |
| KMS Service | 8082 | HTTP | Key management |
| API Server | 8083 | HTTP | REST API |
| Extension Registry | 8084 | HTTP | Extension discovery |
| OCI Registry | 5000 | HTTP | Artifact storage |

### External Connectivity

The platform requires outbound internet access to:

- Download dependencies and updates
- Pull container images
- Access cloud provider APIs (AWS, UpCloud)
- Fetch extension packages

## Cloud Provider Credentials (Optional)

If you plan to use cloud providers, prepare credentials:

### AWS

- AWS Access Key ID
- AWS Secret Access Key
- Configured via `~/.aws/credentials` or environment variables

### UpCloud

- UpCloud username
- UpCloud password
- Configured via environment variables or config files

## Next Steps

Once all prerequisites are met, proceed to:
→ **[Installation](02-installation.md)**
