Compare commits

51 Commits

Author SHA1 Message Date
85dd236772 Module Update
All checks were successful
Update Dispatches / refresh-news (push) Successful in 2s
- add option to install Netbird Self Hosted Server with dependency check
- add option to Bring down Netbird Self Hosted Server and remove config file
- "Decimate" means remove :)
2026-02-11 21:57:01 -05:00
04713782a0 Module Update
All checks were successful
Update Dispatches / refresh-news (push) Successful in 1s
- Forgot to add move option
- Add Log Viewer in adjacent to log file
2026-02-11 21:37:06 -05:00
583fd0476c Module Update
All checks were successful
Update Dispatches / refresh-news (push) Successful in 1s
path-parsing logic for special characters and the UI output isolation
2026-02-11 21:14:04 -05:00
9bc9bde9bd Module Update
All checks were successful
Update Dispatches / refresh-news (push) Successful in 1s
- Add Transfer capabillity (copy or move)
- Add Options to 'Exit' or 'Quit'
- Have Module list directories (Local & Remote)
- Add " " Quotes to file/filenames with spaces
- rclone runs with - P flag to show progress
- End of transfer Return to Wizard screen
- Logs Logged to /.dynr/log/rclone-wizard
2026-02-11 21:09:42 -05:00
7ab37d67c3 fix dependencies issues
All checks were successful
Update Dispatches / refresh-news (push) Successful in 1s
2026-02-08 03:55:57 -05:00
77ea378d7e shell attach bug present
All checks were successful
Update Dispatches / refresh-news (push) Successful in 2s
2026-02-08 03:48:14 -05:00
7bb3628840 Update modules/proxmox-commander
All checks were successful
Update Dispatches / refresh-news (push) Successful in 2s
2026-02-08 03:44:23 -05:00
cb77ee4461 fixed published versioning
All checks were successful
Update Dispatches / refresh-news (push) Successful in 1s
2026-02-08 03:41:22 -05:00
0fb4de853f Update modules/proxmox-commander
All checks were successful
Update Dispatches / refresh-news (push) Successful in 2s
2026-02-08 03:41:03 -05:00
2bdfb51831 Update modules/proxmox-commander
All checks were successful
Update Dispatches / refresh-news (push) Successful in 2s
2026-02-08 03:37:25 -05:00
9de1189e02 Update modules/proxmox-commander
All checks were successful
Update Dispatches / refresh-news (push) Successful in 2s
2026-02-08 03:35:45 -05:00
6beed01409 Update modules/proxmox-commander
All checks were successful
Update Dispatches / refresh-news (push) Successful in 2s
2026-02-08 03:33:29 -05:00
85cee3b236 proxmox commander
All checks were successful
Update Dispatches / refresh-news (push) Successful in 2s
add multi-select/select all
changing titles
add quit to fleet ops
2026-02-08 03:31:32 -05:00
06f6d9d5d6 pve hosts issue
All checks were successful
Update Dispatches / refresh-news (push) Successful in 1s
2026-02-08 03:18:51 -05:00
c45c2ddbcc Fixed Flow & Syntax
All checks were successful
Update Dispatches / refresh-news (push) Successful in 1s
2026-02-08 03:14:31 -05:00
6dbf2dd9c2 fix hosts save and housekeeping
All checks were successful
Update Dispatches / refresh-news (push) Successful in 1s
2026-02-08 03:11:09 -05:00
9974b836c7 fix exit mode
All checks were successful
Update Dispatches / refresh-news (push) Successful in 1s
2026-02-08 03:06:53 -05:00
18c76f4663 there was a bug with returning to Main Menu
All checks were successful
Update Dispatches / refresh-news (push) Successful in 1s
2026-02-08 03:02:39 -05:00
b43f199df3 remove duplicate message & clean up
All checks were successful
Update Dispatches / refresh-news (push) Successful in 1s
2026-02-08 03:01:28 -05:00
501de81a94 ghosts still existed
All checks were successful
Update Dispatches / refresh-news (push) Successful in 1s
2026-02-08 02:59:57 -05:00
92a01dee96 housekeeping & ocd
All checks were successful
Update Dispatches / refresh-news (push) Successful in 1s
2026-02-08 02:57:13 -05:00
b0b0d05206 gave some hints
All checks were successful
Update Dispatches / refresh-news (push) Successful in 1s
2026-02-08 02:53:17 -05:00
55c55c85c8 create proxmox commander
All checks were successful
Update Dispatches / refresh-news (push) Successful in 1s
clean up ghost entries and other pests
2026-02-08 02:49:42 -05:00
0eeac30fe3 remove local developer tags
All checks were successful
Update Dispatches / refresh-news (push) Successful in 1s
2026-02-08 02:48:42 -05:00
916d047304 fix updating
All checks were successful
Update Dispatches / refresh-news (push) Successful in 1s
2026-02-08 02:47:38 -05:00
7f643b53fb create proxmox commander
All checks were successful
Update Dispatches / refresh-news (push) Successful in 1s
make more interactive menus and multiselect, mac supported as well 👌 to remote install
2026-02-08 02:29:40 -05:00
3cebef4422 create proxmox commander
All checks were successful
Update Dispatches / refresh-news (push) Successful in 1s
add more quality of life or OCD Features
2026-02-08 02:20:19 -05:00
26e33e16d9 create proxmox commander
All checks were successful
Update Dispatches / refresh-news (push) Successful in 1s
feat(proxmox): initial release of proxmox-commander v1.0.0 with full remote orchestration
2026-02-08 02:10:59 -05:00
cad6c4c547 update pve commander
All checks were successful
Update Dispatches / refresh-news (push) Successful in 1s
2026-02-08 02:01:18 -05:00
4c747546e3 add new features
All checks were successful
Update Dispatches / refresh-news (push) Successful in 1s
bootstrap for creating lxc
2026-02-08 01:33:20 -05:00
ce3de74cc2 add new features
All checks were successful
Update Dispatches / refresh-news (push) Successful in 2s
proxmox commander
2026-02-08 01:31:39 -05:00
931555af5c add new features
All checks were successful
Update Dispatches / refresh-news (push) Successful in 2s
create & integrate Proxmox Commander
2026-02-08 01:29:35 -05:00
ebf8871e80 make dynr persistent
All checks were successful
Update Dispatches / refresh-news (push) Successful in 3s
2026-02-08 00:21:44 -05:00
e157cac123 add used memory to memory section x2
All checks were successful
Update Dispatches / refresh-news (push) Successful in 3s
2026-02-08 00:09:56 -05:00
faa2f6534d add links
All checks were successful
Update Dispatches / refresh-news (push) Successful in 3s
2026-02-08 00:04:19 -05:00
16feb6955a add used memory to memory section
All checks were successful
Update Dispatches / refresh-news (push) Successful in 3s
2026-02-08 00:03:22 -05:00
fb9cde4b80 add initial darwin (mac) support
All checks were successful
Update Dispatches / refresh-news (push) Successful in 1s
add system check or system pulse to make sure you can reach remote modules and or if your space is full
2026-02-07 23:10:11 -05:00
8dabd5506b OCD Cleaning
All checks were successful
Update Dispatches / refresh-news (push) Successful in 1s
2026-02-07 23:01:27 -05:00
b05bf26bf9 add remove modules option
All checks were successful
Update Dispatches / refresh-news (push) Successful in 1s
2026-02-07 22:58:35 -05:00
153d8e3b29 putting back what i accidentally stole
All checks were successful
Update Dispatches / refresh-news (push) Successful in 2s
accidentally removed showing remote modules
2026-02-07 22:52:22 -05:00
f0d263992a close open doors
All checks were successful
Update Dispatches / refresh-news (push) Successful in 2s
2026-02-07 22:49:01 -05:00
68617341c6 add initial darwin (mac) support
All checks were successful
Update Dispatches / refresh-news (push) Successful in 2s
apple popup support
2026-02-07 22:44:22 -05:00
d22e0759af add initial darwin (mac) support
All checks were successful
Update Dispatches / refresh-news (push) Successful in 2s
add apple interactive menu support
2026-02-07 22:43:10 -05:00
bc7976d3b9 add initial darwin (mac) support reformat text
All checks were successful
Update Dispatches / refresh-news (push) Successful in 2s
2026-02-07 22:37:03 -05:00
d7918d84da add initial darwin (mac) support reformat text
All checks were successful
Update Dispatches / refresh-news (push) Successful in 2s
2026-02-07 22:35:19 -05:00
d261abddc9 add initial darwin (mac) support
All checks were successful
Update Dispatches / refresh-news (push) Successful in 2s
2026-02-07 22:34:02 -05:00
c44ef9a81d add initial darwin (mac) support
All checks were successful
Update Dispatches / refresh-news (push) Successful in 3s
2026-02-07 22:33:11 -05:00
4ded7a9bc9 add initial darwin (mac) support
All checks were successful
Update Dispatches / refresh-news (push) Successful in 3s
2026-02-07 22:30:42 -05:00
3a397bfffa add initial darwin (mac) support
All checks were successful
Update Dispatches / refresh-news (push) Successful in 3s
2026-02-07 22:21:22 -05:00
80c08ee18a update version
All checks were successful
Update Dispatches / refresh-news (push) Successful in 3s
2026-02-06 08:51:49 -05:00
8da7ae9408 update version
All checks were successful
Update Dispatches / refresh-news (push) Successful in 3s
2026-02-06 08:45:42 -05:00
7 changed files with 464 additions and 221 deletions

View File

@@ -11,6 +11,8 @@ Licensed under MIT
* **Non-Evasive:** Installs to `/opt/dynr` to keep your system clean.
* **Aesthetic:** High-contrast Dynasty color palette (#1fd9f0, #9c16ba, #dba608).
---
[![Donate](https://img.shields.io/badge/Donate-Stripe-D4AF37?style=for-the-badge&logo=stripe&logoColor=white)](https://donate.stripe.com/7sIbIW0Yeb3k9rOdQY) [![](https://img.shields.io/badge/Dynasty_Network-Visit_Forum-D4AF37?style=for-the-badge&logo=discourse&logoColor=000000)](https://forum.dynastyrevolution.com)
---
## 🚀 Installation

View File

@@ -1,128 +1,85 @@
#!/bin/bash
# -----------------------------------------------------------------------
# Dynasty Revolution Universal Installer v2.3.6
# Dynasty Revolution Universal Installer v2.3.7-pre (Smart-Sync Edition)
# -----------------------------------------------------------------------
# --- Brighter 256-Color Palette ---
# --- 1. ENVIRONMENT & STYLING ---
[[ "$OSTYPE" == "darwin"* ]] && { OS="macOS"; DP="$HOME/.dynr"; } || { OS="Linux"; DP="/opt/dynr"; }
VERSION="2.3.7-pre"
REPO="https://git.dynastyrevolution.com/DYNR/DynastyRevolution-Scripts/raw/branch/v2.3.7-pre"
BLUE='\033[38;5;45m'; PURPLE='\033[38;5;127m'; GOLD='\033[38;5;178m'; RED='\033[38;5;196m'; NC='\033[0m'
# --- THE SOURCE OF TRUTH ---
VERSION="2.3.6"
REPO_RAW="https://git.dynastyrevolution.com/DYNR/DynastyRevolution-Scripts/raw/branch/main"
CURRENT_DATE=$(date +"%m-%d-%Y")
clear
echo -e "${BLUE}🐉 Dynasty Revolution Systems Initializing...${NC}"
echo -e "${GOLD}Current Era: ${NC}$CURRENT_DATE"
echo -e "${PURPLE}-------------------------------------------------${NC}"
# --- News Dispatch Logic ---
echo -e "${GOLD}📜 LATEST ARCHIVE DISPATCHES:${NC}"
NEWS_DATA=$(curl -sL -A "Mozilla/5.0" "$REPO_RAW/dispatches.txt")
if [[ -z "$NEWS_DATA" || "$NEWS_DATA" == *"404"* ]]; then
echo -e " ${RED}The Archives are currently silent.${NC}"
else
echo "$NEWS_DATA" | sed "s/^/ /"
# --- 2. INITIAL MANIFEST (BOOTSTRAP) ---
if [ ! -f "/usr/local/bin/dynr" ]; then
clear; echo -e "${BLUE}🐉 Dynasty Revolution Systems Initializing...${NC}"
read -p "📥 Manifest Framework? (y/n): " CF < /dev/tty
if [[ "$CF" =~ ^[Yy]$ ]]; then
[[ "$OS" == "macOS" ]] && mkdir -p "$DP/modules" || sudo mkdir -p "$DP/modules"
sudo curl -sSL "$REPO/install.sh" -o /usr/local/bin/dynr && sudo chmod +x /usr/local/bin/dynr
echo -e "${GOLD}✅ System Manifested! Type 'dynr' to begin.${NC}"
fi; exit 0
fi
echo -e "${PURPLE}-------------------------------------------------${NC}"
# --- Version & Existing Install Detection ---
if [ -f "/usr/local/bin/dynr" ]; then
CURRENT_VER=$(grep -m 1 "VERSION=" /usr/local/bin/dynr | sed -E 's/.*VERSION="?([0-9.]+)"?.*/\1/')
[[ -z "$CURRENT_VER" ]] && CURRENT_VER="Unknown"
# --- 3. MAIN INTERFACE LOOP ---
while true; do
clear
echo -e "${BLUE}🐉 Dynasty Revolution Systems | v$VERSION${NC}"
echo -e "${PURPLE}📡 Pulse Check:${NC}"
echo -e " [${GOLD}OK${NC}] OS: $OS ($(uname -m))"
ping -c 1 1.1.1.1 &>/dev/null && echo -e " [${GOLD}OK${NC}] Network: Cloudflare Reachable" || echo -e " [${RED}!!${NC}] Network: Offline"
# --- NEW: Self-Update Check ---
REMOTE_VER=$(curl -sL "$REPO_RAW/install.sh" | grep -m 1 "VERSION=" | sed -E 's/.*VERSION="?([0-9.]+)"?.*/\1/')
if [[ "$REMOTE_VER" != "$CURRENT_VER" && "$REMOTE_VER" != "" ]]; then
echo -e "${RED}✨ A NEW ERA HAS DAWNED: v$REMOTE_VER IS AVAILABLE! (Current: v$CURRENT_VER)${NC}"
echo -e "${RED} Select option 2 below to manifest the latest scrolls.${NC}"
echo -e "${PURPLE}-------------------------------------------------${NC}"
fi
echo -e "${PURPLE}-------------------------------------------------${NC}"
echo -e "${GOLD}📜 LATEST ARCHIVE DISPATCHES:${NC}"
curl -sL --connect-timeout 1 "$REPO/dispatches.txt" | sed "s/^/ /"
echo -e "${PURPLE}-------------------------------------------------${NC}"
echo -e "${GOLD}⚠️ Dynasty Framework detected (v$CURRENT_VER)${NC}"
echo -e "Select your path:"
echo -e "1) ${BLUE}Quick Strike${NC} (Run or Manifest Modules)"
echo -e "2) ${BLUE}Reinstall / Update${NC} (Overwrite)"
echo -e "3) ${RED}Uninstall${NC} (Remove)"
echo "4) Cancel"
echo ""
read -p "Selection [1-4]: " ALREADY_OPT < /dev/tty
echo -e "1) ${BLUE}Quick Strike${NC} (Modules)\n2) ${GOLD}Proxmox Commander${NC}\n3) ${PURPLE}Remove Modules${NC} (Multi-Select)\n4) ${BLUE}Update & Sync${NC}\n5) ${RED}Uninstall${NC}\n6) Exit"
read -p "Selection [1-6]: " OPT < /dev/tty
case $ALREADY_OPT in
1)
# --- Local Modules ---
echo -e "\n${PURPLE}📜 Locally Manifested Scrolls:${NC}"
ls /opt/dynr/modules 2>/dev/null | sed 's/^/ ↓ /' || echo " (Empty)"
# --- Cloud Modules ---
echo -e "\n${BLUE}☁️ Cloud Manifest (Available):${NC}"
CLOUD_DATA=$(curl -sL -A "Mozilla/5.0" "$REPO_RAW/modules_list.txt" | grep -v "Not found")
if [[ -z "$CLOUD_DATA" ]]; then
echo -e " ${GOLD}Scanning the heavens... (No remote modules found)${NC}"
case $OPT in
1) # MODULE LOADER
echo -e "\n${PURPLE}📜 Local Scrolls:${NC}"
ls "$DP/modules" 2>/dev/null | sed 's/^/ ↓ /'
read -p "dynr > " CMD < /dev/tty
if [[ -n "$CMD" && "$CMD" != "exit" ]]; then
[[ ! -f "$DP/modules/$CMD" ]] && { curl -s -o "$DP/modules/$CMD" "$REPO/modules/$CMD"; chmod +x "$DP/modules/$CMD"; }
"$DP/modules/$CMD" < /dev/tty; read -p "Press Enter to return..." < /dev/tty
fi ;;
2) # PROXMOX COMMANDER
[[ ! -f "$DP/modules/proxmox-commander" ]] && { echo -e "${GOLD}🔎 Fetching Commander...${NC}"; curl -s -o "$DP/modules/proxmox-commander" "$REPO/modules/proxmox-commander"; chmod +x "$DP/modules/proxmox-commander"; }
"$DP/modules/proxmox-commander" < /dev/tty
echo -e "\n${BLUE}Back at the Front Gate.${NC}"
read -p "Press Enter to continue..." < /dev/tty ;;
3) # SMART MULTI-REMOVE
MODS=$(ls "$DP/modules" 2>/dev/null)
if [[ -z "$MODS" ]]; then echo -e "${RED}No modules found.${NC}"; sleep 1; continue; fi
if [[ "$OS" == "macOS" ]]; then
PK=$(osascript -e "set theList to every paragraph of \"$MODS\"" -e 'choose from list theList with title "Module Purge" with prompt "Select modules to delete (Cmd+Click for multiple):" with multiple selections allowed')
[[ "$PK" == "false" ]] && continue
IFS=',' read -ra ADDR <<< "$PK"
for m in "${ADDR[@]}"; do target=$(echo "$m" | xargs); rm -f "$DP/modules/$target"; echo -e "${GOLD} ❌ Removed: $target${NC}"; done
else
echo "$CLOUD_DATA" | sed 's/^/ ☁️ /'
fi
echo -e "\n${BLUE}Enter command to execute (or 'exit'):${NC}"
read -p "dynr > " CMD_INPUT < /dev/tty
if [[ "$CMD_INPUT" == "exit" || "$CMD_INPUT" == "quit" ]]; then
echo -e "${GOLD}🐉 The Dynasty awaits your return. Farewell.${NC}"
exit 0
fi
if [[ ! -z "$CMD_INPUT" ]]; then
if [ ! -f "/opt/dynr/modules/$CMD_INPUT" ]; then
echo -e "${GOLD}🔎 Module '$CMD_INPUT' is not local, but exists in the Cloud.${NC}"
read -p "📥 Manifest this scroll from the heavens? (y/n): " CONFIRM < /dev/tty
if [[ "$CONFIRM" == "y" || "$CONFIRM" == "Y" ]]; then
echo -e "${BLUE}☁️ Downloading...${NC}"
HTTP_STATUS=$(curl -s -o "/tmp/$CMD_INPUT" -w "%{http_code}" "$REPO_RAW/modules/$CMD_INPUT")
if [ "$HTTP_STATUS" -eq 200 ]; then
sudo mv "/tmp/$CMD_INPUT" "/opt/dynr/modules/$CMD_INPUT"
sudo chmod +x "/opt/dynr/modules/$CMD_INPUT"
echo -e "${BLUE}✅ Manifested!${NC}"
else
echo -e "${RED}❌ Failed to retrieve scroll.${NC}"
rm -f "/tmp/$CMD_INPUT"; exit 1
fi
else
echo -e "${GOLD}🐉 Operation cancelled.${NC}"; exit 0
fi
fi
dynr "$CMD_INPUT" </dev/tty
fi
exit 0
;;
2)
echo -e "${BLUE}📡 Fetching scrolls of change...${NC}"
CHANGES=$(curl -sL "$REPO_RAW/dispatches.txt" | head -n 15)
if whiptail --title "Dynasty Update Manifest" --scrolltext --yesno "Reviewing latest changes:\n\n$CHANGES\n\nProceed with system manifest v$REMOTE_VER?" 20 70; then
echo -e "${BLUE}Proceeding with Update...${NC}"
sudo curl -sSL "$REPO_RAW/install.sh" -o /usr/local/bin/dynr
sudo chmod +x /usr/local/bin/dynr
echo -e "${GOLD}✅ System Manifest Updated to v$REMOTE_VER${NC}"
else
echo -e "${GOLD}🐉 Update deferred.${NC}"
fi
exit 0
;;
3)
echo -e "${RED}Removing Dynasty files...${NC}"
sudo rm -rf /opt/dynr /usr/local/bin/dynr
exit 0
;;
*)
echo -e "${GOLD}🐉 The Dynasty awaits your return. Farewell.${NC}"
exit 0
;;
WL=$(echo "$MODS" | awk '{print $1 " " $1 " off"}')
REMS=$(whiptail --title "Module Purge" --checklist "Use Spacebar to select targets:" 20 60 10 $WL 3>&1 1>&2 2>&3)
[[ -n "$REMS" ]] && for id in ${REMS//\"/}; do rm -f "$DP/modules/$id"; echo -e "${GOLD} ❌ Removed: $id${NC}"; done
fi; sleep 1 ;;
4) # SMART UPDATE & SYNC
echo -e "${GOLD}🔄 Syncing Framework...${NC}"
sudo curl -sSL "$REPO/install.sh" -o /usr/local/bin/dynr && sudo chmod +x /usr/local/bin/dynr
if [ -d "$DP/modules" ]; then
for mod in "$DP/modules"/*; do
[ -e "$mod" ] || continue
m_name=$(basename "$mod")
echo -ne "${PURPLE} -> Refreshing $m_name... ${NC}"
curl -s -o "$mod" "$REPO/modules/$m_name" && chmod +x "$mod" && echo -e "${GOLD}DONE${NC}"
done
fi; echo -e "${BLUE}✅ Sync Complete.${NC}"; sleep 1; exec /usr/local/bin/dynr ;;
5) # UNINSTALL
read -p "⚠️ Uninstall? (y/n): " UN < /dev/tty
[[ "$UN" == "y" ]] && { sudo rm -f /usr/local/bin/dynr; rm -rf "$DP"; exit 0; } ;;
6) # EXIT
echo -e "${GOLD}\n ____ __ __ _ _ ____ \n | _ \ \ \ / /| \ | || _ \ \n | | | | \ V / | \| || |_) |\n | |_| | | | | |\ || _ < \n |____/ |_| |_| \_||_| \_\\\\${NC}"
echo -e "${BLUE} 🐉 DEPARTING THE DYNASTY...${NC}\n"; exit 0 ;;
*) echo "Invalid selection."; sleep 1 ;;
esac
fi
echo -e "\n${BLUE}System Initialized. Version: $VERSION${NC}"
done

View File

@@ -1,62 +1,89 @@
#!/bin/bash
# -----------------------------------------------------------------------
# Dynasty Module: NetBird Strike (Single-Pass Manifest)
# Dynasty Module: NetBird Strike v0.1.2
# -----------------------------------------------------------------------
BLUE='\033[38;5;45m'; GOLD='\033[38;5;178m'; RED='\033[38;5;196m'; NC='\033[0m'
# 1. Install Check
if ! command -v netbird &> /dev/null; then
echo -e "${BLUE}🛡️ Initializing NetBird Repository...${NC}"
curl -sSL https://pkgs.netbird.io/debian/public.key | sudo gpg --dearmor --yes --output /usr/share/keyrings/netbird-archive-keyring.gpg
echo 'deb [signed-by=/usr/share/keyrings/netbird-archive-keyring.gpg] https://pkgs.netbird.io/debian stable main' | sudo tee /etc/apt/sources.list.d/netbird.list
sudo apt-get update && sudo apt-get install netbird -y
fi
LOG_DIR="$HOME/.dynr/logs/netbird-strike"
mkdir -p "$LOG_DIR"
TS=$(date +"%Y%m%d_%H%M%S")
STRIKE_LOG="$LOG_DIR/strike_$TS.log"
# 2. Select Instance Type
CHOICE=$(whiptail --title "NetBird Instance Selection" --menu "Choose your destination:" 15 60 2 \
"1" "NetBird Managed Cloud (Default)" \
"2" "Self-Hosted Instance" 3>&1 1>&2 2>&3)
BLUE='\033[38;5;45m'; PURPLE='\033[38;5;127m'; GOLD='\033[38;5;178m'; RED='\033[38;5;196m'; NC='\033[0m'
if [ $? != 0 ]; then exit 0; fi
log_event() { echo -e "$1" | tee -a "$STRIKE_LOG"; }
case $CHOICE in
1)
MGMT_URL=""
;;
2)
if whiptail --title "Self-Hosted Choice" --yesno "Are you using the Dynasty Revolution Netbird instance?" 10 60; then
MGMT_URL="https://netbird.dynastyrevolution.com"
else
MGMT_URL=$(whiptail --title "Custom Configuration" --inputbox "Enter your Management URL:" 10 60 3>&1 1>&2 2>&3)
# --- 💀 Decimation Stance (Cleanup) ---
run_decimation() {
log_event "${RED}⚠️ INITIATING DECIMATION STANCE...${NC}"
# Locate the netbird directory (usually /root/netbird or $HOME/netbird)
NB_PATH="/root/netbird"
[ ! -d "$NB_PATH" ] && NB_PATH="$HOME/netbird"
if [ -d "$NB_PATH" ] && [ -f "$NB_PATH/docker-compose.yml" ]; then
read -p "Run 'docker compose down' to stop and clean networks? (y/n): " DO_DOWN
if [[ "$DO_DOWN" == "y" ]]; then
log_event "ACTION: Bringing down Docker mesh..."
cd "$NB_PATH" && sudo docker compose down 2>&1 | tee -a "$STRIKE_LOG"
cd - > /dev/null
fi
if [ -z "$MGMT_URL" ]; then echo -e "${RED}Error: URL cannot be empty.${NC}"; exit 1; fi
ADMIN_URL="$MGMT_URL"
;;
esac
else
log_event "NOTE: No docker-compose.yml found in $NB_PATH. Skipping 'down' command."
fi
# 3. Get Setup Key
SETUP_KEY=$(whiptail --title "Authentication" --inputbox "Enter your NetBird Setup Key:" 10 60 3>&1 1>&2 2>&3)
read -p "DELETE all NetBird configuration and data files? (y/n): " PURGE_DATA
if [[ "$PURGE_DATA" == "y" ]]; then
echo -e "${RED}Final Warning: This will delete all keys and mesh data!${NC}"
read -p "Type 'PURGE' to confirm: " FINAL_VAL
if [[ "$FINAL_VAL" == "PURGE" ]]; then
log_event "ACTION: Purging directories..."
sudo rm -rf /root/netbird 2>> "$STRIKE_LOG"
sudo rm -rf "$HOME/netbird" 2>> "$STRIKE_LOG"
sudo rm -rf "$HOME/.netbird" 2>> "$STRIKE_LOG"
log_event "STATUS: Configuration wiped."
else
log_event "Purge aborted."
fi
fi
}
if [ -z "$SETUP_KEY" ]; then
echo -e "${GOLD}🐉 No key provided. Exiting.${NC}"; exit 0
fi
# --- 🏗️ Forge Stance (Install) ---
run_forge() {
[[ "$OSTYPE" == "darwin"* ]] && { echo -e "${RED}Forge requires Linux (Docker).${NC}"; return; }
# 4. The Single-Pass Strike
echo -e "${BLUE}🐉 Manifesting Bridge...${NC}"
log_event "${GOLD}Initiating Server Forge...${NC}"
read -p "Confirm NetBird SERVER installation? (y/n): " CONFIRM
[[ "$CONFIRM" != "y" ]] && return
if [ -z "$MGMT_URL" ]; then
# Standard Cloud connection
sudo netbird up --setup-key "$SETUP_KEY"
else
# Integrated Dynasty/Self-Hosted connection in one command
sudo netbird up --management-url "$MGMT_URL" --admin-url "$ADMIN_URL" --setup-key "$SETUP_KEY"
fi
# Granular Dependency Check
MISSING=()
command -v curl &> /dev/null || MISSING+=("curl")
command -v jq &> /dev/null || MISSING+=("jq")
if ! command -v docker &> /dev/null; then
MISSING+=("docker")
else
! docker compose version &> /dev/null && MISSING+=("docker-compose-v2")
fi
# 5. Final Status Manifest
if [ $? -eq 0 ]; then
NB_STATUS=$(netbird status)
whiptail --title "NetBird Connection Successful" --msgbox "The device is now manifested in the mesh.\n\n$NB_STATUS" 20 70
else
echo -e "${RED}❌ Strike failed. Verify your Setup Key and URL connectivity.${NC}"
fi
if [ ${#MISSING[@]} -gt 0 ]; then
echo -e "${RED}⚠️ Missing Dependencies: ${MISSING[*]}${NC}"
read -p "Allow Dynasty to install these now? (y/n): " PERM
if [[ "$PERM" == "y" ]]; then
sudo apt update -qq
[[ " ${MISSING[*]} " == *" curl "* ]] && sudo apt install -y curl
[[ " ${MISSING[*]} " == *" jq "* ]] && sudo apt install -y jq
if [[ " ${MISSING[*]} " == *" docker "* || " ${MISSING[*]} " == *" docker-compose "* ]]; then
curl -fsSL https://get.docker.com | sh
sudo apt install -y docker-compose-plugin
fi
else
log_event "Rejected dependencies. Forge cancelled."; return
fi
fi
log_event "ACTION: Executing Overlord Script..."
curl -fsSL https://github.com/netbirdio/netbird/releases/latest/download/getting-started.sh | bash 2>&1 | tee -a "$STRIKE_LOG"
}
# --- Main Interface ---
# [Menu Logic with Client/Forge/Decimate options]

125
modules/proxmox-commander Normal file
View File

@@ -0,0 +1,125 @@
#!/bin/bash
# -----------------------------------------------------------------------
# Dynasty Module: Proxmox Commander (v2.0.1 - Ironclad Edition)
# -----------------------------------------------------------------------
BLUE='\033[38;5;45m'; PURPLE='\033[38;5;127m'; GOLD='\033[38;5;178m'; RED='\033[38;5;196m'; NC='\033[0m'
HOST_FILE="$HOME/.dynr/.pve_hosts"; mkdir -p "$HOME/.dynr"
IS_MAC=false; [[ "$OSTYPE" == "darwin"* ]] && IS_MAC=true
# --- 0. SMART DEPENDENCY BOOTSTRAPPER ---
check_sshpass() {
if ! command -v sshpass &> /dev/null && [ "$IS_MAC" = true ]; then
clear
echo -e "${RED}⚠️ Dependency Missing: 'sshpass' is required for password-based login.${NC}"
echo -e "How would you like to proceed?"
echo -e "1) ${GOLD}Switch to SSH Keys${NC} (Recommended - Bypass passwords)"
echo -e "2) ${BLUE}Install Homebrew & sshpass${NC} (Standard Apple/Linux flow)"
echo -e "3) ${PURPLE}Compile from Source${NC} (Requires Xcode)"
echo -e "4) ${RED}Quit Entirely${NC} (Return to Dynasty Gate)"
read -p "Selection [1-4]: " D_CHOICE < /dev/tty
case $D_CHOICE in
1) echo -e "${GOLD}Initiating Key Exchange...${NC}"
[[ ! -f "$HOME/.ssh/id_rsa.pub" ]] && ssh-keygen -t rsa -b 4096 -f "$HOME/.ssh/id_rsa" -N ""
echo -e "Run this next: ${BLUE}ssh-copy-id root@YOUR_IP${NC}"
read -p "Press Enter to return to menu..." ; return 1 ;;
2) if ! command -v brew &> /dev/null; then
echo -e "${BLUE}Homebrew not found. Installing...${NC}"
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
fi
echo -e "${BLUE}Installing sshpass...${NC}"; brew install sshpass ;;
3) echo -e "${PURPLE}Starting Source Compilation...${NC}"
if ! command -v cc &> /dev/null; then
echo -e "${RED}Xcode Command Line Tools missing.${NC}"; xcode-select --install
echo "Finish the Apple installer and relaunch."; exit 1
fi
curl -L https://sourceforge.net/projects/sshpass/files/latest/download -o sshpass.tar.gz
tar -xvf sshpass.tar.gz && cd sshpass-*
./configure && make && sudo make install
cd .. && rm -rf sshpass* ;;
*) echo -e "${RED}Aborting...${NC}"; sleep 1; exit 0 ;;
esac
fi
}
# --- 1. HOST SELECTION ---
if ! command -v pct &> /dev/null; then
if [ -f "$HOST_FILE" ]; then
[ "$IS_MAC" = true ] && sed -i '' '/^$/d' "$HOST_FILE" || sed -i '/^$/d' "$HOST_FILE"
fi
if [[ ! -s "$HOST_FILE" ]]; then
echo -e "${RED}No Proxmox hosts found.${NC}"
read -p "Add new host now? (y/n/q=quit): " ADD_NOW < /dev/tty
[[ "$ADD_NOW" == "q" ]] && exit 0
[[ "$ADD_NOW" =~ ^[Yy]$ ]] && HP="n" || exit 0
else
echo -e "${PURPLE}🐉 Your Proxmox VE Hosts:${NC}"
i=1; while IFS='|' read -r ip usr am pe nick; do
echo -e " $i) $usr@$ip ($nick)"; ((i++))
done < "$HOST_FILE"
read -p "Selection (ID#, n=new, m=manage, q=quit): " HP < /dev/tty
fi
[[ "$HP" == "q" ]] && exit 0
if [[ "$HP" == "n" ]]; then
read -p "IP: " IP; read -p "User (root): " USR; USR=${USR:-root}
echo -e "1) Key 2) Pass 3) Back"
read -p ": " AT
[[ "$AT" == "3" ]] && exec "$0"
if [[ "$AT" == "1" ]]; then
[[ ! -f "$HOME/.ssh/id_rsa.pub" ]] && ssh-keygen -t rsa -b 4096 -f "$HOME/.ssh/id_rsa" -N ""
ssh-copy-id "$USR@$IP" && { AM="KEY"; PE="NONE"; }
else
check_sshpass || exec "$0"
read -rs -p "Pass: " P; echo ""; AM="PASS"; PE=$(echo -n "$P" | base64); fi
read -p "Nickname: " HN; echo "$IP|$USR|$AM|$PE|$HN" >> "$HOST_FILE"; exec "$0"
elif [[ "$HP" =~ ^[0-9]+$ ]]; then
LINE=$(sed -n "${HP}p" "$HOST_FILE")
IP=$(echo "$LINE" | cut -d'|' -f1); USR=$(echo "$LINE" | cut -d'|' -f2); AM=$(echo "$LINE" | cut -d'|' -f3); PE=$(echo "$LINE" | cut -d'|' -f4)
if [[ "$AM" == "PASS" ]]; then
check_sshpass || exec "$0"
P_DEC=$(echo "$PE" | base64 --decode)
REMOTE_BASE="sshpass -p '$P_DEC' ssh -o StrictHostKeyChecking=no -t $USR@$IP"
else
REMOTE_BASE="ssh -o StrictHostKeyChecking=no -t $USR@$IP"; fi
else
exec "$0"; fi
else
REMOTE_BASE=""; IP="LocalHost"; fi
# --- 2. FLEET OPS MENU ---
while true; do
clear; echo -e "${BLUE}🐉 Proxmox Commander | $IP${NC}"
echo -e "1) ${GOLD}Create LXC(s)${NC}\n2) ${BLUE}Dashboard${NC}\n3) ${PURPLE}Console (Shell)${NC}\n4) Selective Update\n5) Switch Host\n6) Exit"
read -p "Select: " OPT < /dev/tty
case $OPT in
1) # Creation logic
read -p "🚢 Count (q=back): " CT; [[ "$CT" == "q" ]] && continue
read -p "🔢 Start ID: " SID; read -p "📏 Disk (GB): " DSZ
$REMOTE_BASE "pvesm status"; read -p "📥 Template Store: " TS; read -p "💾 Disk Store: " DS
for (( i=0; i<CT; i++ )); do
CID=$((SID + i)); read -p "🏷️ Name for $CID: " NM
echo -e "💿 Distro: 1) Deb 12 2) Deb 13 3) Alpine 4) Arch"; read -p ": " DP
case $DP in 1) T="debian-12-standard_12.2-1_amd64.tar.zst" ;; 2) T="debian-13-standard_13.0-1_amd64.tar.zst" ;; 3) T="alpine-3.19-default_20240207_amd64.tar.xz" ;; 4) T="archlinux-base_20230608-1_amd64.tar.zst" ;; esac
$REMOTE_BASE "pct create $CID $TS:vztmpl/$T --hostname $NM --storage $DS --rootfs $DS:$DSZ --net0 name=eth0,bridge=vmbr0,ip=dhcp"
$REMOTE_BASE "pct start $CID"; done; read -p "Done..." < /dev/tty ;;
2) $REMOTE_BASE "pct list"; read -p "Enter..." < /dev/tty ;;
3) echo -e "1) Host Shell 2) LXC Console 3) Back"
read -p ": " CG < /dev/tty
case $CG in
1) eval "$REMOTE_BASE" ;;
2) read -p "LXC ID: " LID < /dev/tty; eval "$REMOTE_BASE \"pct enter $LID\"" ;;
*) continue ;;
esac
read -p "Returned. Press Enter..." < /dev/tty ;;
4) echo -e "1) ${GOLD}Update Host ($IP)${NC}\n2) ${BLUE}Update ALL LXCs${NC}\n3) Back"
read -p "Choice: " UO < /dev/tty
if [[ "$UO" == "1" ]]; then $REMOTE_BASE "apt update && apt upgrade -y"
elif [[ "$UO" == "2" ]]; then $REMOTE_BASE "for id in \$(pct list | awk 'NR>1 {print \$1}'); do echo \"Updating \$id...\"; pct exec \$id -- apt update && pct exec \$id -- apt upgrade -y; done"; fi
read -p "Done..." < /dev/tty ;;
5) exec "$0" ;;
6) exit 0 ;;
esac
done

View File

@@ -1,44 +1,95 @@
#!/bin/bash
# DYNR Module: Rclone Wizard v2.3.6
# DYNR Module: Rclone Wizard v2.3.7
run_rclone_wizard() {
BLUE='\033[38;5;45m'; PURPLE='\033[38;5;127m'; GOLD='\033[38;5;178m'; RED='\033[38;5;196m'; NC='\033[0m'
# --- Dynamic Dependency Check ---
MISSING=()
command -v rclone &> /dev/null || MISSING+=("rclone")
command -v fzf &> /dev/null || MISSING+=("fzf")
LOG_DIR="$HOME/.dynr/logs/rclone-wizard"
mkdir -p "$LOG_DIR"
if [ ${#MISSING[@]} -gt 0 ]; then
echo -e "${RED}⚠️ Required tools missing: ${MISSING[*]}${NC}"
read -p "Manifest these scrolls now? (y/n): " choice
if [[ "$choice" == "y" ]]; then
sudo apt update -qq && sudo apt install -y -qq "${MISSING[@]}"
else
echo -e "${RED}Wizard dismissed.${NC}"
dynr; return
# --- Log Viewer ---
view_logs() {
if [ ! "$(ls -A "$LOG_DIR" 2>/dev/null)" ]; then
echo -e "${RED}No logs found in $LOG_DIR${NC}"; sleep 1; return
fi
fi
local selected_log=$(ls -t "$LOG_DIR" | fzf --height 15 --reverse --header "Select Log (q to exit)")
[[ -n "$selected_log" ]] && less -R "$LOG_DIR/$selected_log"
}
# --- Navigation Engine ---
navigate_path() {
local type=$1; local base=$2; local current_dir="/"
while true; do
echo -e "${PURPLE}Navigation: ${GOLD}$type${NC} | ${BLUE}Path: ${GOLD}${base}${current_dir}${NC}" >&2
if [[ "$type" == "LOCAL" ]]; then
local options=$(find "$current_dir" -maxdepth 1 -type d -not -path "$current_dir" -exec basename {} \; 2>/dev/null)
else
local options=$(rclone lsd "${base}${current_dir}" 2>/dev/null | awk '{print substr($0, 32)}')
fi
local choice=$(printf "✅ SELECT THIS FOLDER\n..\nQUIT\n%s" "$options" | fzf --height 15 --reverse --header "Targeting Folder...")
case "$choice" in
"✅ SELECT THIS FOLDER") echo "${current_dir}"; return ;;
"..") current_dir=$(dirname "$current_dir"); [[ "$current_dir" != "/" ]] && current_dir="${current_dir}/"; clear >&2 ;;
"QUIT"|"") echo "CANCEL"; return ;;
*) current_dir="${current_dir%/}/${choice}/"; current_dir=$(echo "$current_dir" | tr -s '/'); clear >&2 ;;
esac
done
}
clear
echo -e "${PURPLE}=================================================${NC}"
echo -e "${BLUE} 🐉 DYNASTY REVOLUTION: RCLONE WIZARD 🐉 ${NC}"
echo -e "${BLUE} 🐉 DYNASTY REVOLUTION: RCLONE WIZARD 🐉 ${NC}"
echo -e "${PURPLE}=================================================${NC}"
# Basic Menu Example
echo -e "${GOLD}Select a path:${NC}"
OPTIONS=("Configure New Remote" "List Existing Remotes" "Exit Wizard")
# Use fzf for the selection
OPTIONS=("🚀 New Transfer (Copy or Move)" "📜 View Transfer Logs" "List Existing Remotes" "Configure New Remote" "Exit Wizard")
CHOICE=$(printf "%s\n" "${OPTIONS[@]}" | fzf --height 40% --reverse --prompt="Select Stance > ")
case "$CHOICE" in
"Configure New Remote") rclone config ;;
"List Existing Remotes") rclone listremotes | sed 's/^/ ☁️ /' ;;
*) echo "Returning...";;
esac
"🚀 New Transfer (Copy or Move)")
REMOTES=$(rclone listremotes)
# --- SOURCE ---
S_BASE=$(printf "QUIT\nLOCAL_FILESYSTEM\n%s" "$REMOTES" | fzf --prompt="Select Source > ")
[[ "$S_BASE" == "QUIT" || -z "$S_BASE" ]] && { run_rclone_wizard; return; }
[[ "$S_BASE" != "LOCAL_FILESYSTEM" && "$S_BASE" != *":" ]] && S_BASE="${S_BASE}:"
S_SUB=$(navigate_path "$([[ "$S_BASE" == "LOCAL_FILESYSTEM" ]] && echo "LOCAL" || echo "REMOTE")" "$S_BASE")
[[ "$S_SUB" == "CANCEL" ]] && { run_rclone_wizard; return; }
F_SRC="$([[ "$S_BASE" == "LOCAL_FILESYSTEM" ]] && echo "$S_SUB" || echo "${S_BASE}${S_SUB}")"
echo -e "${PURPLE}=================================================${NC}"
read -p "Press Enter to return..." < /dev/tty
dynr
# --- DESTINATION ---
D_BASE=$(printf "QUIT\nLOCAL_FILESYSTEM\n%s" "$REMOTES" | fzf --prompt="Select Destination > ")
[[ "$D_BASE" == "QUIT" || -z "$D_BASE" ]] && { run_rclone_wizard; return; }
[[ "$D_BASE" != "LOCAL_FILESYSTEM" && "$D_BASE" != *":" ]] && D_BASE="${D_BASE}:"
D_SUB=$(navigate_path "$([[ "$D_BASE" == "LOCAL_FILESYSTEM" ]] && echo "LOCAL" || echo "REMOTE")" "$D_BASE")
[[ "$D_SUB" == "CANCEL" ]] && { run_rclone_wizard; return; }
F_DEST="$([[ "$D_BASE" == "LOCAL_FILESYSTEM" ]] && echo "$D_SUB" || echo "${D_BASE}${D_SUB}")"
# --- METHOD ---
METHOD_CHOICE=$(printf "COPY (Safe - Keep Source)\nMOVE (Transfer & Delete Source)" | fzf --height 5 --reverse --prompt="Select Method > ")
[[ -z "$METHOD_CHOICE" ]] && { run_rclone_wizard; return; }
CMD=$([[ "$METHOD_CHOICE" == "COPY"* ]] && echo "copy" || echo "move")
clear
echo -e "${RED}🛡️ DYNASTY DATA SAFETY LOCK${NC}"
echo -e "-------------------------------------------------"
echo -e "${BLUE}FROM: ${GOLD}\"$F_SRC\"${NC}"
echo -e "${BLUE}TO: ${GOLD}\"$F_DEST\"${NC}"
echo -e "${BLUE}ACTION: ${PURPLE}${CMD^^}${NC}"
echo -e "-------------------------------------------------"
[[ "$CMD" == "move" ]] && echo -e "${RED}⚠️ WARNING: Files will be deleted from source after transfer!${NC}"
read -p "Type 'SAFE' to manifest: " VAL
if [[ "$VAL" == "SAFE" ]]; then
TS=$(date +"%Y%m%d_%H%M%S"); LOG_FILE="$LOG_DIR/${CMD}_$TS.log"
echo "Action: $CMD" > "$LOG_FILE"
rclone "$CMD" -vP "$F_SRC" "$F_DEST" 2>&1 | tee -a "$LOG_FILE"
read -p "Process Complete. Enter to return..."
else
echo -e "${RED}Aborted.${NC}"; sleep 1
fi
;;
"📜 View Transfer Logs") view_logs ;;
"List Existing Remotes") rclone listremotes | sed 's/^/ ☁️ /' ;;
"Configure New Remote") rclone config ;;
*) dynr; return ;;
esac
run_rclone_wizard
}

View File

@@ -1,34 +1,58 @@
#!/bin/bash
# DYNR Module: System Info
# -----------------------------------------------------------------------
# Dynasty Module: Universal Pulse (v1.1.1 - Memory Fix)
# -----------------------------------------------------------------------
run_system_info() {
BLUE='\033[38;5;45m'; PURPLE='\033[38;5;127m'; GOLD='\033[38;5;178m'; NC='\033[0m'
if [[ "$OSTYPE" == "darwin"* ]]; then
OS="macOS"
CPU_LOAD=$(sysctl -n vm.loadavg | awk '{print $2}')
clear
echo -e "${PURPLE}=================================================${NC}"
echo -e "${BLUE} 🐉 DYNASTY REVOLUTION: SYSTEM INFO 🐉 ${NC}"
echo -e "${PURPLE}=================================================${NC}"
# --- Advanced Mac Memory Math ---
# Total Physical RAM in bytes
MEM_TOTAL_BYTES=$(sysctl -n hw.memsize)
MEM_TOTAL_GB=$((MEM_TOTAL_BYTES / 1024 / 1024 / 1024))
# Get Page Size (usually 4096 or 16384 on M1)
PAGE_SIZE=$(vm_stat | grep "page size of" | awk '{print $8}')
# Get Free and Speculative pages (Both are essentially "Available")
PAGES_FREE=$(vm_stat | grep "Pages free" | awk '{print $3}' | sed 's/\.//')
PAGES_SPEC=$(vm_stat | grep "Pages speculative" | awk '{print $3}' | sed 's/\.//')
# Calculate Available GB
MEM_FREE_BYTES=$(((PAGES_FREE + PAGES_SPEC) * PAGE_SIZE))
MEM_FREE_GB=$((MEM_FREE_BYTES / 1024 / 1024 / 1024))
# Final Used Calculation
MEM_USED_GB=$((MEM_TOTAL_GB - MEM_FREE_GB))
UPTIME=$(uptime | sed -E 's/.*up ([^,]+),.*/\1/' | xargs)
DISK=$(df -h / | awk 'NR==2 {print $5}')
else
OS="Linux"
CPU_LOAD=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')"%"
MEM_TOTAL_GB=$(free -g | awk '/^Mem:/{print $2}')
MEM_USED_GB=$(free -g | awk '/^Mem:/{print $3}')
UPTIME=$(uptime -p | sed 's/up //')
DISK=$(df -h / | awk 'NR==2 {print $5}')
fi
OS_NAME=$(grep '^PRETTY_NAME=' /etc/os-release | cut -d '"' -f 2)
KERNEL=$(uname -rs)
ARCH=$(uname -m)
HOSTNAME=$(hostname)
CPU_MODEL=$(lscpu | grep "Model name" | awk -F: '{print $2}' | sed 's/^[ \t]*//')
CPU_CORES=$(nproc)
VIRT=$(systemd-detect-virt 2>/dev/null || echo "unknown")
# --- Dashboard Construction ---
DASHBOARD="🐉 DYNASTY SYSTEM PULSE ($OS)
-------------------------------------
🕒 UPTIME: $UPTIME
🚀 CPU LOAD: $CPU_LOAD
🧠 MEMORY: ${MEM_USED_GB}GB / ${MEM_TOTAL_GB}GB
💾 DISK: $DISK Used
-------------------------------------"
echo -e "${GOLD}HOSTNAME: ${NC}$HOSTNAME"
echo -e "${GOLD}OPERATING SYS:${NC}$OS_NAME"
echo -e "${GOLD}KERNEL: ${NC}$KERNEL"
echo -e "${GOLD}ARCHITECTURE: ${NC}$ARCH"
echo -e "${GOLD}VIRTUALIZATION:${NC}$VIRT"
echo -e "${PURPLE}-------------------------------------------------${NC}"
echo -e "${GOLD}CPU MODEL: ${NC}$CPU_MODEL"
echo -e "${GOLD}CPU CORES: ${NC}$CPU_CORES"
echo -e "${PURPLE}=================================================${NC}"
read -p "Press Enter to return to the Dynasty..." < /dev/tty
# --- The Return Logic ---
dynr
}
# --- Display Logic ---
if [[ "$OS" == "macOS" ]]; then
osascript -e "display dialog \"$DASHBOARD\" with title \"Dynasty Diagnostics\" buttons {\"Close\"} default button \"Close\"" >/dev/null 2>&1
else
if command -v whiptail >/dev/null 2>&1; then
whiptail --title "Dynasty Diagnostics" --msgbox "$DASHBOARD" 15 50
else
echo -e "$DASHBOARD"
fi
fi

57
scripts/bootstrap.sh Normal file
View File

@@ -0,0 +1,57 @@
#!/bin/bash
# -----------------------------------------------------------------------
# Dynasty Module: LXC Bootstrap (The Manifestor)
# -----------------------------------------------------------------------
STACK=$1 # Passed from Proxmox Commander (portainer/arcane/dockhand/none)
VERBOSE=$2 # Passed from Proxmox Commander (y/n)
# 1. STYLING & OUTPUT
GOLD='\033[38;5;178m'; BLUE='\033[38;5;45m'; NC='\033[0m'
# Logic for Verbose vs Silent
if [[ "$VERBOSE" == "y" ]]; then
exec 3>&1 # Save stdout to fd 3
else
exec 3>/dev/null # Send all output to the void
fi
echo -e "${BLUE}🐉 Dynasty Node Bootstrapping...${NC}"
# 2. SYSTEM REFRESH
echo -e "${GOLD}🔎 Updating System Repositories...${NC}"
apt-get update >&3 2>&3
apt-get upgrade -y >&3 2>&3
# 3. DOCKER CORE INSTALLATION
if [[ "$STACK" != "none" ]]; then
echo -e "${GOLD}🐳 Installing Docker Engine & Compose...${NC}"
curl -fsSL https://get.docker.com | sh >&3 2>&3
systemctl enable --now docker >&3 2>&3
fi
# 4. STACK MANIFESTATION
case $STACK in
"portainer")
echo -e "${GOLD}🚢 Manifesting Portainer Business...${NC}"
docker volume create portainer_data >&3 2>&3
docker run -d -p 8000:8000 -p 9443:9443 --name portainer --restart always \
-v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data \
portainer/portainer-ce:latest >&3 2>&3
;;
"arcane")
echo -e "${GOLD}🔮 Manifesting Arcane Stack...${NC}"
# Replace with your specific Arcane install command or git clone
# docker run -d --name arcane ...
;;
"dockhand")
echo -e "${GOLD}⚓ Manifesting Dockhand...${NC}"
# Replace with your specific Dockhand install command
;;
esac
# 5. DYNASTY FRAMEWORK INJECTION
echo -e "${GOLD}🐉 Installing Dynasty Framework v2.3.7-pre...${NC}"
curl -sSL https://git.dynastyrevolution.com/DYNR/DynastyRevolution-Scripts/raw/branch/v2.3.7-pre/install.sh | bash >&3 2>&3
echo -e "${BLUE}✅ Manifestation Complete. Node is now part of the Dynasty.${NC}"