autoNAS / scripts / uninstall.sh
Newer Older
5b5a565 3 months ago History
231 lines | 7.621kb
Bogdan Timofte authored 3 months ago
1
#!/bin/bash
2

            
3
# AutoNAS Uninstall Script
4
# This script is installed on each cluster node for version-specific removal
5
# Executed by deploy.sh or can be run directly on node: /usr/local/lib/autonas/autonas-uninstall.sh
6

            
7
# Global configuration
8
LOG_TAG="autonas-uninstall"
9

            
10
set -e  # Exit on any error
11

            
12
# Check for force flag for silent cleanup
13
FORCE_MODE=false
14
if [ "$1" = "--force" ]; then
15
    FORCE_MODE=true
16
fi
17

            
18
# Helper function for conditional logging
19
log_message() {
20
    if [ "$FORCE_MODE" = false ]; then
21
        echo "$1"
22
    fi
23
}
24

            
25
CONFIG_DIR="/etc/pve/autonas"
26
SCRIPT_NAME="autonas-disk-handler.sh"
27
WRAPPER_NAME="autonas-udev-wrapper.sh"
28
CONFIG_SCRIPT="autonas-config.sh"
29
BOOT_SCAN_SCRIPT="autonas-boot-scan.sh"
30
CAMERA_IMPORT_SCRIPT="autonas-media-importer.sh"
31
INTERFACE_HANDLER_SCRIPT="autonas-interface-handler.sh"
32
UNIFIED_SCRIPT="autonas.sh"
33
UDEV_RULES="99-autonas-disk.rules"
34
SYSTEMD_SERVICE="autonas-attach@.service"
35
MAIN_SERVICE="autonas.service"
36
BOOT_SCAN_SERVICE="autonas-boot-scan.service"
37

            
38
if [ "$FORCE_MODE" = false ]; then
39
    echo "=== AutoNAS Uninstall Script ==="
40
    echo ""
41
fi
42

            
43
# Check if running as root
44
if [ "$EUID" -ne 0 ]; then
45
    if [ "$FORCE_MODE" = false ]; then
46
        echo "❌ This script must be run as root (use sudo)"
47
    fi
48
    exit 1
49
fi
50

            
51
log_message "🗑️  Uninstalling AutoNAS..."
52
log_message ""
53

            
54
# Remove scripts
55
log_message "Removing AutoNAS scripts..."
56
if [ -f "/usr/local/bin/$SCRIPT_NAME" ]; then
57
    rm "/usr/local/bin/$SCRIPT_NAME"
58
    log_message "✓ Manager script removed"
59
fi
60

            
61
if [ -f "/usr/local/bin/$WRAPPER_NAME" ]; then
62
    rm "/usr/local/bin/$WRAPPER_NAME"
63
    log_message "✓ Wrapper script removed"
64
fi
65

            
66
if [ -f "/usr/local/bin/$CONFIG_SCRIPT" ]; then
67
    rm "/usr/local/bin/$CONFIG_SCRIPT"
68
    log_message "✓ Configuration script removed"
69
fi
70

            
71
if [ -f "/usr/local/bin/$BOOT_SCAN_SCRIPT" ]; then
72
    rm "/usr/local/bin/$BOOT_SCAN_SCRIPT"
73
    log_message "✓ Boot scan script removed"
74
fi
75

            
76
if [ -f "/usr/local/bin/$CAMERA_IMPORT_SCRIPT" ]; then
77
    rm "/usr/local/bin/$CAMERA_IMPORT_SCRIPT"
78
    log_message "✓ Camera import script removed"
79
fi
80

            
81
if [ -f "/usr/local/bin/$INTERFACE_HANDLER_SCRIPT" ]; then
82
    rm "/usr/local/bin/$INTERFACE_HANDLER_SCRIPT"
83
    log_message "✓ Interface handler script removed"
84
fi
85

            
86
if [ -f "/usr/local/bin/$UNIFIED_SCRIPT" ]; then
87
    rm "/usr/local/bin/$UNIFIED_SCRIPT"
88
    log_message "✓ Unified AutoNAS script removed"
89
fi
90

            
91
# Remove symlink
92
if [ -L "/usr/local/bin/autonas" ]; then
93
    rm "/usr/local/bin/autonas"
94
    log_message "✓ AutoNAS symlink removed"
95
fi
96

            
97
# Remove internal scripts directory
98
if [ -d "/usr/local/lib/autonas" ]; then
99
    rm -rf "/usr/local/lib/autonas"
100
    log_message "✓ AutoNAS internal scripts directory removed"
101
fi
102

            
103
# Aggressive cleanup for orphaned files from previous versions
104
log_message "Cleaning up orphaned files from previous versions..."
105
for orphan_file in "autonas-interface-debug.sh" "autonas-test-interface-stability.sh"; do
106
    if [ -f "/usr/local/bin/$orphan_file" ]; then
107
        rm "/usr/local/bin/$orphan_file"
108
        log_message "✓ Orphaned file removed: $orphan_file"
109
    fi
110
done
111

            
112
# Remove udev rules
113
log_message "Removing udev rules..."
114
if [ -f "/etc/udev/rules.d/$UDEV_RULES" ]; then
115
    rm "/etc/udev/rules.d/$UDEV_RULES"
116
    udevadm control --reload-rules
117
    log_message "✓ Udev rules removed"
118
fi
119

            
120
# Remove systemd service
121
log_message "Removing systemd service..."
122
if [ -f "/etc/systemd/system/$SYSTEMD_SERVICE" ]; then
123
    systemctl stop autonas-attach@*.service 2>/dev/null || true
124
    systemctl disable autonas-attach@*.service 2>/dev/null || true
125
    rm "/etc/systemd/system/$SYSTEMD_SERVICE"
126
    systemctl daemon-reload
127
    log_message "✓ Systemd service removed"
128
fi
129

            
130
# Remove main service
131
log_message "Removing main AutoNAS service..."
132
if [ -f "/etc/systemd/system/$MAIN_SERVICE" ]; then
133
    systemctl stop autonas.service 2>/dev/null || true
134
    systemctl disable autonas.service 2>/dev/null || true
135
    rm "/etc/systemd/system/$MAIN_SERVICE"
136
    systemctl daemon-reload
137
    log_message "✓ Main AutoNAS service removed"
138
fi
139

            
140
# Remove boot scan service
141
log_message "Removing boot scan service..."
142
if [ -f "/etc/systemd/system/$BOOT_SCAN_SERVICE" ]; then
143
    systemctl stop autonas-boot-scan.service 2>/dev/null || true
144
    systemctl disable autonas-boot-scan.service 2>/dev/null || true
145
    rm "/etc/systemd/system/$BOOT_SCAN_SERVICE"
146
    systemctl daemon-reload
147
    log_message "✓ Boot scan service removed"
148
fi
149

            
150
# Handle configuration and data preservation
151
log_message ""
152
log_message "📁 Handling user data..."
153

            
154
# Check if configuration exists and has user data
155
if [ -f "$CONFIG_DIR/disks.conf" ]; then
156
    if grep -v '^#' "$CONFIG_DIR/disks.conf" | grep -v '^$' | grep -q ':'; then
157
        log_message "⚠️  User configurations detected in $CONFIG_DIR/disks.conf"
158
        log_message "   Configuration file preserved for manual cleanup"
159
        log_message "   Remove manually with: sudo rm -rf $CONFIG_DIR"
160
    else
161
        log_message "ℹ️  Configuration file contains only template - removing"
162
        rm "$CONFIG_DIR/disks.conf"
163
        rmdir "$CONFIG_DIR" 2>/dev/null || true
164
    fi
165
else
166
    log_message "ℹ️  No configuration file found"
167
    rmdir "$CONFIG_DIR" 2>/dev/null || true
168
fi
169

            
170
# Check for mounted AutoNAS disks
171
log_message ""
172
log_message "💾 Checking for mounted AutoNAS disks..."
173
mounted_autonas=$(mount | grep "/mnt/autonas/" | wc -l)
174
if [ $mounted_autonas -gt 0 ]; then
175
    log_message "⚠️  Found $mounted_autonas mounted AutoNAS disk(s):"
176
    if [ "$FORCE_MODE" = false ]; then
177
        mount | grep "/mnt/autonas/" | while read line; do
178
            echo "   $line"
179
        done
180
    fi
181
    log_message ""
182
    log_message "   These disks are still mounted and in use."
183
    log_message "   Mount points preserved: /mnt/autonas/"
184
    log_message "   Unmount manually if needed: sudo umount /mnt/autonas/*"
185
else
186
    log_message "ℹ️  No AutoNAS disks currently mounted"
187
    if [ -d "/mnt/autonas" ]; then
188
        # Only remove if empty
189
        if [ -z "$(ls -A /mnt/autonas)" ]; then
190
            rmdir "/mnt/autonas"
191
            log_message "✓ Empty AutoNAS mount directory removed"
192
        else
193
            log_message "⚠️  AutoNAS mount directory contains files - preserved"
194
        fi
195
    fi
196
fi
197

            
198
# Check NFS exports
199
log_message ""
200
log_message "🌐 Checking NFS exports..."
201
if [ -f "/etc/exports" ] && grep -q "/mnt/autonas/" "/etc/exports" 2>/dev/null; then
202
    log_message "⚠️  AutoNAS NFS exports found in /etc/exports"
203
    log_message "   Please manually remove AutoNAS entries from /etc/exports"
204
    log_message "   And reload NFS exports: sudo exportfs -ra"
205
else
206
    log_message "ℹ️  No AutoNAS NFS exports found"
207
fi
208

            
209
log_message ""
210
log_message "🎉 AutoNAS core components removed successfully!"
211

            
212
if [ "$FORCE_MODE" = false ]; then
213
    echo ""
214
    echo "📋 Summary:"
215
    echo "✓ Scripts removed from /usr/local/bin/"
216
    echo "✓ Udev rules removed"
217
    echo "✓ Systemd services removed"
218
    echo ""
219
    echo "⚠️  Preserved (manual cleanup required if desired):"
220
    echo "• User configurations: $CONFIG_DIR/ (if contains user data)"
221
    echo "• Mount points: /mnt/autonas/ (if contains data)"
222
    echo "• NFS exports: /etc/exports (manual edit required)"
223
    echo ""
224
    echo "📝 To completely remove all AutoNAS data:"
225
    echo "sudo rm -rf $CONFIG_DIR"
226
    echo "sudo rm -rf /mnt/autonas"
227
    echo "sudo nano /etc/exports  # Remove AutoNAS entries manually"
228
    echo "sudo exportfs -ra"
229
fi
230
echo ""
231
echo "🔄 To reinstall AutoNAS later, run: sudo bash scripts/install.sh"