Compare commits

...

36 Commits
v4.07 ... v4.13

Author SHA1 Message Date
Kroese
d94a9d0966 fix: Extract files inside container
fix: Extract files inside container
2023-10-05 15:55:49 +02:00
Kroese
6d9c281add build: Use DockerHub mirror 2023-10-05 15:51:42 +02:00
Kroese
da51c1df1f fix: Extract files inside container 2023-10-05 15:47:17 +02:00
Kroese
97918abdb0 build: Remove btrfs-progs 2023-10-05 15:35:24 +02:00
Kroese
6a8093a3f4 fix: Do not format image as btrfs 2023-10-05 15:31:42 +02:00
Kroese
0bd0806ceb Merge pull request #321 from kroese/renovate/docker-setup-buildx-action-3.x
chore(deps): update docker/setup-buildx-action action to v3
2023-09-12 10:41:06 +02:00
Kroese
386c2ccc45 Merge pull request #320 from kroese/renovate/docker-login-action-3.x
chore(deps): update docker/login-action action to v3
2023-09-12 10:40:51 +02:00
renovate[bot]
ff6a3b8776 chore(deps): update docker/setup-buildx-action action to v3 2023-09-12 08:10:13 +00:00
renovate[bot]
f290fb7031 chore(deps): update docker/login-action action to v3 2023-09-12 08:10:09 +00:00
Kroese
b4e19ccc23 Update readme.md
Update readme.md
2023-09-05 03:45:48 +02:00
Kroese
e3c514f8dc Update readme.md 2023-09-05 03:45:32 +02:00
Kroese
101b509f81 Merge pull request #316 from kroese/renovate/actions-checkout-4.x
chore(deps): update actions/checkout action to v4
2023-09-04 16:07:12 +02:00
renovate[bot]
6a5301b3f2 chore(deps): update actions/checkout action to v4 2023-09-04 14:04:19 +00:00
Kroese
cad5e5d5c2 Readme
Readme
2023-07-27 01:41:09 +02:00
Kroese
024170d190 docs: Readme 2023-07-27 01:40:31 +02:00
Kroese
0ce14f6c2d fix: Disable pidwait
fix: Disable pidwait
2023-07-18 20:17:19 +02:00
Kroese
272e491281 fix: Disable pidwait 2023-07-18 20:16:47 +02:00
Kroese
0518e1100b Add ARGUMENTS variable
Add ARGUMENTS variable
2023-07-18 19:47:56 +02:00
Kroese
8aa797b557 feat: Add ARGUMENTS variable 2023-07-18 19:44:09 +02:00
Kroese
4356e5ebf9 Fix for issue https://github.com/kroese/virtual-dsm/issues/292
Fix for issue https://github.com/kroese/virtual-dsm/issues/292
2023-07-18 19:37:12 +02:00
Kroese
502c068d30 fix: Fix for issue https://github.com/kroese/virtual-dsm/issues/292 2023-07-18 19:35:56 +02:00
Kroese
d5e3ed8907 fix: Fix for issue https://github.com/kroese/virtual-dsm/issues/292 2023-07-18 19:34:49 +02:00
Kroese
f0e5a61e73 Delete network on shutdown
Delete network on shutdown
2023-07-04 18:56:18 +02:00
Kroese
b07577b60d style: Remove spaces 2023-07-04 18:46:16 +02:00
Kroese
4571fe9c4f feat: Close network on shutdown 2023-07-04 18:36:38 +02:00
Kroese
9f6fbc3f7c fix: Use pidwait only on recent kernels 2023-07-04 18:22:50 +02:00
Kroese
bbc033f032 feat: Close network on shutdown 2023-07-04 18:21:37 +02:00
Kroese
160e5a07be feat: Close network on shutdown 2023-07-04 18:20:03 +02:00
Kroese
0cca2a7079 fix: Wait for address 2023-07-04 12:52:49 +02:00
Kroese
64257d1a6f Fix issue #281 and #283
Fix issue #281 and #283
2023-07-03 12:02:33 +02:00
Kroese
d6dde093b2 docs: Resize info 2023-07-03 11:59:40 +02:00
Kroese
d1957f5eb7 fix: Fix issue #281 2023-07-03 11:38:11 +02:00
Kroese
f3f9a9f480 fix: Fix issue #281 2023-07-03 11:26:10 +02:00
Kroese
15d67203c9 fix: Fix issue #283 2023-07-03 11:11:47 +02:00
Kroese
c33c63114e Merge pull request #278 from lauwie007/master
Update to DSM 7.2 build 64570-1
2023-06-20 21:40:44 +02:00
lauwie007
80169e6b50 Update to DSM 7.2 build 64570-1
New dsm release (previous version returned  an error for me)
2023-06-20 21:36:08 +02:00
10 changed files with 83 additions and 32 deletions

View File

@@ -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 }}

View File

@@ -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:

View File

@@ -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

View File

@@ -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 /
@@ -21,14 +21,13 @@ 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 \
&& apt-get clean \ && apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

View File

@@ -61,6 +61,8 @@ docker run -it --rm -p 5000:5000 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti
DISK_SIZE: "256G" DISK_SIZE: "256G"
``` ```
This can also be used to resize the existing disk to a larger capacity without data loss.
* ### How do I change the location of the virtual disk? * ### How do I change the location of the virtual disk?
To change the virtual disk's location from the default Docker volume, include the following bind mount in your compose file: To change the virtual disk's location from the default Docker volume, include the following bind mount in your compose file:
@@ -176,7 +178,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
@@ -189,4 +191,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

View File

@@ -39,7 +39,9 @@ if [ -f "${DATA}" ]; then
if [[ "${ALLOCATE}" == [Nn]* ]]; then if [[ "${ALLOCATE}" == [Nn]* ]]; then
# Resize file by changing its length # Resize file by changing its length
truncate -s "${DATA_SIZE}" "${DATA}"; if ! truncate -s "${DATA_SIZE}" "${DATA}"; then
error "Could not resize the file for the virtual disk." && exit 85
fi
else else
@@ -55,7 +57,9 @@ if [ -f "${DATA}" ]; then
# Resize file by allocating more space # Resize file by allocating more space
if ! fallocate -l "${DATA_SIZE}" "${DATA}"; then if ! fallocate -l "${DATA_SIZE}" "${DATA}"; then
error "Could not allocate a file for the virtual disk." && exit 85 if ! truncate -s "${DATA_SIZE}" "${DATA}"; then
error "Could not resize the file for the virtual disk." && exit 85
fi
fi fi
if [[ "${ALLOCATE}" == [Zz]* ]]; then if [[ "${ALLOCATE}" == [Zz]* ]]; then
@@ -84,7 +88,10 @@ if [ ! -f "${DATA}" ]; then
if [[ "${ALLOCATE}" == [Nn]* ]]; then if [[ "${ALLOCATE}" == [Nn]* ]]; then
# Create an empty file # Create an empty file
truncate -s "${DATA_SIZE}" "${DATA}" if ! truncate -s "${DATA_SIZE}" "${DATA}"; then
rm -f "${DATA}"
error "Could not create a file for the virtual disk." && exit 87
fi
else else
@@ -98,8 +105,10 @@ if [ ! -f "${DATA}" ]; then
# Create an empty file # Create an empty file
if ! fallocate -l "${DATA_SIZE}" "${DATA}"; then if ! fallocate -l "${DATA_SIZE}" "${DATA}"; then
rm -f "${DATA}" if ! truncate -s "${DATA_SIZE}" "${DATA}"; then
error "Could not allocate a file for the virtual disk." && exit 87 rm -f "${DATA}"
error "Could not create a file for the virtual disk." && exit 87
fi
fi fi
if [[ "${ALLOCATE}" == [Zz]* ]]; then if [[ "${ALLOCATE}" == [Zz]* ]]; then
@@ -116,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

View File

@@ -10,7 +10,7 @@ DL="https://global.synologydownload.com/download/DSM"
if [ -z "$URL" ]; then if [ -z "$URL" ]; then
if [ "$ARCH" == "amd64" ]; then if [ "$ARCH" == "amd64" ]; then
URL="$DL/release/7.2/64570/DSM_VirtualDSM_64570.pat" URL="$DL/release/7.2/64570-1/DSM_VirtualDSM_64570.pat"
else else
URL="$DL/release/7.0.1/42218/DSM_VirtualDSM_42218.pat" URL="$DL/release/7.0.1/42218/DSM_VirtualDSM_42218.pat"
fi fi
@@ -31,7 +31,7 @@ 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" RDC="$STORAGE/dsm.rd"
rm -rf "$TMP" && mkdir -p "$TMP" rm -rf "$TMP" && mkdir -p "$TMP"
@@ -179,7 +179,9 @@ SPACE=$(df --output=avail -B 1 "$TMP" | tail -n 1)
(( SYSTEM_SIZE > SPACE )) && error "Not enough free space to create a 4 GB system disk." && exit 87 (( SYSTEM_SIZE > SPACE )) && error "Not enough free space to create a 4 GB system disk." && exit 87
if ! fallocate -l "${SYSTEM_SIZE}" "${SYSTEM}"; then if ! fallocate -l "${SYSTEM_SIZE}" "${SYSTEM}"; then
rm -f "${SYSTEM}" && error "Could not allocate a file for the system disk." && exit 88 if ! truncate -s "${SYSTEM_SIZE}" "${SYSTEM}"; then
rm -f "${SYSTEM}" && error "Could not allocate a file for the system disk." && exit 88
fi
fi fi
if [[ "${ALLOCATE}" == [Zz]* ]]; then if [[ "${ALLOCATE}" == [Zz]* ]]; then
@@ -248,6 +250,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)
(( 6442450944 > SPACE )) && error "Not enough free space in destination 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

View File

@@ -31,7 +31,10 @@ configureDHCP() {
error "and that the NET_ADMIN capability has been added to the container config: --cap-add NET_ADMIN" && exit 16 error "and that the NET_ADMIN capability has been added to the container config: --cap-add NET_ADMIN" && exit 16
fi fi
ip link set "${VM_NET_TAP}" up while ! ip link set "${VM_NET_TAP}" up; do
info "Waiting for address to become available..."
sleep 2
done
TAP_NR=$(</sys/class/net/"${VM_NET_TAP}"/ifindex) TAP_NR=$(</sys/class/net/"${VM_NET_TAP}"/ifindex)
TAP_PATH="/dev/tap${TAP_NR}" TAP_PATH="/dev/tap${TAP_NR}"
@@ -127,11 +130,20 @@ configureNAT () {
fi fi
ip address add ${VM_NET_IP%.*}.1/24 broadcast ${VM_NET_IP%.*}.255 dev dockerbridge ip address add ${VM_NET_IP%.*}.1/24 broadcast ${VM_NET_IP%.*}.255 dev dockerbridge
ip link set dockerbridge up
while ! ip link set dockerbridge up; do
info "Waiting for address to become available..."
sleep 2
done
# QEMU Works with taps, set tap to the bridge created # QEMU Works with taps, set tap to the bridge created
ip tuntap add dev "${VM_NET_TAP}" mode tap ip tuntap add dev "${VM_NET_TAP}" mode tap
ip link set "${VM_NET_TAP}" up promisc on
while ! ip link set "${VM_NET_TAP}" up promisc on; do
info "Waiting for tap to become available..."
sleep 2
done
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
@@ -165,6 +177,24 @@ configureNAT () {
return 0 return 0
} }
closeNetwork () {
if [[ "${DHCP}" == [Yy1]* ]]; then
ip link set "${VM_NET_TAP}" down || true
ip link delete "${VM_NET_TAP}" || true
else
ip link set "${VM_NET_TAP}" down promisc off || true
ip link delete "${VM_NET_TAP}" || true
ip link set dockerbridge down || true
ip link delete dockerbridge || true
fi
}
# ###################################### # ######################################
# Configure Network # Configure Network
# ###################################### # ######################################

View File

@@ -81,6 +81,8 @@ _graceful_shutdown() {
echo && echo " Quitting..." echo && echo " Quitting..."
echo 'quit' | nc -q 1 -w 1 localhost "${QEMU_MONPORT}" >/dev/null 2>&1 || true echo 'quit' | nc -q 1 -w 1 localhost "${QEMU_MONPORT}" >/dev/null 2>&1 || true
closeNetwork
return return
} }

View File

@@ -6,6 +6,7 @@ set -Eeuo pipefail
: ${URL:=''} # URL of the PAT file : ${URL:=''} # URL of the PAT file
: ${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
@@ -21,6 +22,7 @@ trap 'error "Status $? while: ${BASH_COMMAND} (line $LINENO/$BASH_LINENO)"' ERR
STORAGE="/storage" STORAGE="/storage"
KERNEL=$(uname -r | cut -b 1) KERNEL=$(uname -r | cut -b 1)
MINOR=$(uname -r | cut -d '.' -f2)
ARCH=$(dpkg --print-architecture) ARCH=$(dpkg --print-architecture)
VERS=$(qemu-system-x86_64 --version | head -n 1 | cut -d '(' -f 1) VERS=$(qemu-system-x86_64 --version | head -n 1 | cut -d '(' -f 1)
@@ -79,7 +81,7 @@ 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}" 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
@@ -92,8 +94,8 @@ set -m
) )
set +m set +m
if (( KERNEL > 4 )); then #if (( KERNEL > 5 )) || ( (( KERNEL == 5 )) && (( MINOR > 2 )) ); then
pidwait -F "${_QEMU_PID}" & wait $! # pidwait -F "${_QEMU_PID}" & wait $!
else #else
tail --pid "$(cat "${_QEMU_PID}")" --follow /dev/null & wait $!
fi tail --pid "$(cat "${_QEMU_PID}")" --follow /dev/null & wait $!