From f86823010d777ca74b2fec6d8b00491a3419162d Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Mon, 2 Jun 2025 09:32:34 +0200 Subject: [PATCH] fixes --- misc/core.func | 11 +++-- tools/pve/pve-privilege-converter.sh | 69 +++++++++++++--------------- 2 files changed, 38 insertions(+), 42 deletions(-) diff --git a/misc/core.func b/misc/core.func index 3db0d3b9..72e84aed 100644 --- a/misc/core.func +++ b/misc/core.func @@ -457,12 +457,13 @@ msg_warn() { } msg_custom() { - local symbol="$1" - local color="$2" - local msg="$3" + local symbol="${1:-"[*]"}" + local color="${2:-"\e[36m"}" # Default: Cyan + local msg="${3:-}" + [[ -z "$msg" ]] && return - stop_spinner - printf "\r\e[2K%s %b\n" "$symbol" "${color}${msg}${CL}" >&2 + stop_spinner 2>/dev/null || true + printf "\r\e[2K%s %b\n" "$symbol" "${color}${msg}${CL:-\e[0m}" >&2 } msg_progress() { diff --git a/tools/pve/pve-privilege-converter.sh b/tools/pve/pve-privilege-converter.sh index a7c403d8..dbc2be2d 100644 --- a/tools/pve/pve-privilege-converter.sh +++ b/tools/pve/pve-privilege-converter.sh @@ -1,5 +1,10 @@ #!/usr/bin/env bash +# Copyright (c) 2021-2025 community-scripts ORG +# Author: MickLesk +# Adapted from onethree7 (https://github.com/onethree7/proxmox-lxc-privilege-converter) +# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE + if ! command -v curl >/dev/null 2>&1; then printf "\r\e[2K%b" '\033[93m Setup Source \033[m' >&2 apt-get update >/dev/null 2>&1 @@ -17,7 +22,7 @@ header_info "$APP" check_root() { if [[ $EUID -ne 0 ]]; then - echo "[ERROR] Script must be run as root" + msg_error "Script must be run as root" exit 1 fi } @@ -31,7 +36,7 @@ select_container() { done if [[ ${#lxc_list[@]} -eq 0 ]]; then - echo "[ERROR] No containers found" + msg_error "No containers found" exit 1 fi @@ -40,7 +45,6 @@ select_container() { if [[ -n "$opt" ]]; then read -r CONTAINER_ID CONTAINER_NAME <<<"$opt" CONTAINER_NAME="${CONTAINER_NAME:-}" - echo "[DEBUG] Selected container: ID=$CONTAINER_ID NAME=$CONTAINER_NAME" break else echo "Invalid selection. Try again." @@ -51,13 +55,11 @@ select_container() { select_backup_storage() { echo -e "Select backup storage (temporary vzdump location):" mapfile -t backup_storages < <(pvesm status --content backup | awk 'NR > 1 {print $1}') - echo "[DEBUG] Found backup storages: ${backup_storages[*]}" local PS3="Enter number of backup storage: " select opt in "${backup_storages[@]}"; do if [[ -n "$opt" ]]; then BACKUP_STORAGE="$opt" - echo "[DEBUG] Selected backup storage: $BACKUP_STORAGE" break else echo "Invalid selection. Try again." @@ -66,36 +68,27 @@ select_backup_storage() { } backup_container() { - echo "[INFO] Backing up container $CONTAINER_ID to $BACKUP_STORAGE" + msg_info "Backing up container $CONTAINER_ID" vzdump_output=$(mktemp) - echo "[DEBUG] Using temp file for vzdump output: $vzdump_output" - vzdump "$CONTAINER_ID" --compress zstd --storage "$BACKUP_STORAGE" --mode snapshot | tee "$vzdump_output" - echo "[DEBUG] vzdump completed. Parsing backup path …" - BACKUP_PATH=$(awk '/tar.zst/ {print $NF}' "$vzdump_output" | tr -d "'") - echo "[DEBUG] Parsed backup path: $BACKUP_PATH" - if [ -z "$BACKUP_PATH" ] || ! grep -q "Backup job finished successfully" "$vzdump_output"; then rm "$vzdump_output" - echo "[ERROR] Backup failed" + msg_error "Backup failed" exit 1 fi - rm "$vzdump_output" - echo "[OK] Backup complete: $BACKUP_PATH" + msg_ok "Backup complete: $BACKUP_PATH" } select_target_storage() { echo -e "\nSelect target storage for new container:\n" mapfile -t target_storages < <(pvesm status --content images | awk 'NR > 1 {print $1}') - echo "[DEBUG] Found target storages: ${target_storages[*]}" PS3="Enter number of target storage: " select opt in "${target_storages[@]}"; do if [[ -n "$opt" ]]; then TARGET_STORAGE="$opt" - echo "[DEBUG] Selected target storage: $TARGET_STORAGE" break else echo "Invalid selection. Try again." @@ -104,8 +97,19 @@ select_target_storage() { } select_container_id() { - USED_IDS=($(pvesh get /cluster/resources --type vm | jq -r '.[].vmid')) - next_free_id=$(pvesh get /cluster/nextid) + echo "[DEBUG] Retrieving used container IDs" + USED_IDS=() + if vmids_json=$(pvesh get /cluster/resources --type vm 2>/dev/null); then + USED_IDS=($(jq -r '.[].vmid' <<<"$vmids_json" 2>/dev/null)) + echo "[DEBUG] Used VMIDs: ${USED_IDS[*]}" + else + echo "[WARN] Failed to get VM ID list from pvesh" + fi + + next_free_id=$(pvesh get /cluster/nextid 2>/dev/null || echo 999) + [[ "$next_free_id" =~ ^[0-9]+$ ]] || next_free_id=999 + echo "[DEBUG] Suggested next free ID: $next_free_id" + while true; do read -rp "Enter new container ID (default: $next_free_id): " NEW_CONTAINER_ID NEW_CONTAINER_ID=${NEW_CONTAINER_ID:-$next_free_id} @@ -125,22 +129,18 @@ perform_conversion() { UNPRIVILEGED=false fi - echo "[INFO] Restoring as $(if $UNPRIVILEGED; then echo privileged; else echo unprivileged; fi) container" - echo "[DEBUG] Backup path: $BACKUP_PATH" - echo "[DEBUG] Target storage: $TARGET_STORAGE" + msg_info "Restoring as $(if $UNPRIVILEGED; then echo privileged; else echo unprivileged; fi) container" restore_opts=("$NEW_CONTAINER_ID" "$BACKUP_PATH" --storage "$TARGET_STORAGE") - if $UNPRIVILEGED; then restore_opts+=(--unprivileged false) else restore_opts+=(--unprivileged) fi - echo "[DEBUG] Running: pct restore ${restore_opts[*]} -ignore-unpack-errors 1" if pct restore "${restore_opts[@]}" -ignore-unpack-errors 1; then - echo "[OK] Conversion successful" + msg_ok "Conversion successful" else - echo "[ERROR] Conversion failed" + msg_error "Conversion failed" exit 1 fi } @@ -161,18 +161,18 @@ manage_states() { fi fi pct start "$NEW_CONTAINER_ID" - echo "[OK] New container started" + msg_ok "New container started" else - echo "[INFO] Skipped container state change" + msg_custom "ℹ️" "\e[36m" "Skipped container state change" fi } cleanup_files() { read -rp "Delete backup archive? [$BACKUP_PATH] [Y/n]: " cleanup if [[ ${cleanup:-Y} =~ ^[Yy] ]]; then - rm -f "$BACKUP_PATH" && echo "[OK] Removed backup archive" + rm -f "$BACKUP_PATH" && msg_ok "Removed backup archive" else - echo "[INFO] Retained backup archive" + msg_custom "💾" "\e[36m" "Retained backup archive" fi } @@ -183,13 +183,8 @@ summary() { echo "Target Storage: $TARGET_STORAGE" echo "Backup Path: $BACKUP_PATH" echo "New Container ID: $NEW_CONTAINER_ID" - echo -n "Privilege Conversion: " - if $UNPRIVILEGED; then - echo "Unprivileged -> Privileged" - else - echo "Privileged -> Unprivileged" - fi - echo "==========================" + echo "Privilege Conversion: $(if $UNPRIVILEGED; then echo Unprivileged - >Privileged; else echo Privileged - >Unprivileged; fi)" + echo "==========================\n" } main() {