diff options
Diffstat (limited to 'gemfeed/configure-stunnel-nfs-r1-r2.sh')
| -rwxr-xr-x | gemfeed/configure-stunnel-nfs-r1-r2.sh | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/gemfeed/configure-stunnel-nfs-r1-r2.sh b/gemfeed/configure-stunnel-nfs-r1-r2.sh new file mode 100755 index 00000000..58431744 --- /dev/null +++ b/gemfeed/configure-stunnel-nfs-r1-r2.sh @@ -0,0 +1,163 @@ +#!/bin/sh +# Configure stunnel and NFS mounts on r1 and r2 for f3s storage +# This script should be run on both r1 and r2 Rocky Linux systems + +set -e + +# Function to print colored status messages +print_status() { + echo -e "\n\033[1;34m>>> $1\033[0m" +} + +print_error() { + echo -e "\033[1;31mERROR: $1\033[0m" + exit 1 +} + +print_success() { + echo -e "\033[1;32m✓ $1\033[0m" +} + +# Check if running as root +if [ "$EUID" -ne 0 ]; then + print_error "Please run as root" +fi + +# Detect hostname +HOSTNAME=$(hostname -s) +if [ "$HOSTNAME" != "r1" ] && [ "$HOSTNAME" != "r2" ]; then + print_error "This script should only be run on r1 or r2" +fi + +print_status "Configuring stunnel and NFS on $HOSTNAME" + +# Step 1: Install stunnel package +print_status "Installing stunnel package..." +dnf install -y stunnel || print_error "Failed to install stunnel" +print_success "stunnel installed" + +# Step 2: Create stunnel directory +print_status "Creating stunnel configuration directory..." +mkdir -p /etc/stunnel +print_success "Directory created" + +# Step 3: Copy stunnel certificate from f0 +print_status "Copying stunnel certificate from f0..." +echo "Please copy the certificate manually:" +echo "On f0, run: scp /usr/local/etc/stunnel/stunnel.pem root@$HOSTNAME:/etc/stunnel/" +echo "" +echo "Press Enter when the certificate has been copied..." +read -r + +# Verify certificate exists +if [ ! -f /etc/stunnel/stunnel.pem ]; then + print_error "Certificate not found at /etc/stunnel/stunnel.pem" +fi +print_success "Certificate found" + +# Step 4: Create stunnel client configuration +print_status "Creating stunnel client configuration..." +cat > /etc/stunnel/stunnel.conf <<'EOF' +cert = /etc/stunnel/stunnel.pem +client = yes + +[nfs-ha] +accept = 127.0.0.1:2323 +connect = 192.168.1.138:2323 +EOF +print_success "Stunnel configuration created" + +# Step 5: Create systemd service for stunnel +print_status "Creating stunnel systemd service..." +cat > /etc/systemd/system/stunnel.service <<'EOF' +[Unit] +Description=SSL tunnel for network daemons +After=network.target + +[Service] +Type=forking +ExecStart=/usr/bin/stunnel /etc/stunnel/stunnel.conf +ExecStop=/usr/bin/killall stunnel +RemainAfterExit=yes + +[Install] +WantedBy=multi-user.target +EOF +print_success "Systemd service created" + +# Step 6: Enable and start stunnel service +print_status "Enabling and starting stunnel service..." +systemctl daemon-reload +systemctl enable stunnel +systemctl start stunnel +systemctl status stunnel --no-pager || print_error "Stunnel failed to start" +print_success "Stunnel service is running" + +# Step 7: Create mount point for NFS +print_status "Creating NFS mount point..." +mkdir -p /data/nfs/k3svolumes +print_success "Mount point created" + +# Step 8: Test mount NFS through stunnel +print_status "Testing NFS mount through stunnel..." +mount -t nfs4 -o port=2323 127.0.0.1:/data/nfs/k3svolumes /data/nfs/k3svolumes || print_error "Failed to mount NFS" +print_success "NFS mounted successfully" + +# Step 9: Verify the mount +print_status "Verifying NFS mount..." +mount | grep k3svolumes || print_error "NFS mount not found" +df -h /data/nfs/k3svolumes +print_success "NFS mount verified" + +# Step 10: Unmount for fstab configuration +print_status "Unmounting NFS to configure fstab..." +umount /data/nfs/k3svolumes +print_success "Unmounted" + +# Step 11: Add entry to /etc/fstab for persistent mount +print_status "Adding NFS mount to /etc/fstab..." +# Check if entry already exists +if grep -q "127.0.0.1:/data/nfs/k3svolumes" /etc/fstab; then + print_status "Entry already exists in /etc/fstab" +else + echo "127.0.0.1:/data/nfs/k3svolumes /data/nfs/k3svolumes nfs4 port=2323,_netdev 0 0" >> /etc/fstab + print_success "Added to /etc/fstab" +fi + +# Step 12: Mount using fstab +print_status "Mounting NFS using fstab entry..." +mount /data/nfs/k3svolumes || print_error "Failed to mount from fstab" +print_success "Mounted from fstab" + +# Step 13: Final verification +print_status "Final verification..." +echo "" +echo "Stunnel status:" +systemctl is-active stunnel || print_error "Stunnel is not active" +echo "" +echo "NFS mount status:" +mount | grep k3svolumes +echo "" +echo "Disk usage:" +df -h /data/nfs/k3svolumes +echo "" + +# Step 14: Test write access +print_status "Testing write access..." +TEST_FILE="/data/nfs/k3svolumes/test-$HOSTNAME-$(date +%s).txt" +echo "Test from $HOSTNAME at $(date)" > "$TEST_FILE" || print_error "Failed to write test file" +cat "$TEST_FILE" +print_success "Write test successful" + +print_success "Configuration complete on $HOSTNAME!" +echo "" +echo "Summary:" +echo "- Stunnel is configured as a client connecting to 192.168.1.138:2323 (CARP VIP)" +echo "- NFS is mounted through stunnel at /data/nfs/k3svolumes" +echo "- Mount is persistent across reboots (configured in /etc/fstab)" +echo "- All traffic between this host and the NFS server is encrypted" +echo "" +echo "To verify everything after reboot:" +echo " systemctl status stunnel" +echo " mount | grep k3svolumes" +echo " ls -la /data/nfs/k3svolumes/"
\ No newline at end of file |
