# APT Packages Checklist

Complete checklist of all apt packages required for each service type.

---

## Besu Nodes

### Common Packages (All Besu Node Types)
```bash
openjdk-17-jdk      # Java 17 Runtime (Required for Besu)
wget                # Download Besu binary
curl                # HTTP client utilities
jq                  # JSON processing
netcat-openbsd      # Network utilities (nc command)
iproute2            # Network routing utilities (ip command)
iptables            # Firewall management
ca-certificates     # SSL certificate store
gnupg               # GPG for package verification
lsb-release         # LSB release information
```

### Note: nginx for RPC Nodes
**nginx is NOT installed on RPC nodes**. Instead, **VMID 105 (nginx-proxy-manager)** is used as a centralized reverse proxy and load balancer for all RPC endpoints. This provides:
- Centralized management via web UI
- Load balancing across RPC nodes (2500-2502)
- SSL termination
- High availability with automatic failover

See `docs/NGINX_ARCHITECTURE_RPC.md` for details.

**Install Scripts**:
- `install/besu-validator-install.sh`
- `install/besu-sentry-install.sh`
- `install/besu-rpc-install.sh`

---

## Blockscout Explorer

```bash
docker.io           # Docker runtime
docker-compose      # Docker Compose orchestration
curl
wget
jq
ca-certificates
gnupg
lsb-release
```

**Install Script**: `install/blockscout-install.sh`

---

## Hyperledger Fabric

```bash
docker.io
docker-compose
curl
wget
jq
ca-certificates
gnupg
lsb-release
python3
python3-pip
build-essential     # C/C++ compiler and build tools
```

**Install Script**: `install/fabric-install.sh`

---

## Hyperledger Firefly

```bash
docker.io
docker-compose
curl
wget
jq
ca-certificates
gnupg
lsb-release
```

**Install Script**: `install/firefly-install.sh`

---

## Hyperledger Indy

```bash
docker.io
docker-compose
curl
wget
jq
ca-certificates
gnupg
lsb-release
python3
python3-pip
python3-dev         # Python development headers
libssl-dev          # OpenSSL development libraries
libffi-dev          # Foreign Function Interface library
build-essential     # C/C++ compiler and build tools
pkg-config          # Package configuration tool
libzmq5             # ZeroMQ library (runtime)
libzmq3-dev         # ZeroMQ library (development)
```

**Install Script**: `install/indy-install.sh`

---

## Hyperledger Cacti

```bash
docker.io
docker-compose
curl
wget
jq
ca-certificates
gnupg
lsb-release
```

**Install Script**: `install/cacti-install.sh`

---

## Chainlink CCIP Monitor

```bash
python3
python3-pip
python3-venv        # Python virtual environment
curl
wget
jq
ca-certificates
```

**Install Script**: `install/ccip-monitor-install.sh`

---

## Oracle Publisher

```bash
docker.io
docker-compose
curl
wget
jq
ca-certificates
gnupg
lsb-release
python3
python3-pip
```

**Install Script**: `install/oracle-publisher-install.sh`

---

## Keeper

```bash
docker.io
docker-compose
curl
wget
jq
ca-certificates
gnupg
lsb-release
```

**Install Script**: `install/keeper-install.sh`

---

## Financial Tokenization

```bash
docker.io
docker-compose
curl
wget
jq
ca-certificates
gnupg
lsb-release
python3
python3-pip
```

**Install Script**: `install/financial-tokenization-install.sh`

---

## Monitoring Stack

```bash
docker.io
docker-compose
curl
wget
jq
ca-certificates
gnupg
lsb-release
```

**Install Script**: `install/monitoring-stack-install.sh`

---

## Package Summary by Category

### Essential System Packages (Most Services)
- `curl`, `wget`, `jq`, `ca-certificates`, `gnupg`, `lsb-release`

### Docker Services
- `docker.io`, `docker-compose`

### Python Services
- `python3`, `python3-pip`
- Optional: `python3-dev`, `python3-venv`, `build-essential`

### Java Services (Besu)
- `openjdk-17-jdk`

### Network Utilities
- `netcat-openbsd`, `iproute2`, `iptables`

### Development Tools
- `build-essential` (includes gcc, g++, make, etc.)
- `pkg-config`

### Libraries
- `libssl-dev`, `libffi-dev`, `libzmq5`, `libzmq3-dev`

---

## Verification Commands

After deployment, verify packages are installed:

```bash
# Check Java (Besu nodes)
pct exec <vmid> -- java -version

# Check Docker (Docker-based services)
pct exec <vmid> -- docker --version
pct exec <vmid> -- docker-compose --version

# Check Python (Python services)
pct exec <vmid> -- python3 --version
pct exec <vmid> -- pip3 --version

# Check specific packages
pct exec <vmid> -- dpkg -l | grep -E "openjdk-17|docker|python3"
```

---

## Package Installation Notes

### Automatic Installation
All packages are automatically installed by their respective install scripts during container deployment.

### Installation Order
1. Container created with Ubuntu 22.04 template
2. Container started
3. Install script pushed to container
4. Install script executed (installs all apt packages)
5. Application software installed/downloaded
6. Services configured

### APT Update
All install scripts run `apt-get update` before installing packages.

### Non-Interactive Mode
All install scripts use `export DEBIAN_FRONTEND=noninteractive` to prevent interactive prompts.

---

## Troubleshooting

### Package Installation Fails
**Error**: `E: Unable to locate package <package-name>`

**Solution**:
```bash
# Update package lists
pct exec <vmid> -- apt-get update

# Check if package exists
pct exec <vmid> -- apt-cache search <package-name>

# Check Ubuntu version
pct exec <vmid> -- lsb_release -a
```

### Insufficient Disk Space
**Error**: `E: Write error - write (28: No space left on device)`

**Solution**:
```bash
# Check disk usage
pct exec <vmid> -- df -h

# Clean apt cache
pct exec <vmid> -- apt-get clean
```

### Network Connectivity Issues
**Error**: `E: Failed to fetch ... Connection timed out`

**Solution**:
```bash
# Test network connectivity
pct exec <vmid> -- ping -c 3 8.8.8.8

# Check DNS resolution
pct exec <vmid> -- nslookup archive.ubuntu.com
```

