mirror of
https://github.com/community-scripts/ProxmoxVE.git
synced 2025-12-10 03:59:39 -06:00
OpenWrt: Refactor and increase root-partition (#7653)
* move openwrt to correct naming * Add disk size configuration for OpenWrt VM Introduces a DISK_SIZE variable to allow setting disk size for OpenWrt VM in both default and advanced settings. Updates VM creation logic to use the specified disk size and improves output formatting for clarity. * Update openwrt-vm.sh * Update openwrt-vm.sh * Update openwrt-vm.sh * Add newline before loading message in openwrt-vm.sh Prepends a newline to the loading message for improved output formatting in the openwrt-vm.sh script. * Update openwrt-vm.sh * rename vm * Improve OpenWrt VM network configuration logic Refactored network interface configuration to use a loop for more robust VM status checking and command delivery. Enhanced bridge interface setup with clearer messaging and improved variable handling. Minor shell syntax improvements for consistency. * Update openwrt-vm.sh
This commit is contained in:
parent
f3bcb3211c
commit
dffb291a4f
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "OpenWrt",
|
"name": "OpenWrt",
|
||||||
"slug": "openwrt",
|
"slug": "openwrt-vm",
|
||||||
"categories": [
|
"categories": [
|
||||||
4,
|
4,
|
||||||
2
|
2
|
||||||
@ -18,7 +18,7 @@
|
|||||||
"install_methods": [
|
"install_methods": [
|
||||||
{
|
{
|
||||||
"type": "default",
|
"type": "default",
|
||||||
"script": "vm/openwrt.sh",
|
"script": "vm/openwrt-vm.sh",
|
||||||
"resources": {
|
"resources": {
|
||||||
"cpu": 1,
|
"cpu": 1,
|
||||||
"ram": 256,
|
"ram": 256,
|
||||||
@ -22,13 +22,13 @@ function header_info {
|
|||||||
EOF
|
EOF
|
||||||
}
|
}
|
||||||
header_info
|
header_info
|
||||||
echo -e "Loading..."
|
echo -e "\n Loading..."
|
||||||
RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)"
|
RANDOM_UUID="$(cat /proc/sys/kernel/random/uuid)"
|
||||||
METHOD=""
|
METHOD=""
|
||||||
NSAPP="openwrt-vm"
|
NSAPP="openwrt-vm"
|
||||||
var_os="openwrt"
|
var_os="openwrt"
|
||||||
var_version=" "
|
var_version=" "
|
||||||
DISK_SIZE="0.5G"
|
DISK_SIZE="1G"
|
||||||
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
GEN_MAC=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
||||||
GEN_MAC_LAN=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
GEN_MAC_LAN=02:$(openssl rand -hex 5 | awk '{print toupper($0)}' | sed 's/\(..\)/\1:/g; s/.$//')
|
||||||
|
|
||||||
@ -40,10 +40,31 @@ BGN=$(echo "\033[4;92m")
|
|||||||
GN=$(echo "\033[1;92m")
|
GN=$(echo "\033[1;92m")
|
||||||
DGN=$(echo "\033[32m")
|
DGN=$(echo "\033[32m")
|
||||||
CL=$(echo "\033[m")
|
CL=$(echo "\033[m")
|
||||||
|
|
||||||
|
BOLD=$(echo "\033[1m")
|
||||||
BFR="\\r\\033[K"
|
BFR="\\r\\033[K"
|
||||||
HOLD="-"
|
HOLD=" "
|
||||||
CM="${GN}✓${CL}"
|
TAB=" "
|
||||||
CROSS="${RD}✗${CL}"
|
|
||||||
|
CM="${TAB}✔️${TAB}${CL}"
|
||||||
|
CROSS="${TAB}✖️${TAB}${CL}"
|
||||||
|
INFO="${TAB}💡${TAB}${CL}"
|
||||||
|
OS="${TAB}🖥️${TAB}${CL}"
|
||||||
|
CONTAINERTYPE="${TAB}📦${TAB}${CL}"
|
||||||
|
DISKSIZE="${TAB}💾${TAB}${CL}"
|
||||||
|
CPUCORE="${TAB}🧠${TAB}${CL}"
|
||||||
|
RAMSIZE="${TAB}🛠️${TAB}${CL}"
|
||||||
|
CONTAINERID="${TAB}🆔${TAB}${CL}"
|
||||||
|
HOSTNAME="${TAB}🏠${TAB}${CL}"
|
||||||
|
BRIDGE="${TAB}🌉${TAB}${CL}"
|
||||||
|
GATEWAY="${TAB}🌐${TAB}${CL}"
|
||||||
|
DEFAULT="${TAB}⚙️${TAB}${CL}"
|
||||||
|
MACADDRESS="${TAB}🔗${TAB}${CL}"
|
||||||
|
VLANTAG="${TAB}🏷️${TAB}${CL}"
|
||||||
|
CREATING="${TAB}🚀${TAB}${CL}"
|
||||||
|
ADVANCED="${TAB}🧩${TAB}${CL}"
|
||||||
|
CLOUD="${TAB}☁️${TAB}${CL}"
|
||||||
|
|
||||||
set -Eeo pipefail
|
set -Eeo pipefail
|
||||||
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
trap 'error_handler $LINENO "$BASH_COMMAND"' ERR
|
||||||
trap cleanup EXIT
|
trap cleanup EXIT
|
||||||
@ -248,35 +269,30 @@ function exit-script() {
|
|||||||
|
|
||||||
function default_settings() {
|
function default_settings() {
|
||||||
VMID=$(get_valid_nextid)
|
VMID=$(get_valid_nextid)
|
||||||
HN=openwrt
|
HN="openwrt"
|
||||||
CORE_COUNT="1"
|
CORE_COUNT="1"
|
||||||
RAM_SIZE="256"
|
RAM_SIZE="256"
|
||||||
BRG="vmbr0"
|
BRG="vmbr0"
|
||||||
VLAN=""
|
LAN_BRG="vmbr0"
|
||||||
MAC=$GEN_MAC
|
MAC=$GEN_MAC
|
||||||
LAN_MAC=$GEN_MAC_LAN
|
LAN_MAC=$GEN_MAC_LAN
|
||||||
LAN_BRG="vmbr0"
|
VLAN=""
|
||||||
|
LAN_VLAN=",tag=999"
|
||||||
LAN_IP_ADDR="192.168.1.1"
|
LAN_IP_ADDR="192.168.1.1"
|
||||||
LAN_NETMASK="255.255.255.0"
|
LAN_NETMASK="255.255.255.0"
|
||||||
LAN_VLAN=",tag=999"
|
|
||||||
MTU=""
|
MTU=""
|
||||||
START_VM="yes"
|
START_VM="yes"
|
||||||
METHOD="default"
|
METHOD="default"
|
||||||
echo -e "${DGN}Using Virtual Machine ID: ${BGN}${VMID}${CL}"
|
DISK_SIZE="1G"
|
||||||
echo -e "${DGN}Using Hostname: ${BGN}${HN}${CL}"
|
echo -e "${CONTAINERID}${BOLD}${DGN}VMID: ${BGN}${VMID}${CL}"
|
||||||
echo -e "${DGN}Allocated Cores: ${BGN}${CORE_COUNT}${CL}"
|
echo -e "${HOSTNAME}${BOLD}${DGN}Hostname: ${BGN}${HN}${CL}"
|
||||||
echo -e "${DGN}Allocated RAM: ${BGN}${RAM_SIZE}${CL}"
|
echo -e "${CPUCORE}${BOLD}${DGN}CPU Cores: ${BGN}${CORE_COUNT}${CL}"
|
||||||
echo -e "${DGN}Using WAN Bridge: ${BGN}${BRG}${CL}"
|
echo -e "${RAMSIZE}${BOLD}${DGN}RAM: ${BGN}${RAM_SIZE}${CL}"
|
||||||
echo -e "${DGN}Using WAN VLAN: ${BGN}Default${CL}"
|
echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE}${CL}"
|
||||||
echo -e "${DGN}Using WAN MAC Address: ${BGN}${MAC}${CL}"
|
echo -e "${BRIDGE}${BOLD}${DGN}WAN Bridge: ${BGN}${BRG}${CL}"
|
||||||
echo -e "${DGN}Using LAN MAC Address: ${BGN}${LAN_MAC}${CL}"
|
echo -e "${BRIDGE}${BOLD}${DGN}LAN Bridge: ${BGN}${LAN_BRG}${CL}"
|
||||||
echo -e "${DGN}Using LAN Bridge: ${BGN}${LAN_BRG}${CL}"
|
echo -e "${MACADDRESS}${BOLD}${DGN}WAN MAC: ${BGN}${MAC}${CL}"
|
||||||
echo -e "${DGN}Using LAN VLAN: ${BGN}999${CL}"
|
echo -e "${MACADDRESS}${BOLD}${DGN}LAN MAC: ${BGN}${LAN_MAC}${CL}"
|
||||||
echo -e "${DGN}Using LAN IP Address: ${BGN}${LAN_IP_ADDR}${CL}"
|
|
||||||
echo -e "${DGN}Using LAN NETMASK: ${BGN}${LAN_NETMASK}${CL}"
|
|
||||||
echo -e "${DGN}Using Interface MTU Size: ${BGN}Default${CL}"
|
|
||||||
echo -e "${DGN}Start VM when completed: ${BGN}yes${CL}"
|
|
||||||
echo -e "${BL}Creating a OpenWrt VM using the above default settings${CL}"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function advanced_settings() {
|
function advanced_settings() {
|
||||||
@ -328,6 +344,17 @@ function advanced_settings() {
|
|||||||
exit-script
|
exit-script
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if DISK_SIZE=$(whiptail --backtitle "Proxmox VE Helper Scripts" \
|
||||||
|
--inputbox "Set Disk Size in GiB (e.g., 1, 2, 4)" 8 58 "1" \
|
||||||
|
--title "DISK SIZE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
||||||
|
if [[ "$DISK_SIZE" =~ ^[0-9]+$ ]]; then
|
||||||
|
DISK_SIZE="${DISK_SIZE}G"
|
||||||
|
fi
|
||||||
|
echo -e "${DISKSIZE}${BOLD}${DGN}Disk Size: ${BGN}${DISK_SIZE}${CL}"
|
||||||
|
else
|
||||||
|
exit-script
|
||||||
|
fi
|
||||||
|
|
||||||
if BRG=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a WAN Bridge" 8 58 vmbr0 --title "WAN BRIDGE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
if BRG=$(whiptail --backtitle "Proxmox VE Helper Scripts" --inputbox "Set a WAN Bridge" 8 58 vmbr0 --title "WAN BRIDGE" --cancel-button Exit-Script 3>&1 1>&2 2>&3); then
|
||||||
if [ -z $BRG ]; then
|
if [ -z $BRG ]; then
|
||||||
BRG="vmbr0"
|
BRG="vmbr0"
|
||||||
@ -491,47 +518,39 @@ response=$(curl -fsSL https://openwrt.org)
|
|||||||
stableversion=$(echo "$response" | sed -n 's/.*Current stable release - OpenWrt \([0-9.]\+\).*/\1/p' | head -n 1)
|
stableversion=$(echo "$response" | sed -n 's/.*Current stable release - OpenWrt \([0-9.]\+\).*/\1/p' | head -n 1)
|
||||||
URL="https://downloads.openwrt.org/releases/$stableversion/targets/x86/64/openwrt-$stableversion-x86-64-generic-ext4-combined.img.gz"
|
URL="https://downloads.openwrt.org/releases/$stableversion/targets/x86/64/openwrt-$stableversion-x86-64-generic-ext4-combined.img.gz"
|
||||||
|
|
||||||
sleep 2
|
|
||||||
msg_ok "${CL}${BL}${URL}${CL}"
|
msg_ok "${CL}${BL}${URL}${CL}"
|
||||||
curl -f#SL -o "$(basename "$URL")" "$URL"
|
curl -f#SL -o "$(basename "$URL")" "$URL"
|
||||||
echo -en "\e[1A\e[0K"
|
FILE=$(basename "$URL")
|
||||||
FILE=$(basename $URL)
|
|
||||||
msg_ok "Downloaded ${CL}${BL}$FILE${CL}"
|
msg_ok "Downloaded ${CL}${BL}$FILE${CL}"
|
||||||
gunzip -f $FILE >/dev/null 2>/dev/null || true
|
|
||||||
NEWFILE="${FILE%.*}"
|
gunzip -f "$FILE" >/dev/null 2>&1 || true
|
||||||
FILE="$NEWFILE"
|
FILE="${FILE%.*}"
|
||||||
mv $FILE ${FILE%.*}
|
msg_ok "Extracted OpenWrt Disk Image ${CL}${BL}$FILE${CL}"
|
||||||
qemu-img resize -f raw ${FILE%.*} 512M >/dev/null 2>/dev/null
|
|
||||||
msg_ok "Extracted & Resized OpenWrt Disk Image ${CL}${BL}$FILE${CL}"
|
|
||||||
STORAGE_TYPE=$(pvesm status -storage $STORAGE | awk 'NR>1 {print $2}')
|
|
||||||
case $STORAGE_TYPE in
|
|
||||||
nfs | dir)
|
|
||||||
DISK_EXT=".qcow2"
|
|
||||||
DISK_REF="$VMID/"
|
|
||||||
DISK_IMPORT="-format qcow2"
|
|
||||||
;;
|
|
||||||
btrfs)
|
|
||||||
DISK_EXT=".raw"
|
|
||||||
DISK_REF="$VMID/"
|
|
||||||
DISK_IMPORT="-format raw"
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
for i in {0,1}; do
|
|
||||||
disk="DISK$i"
|
|
||||||
eval DISK${i}=vm-${VMID}-disk-${i}${DISK_EXT:-}
|
|
||||||
eval DISK${i}_REF=${STORAGE}:${DISK_REF:-}${!disk}
|
|
||||||
done
|
|
||||||
|
|
||||||
msg_info "Creating OpenWrt VM"
|
msg_info "Creating OpenWrt VM"
|
||||||
qm create $VMID -cores $CORE_COUNT -memory $RAM_SIZE -name $HN \
|
qm create "$VMID" -cores "$CORE_COUNT" -memory "$RAM_SIZE" -name "$HN" \
|
||||||
-onboot 1 -ostype l26 -scsihw virtio-scsi-pci --tablet 0
|
-onboot 1 -ostype l26 -scsihw virtio-scsi-pci --tablet 0
|
||||||
pvesm alloc $STORAGE $VMID $DISK0 4M 1>&/dev/null
|
pvesm alloc "$STORAGE" "$VMID" "vm-$VMID-disk-0" 4M >/dev/null
|
||||||
qm importdisk $VMID ${FILE%.*} $STORAGE ${DISK_IMPORT:-} 1>&/dev/null
|
|
||||||
qm set $VMID \
|
IMPORT_OUT="$(qm importdisk "$VMID" "$FILE" "$STORAGE" --format raw 2>&1 || true)"
|
||||||
-efidisk0 ${DISK0_REF},efitype=4m,size=4M \
|
DISK_REF="$(printf '%s\n' "$IMPORT_OUT" | sed -n "s/.*successfully imported disk '\([^']\+\)'.*/\1/p")"
|
||||||
-scsi0 ${DISK1_REF},size=512M \
|
|
||||||
|
if [[ -z "$DISK_REF" ]]; then
|
||||||
|
DISK_REF="$(pvesm list "$STORAGE" | awk -v id="$VMID" '$1 ~ ("vm-"id"-disk-") {print $1}' | sort | tail -n1)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ -z "$DISK_REF" ]]; then
|
||||||
|
msg_error "Unable to determine imported disk reference."
|
||||||
|
echo "$IMPORT_OUT"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
qm set "$VMID" \
|
||||||
|
-efidisk0 "${STORAGE}:0,efitype=4m,size=4M" \
|
||||||
|
-scsi0 "${DISK_REF},size=${DISK_SIZE}" \
|
||||||
-boot order=scsi0 \
|
-boot order=scsi0 \
|
||||||
-tags community-script >/dev/null
|
-tags community-script >/dev/null
|
||||||
|
msg_ok "Attached disk (${DISK_SIZE})"
|
||||||
|
|
||||||
DESCRIPTION=$(
|
DESCRIPTION=$(
|
||||||
cat <<EOF
|
cat <<EOF
|
||||||
@ -570,36 +589,45 @@ msg_info "OpenWrt is being started in order to configure the network interfaces.
|
|||||||
qm start $VMID
|
qm start $VMID
|
||||||
sleep 15
|
sleep 15
|
||||||
msg_ok "Network interfaces are being configured as OpenWrt initiates."
|
msg_ok "Network interfaces are being configured as OpenWrt initiates."
|
||||||
send_line_to_vm ""
|
for _ in {1..30}; do
|
||||||
send_line_to_vm "uci delete network.@device[0]"
|
if qm status "$VMID" | grep -q "stopped"; then break; fi
|
||||||
send_line_to_vm "uci set network.wan=interface"
|
send_line_to_vm ""
|
||||||
send_line_to_vm "uci set network.wan.device=eth1"
|
send_line_to_vm "uci delete network.@device[0]"
|
||||||
send_line_to_vm "uci set network.wan.proto=dhcp"
|
send_line_to_vm "uci set network.wan=interface"
|
||||||
send_line_to_vm "uci delete network.lan"
|
send_line_to_vm "uci set network.wan.device=eth1"
|
||||||
send_line_to_vm "uci set network.lan=interface"
|
send_line_to_vm "uci set network.wan.proto=dhcp"
|
||||||
send_line_to_vm "uci set network.lan.device=eth0"
|
send_line_to_vm "uci delete network.lan"
|
||||||
send_line_to_vm "uci set network.lan.proto=static"
|
send_line_to_vm "uci set network.lan=interface"
|
||||||
send_line_to_vm "uci set network.lan.ipaddr=${LAN_IP_ADDR}"
|
send_line_to_vm "uci set network.lan.device=eth0"
|
||||||
send_line_to_vm "uci set network.lan.netmask=${LAN_NETMASK}"
|
send_line_to_vm "uci set network.lan.proto=static"
|
||||||
send_line_to_vm "uci commit"
|
send_line_to_vm "uci set network.lan.ipaddr=${LAN_IP_ADDR}"
|
||||||
send_line_to_vm "halt"
|
send_line_to_vm "uci set network.lan.netmask=${LAN_NETMASK}"
|
||||||
msg_ok "Network interfaces have been successfully configured."
|
send_line_to_vm "uci commit"
|
||||||
until qm status $VMID | grep -q "stopped"; do
|
send_line_to_vm "halt"
|
||||||
|
done
|
||||||
|
msg_ok "Network interfaces configured in OpenWrt"
|
||||||
|
|
||||||
|
msg_info "Waiting for OpenWrt to shut down..."
|
||||||
|
until qm status "$VMID" | grep -q "stopped"; do
|
||||||
sleep 2
|
sleep 2
|
||||||
done
|
done
|
||||||
msg_info "Bridge interfaces are being added."
|
msg_ok "OpenWrt has shut down"
|
||||||
qm set $VMID \
|
|
||||||
-net0 virtio,bridge=${LAN_BRG},macaddr=${LAN_MAC}${LAN_VLAN}${MTU} \
|
msg_info "Adding bridge interfaces on Proxmox side"
|
||||||
-net1 virtio,bridge=${BRG},macaddr=${MAC}${VLAN}${MTU} >/dev/null 2>/dev/null
|
qm set "$VMID" \
|
||||||
msg_ok "Bridge interfaces have been successfully added."
|
-net0 virtio,bridge="${LAN_BRG}",macaddr="${LAN_MAC}${LAN_VLAN}${MTU}" \
|
||||||
if [ "$START_VM" == "yes" ]; then
|
-net1 virtio,bridge="${BRG}",macaddr="${MAC}${VLAN}${MTU}" >/dev/null
|
||||||
|
msg_ok "Bridge interfaces added"
|
||||||
|
|
||||||
|
if [ "$START_VM" = "yes" ]; then
|
||||||
msg_info "Starting OpenWrt VM"
|
msg_info "Starting OpenWrt VM"
|
||||||
qm start $VMID
|
qm start "$VMID"
|
||||||
msg_ok "Started OpenWrt VM"
|
msg_ok "Started OpenWrt VM"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
VLAN_FINISH=""
|
VLAN_FINISH=""
|
||||||
if [ "$VLAN" == "" ] && [ "$VLAN2" != "999" ]; then
|
if [ -z "$VLAN" ] && [ "$VLAN2" != "999" ]; then
|
||||||
VLAN_FINISH=" Please remember to adjust the VLAN tags to suit your network."
|
VLAN_FINISH=" Please remember to adjust the VLAN tags to suit your network."
|
||||||
fi
|
fi
|
||||||
post_update_to_api "done" "none"
|
post_update_to_api "done" "none"
|
||||||
msg_ok "Completed Successfully!\n${VLAN_FINISH}"
|
msg_ok "Completed Successfully!${VLAN_FINISH:+\n$VLAN_FINISH}"
|
||||||
Loading…
x
Reference in New Issue
Block a user