mirror of
https://github.com/vdsm/virtual-dsm.git
synced 2025-11-08 11:03:41 +08:00
Compare commits
8 Commits
v7.35
...
51cedfb50e
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
51cedfb50e | ||
|
|
6afb3f1acc | ||
|
|
631a558a9f | ||
|
|
d5805b4e08 | ||
|
|
1dc15ce2e0 | ||
|
|
4145e811df | ||
|
|
fe8615d7d3 | ||
|
|
27ea5506bc |
2
.github/ISSUE_TEMPLATE/1-issue.yml
vendored
2
.github/ISSUE_TEMPLATE/1-issue.yml
vendored
@@ -21,6 +21,7 @@ body:
|
||||
attributes:
|
||||
label: Docker compose
|
||||
description: The compose file (or otherwise the `docker run` command used).
|
||||
render: yaml
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
@@ -28,6 +29,7 @@ body:
|
||||
attributes:
|
||||
label: Docker log
|
||||
description: The logfile of the container (as shown by `docker logs dsm`).
|
||||
render: shell
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
|
||||
2
.github/ISSUE_TEMPLATE/3-bug.yml
vendored
2
.github/ISSUE_TEMPLATE/3-bug.yml
vendored
@@ -23,6 +23,7 @@ body:
|
||||
attributes:
|
||||
label: Docker compose
|
||||
description: The compose file (or otherwise the `docker run` command used).
|
||||
render: yaml
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
@@ -30,6 +31,7 @@ body:
|
||||
attributes:
|
||||
label: Docker log
|
||||
description: The logfile of the container (as shown by `docker logs dsm`).
|
||||
render: shell
|
||||
validations:
|
||||
required: true
|
||||
- type: textarea
|
||||
|
||||
@@ -61,9 +61,9 @@ ADD --chmod=775 https://raw.githubusercontent.com/sud0woodo/patology/refs/heads/
|
||||
VOLUME /storage
|
||||
EXPOSE 22 139 445 5000
|
||||
|
||||
ENV RAM_SIZE="1G"
|
||||
ENV RAM_SIZE="2G"
|
||||
ENV CPU_CORES="2"
|
||||
ENV DISK_SIZE="16G"
|
||||
ENV CPU_CORES="1"
|
||||
|
||||
HEALTHCHECK --interval=60s --start-period=45s --retries=2 CMD /run/check.sh
|
||||
|
||||
|
||||
@@ -47,7 +47,7 @@ services:
|
||||
##### Via Docker CLI:
|
||||
|
||||
```bash
|
||||
docker run -it --rm --name dsm -p 5000:5000 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v ${PWD:-.}/dsm:/storage --stop-timeout 120 vdsm/virtual-dsm
|
||||
docker run -it --rm --name dsm -p 5000:5000 --device=/dev/kvm --device=/dev/net/tun --cap-add NET_ADMIN -v "${PWD:-.}/dsm:/storage" --stop-timeout 120 vdsm/virtual-dsm
|
||||
```
|
||||
|
||||
##### Via Kubernetes:
|
||||
@@ -135,7 +135,7 @@ kubectl apply -f https://raw.githubusercontent.com/vdsm/virtual-dsm/refs/heads/m
|
||||
|
||||
### How do I change the amount of CPU or RAM?
|
||||
|
||||
By default, the container will be allowed to use a maximum of 1 CPU core and 1 GB of RAM.
|
||||
By default, the container will be allowed to use a maximum of 2 CPU cores and 2 GB of RAM.
|
||||
|
||||
If you want to adjust this, you can specify the desired amount using the following environment variables:
|
||||
|
||||
|
||||
122
scripts/virtual-dsm-lxc-gpu.sh
Normal file
122
scripts/virtual-dsm-lxc-gpu.sh
Normal file
@@ -0,0 +1,122 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Constants
|
||||
CONFIG_DIR="/etc/pve/lxc"
|
||||
TMP_DIR="/tmp"
|
||||
|
||||
# Function to display log messages
|
||||
log() {
|
||||
echo -e "$1"
|
||||
}
|
||||
|
||||
# Function to display error and exit
|
||||
function display_error_and_exit() {
|
||||
log "Error: $1 Exiting."
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Function to display information
|
||||
function display_info {
|
||||
clear
|
||||
log "This script is used to configure prerequisites to run Synology Virtual DSM"
|
||||
log "in a Docker container inside an unprivileged Proxmox LXC container."
|
||||
log "Please run this script on the Proxmox host, not inside the LXC container.\n"
|
||||
}
|
||||
|
||||
# Check for root privileges
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
display_error_and_exit "Please run this script as root."
|
||||
fi
|
||||
|
||||
display_info
|
||||
|
||||
read -p "Do you want to continue? (y/n): " choice
|
||||
|
||||
if [[ $choice == "y" || $choice == "Y" ]]; then
|
||||
read -p "Enter the LXC Container ID (CT ID): " ct_id
|
||||
read -p "Enter the vGPU card ID (e.g. card1 = 1): " gpu_card
|
||||
read -p "Enter the vGPU renderD ID (e.g. renderD129 = 129): " gpu_renderd
|
||||
|
||||
# Check if ct_id is a non-empty numeric value
|
||||
if [[ ! $ct_id =~ ^[0-9]+$ ]]; then
|
||||
display_error_and_exit "Invalid LXC Container ID. Please enter a numeric value."
|
||||
fi
|
||||
|
||||
# Check if gpu_card is a non-empty numeric value
|
||||
if [[ ! $gpu_card =~ ^[0-9]+$ ]]; then
|
||||
display_error_and_exit "Invalid vGPU card number. Please enter a numeric value."
|
||||
fi
|
||||
|
||||
# Check if gpu_renderd is a non-empty numeric value
|
||||
if [[ ! $gpu_renderd =~ ^[0-9]+$ ]]; then
|
||||
display_error_and_exit "Invalid vGPU renderD number. Please enter a numeric value."
|
||||
fi
|
||||
|
||||
# Check if the configuration file exists
|
||||
config_file="$CONFIG_DIR/$ct_id.conf"
|
||||
if [[ ! -f "$config_file" ]]; then
|
||||
display_error_and_exit "Configuration file $config_file does not exist."
|
||||
fi
|
||||
|
||||
# Check if the LXC container is running
|
||||
container_status=$(pct status $ct_id 2>&1)
|
||||
if [[ "$container_status" == *"running"* ]]; then
|
||||
log "Stopping running LXC container $ct_id..."
|
||||
pct stop $ct_id || display_error_and_exit "Failed to stop LXC container $ct_id."
|
||||
fi
|
||||
|
||||
# Remove existing dev folder and tun, kvm, and vhost-net devices
|
||||
if [[ -d "/dev-$ct_id" ]]; then
|
||||
log "Removing existing /dev-$ct_id folder..."
|
||||
rm -r "/dev-$ct_id" || display_error_and_exit "Failed to remove existing /dev-$ct_id folder."
|
||||
fi
|
||||
|
||||
# Function to configure devices
|
||||
function configure_device() {
|
||||
device=$1
|
||||
module=$2
|
||||
major=$3
|
||||
minor=$4
|
||||
|
||||
log "Configuring $device..."
|
||||
mkdir -p "/dev-$ct_id/net" || display_error_and_exit "Failed to create /dev-$ct_id/net"
|
||||
mkdir -p "/dev-$ct_id/dri" || display_error_and_exit "Failed to create /dev-$ct_id/dri"
|
||||
mknod "/dev-$ct_id/$device" c $major $minor || display_error_and_exit "Failed to mknod /dev-$ct_id/$device"
|
||||
chown 100000:100000 "/dev-$ct_id/$device" || display_error_and_exit "Failed to chown /dev-$ct_id/$device"
|
||||
|
||||
#log "Checking if /dev-$ct_id/$device exists..."
|
||||
if ! [[ -e "/dev-$ct_id/$device" ]]; then
|
||||
display_error_and_exit "/dev-$ct_id/$device should have been created but does not exist."
|
||||
fi
|
||||
}
|
||||
|
||||
# Configure devices
|
||||
configure_device "net/tun" "tun" 10 200
|
||||
configure_device "kvm" "kvm" 10 232
|
||||
configure_device "vhost-net" "vhost-net" 10 238
|
||||
configure_device "dri/card0" "card0" 226 $gpu_card
|
||||
configure_device "dri/renderD128" "renderD128" 226 $gpu_renderd
|
||||
|
||||
# Check and add configuration lines to /et/pve/lxc/<CT ID>.conf
|
||||
log "Checking and adding configuration to $config_file..."
|
||||
lines_to_add=(
|
||||
"lxc.mount.entry: /dev-$ct_id/net/tun dev/net/tun none bind,create=file 0 0"
|
||||
"lxc.mount.entry: /dev-$ct_id/kvm dev/kvm none bind,create=file 0 0"
|
||||
"lxc.mount.entry: /dev-$ct_id/vhost-net dev/vhost-net none bind,create=file 0 0"
|
||||
"lxc.mount.entry: /dev-$ct_id/dri/card0 dev/dri/card0 none bind,create=file 0 0"
|
||||
"lxc.mount.entry: /dev-$ct_id/dri/renderD128 dev/dri/renderD128 none bind,create=file 0 0"
|
||||
)
|
||||
|
||||
# Error handling for config file changes
|
||||
for line in "${lines_to_add[@]}"; do
|
||||
if ! grep -qF "$line" "$config_file"; then
|
||||
echo "$line" >> "$config_file" || display_error_and_exit "Failed to add line '$line' to $config_file."
|
||||
fi
|
||||
done
|
||||
|
||||
log "Configuration completed successfully.\n\nStart the docker image (vdsm/virtual-dsm:latest) inside the LXC container."
|
||||
|
||||
else
|
||||
clear
|
||||
log "\nScript aborted. No changes were made."
|
||||
fi
|
||||
105
scripts/virtual-dsm-lxc.sh
Normal file
105
scripts/virtual-dsm-lxc.sh
Normal file
@@ -0,0 +1,105 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Constants
|
||||
CONFIG_DIR="/etc/pve/lxc"
|
||||
TMP_DIR="/tmp"
|
||||
|
||||
# Function to display log messages
|
||||
log() {
|
||||
echo -e "$1"
|
||||
}
|
||||
|
||||
# Function to display error and exit
|
||||
function display_error_and_exit() {
|
||||
log "Error: $1 Exiting."
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Function to display information
|
||||
function display_info {
|
||||
clear
|
||||
log "This script is used to configure prerequisites to run Synology Virtual DSM"
|
||||
log "in a Docker container inside an unprivileged Proxmox LXC container."
|
||||
log "Please run this script on the Proxmox host, not inside the LXC container.\n"
|
||||
}
|
||||
|
||||
# Check for root privileges
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
display_error_and_exit "Please run this script as root."
|
||||
fi
|
||||
|
||||
display_info
|
||||
|
||||
read -p "Do you want to continue? (y/n): " choice
|
||||
|
||||
if [[ $choice == "y" || $choice == "Y" ]]; then
|
||||
read -p "Enter the LXC Container ID (CT ID): " ct_id
|
||||
|
||||
# Check if ct_id is a non-empty numeric value
|
||||
if [[ ! $ct_id =~ ^[0-9]+$ ]]; then
|
||||
display_error_and_exit "Invalid LXC Container ID. Please enter a numeric value."
|
||||
fi
|
||||
|
||||
# Check if the configuration file exists
|
||||
config_file="$CONFIG_DIR/$ct_id.conf"
|
||||
if [[ ! -f "$config_file" ]]; then
|
||||
display_error_and_exit "Configuration file $config_file does not exist."
|
||||
fi
|
||||
|
||||
# Check if the LXC container is running
|
||||
container_status=$(pct status $ct_id 2>&1)
|
||||
if [[ "$container_status" == *"running"* ]]; then
|
||||
log "Stopping running LXC container $ct_id..."
|
||||
pct stop $ct_id || display_error_and_exit "Failed to stop LXC container $ct_id."
|
||||
fi
|
||||
|
||||
# Remove existing dev folder and tun, kvm, and vhost-net devices
|
||||
if [[ -d "/dev-$ct_id" ]]; then
|
||||
log "Removing existing /dev-$ct_id folder..."
|
||||
rm -r "/dev-$ct_id" || display_error_and_exit "Failed to remove existing /dev-$ct_id folder."
|
||||
fi
|
||||
|
||||
# Function to configure devices
|
||||
function configure_device() {
|
||||
device=$1
|
||||
module=$2
|
||||
major=$3
|
||||
minor=$4
|
||||
|
||||
log "Configuring $device..."
|
||||
mkdir -p "/dev-$ct_id/net" || display_error_and_exit "Failed to create /dev-$ct_id/net"
|
||||
mknod "/dev-$ct_id/$device" c $major $minor || display_error_and_exit "Failed to mknod /dev-$ct_id/$device"
|
||||
chown 100000:100000 "/dev-$ct_id/$device" || display_error_and_exit "Failed to chown /dev-$ct_id/$device"
|
||||
|
||||
#log "Checking if /dev-$ct_id/$device exists..."
|
||||
if ! [[ -e "/dev-$ct_id/$device" ]]; then
|
||||
display_error_and_exit "/dev-$ct_id/$device should have been created but does not exist."
|
||||
fi
|
||||
}
|
||||
|
||||
# Configure devices
|
||||
configure_device "net/tun" "tun" 10 200
|
||||
configure_device "kvm" "kvm" 10 232
|
||||
configure_device "vhost-net" "vhost-net" 10 238
|
||||
|
||||
# Check and add configuration lines to /et/pve/lxc/<CT ID>.conf
|
||||
log "Checking and adding configuration to $config_file..."
|
||||
lines_to_add=(
|
||||
"lxc.mount.entry: /dev-$ct_id/net/tun dev/net/tun none bind,create=file 0 0"
|
||||
"lxc.mount.entry: /dev-$ct_id/kvm dev/kvm none bind,create=file 0 0"
|
||||
"lxc.mount.entry: /dev-$ct_id/vhost-net dev/vhost-net none bind,create=file 0 0"
|
||||
)
|
||||
|
||||
# Error handling for config file changes
|
||||
for line in "${lines_to_add[@]}"; do
|
||||
if ! grep -qF "$line" "$config_file"; then
|
||||
echo "$line" >> "$config_file" || display_error_and_exit "Failed to add line '$line' to $config_file."
|
||||
fi
|
||||
done
|
||||
|
||||
log "Configuration completed successfully.\n\nStart the docker image (vdsm/virtual-dsm:latest) inside the LXC container."
|
||||
|
||||
else
|
||||
clear
|
||||
log "\nScript aborted. No changes were made."
|
||||
fi
|
||||
@@ -8,7 +8,9 @@ set -Eeuo pipefail
|
||||
: "${DISPLAY:="none"}" # Display type
|
||||
: "${RENDERNODE:="/dev/dri/renderD128"}" # Render node
|
||||
|
||||
if [[ "$GPU" != [Yy1]* ]] || [[ "$ARCH" != "amd64" ]]; then
|
||||
CPU_VENDOR=$(lscpu | awk '/Vendor ID/{print $3}')
|
||||
|
||||
if [[ "$GPU" != [Yy1]* ]] || [[ "$CPU_VENDOR" != "GenuineIntel" ]] || [[ "$ARCH" != "amd64" ]]; then
|
||||
|
||||
[[ "${DISPLAY,,}" == "none" ]] && VGA="none"
|
||||
DISPLAY_OPTS="-display $DISPLAY -vga $VGA"
|
||||
|
||||
@@ -176,7 +176,11 @@ getHostPorts() {
|
||||
|
||||
configureUser() {
|
||||
|
||||
NET_OPTS="-netdev user,id=hostnet0,host=${VM_NET_IP%.*}.1,net=${VM_NET_IP%.*}.0/24,dhcpstart=$VM_NET_IP,hostname=$VM_NET_HOST"
|
||||
if [ -z "$IP6" ]; then
|
||||
NET_OPTS="-netdev user,id=hostnet0,host=${VM_NET_IP%.*}.1,net=${VM_NET_IP%.*}.0/24,dhcpstart=$VM_NET_IP,hostname=$VM_NET_HOST"
|
||||
else
|
||||
NET_OPTS="-netdev user,id=hostnet0,ipv4=on,host=${VM_NET_IP%.*}.1,net=${VM_NET_IP%.*}.0/24,dhcpstart=$VM_NET_IP,ipv6=on,hostname=$VM_NET_HOST"
|
||||
fi
|
||||
|
||||
local forward
|
||||
forward=$(getUserPorts "$USER_PORTS")
|
||||
|
||||
@@ -17,8 +17,8 @@ echo "❯ For support visit $SUPPORT"
|
||||
: "${CONSOLE:="N"}" # Disable console mode
|
||||
: "${ALLOCATE:=""}" # Preallocate diskspace
|
||||
: "${ARGUMENTS:=""}" # Extra QEMU parameters
|
||||
: "${CPU_CORES:="1"}" # Amount of CPU cores
|
||||
: "${RAM_SIZE:="1G"}" # Maximum RAM amount
|
||||
: "${CPU_CORES:="2"}" # Amount of CPU cores
|
||||
: "${RAM_SIZE:="2G"}" # Maximum RAM amount
|
||||
: "${RAM_CHECK:="Y"}" # Check available RAM
|
||||
: "${DISK_SIZE:="16G"}" # Initial data disk size
|
||||
: "${STORAGE:="/storage"}" # Storage folder location
|
||||
|
||||
@@ -113,15 +113,15 @@ cpu() {
|
||||
local cpu=""
|
||||
|
||||
ret=$(lscpu)
|
||||
|
||||
|
||||
if grep -qi "model name" <<< "$ret"; then
|
||||
cpu=$(echo "$ret" | grep -m 1 -i 'model name' | cut -f 2 -d ":" | awk '{$1=$1}1' | sed 's# @.*##g' | sed s/"(R)"//g | sed 's/[^[:alnum:] ]\+/ /g' | sed 's/ */ /g')
|
||||
fi
|
||||
|
||||
|
||||
if [ -z "${cpu// /}" ] && grep -qi "model:" <<< "$ret"; then
|
||||
cpu=$(echo "$ret" | grep -m 1 -i 'model:' | cut -f 2 -d ":" | awk '{$1=$1}1' | sed 's# @.*##g' | sed s/"(R)"//g | sed 's/[^[:alnum:] ]\+/ /g' | sed 's/ */ /g')
|
||||
fi
|
||||
|
||||
|
||||
cpu="${cpu// CPU/}"
|
||||
cpu="${cpu// 4 Core/}"
|
||||
cpu="${cpu// 6 Core/}"
|
||||
@@ -147,7 +147,8 @@ cpu() {
|
||||
cpu="${cpu// Core TM/ Core}"
|
||||
cpu="${cpu// with Radeon Graphics/}"
|
||||
cpu="${cpu// with Radeon Vega Graphics/}"
|
||||
|
||||
cpu="${cpu// with Radeon Vega Mobile Gfx/}"
|
||||
|
||||
[ -z "${cpu// /}" ] && cpu="Unknown"
|
||||
|
||||
echo "$cpu"
|
||||
|
||||
Reference in New Issue
Block a user