mirror of
https://github.com/MacRimi/ProxMenux.git
synced 2025-08-26 06:11:15 +00:00
new menu lxc
This commit is contained in:
144
scripts/lxc/lxc-unprivileged-to-privileged.sh
Normal file
144
scripts/lxc/lxc-unprivileged-to-privileged.sh
Normal file
@@ -0,0 +1,144 @@
|
||||
#!/bin/bash
|
||||
|
||||
# ==========================================================
|
||||
# ProxMenu - LXC Unprivileged to Privileged Converter
|
||||
# ==========================================================
|
||||
# Author : MacRimi
|
||||
# Copyright : (c) 2024 MacRimi
|
||||
# License : MIT (https://raw.githubusercontent.com/MacRimi/ProxMenux/main/LICENSE)
|
||||
# Version : 2.0
|
||||
# Last Updated: 19/08/2025
|
||||
# ==========================================================
|
||||
# Description:
|
||||
# This script converts an unprivileged LXC container to a privileged one
|
||||
# by directly modifying the configuration file.
|
||||
# WARNING: This reduces security. Use only when necessary.
|
||||
# ==========================================================
|
||||
|
||||
# Configuration ============================================
|
||||
REPO_URL="https://raw.githubusercontent.com/MacRimi/ProxMenux/main"
|
||||
BASE_DIR="/usr/local/share/proxmenux"
|
||||
UTILS_FILE="$BASE_DIR/utils.sh"
|
||||
VENV_PATH="/opt/googletrans-env"
|
||||
|
||||
if [[ -f "$UTILS_FILE" ]]; then
|
||||
source "$UTILS_FILE"
|
||||
fi
|
||||
|
||||
load_language
|
||||
initialize_cache
|
||||
|
||||
# ==========================================================
|
||||
|
||||
|
||||
|
||||
select_unprivileged_container() {
|
||||
|
||||
CONTAINERS=$(pct list | awk 'NR>1 {print $1, $3}' | while read id name; do
|
||||
if pct config "$id" | grep -q "^unprivileged: 1"; then
|
||||
echo "$id" "$name"
|
||||
fi
|
||||
done | xargs -n2)
|
||||
|
||||
if [ -z "$CONTAINERS" ]; then
|
||||
msg_error "$(translate 'No unprivileged containers available in Proxmox.')"
|
||||
exit 1
|
||||
fi
|
||||
cleanup
|
||||
CONTAINER_ID=$(whiptail --title "$(translate 'Select Unprivileged Container')" \
|
||||
--menu "$(translate 'Select the unprivileged LXC container to convert:')" 20 70 10 $CONTAINERS 3>&1 1>&2 2>&3)
|
||||
|
||||
if [ -z "$CONTAINER_ID" ]; then
|
||||
msg_error "$(translate 'No container selected. Exiting.')"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
msg_ok "$(translate 'Unprivileged container selected:') $CONTAINER_ID"
|
||||
}
|
||||
|
||||
show_backup_warning() {
|
||||
if ! whiptail --title "$(translate 'Backup Recommendation')" \
|
||||
--yes-button "$(translate 'Continue')" \
|
||||
--no-button "$(translate 'Exit')" \
|
||||
--yesno "$(translate 'It is recommended to create a backup before continuing.')" \
|
||||
12 70; then
|
||||
msg_info "$(translate 'Operation cancelled by user to create backup.')"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
}
|
||||
|
||||
convert_to_privileged() {
|
||||
CONF_FILE="/etc/pve/lxc/$CONTAINER_ID.conf"
|
||||
|
||||
CONTAINER_STATUS=$(pct status "$CONTAINER_ID" | awk '{print $2}')
|
||||
|
||||
if [ "$CONTAINER_STATUS" == "running" ]; then
|
||||
msg_info "$(translate 'Stopping container') $CONTAINER_ID..."
|
||||
pct shutdown "$CONTAINER_ID"
|
||||
|
||||
# Wait for container to stop
|
||||
for i in {1..10}; do
|
||||
sleep 1
|
||||
if [ "$(pct status "$CONTAINER_ID" | awk '{print $2}')" != "running" ]; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# Verify container stopped
|
||||
if [ "$(pct status "$CONTAINER_ID" | awk '{print $2}')" == "running" ]; then
|
||||
msg_error "$(translate 'Failed to stop the container.')"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
msg_ok "$(translate 'Container stopped.')"
|
||||
else
|
||||
msg_ok "$(translate 'Container is already stopped.')"
|
||||
fi
|
||||
|
||||
msg_info "$(translate 'Creating backup of configuration file...')"
|
||||
cp "$CONF_FILE" "$CONF_FILE.bak"
|
||||
msg_ok "$(translate 'Configuration backup created:') $CONF_FILE.bak"
|
||||
|
||||
msg_info "$(translate 'Converting container to privileged...')"
|
||||
sed -i '/^unprivileged: 1/d' "$CONF_FILE"
|
||||
echo "unprivileged: 0" >> "$CONF_FILE"
|
||||
|
||||
msg_ok "$(translate 'Container successfully converted to privileged.')"
|
||||
|
||||
echo -e
|
||||
msg_success "Press Enter to continue..."
|
||||
read -r
|
||||
}
|
||||
|
||||
finalize_conversion() {
|
||||
|
||||
if whiptail --yesno "$(translate 'Do you want to start the privileged container') $CONTAINER_ID $(translate 'now?')" 10 60; then
|
||||
msg_info "$(translate 'Starting privileged container...')"
|
||||
pct start "$CONTAINER_ID"
|
||||
msg_ok "$(translate 'Privileged container') $CONTAINER_ID $(translate 'started successfully.')"
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
|
||||
show_proxmenux_logo
|
||||
msg_title "$(translate "LXC Unprivileged to Privileged conversion")"
|
||||
msg_info "$(translate 'Starting LXC Unprivileged to Privileged conversion process...')"
|
||||
|
||||
|
||||
select_unprivileged_container
|
||||
show_backup_warning
|
||||
convert_to_privileged
|
||||
finalize_conversion
|
||||
|
||||
msg_ok "$(translate 'LXC conversion from unprivileged to privileged completed successfully!')"
|
||||
msg_ "$(translate 'Converted container ID:') $CONTAINER_ID"
|
||||
echo -e
|
||||
msg_success "$(translate "Press Enter to return to menu...")"
|
||||
read -r
|
||||
exit 0
|
||||
}
|
||||
|
||||
# Execute main function
|
||||
main
|
Reference in New Issue
Block a user