Last active 20 hours ago

samask revised this gist 20 hours ago. Go to revision

1 file changed, 5 insertions

test.md(file created)

@@ -0,0 +1,5 @@
1 + https://demo.opengist.io/samask/test123/edit
2 +
3 + # Test
4 +
5 + [test](test)

samask revised this gist 20 hours ago. Go to revision

1 file changed, 4 insertions

Test.org

@@ -1,5 +1,9 @@
1 1 * Org Mode
2 2
3 + [[LINK][DESCRIPTION]]
4 +
5 + https://demo.opengist.io/samask/test123/edit
6 +
3 7
4 8 /test/
5 9

samask revised this gist 20 hours ago. Go to revision

1 file changed, 14 insertions, 1 deletion

Test.org

@@ -1 +1,14 @@
1 - * Org Mode
1 + * Org Mode
2 +
3 +
4 + /test/
5 +
6 + [[test][test]]
7 +
8 + _test_
9 +
10 + ** Test
11 +
12 + *** Test
13 +
14 + **** Test

samask revised this gist 20 hours ago. Go to revision

2 files changed, 4 insertions

Test.org(file created)

@@ -0,0 +1 @@
1 + * Org Mode

test.org(file created)

@@ -0,0 +1,3 @@
1 + * Org.mode
2 +
3 + **test**

samask revised this gist 20 hours ago. Go to revision

1 file changed, 126 insertions

zone.sh(file created)

@@ -0,0 +1,126 @@
1 + #!/bin/bash
2 +
3 + # #############################################
4 + # SmartOS Zombie Zone Cleanup Script
5 + # Usage: ./nuke_zone.sh <UUID>
6 + # 20200112
7 + # Use as ./nuke_zone.sh ecc5d57a-3d90-44ca-a89b-8869a120487d
8 + # #############################################
9 +
10 + UUID=$1
11 +
12 + # 1. Validation
13 + if [[ -z "$UUID" ]]; then
14 + echo "Error: No UUID provided."
15 + echo "Usage: $0 <zone-uuid>"
16 + exit 1
17 + fi
18 +
19 + if [[ "$UUID" == "global" ]]; then
20 + echo "Error: Cannot delete the global zone."
21 + exit 1
22 + fi
23 +
24 + # Basic check to see if the UUID string format looks roughly correct (simple check)
25 + if [[ ! "$UUID" =~ ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$ ]]; then
26 + echo "Warning: Format of '$UUID' does not look like a standard UUID."
27 + read -p "Are you sure you want to proceed? (y/n) " -n 1 -r
28 + echo
29 + if [[ ! $REPLY =~ ^[Yy]$ ]]; then
30 + exit 1
31 + fi
32 + fi
33 +
34 + echo "--- Starting cleanup for Zone: $UUID ---"
35 +
36 + # 2. Check current status
37 + STATE=$(zoneadm -z "$UUID" list -p 2>/dev/null | cut -d: -f3)
38 +
39 + if [[ -z "$STATE" ]]; then
40 + echo "Zone currently not recognized by zoneadm. Checking ZFS leftovers..."
41 + else
42 + echo "Current Zone State: $STATE"
43 + fi
44 +
45 + # 3. Analyze and Kill Suspicious Processes
46 + echo "Checking for stuck processes..."
47 + # We look for zoneadmd specifically, as it is the controller.
48 + # We also look for qemu/bhyve instances associated with the UUID.
49 + PIDS=$(pgrep -f "$UUID")
50 +
51 + if [[ -n "$PIDS" ]]; then
52 + echo "Found the following processes associated with this UUID:"
53 + pgrep -lf "$UUID"
54 +
55 + echo "Attempting to kill these processes to release locks..."
56 + # We use kill -9 (SIGKILL) because if we are here, the process is likely unresponsive to SIGTERM.
57 + echo "$PIDS" | xargs kill -9
58 + sleep 2
59 +
60 + # Verify they are gone
61 + REMAINING=$(pgrep -f "$UUID")
62 + if [[ -n "$REMAINING" ]]; then
63 + echo "WARNING: Some processes refused to die: $REMAINING"
64 + echo "This may indicate a kernel-level hung task (zombie)."
65 + else
66 + echo "Processes cleared."
67 + fi
68 + else
69 + echo "No locking processes found."
70 + fi
71 +
72 + # 4. Force state to installed/halted if possible
73 + # If the zone is technically 'running' in the kernel, we must halt it before uninstalling.
74 + if [[ "$STATE" == "running" || "$STATE" == "shutting_down" ]]; then
75 + echo "Forcing zone halt..."
76 + zoneadm -z "$UUID" halt
77 + sleep 2
78 + fi
79 +
80 + # 5. Force Uninstall
81 + echo "Attempting forced uninstall (zoneadm)..."
82 + zoneadm -z "$UUID" uninstall -F
83 + RET=$?
84 +
85 + if [[ $RET -eq 0 ]]; then
86 + echo "zoneadm uninstall reported success."
87 + else
88 + echo "zoneadm uninstall reported an error (exit code $RET)."
89 + echo "Proceeding to ZFS cleanup anyway."
90 + fi
91 +
92 + # 6. ZFS Dataset Cleanup
93 + # vmadm requires the dataset 'zones/<UUID>' to be gone to consider the VM deleted.
94 + DATASET="zones/$UUID"
95 + if zfs list "$DATASET" > /dev/null 2>&1; then
96 + echo "ZFS dataset $DATASET still exists. Destroying it..."
97 +
98 + # Check if there are dependent snapshots or clones (unlikely for a deletion, but possible)
99 + # -r recursively destroys children/snapshots
100 + zfs destroy -r "$DATASET"
101 +
102 + if [[ $? -eq 0 ]]; then
103 + echo "Dataset destroyed."
104 + else
105 + echo "Failed to destroy dataset. Check 'zfs list' manually."
106 + fi
107 + else
108 + echo "ZFS dataset $DATASET is already gone."
109 + fi
110 +
111 + # 7. Final Verification
112 + echo "--- Final Status Check ---"
113 + if vmadm list | grep -q "$UUID"; then
114 + echo "FAILURE: $UUID still appears in 'vmadm list'."
115 + vmadm list | grep "$UUID"
116 + else
117 + echo "SUCCESS: $UUID is no longer in 'vmadm list'."
118 + fi
119 +
120 + if zoneadm list -cv | grep -q "$UUID"; then
121 + echo "WARNING: $UUID still appears in 'zoneadm list'."
122 + else
123 + echo "SUCCESS: $UUID is no longer in 'zoneadm list'."
124 + fi
125 +
126 + # #############################################
Newer Older