devmatrix-scripts/setup_truenas_shares.sh

178 lines
6.3 KiB
Bash

#!/bin/bash
# TrueNAS Share Setup Script for DevMatrix
# Run this on TrueNAS (192.168.5.195) as root
set -e
# Configuration
DATASET_NAME="NAS2"
SHARE_PREFIX="devmatrix"
NETWORK_ALLOW="192.168.5.0/24"
echo "☁️ Setting up TrueNAS shares for DevMatrix..."
echo " Dataset: $DATASET_NAME"
echo " Network: $NETWORK_ALLOW"
echo ""
# ============================================
# CREATE DATASET STRUCTURE
# ============================================
echo "📁 Creating dataset structure..."
# Main dataset (if not exists)
if ! zfs list "$DATASET_NAME/$SHARE_PREFIX" >/dev/null 2>&1; then
zfs create "$DATASET_NAME/$SHARE_PREFIX"
echo "✓ Created: $DATASET_NAME/$SHARE_PREFIX"
else
echo "✓ Exists: $DATASET_NAME/$SHARE_PREFIX"
fi
# Sub-datasets
for subdir in projects backups iso-archive shared; do
dataset_path="$DATASET_NAME/$SHARE_PREFIX/$subdir"
if ! zfs list "$dataset_path" >/dev/null 2>&1; then
zfs create "$dataset_path"
echo "✓ Created: $dataset_path"
else
echo "✓ Exists: $dataset_path"
fi
done
# ============================================
# SET PERMISSIONS
# ============================================
echo ""
echo "🔐 Setting permissions..."
# Set ownership (nobody:nogroup for NFS)
for subdir in projects backups iso-archive shared; do
mountpoint=$(zfs get -H -o value mountpoint "$DATASET_NAME/$SHARE_PREFIX/$subdir")
chown -R nobody:nogroup "$mountpoint"
chmod -R 777 "$mountpoint"
echo "✓ Permissions set for: $subdir"
done
# ============================================
# CREATE NFS SHARES
# ============================================
echo ""
echo "🔗 Creating NFS shares..."
# Function to create NFS share
create_nfs_share() {
local name=$1
local path=$2
local options=$3
# Check if share already exists
if midclt call sharing.nfs.query "[[\"path\",\"=\",\"$path\"]]" | grep -q "$path"; then
echo "✓ NFS share exists: $name"
return
fi
# Create share using midclt (TrueNAS API)
midclt call sharing.nfs.create "{
\"path\": \"$path\",
\"comment\": \"DevMatrix $name\",
\"hosts\": [\"$NETWORK_ALLOW\"],
\"ro\": $options,
\"maproot_user\": \"root\",
\"maproot_group\": \"root\",
\"mapall_user\": \"\",
\"mapall_group\": \"\",
\"security\": ["SYS"]
}" > /dev/null
echo "✓ Created NFS share: $name ($path)"
}
# Create shares
mountpoint_base=$(zfs get -H -o value mountpoint "$DATASET_NAME")
create_nfs_share "projects" "$mountpoint_base/$SHARE_PREFIX/projects" "false"
create_nfs_share "backups" "$mountpoint_base/$SHARE_PREFIX/backups" "false"
create_nfs_share "iso-archive" "$mountpoint_base/$SHARE_PREFIX/iso-archive" "false"
create_nfs_share "shared" "$mountpoint_base/$SHARE_PREFIX/shared" "false"
# ============================================
# ENABLE NFS SERVICE
# ============================================
echo ""
echo "🚀 Enabling NFS service..."
# Check if NFS is running
if ! midclt call service.query "[[\"service\",\"=\",\"nfs\"]]" | grep -q '"state": "RUNNING"'; then
midclt call service.start "nfs" > /dev/null
midclt call service.update "nfs" '{"enable": true}' > /dev/null
echo "✓ NFS service started and enabled"
else
echo "✓ NFS service already running"
fi
# ============================================
# CREATE SMB SHARES (Optional - for Windows access)
# ============================================
echo ""
echo "🖥️ Creating SMB shares (for Windows access)..."
# Enable SMB if not already
if ! midclt call service.query "[[\"service\",\"=\",\"cifs\"]]" | grep -q '"state": "RUNNING"'; then
midclt call service.start "cifs" > /dev/null
midclt call service.update "cifs" '{"enable": true}' > /dev/null
echo "✓ SMB service started and enabled"
fi
# Function to create SMB share
create_smb_share() {
local name=$1
local path=$2
# Check if exists
if midclt call sharing.smb.query "[[\"path\",\"=\",\"$path\"]]" | grep -q "$path"; then
echo "✓ SMB share exists: $name"
return
fi
midclt call sharing.smb.create "{
\"path\": \"$path\",
\"name\": \"devmatrix-$name\",
\"comment\": \"DevMatrix $name\",
\"browseable\": true,
\"readonly\": false,
\"guestok\": true,
\"afp\": false
}" > /dev/null
echo "✓ Created SMB share: devmatrix-$name"
}
# Create SMB shares
create_smb_share "projects" "$mountpoint_base/$SHARE_PREFIX/projects"
create_smb_share "backups" "$mountpoint_base/$SHARE_PREFIX/backups"
create_smb_share "shared" "$mountpoint_base/$SHARE_PREFIX/shared"
# ============================================
# SUMMARY
# ============================================
echo ""
echo "╔════════════════════════════════════════════════════════╗"
echo "║ TRUENAS SETUP COMPLETE ║"
echo "╠════════════════════════════════════════════════════════╣"
echo "║ ║"
echo "║ NFS Shares (for Linux VMs): ║"
echo "$mountpoint_base/$SHARE_PREFIX/projects ║"
echo "$mountpoint_base/$SHARE_PREFIX/backups ║"
echo "$mountpoint_base/$SHARE_PREFIX/iso-archive ║"
echo "$mountpoint_base/$SHARE_PREFIX/shared ║"
echo "║ ║"
echo "║ SMB Shares (for Windows): ║"
echo "║ \\$(hostname)\\devmatrix-projects ║"
echo "║ \\$(hostname)\\devmatrix-backups ║"
echo "║ \\$(hostname)\\devmatrix-shared ║"
echo "║ ║"
echo "║ Access from: $NETWORK_ALLOW"
echo "║ ║"
echo "╚════════════════════════════════════════════════════════╝"
echo ""
echo "Next: Run 'setup_truenas.sh' inside VM 300 to mount these shares"