mirror of
https://github.com/vdsm/virtual-dsm.git
synced 2025-11-09 19:43:41 +08:00
Compare commits
21 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
44d3e23545 | ||
|
|
d340361320 | ||
|
|
f8f8c16200 | ||
|
|
47fd7931eb | ||
|
|
7ac9c242da | ||
|
|
78d330055f | ||
|
|
06cf0a4edc | ||
|
|
e26c208cc7 | ||
|
|
c2f4823d8b | ||
|
|
ca01bf8cb9 | ||
|
|
a5b2b655dd | ||
|
|
0f2f3b2ea8 | ||
|
|
0705c1c21b | ||
|
|
e4de05ce88 | ||
|
|
a24b62ae67 | ||
|
|
b5a9361b68 | ||
|
|
0e35e4a6d9 | ||
|
|
208a6e6636 | ||
|
|
3fec9bf5ef | ||
|
|
8d8efeb341 | ||
|
|
e9f27899a6 |
11
Dockerfile
11
Dockerfile
@@ -7,16 +7,16 @@ FROM qemux/qemu-host as builder
|
|||||||
# RUN go mod download
|
# RUN go mod download
|
||||||
# RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o /qemu-host.bin .
|
# RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o /qemu-host.bin .
|
||||||
|
|
||||||
FROM debian:bookworm-slim
|
FROM debian:trixie-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 apt-get update && apt-get -y upgrade && \
|
||||||
apt-get --no-install-recommends -y install \
|
apt-get --no-install-recommends -y install \
|
||||||
|
tini \
|
||||||
curl \
|
curl \
|
||||||
cpio \
|
cpio \
|
||||||
tini \
|
|
||||||
wget \
|
wget \
|
||||||
fdisk \
|
fdisk \
|
||||||
unzip \
|
unzip \
|
||||||
@@ -57,11 +57,14 @@ ARG BUILD_ARG=0
|
|||||||
ARG VERSION_ARG="0.0"
|
ARG VERSION_ARG="0.0"
|
||||||
ENV VERSION=$VERSION_ARG
|
ENV VERSION=$VERSION_ARG
|
||||||
|
|
||||||
|
LABEL org.opencontainers.image.licenses="MIT"
|
||||||
|
LABEL org.opencontainers.image.title="Virtual DSM"
|
||||||
LABEL org.opencontainers.image.created=${DATE_ARG}
|
LABEL org.opencontainers.image.created=${DATE_ARG}
|
||||||
LABEL org.opencontainers.image.revision=${BUILD_ARG}
|
LABEL org.opencontainers.image.revision=${BUILD_ARG}
|
||||||
LABEL org.opencontainers.image.version=${VERSION_ARG}
|
LABEL org.opencontainers.image.version=${VERSION_ARG}
|
||||||
LABEL org.opencontainers.image.source=https://github.com/kroese/virtual-dsm/
|
LABEL org.opencontainers.image.source="https://github.com/kroese/virtual-dsm/"
|
||||||
LABEL org.opencontainers.image.url=https://hub.docker.com/r/kroese/virtual-dsm/
|
LABEL org.opencontainers.image.url="https://hub.docker.com/r/kroese/virtual-dsm/"
|
||||||
|
LABEL org.opencontainers.image.description="Virtual DSM in a docker container"
|
||||||
|
|
||||||
HEALTHCHECK --interval=60s --retries=2 CMD /run/check.sh
|
HEALTHCHECK --interval=60s --retries=2 CMD /run/check.sh
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ Virtual DSM in a docker container.
|
|||||||
- Multi-platform
|
- Multi-platform
|
||||||
- KVM acceleration
|
- KVM acceleration
|
||||||
- GPU passthrough
|
- GPU passthrough
|
||||||
- Graceful shutdown
|
- Graceful shutdowns
|
||||||
- Upgrades supported
|
- Upgrades supported
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
@@ -173,7 +173,7 @@ docker run -it --rm -p 5000:5000 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti
|
|||||||
|
|
||||||
* ### How do I passthrough my GPU?
|
* ### How do I passthrough my GPU?
|
||||||
|
|
||||||
To enable this feature, add the following lines to your compose file:
|
To passthrough your GPU, add the following lines to your compose file:
|
||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
environment:
|
environment:
|
||||||
@@ -182,6 +182,8 @@ docker run -it --rm -p 5000:5000 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti
|
|||||||
- /dev/dri
|
- /dev/dri
|
||||||
```
|
```
|
||||||
|
|
||||||
|
This can be used to enable facial recognition in Synology Photos for example.
|
||||||
|
|
||||||
* ### 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.
|
||||||
|
|||||||
@@ -136,13 +136,6 @@ if [[ SIZE -ne DATA_SIZE ]]; then
|
|||||||
error "Virtual disk has the wrong size: ${SIZE}" && exit 89
|
error "Virtual disk has the wrong size: ${SIZE}" && exit 89
|
||||||
fi
|
fi
|
||||||
|
|
||||||
AGENT="${STORAGE}/${BASE}.agent"
|
|
||||||
[ -f "$AGENT" ] && AGENT_VERSION=$(cat "${AGENT}") || AGENT_VERSION=1
|
|
||||||
|
|
||||||
if ((AGENT_VERSION < 5)); then
|
|
||||||
info "The installed VirtualDSM Agent v${AGENT_VERSION} is an outdated version, please upgrade it."
|
|
||||||
fi
|
|
||||||
|
|
||||||
DISK_OPTS="\
|
DISK_OPTS="\
|
||||||
-device virtio-scsi-pci,id=hw-synoboot,bus=pcie.0,addr=0xa \
|
-device virtio-scsi-pci,id=hw-synoboot,bus=pcie.0,addr=0xa \
|
||||||
-drive file=${BOOT},if=none,id=drive-synoboot,format=raw,cache=${DISK_CACHE},aio=${DISK_IO},discard=${DISK_DISCARD},detect-zeroes=on \
|
-drive file=${BOOT},if=none,id=drive-synoboot,format=raw,cache=${DISK_CACHE},aio=${DISK_IO},discard=${DISK_DISCARD},detect-zeroes=on \
|
||||||
|
|||||||
12
run/gpu.sh
12
run/gpu.sh
@@ -28,3 +28,15 @@ if ! apt-mark showinstall | grep -q "xserver-xorg-video-intel"; then
|
|||||||
apt-get -qq --no-install-recommends -y install xserver-xorg-video-intel > /dev/null
|
apt-get -qq --no-install-recommends -y install xserver-xorg-video-intel > /dev/null
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
if ! apt-mark showinstall | grep -q "qemu-system-modules-opengl"; then
|
||||||
|
|
||||||
|
info "Installing OpenGL module..."
|
||||||
|
|
||||||
|
export DEBCONF_NOWARNINGS="yes"
|
||||||
|
export DEBIAN_FRONTEND="noninteractive"
|
||||||
|
|
||||||
|
apt-get -qq update
|
||||||
|
apt-get -qq --no-install-recommends -y install qemu-system-modules-opengl > /dev/null
|
||||||
|
|
||||||
|
fi
|
||||||
|
|||||||
@@ -242,9 +242,6 @@ mkdir -p "$LOC"
|
|||||||
cp /agent/service.sh "$LOC/agent.sh"
|
cp /agent/service.sh "$LOC/agent.sh"
|
||||||
chmod 755 "$LOC/agent.sh"
|
chmod 755 "$LOC/agent.sh"
|
||||||
|
|
||||||
# Store agent version
|
|
||||||
echo "7" > "$STORAGE"/"$BASE".agent
|
|
||||||
|
|
||||||
info "Install: Installing system partition..."
|
info "Install: Installing system partition..."
|
||||||
|
|
||||||
LABEL="1.44.1-42218"
|
LABEL="1.44.1-42218"
|
||||||
|
|||||||
@@ -234,8 +234,12 @@ fi
|
|||||||
if [[ "${DHCP}" == [Yy1]* ]]; then
|
if [[ "${DHCP}" == [Yy1]* ]]; then
|
||||||
|
|
||||||
if [[ "$GATEWAY" == "172."* ]]; then
|
if [[ "$GATEWAY" == "172."* ]]; then
|
||||||
|
if [[ "${DEBUG}" == [Yy1]* ]]; then
|
||||||
|
info "Warning: Are you sure the container is on a macvlan network?"
|
||||||
|
else
|
||||||
error "You can only enable DHCP while the container is on a macvlan network!" && exit 86
|
error "You can only enable DHCP while the container is on a macvlan network!" && exit 86
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
# Configuration for DHCP IP
|
# Configuration for DHCP IP
|
||||||
configureDHCP
|
configureDHCP
|
||||||
|
|||||||
21
run/power.sh
21
run/power.sh
@@ -39,28 +39,14 @@ _graceful_shutdown() {
|
|||||||
|
|
||||||
echo && error "Could not send shutdown command to the guest ($RESPONSE)"
|
echo && error "Could not send shutdown command to the guest ($RESPONSE)"
|
||||||
|
|
||||||
# If we cannot shutdown the usual way, fallback to the NMI method
|
# Send a NMI interrupt which will be detected by the agent script
|
||||||
|
|
||||||
AGENT="${STORAGE}/${BASE}.agent"
|
|
||||||
[ -f "$AGENT" ] && AGENT_VERSION=$(cat "${AGENT}") || AGENT_VERSION=1
|
|
||||||
|
|
||||||
if ((AGENT_VERSION > 1)); then
|
|
||||||
|
|
||||||
# Send a NMI interrupt which will be detected by the kernel
|
|
||||||
if ! echo 'nmi' | nc -q 1 -w 1 localhost "${QEMU_MONPORT}" > /dev/null ; then
|
if ! echo 'nmi' | nc -q 1 -w 1 localhost "${QEMU_MONPORT}" > /dev/null ; then
|
||||||
AGENT_VERSION=0
|
|
||||||
fi
|
|
||||||
|
|
||||||
fi
|
|
||||||
|
|
||||||
if ((AGENT_VERSION < 2)); then
|
|
||||||
|
|
||||||
echo && info "Please update the VirtualDSM Agent to allow for gracefull shutdowns..."
|
|
||||||
|
|
||||||
kill -15 "$(cat "${_QEMU_PID}")"
|
kill -15 "$(cat "${_QEMU_PID}")"
|
||||||
pkill -f qemu-system-x86_64 || true
|
pkill -f qemu-system-x86_64 || true
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
while [ "$(cat ${_QEMU_SHUTDOWN_COUNTER})" -lt "${QEMU_POWERDOWN_TIMEOUT}" ]; do
|
while [ "$(cat ${_QEMU_SHUTDOWN_COUNTER})" -lt "${QEMU_POWERDOWN_TIMEOUT}" ]; do
|
||||||
@@ -72,7 +58,8 @@ _graceful_shutdown() {
|
|||||||
if echo 'info version'| nc -q 1 -w 1 localhost "${QEMU_MONPORT}" >/dev/null 2>&1 ; then
|
if echo 'info version'| nc -q 1 -w 1 localhost "${QEMU_MONPORT}" >/dev/null 2>&1 ; then
|
||||||
|
|
||||||
sleep 1
|
sleep 1
|
||||||
#info "Shutting down, waiting... ($(cat ${_QEMU_SHUTDOWN_COUNTER})/${QEMU_POWERDOWN_TIMEOUT})"
|
CNT="$(cat ${_QEMU_SHUTDOWN_COUNTER})/${QEMU_POWERDOWN_TIMEOUT}"
|
||||||
|
[[ "${DEBUG}" == [Yy1]* ]] && info "Shutting down, waiting... (${CNT})"
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user