mirror of
https://github.com/vdsm/virtual-dsm.git
synced 2025-11-07 02:23:42 +08:00
Compare commits
32 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
16b823f69b | ||
|
|
d69cceba8d | ||
|
|
c2cd9f52f4 | ||
|
|
0d2a222af0 | ||
|
|
868c7d1661 | ||
|
|
b6ca62da34 | ||
|
|
da4555925b | ||
|
|
8c6f7e49ef | ||
|
|
06829aac67 | ||
|
|
e5b7ade0d0 | ||
|
|
c1de32eff6 | ||
|
|
c2dc0cd3b6 | ||
|
|
e2a4ab7515 | ||
|
|
d94a9d0966 | ||
|
|
6d9c281add | ||
|
|
da51c1df1f | ||
|
|
97918abdb0 | ||
|
|
6a8093a3f4 | ||
|
|
0bd0806ceb | ||
|
|
386c2ccc45 | ||
|
|
ff6a3b8776 | ||
|
|
f290fb7031 | ||
|
|
b4e19ccc23 | ||
|
|
e3c514f8dc | ||
|
|
101b509f81 | ||
|
|
6a5301b3f2 | ||
|
|
cad5e5d5c2 | ||
|
|
024170d190 | ||
|
|
0ce14f6c2d | ||
|
|
272e491281 | ||
|
|
0518e1100b | ||
|
|
8aa797b557 |
8
.github/workflows/build.yml
vendored
8
.github/workflows/build.yml
vendored
@@ -28,10 +28,10 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
-
|
-
|
||||||
name: Set up Docker Buildx
|
name: Set up Docker Buildx
|
||||||
uses: docker/setup-buildx-action@v2
|
uses: docker/setup-buildx-action@v3
|
||||||
-
|
-
|
||||||
name: Checkout
|
name: Checkout
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
fetch-depth: 0
|
fetch-depth: 0
|
||||||
-
|
-
|
||||||
@@ -54,13 +54,13 @@ jobs:
|
|||||||
echo "build_date=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_OUTPUT
|
echo "build_date=$(date -u +'%Y-%m-%dT%H:%M:%SZ')" >> $GITHUB_OUTPUT
|
||||||
-
|
-
|
||||||
name: Login into Docker Hub
|
name: Login into Docker Hub
|
||||||
uses: docker/login-action@v2
|
uses: docker/login-action@v3
|
||||||
with:
|
with:
|
||||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||||
-
|
-
|
||||||
name: Login to GitHub Container Registry
|
name: Login to GitHub Container Registry
|
||||||
uses: docker/login-action@v2
|
uses: docker/login-action@v3
|
||||||
with:
|
with:
|
||||||
registry: ghcr.io
|
registry: ghcr.io
|
||||||
username: ${{ github.actor }}
|
username: ${{ github.actor }}
|
||||||
|
|||||||
2
.github/workflows/check.yml
vendored
2
.github/workflows/check.yml
vendored
@@ -7,7 +7,7 @@ jobs:
|
|||||||
name: shellcheck
|
name: shellcheck
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
- name: Run ShellCheck
|
- name: Run ShellCheck
|
||||||
uses: ludeeus/action-shellcheck@master
|
uses: ludeeus/action-shellcheck@master
|
||||||
env:
|
env:
|
||||||
|
|||||||
2
.github/workflows/hub.yml
vendored
2
.github/workflows/hub.yml
vendored
@@ -12,7 +12,7 @@ jobs:
|
|||||||
dockerHubDescription:
|
dockerHubDescription:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v4
|
||||||
-
|
-
|
||||||
name: Docker Hub Description
|
name: Docker Hub Description
|
||||||
uses: peter-evans/dockerhub-description@v3
|
uses: peter-evans/dockerhub-description@v3
|
||||||
|
|||||||
14
Dockerfile
14
Dockerfile
@@ -1,4 +1,4 @@
|
|||||||
FROM ghcr.io/qemu-tools/qemu-host as builder
|
FROM qemux/qemu-host as builder
|
||||||
|
|
||||||
# FROM golang as builder
|
# FROM golang as builder
|
||||||
# WORKDIR /
|
# WORKDIR /
|
||||||
@@ -12,7 +12,9 @@ FROM debian:bookworm-slim
|
|||||||
ARG DEBCONF_NOWARNINGS="yes"
|
ARG DEBCONF_NOWARNINGS="yes"
|
||||||
ARG DEBIAN_FRONTEND noninteractive
|
ARG DEBIAN_FRONTEND noninteractive
|
||||||
|
|
||||||
RUN apt-get update && apt-get -y upgrade && \
|
RUN if [ "$TARGETPLATFORM" = "linux/amd64" ]; then \
|
||||||
|
ADD_PKG="xserver-xorg-video-intel"; fi && \
|
||||||
|
apt-get update && apt-get -y upgrade && \
|
||||||
apt-get --no-install-recommends -y install \
|
apt-get --no-install-recommends -y install \
|
||||||
curl \
|
curl \
|
||||||
cpio \
|
cpio \
|
||||||
@@ -21,15 +23,15 @@ RUN apt-get update && apt-get -y upgrade && \
|
|||||||
unzip \
|
unzip \
|
||||||
socat \
|
socat \
|
||||||
procps \
|
procps \
|
||||||
dnsmasq \
|
|
||||||
xz-utils \
|
xz-utils \
|
||||||
iptables \
|
iptables \
|
||||||
iproute2 \
|
iproute2 \
|
||||||
net-tools \
|
dnsmasq \
|
||||||
btrfs-progs \
|
net-tools \
|
||||||
netcat-openbsd \
|
|
||||||
ca-certificates \
|
ca-certificates \
|
||||||
|
netcat-openbsd \
|
||||||
qemu-system-x86 \
|
qemu-system-x86 \
|
||||||
|
${ADD_PKG} \
|
||||||
&& apt-get clean \
|
&& apt-get clean \
|
||||||
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
|
||||||
|
|
||||||
|
|||||||
15
readme.md
15
readme.md
@@ -170,6 +170,17 @@ docker run -it --rm -p 5000:5000 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti
|
|||||||
|
|
||||||
With this method, you are able to switch between different versions while keeping your file data.
|
With this method, you are able to switch between different versions while keeping your file data.
|
||||||
|
|
||||||
|
* ### How do I passthrough my GPU?
|
||||||
|
|
||||||
|
To enable this feature, add the following lines to your compose file:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
environment:
|
||||||
|
GPU: "Y"
|
||||||
|
devices:
|
||||||
|
- /dev/dri
|
||||||
|
```
|
||||||
|
|
||||||
* ### What are the differences compared to the standard DSM?
|
* ### What are the differences compared to the standard DSM?
|
||||||
|
|
||||||
There are only two minor differences: the Virtual Machine Manager package is not provided, and Surveillance Station doesn't include any free licenses.
|
There are only two minor differences: the Virtual Machine Manager package is not provided, and Surveillance Station doesn't include any free licenses.
|
||||||
@@ -178,7 +189,7 @@ docker run -it --rm -p 5000:5000 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti
|
|||||||
|
|
||||||
Yes, this project contains only open-source code and does not distribute any copyrighted material. Neither does it try to circumvent any copyright protection measures. So under all applicable laws, this project would be considered legal.
|
Yes, this project contains only open-source code and does not distribute any copyrighted material. Neither does it try to circumvent any copyright protection measures. So under all applicable laws, this project would be considered legal.
|
||||||
|
|
||||||
However, by installing Synology's Virtual DSM, you must accept their end-user license agreement, which does not permit installation on non-Synology hardware. So only run this project on an official Synology NAS via the Container Manager package, as any other use will be a violation of their terms and conditions.
|
However, by installing Synology's Virtual DSM, you must accept their end-user license agreement, which does not permit installation on non-Synology hardware. So only run this project on an official Synology NAS, as any other use will be a violation of their terms and conditions.
|
||||||
|
|
||||||
## Disclaimer
|
## Disclaimer
|
||||||
|
|
||||||
@@ -191,4 +202,4 @@ Only run this container on Synology hardware, any other use is not permitted by
|
|||||||
[Build]: https://github.com/kroese/virtual-dsm/actions/workflows/build.yml/badge.svg
|
[Build]: https://github.com/kroese/virtual-dsm/actions/workflows/build.yml/badge.svg
|
||||||
[Size]: https://img.shields.io/docker/image-size/kroese/virtual-dsm/latest?color=066da5&label=size
|
[Size]: https://img.shields.io/docker/image-size/kroese/virtual-dsm/latest?color=066da5&label=size
|
||||||
[Pulls]: https://img.shields.io/docker/pulls/kroese/virtual-dsm.svg?style=flat&label=pulls&logo=docker
|
[Pulls]: https://img.shields.io/docker/pulls/kroese/virtual-dsm.svg?style=flat&label=pulls&logo=docker
|
||||||
[Version]: https://img.shields.io/docker/v/kroese/virtual-dsm?arch=amd64&sort=date&color=066da5
|
[Version]: https://img.shields.io/docker/v/kroese/virtual-dsm/latest?arch=amd64&sort=semver&color=066da5
|
||||||
|
|||||||
@@ -125,7 +125,7 @@ if [ ! -f "${DATA}" ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Format as BTRFS filesystem
|
# Format as BTRFS filesystem
|
||||||
mkfs.btrfs -q -L data -d single -m dup "${DATA}" > /dev/null
|
# mkfs.btrfs -q -L data -d single -m dup "${DATA}" > /dev/null
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
@@ -31,13 +31,20 @@ rm -f "$STORAGE"/"$BASE".agent
|
|||||||
rm -f "$STORAGE"/"$BASE".boot.img
|
rm -f "$STORAGE"/"$BASE".boot.img
|
||||||
rm -f "$STORAGE"/"$BASE".system.img
|
rm -f "$STORAGE"/"$BASE".system.img
|
||||||
|
|
||||||
TMP="$STORAGE/tmp"
|
TMP="/tmp/dsm"
|
||||||
RDC="$STORAGE/dsm.rd"
|
FS=$(stat -f -c %T "$STORAGE")
|
||||||
|
[[ "$FS" == "ext"* ]] && TMP="$STORAGE/tmp"
|
||||||
rm -rf "$TMP" && mkdir -p "$TMP"
|
rm -rf "$TMP" && mkdir -p "$TMP"
|
||||||
|
|
||||||
|
# Check free diskspace
|
||||||
|
MIN_SPACE=5842450944
|
||||||
|
SPACE=$(df --output=avail -B 1 "$TMP" | tail -n 1)
|
||||||
|
(( MIN_SPACE > SPACE )) && error "Not enough free space for installation." && exit 95
|
||||||
|
|
||||||
[[ "${DEBUG}" == [Yy1]* ]] && set -x
|
[[ "${DEBUG}" == [Yy1]* ]] && set -x
|
||||||
|
|
||||||
|
RDC="$STORAGE/dsm.rd"
|
||||||
|
|
||||||
if [ ! -f "${RDC}" ]; then
|
if [ ! -f "${RDC}" ]; then
|
||||||
|
|
||||||
info "Install: Downloading installer..."
|
info "Install: Downloading installer..."
|
||||||
@@ -250,6 +257,11 @@ mke2fs -q -t ext4 -b 4096 -d "$MOUNT/" -L "$LABEL" -F -E "offset=$OFFSET" "$SYST
|
|||||||
rm -rf "$MOUNT"
|
rm -rf "$MOUNT"
|
||||||
|
|
||||||
echo "$BASE" > "$STORAGE"/dsm.ver
|
echo "$BASE" > "$STORAGE"/dsm.ver
|
||||||
|
|
||||||
|
# Check free diskspace
|
||||||
|
SPACE=$(df --output=avail -B 1 "$STORAGE" | tail -n 1)
|
||||||
|
(( MIN_SPACE > SPACE )) && error "Not enough free space in storage folder." && exit 94
|
||||||
|
|
||||||
mv -f "$PAT" "$STORAGE"/"$BASE".pat
|
mv -f "$PAT" "$STORAGE"/"$BASE".pat
|
||||||
mv -f "$BOOT" "$STORAGE"/"$BASE".boot.img
|
mv -f "$BOOT" "$STORAGE"/"$BASE".boot.img
|
||||||
mv -f "$SYSTEM" "$STORAGE"/"$BASE".system.img
|
mv -f "$SYSTEM" "$STORAGE"/"$BASE".system.img
|
||||||
|
|||||||
@@ -146,10 +146,13 @@ configureNAT () {
|
|||||||
|
|
||||||
ip link set dev "${VM_NET_TAP}" master dockerbridge
|
ip link set dev "${VM_NET_TAP}" master dockerbridge
|
||||||
|
|
||||||
|
|
||||||
# Add internet connection to the VM
|
# Add internet connection to the VM
|
||||||
|
IP=$(ip address show dev "${VM_NET_DEV}" | grep inet | awk '/inet / { print $2 }' | cut -f1 -d/)
|
||||||
|
|
||||||
iptables -t nat -A POSTROUTING -o "${VM_NET_DEV}" -j MASQUERADE
|
iptables -t nat -A POSTROUTING -o "${VM_NET_DEV}" -j MASQUERADE
|
||||||
iptables -t nat -A PREROUTING -i "${VM_NET_DEV}" -p tcp -j DNAT --to $VM_NET_IP
|
iptables -t nat -A PREROUTING -i "${VM_NET_DEV}" -d "${IP}" -p tcp -j DNAT --to $VM_NET_IP
|
||||||
iptables -t nat -A PREROUTING -i "${VM_NET_DEV}" -p udp -j DNAT --to $VM_NET_IP
|
iptables -t nat -A PREROUTING -i "${VM_NET_DEV}" -d "${IP}" -p udp -j DNAT --to $VM_NET_IP
|
||||||
|
|
||||||
if (( KERNEL > 4 )); then
|
if (( KERNEL > 4 )); then
|
||||||
# Hack for guest VMs complaining about "bad udp checksums in 5 packets"
|
# Hack for guest VMs complaining about "bad udp checksums in 5 packets"
|
||||||
|
|||||||
15
run/run.sh
15
run/run.sh
@@ -4,8 +4,10 @@ set -Eeuo pipefail
|
|||||||
# Docker environment variables
|
# Docker environment variables
|
||||||
|
|
||||||
: ${URL:=''} # URL of the PAT file
|
: ${URL:=''} # URL of the PAT file
|
||||||
|
: ${GPU:='N'} # Enable GPU passthrough
|
||||||
: ${DEBUG:='N'} # Enable debug mode
|
: ${DEBUG:='N'} # Enable debug mode
|
||||||
: ${ALLOCATE:='Y'} # Preallocate diskspace
|
: ${ALLOCATE:='Y'} # Preallocate diskspace
|
||||||
|
: ${ARGUMENTS:=''} # Extra QEMU parameters
|
||||||
: ${CPU_CORES:='1'} # Amount of CPU cores
|
: ${CPU_CORES:='1'} # Amount of CPU cores
|
||||||
: ${DISK_SIZE:='16G'} # Initial data disk size
|
: ${DISK_SIZE:='16G'} # Initial data disk size
|
||||||
: ${RAM_SIZE:='512M'} # Maximum RAM amount
|
: ${RAM_SIZE:='512M'} # Maximum RAM amount
|
||||||
@@ -80,7 +82,12 @@ EXTRA_OPTS="-device virtio-balloon-pci,id=balloon0,bus=pcie.0,addr=0x4"
|
|||||||
EXTRA_OPTS="$EXTRA_OPTS -object rng-random,id=objrng0,filename=/dev/urandom"
|
EXTRA_OPTS="$EXTRA_OPTS -object rng-random,id=objrng0,filename=/dev/urandom"
|
||||||
EXTRA_OPTS="$EXTRA_OPTS -device virtio-rng-pci,rng=objrng0,id=rng0,bus=pcie.0,addr=0x1c"
|
EXTRA_OPTS="$EXTRA_OPTS -device virtio-rng-pci,rng=objrng0,id=rng0,bus=pcie.0,addr=0x1c"
|
||||||
|
|
||||||
ARGS="${DEF_OPTS} ${CPU_OPTS} ${RAM_OPTS} ${MAC_OPTS} ${MON_OPTS} ${SERIAL_OPTS} ${NET_OPTS} ${DISK_OPTS} ${EXTRA_OPTS}"
|
if [[ "${GPU}" == [Yy1]* ]]; then
|
||||||
|
DEF_OPTS="-nodefaults -boot strict=on -display egl-headless,rendernode=/dev/dri/renderD128"
|
||||||
|
DEF_OPTS="${DEF_OPTS} -device virtio-vga,id=video0,max_outputs=1,bus=pcie.0,addr=0x1"
|
||||||
|
fi
|
||||||
|
|
||||||
|
ARGS="${DEF_OPTS} ${CPU_OPTS} ${RAM_OPTS} ${MAC_OPTS} ${MON_OPTS} ${SERIAL_OPTS} ${NET_OPTS} ${DISK_OPTS} ${EXTRA_OPTS} ${ARGUMENTS}"
|
||||||
ARGS=$(echo "$ARGS" | sed 's/\t/ /g' | tr -s ' ')
|
ARGS=$(echo "$ARGS" | sed 's/\t/ /g' | tr -s ' ')
|
||||||
|
|
||||||
trap - ERR
|
trap - ERR
|
||||||
@@ -93,8 +100,8 @@ set -m
|
|||||||
)
|
)
|
||||||
set +m
|
set +m
|
||||||
|
|
||||||
if (( KERNEL > 5 )) || ( (( KERNEL == 5 )) && (( MINOR > 2 )) ); then
|
#if (( KERNEL > 5 )) || ( (( KERNEL == 5 )) && (( MINOR > 2 )) ); then
|
||||||
pidwait -F "${_QEMU_PID}" & wait $!
|
# pidwait -F "${_QEMU_PID}" & wait $!
|
||||||
fi
|
#else
|
||||||
|
|
||||||
tail --pid "$(cat "${_QEMU_PID}")" --follow /dev/null & wait $!
|
tail --pid "$(cat "${_QEMU_PID}")" --follow /dev/null & wait $!
|
||||||
|
|||||||
Reference in New Issue
Block a user