mirror of
https://github.com/vdsm/virtual-dsm.git
synced 2025-11-07 02:23:42 +08:00
Compare commits
41 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f0e5a61e73 | ||
|
|
b07577b60d | ||
|
|
4571fe9c4f | ||
|
|
9f6fbc3f7c | ||
|
|
bbc033f032 | ||
|
|
160e5a07be | ||
|
|
0cca2a7079 | ||
|
|
64257d1a6f | ||
|
|
d6dde093b2 | ||
|
|
d1957f5eb7 | ||
|
|
f3f9a9f480 | ||
|
|
15d67203c9 | ||
|
|
c33c63114e | ||
|
|
80169e6b50 | ||
|
|
61f733fe66 | ||
|
|
03da1f38f4 | ||
|
|
8543ea5dad | ||
|
|
36ebb950eb | ||
|
|
76ad3ff502 | ||
|
|
4673feb282 | ||
|
|
df6436bf6a | ||
|
|
d904ebfc85 | ||
|
|
b78342328f | ||
|
|
36c89f0556 | ||
|
|
1c62acd1a1 | ||
|
|
0795fd1277 | ||
|
|
c509ef5ac4 | ||
|
|
46be2d583d | ||
|
|
3441350087 | ||
|
|
d132b6afa9 | ||
|
|
8d0efe7379 | ||
|
|
2ad9dcc24c | ||
|
|
24ab417e9e | ||
|
|
bc9d3ffc9b | ||
|
|
4904109b9e | ||
|
|
436eca45cc | ||
|
|
daa91af2d5 | ||
|
|
3416507ec5 | ||
|
|
e9a5b50893 | ||
|
|
848dd9172d | ||
|
|
585adabaee |
@@ -124,7 +124,7 @@ else
|
|||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
delay=5000
|
delay=500
|
||||||
elapsed=$((($(date +%s%N) - ts)/1000000))
|
elapsed=$((($(date +%s%N) - ts)/1000000))
|
||||||
|
|
||||||
if [[ delay -gt elapsed ]]; then
|
if [[ delay -gt elapsed ]]; then
|
||||||
@@ -143,9 +143,11 @@ else
|
|||||||
MSG="http://${IP}:5000"
|
MSG="http://${IP}:5000"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
info "--------------------------------------------------------"
|
info "--------------------------------------------------------"
|
||||||
info " You can now login to DSM at ${MSG}"
|
info " You can now login to DSM at ${MSG}"
|
||||||
info "--------------------------------------------------------"
|
info "--------------------------------------------------------"
|
||||||
|
echo ""
|
||||||
|
|
||||||
# Wait for NMI interrupt as a shutdown signal
|
# Wait for NMI interrupt as a shutdown signal
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,8 @@ services:
|
|||||||
devices:
|
devices:
|
||||||
- /dev/kvm
|
- /dev/kvm
|
||||||
- /dev/vhost-net
|
- /dev/vhost-net
|
||||||
|
device_cgroup_rules:
|
||||||
|
- 'c *:* rwm'
|
||||||
cap_add:
|
cap_add:
|
||||||
- NET_ADMIN
|
- NET_ADMIN
|
||||||
ports:
|
ports:
|
||||||
|
|||||||
@@ -60,6 +60,8 @@ docker run -it --rm -p 5000:5000 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti
|
|||||||
environment:
|
environment:
|
||||||
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?
|
||||||
|
|
||||||
@@ -152,10 +154,10 @@ docker run -it --rm -p 5000:5000 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti
|
|||||||
devices:
|
devices:
|
||||||
- /dev/vhost-net
|
- /dev/vhost-net
|
||||||
device_cgroup_rules:
|
device_cgroup_rules:
|
||||||
- 'c 511:* rwm'
|
- 'c *:* rwm'
|
||||||
```
|
```
|
||||||
|
|
||||||
Please note that the exact `cgroup` rule number may vary depending on your system, but the log output will indicate the correct number in the event of an error.
|
Please note that even if you don't need DHCP, it's still recommended to enable this feature as it prevents NAT issues and increases performance by using a `macvtap` interface.
|
||||||
|
|
||||||
* ### How do I install a specific version of vDSM?
|
* ### How do I install a specific version of vDSM?
|
||||||
|
|
||||||
@@ -163,7 +165,7 @@ docker run -it --rm -p 5000:5000 --device=/dev/kvm --cap-add NET_ADMIN --stop-ti
|
|||||||
|
|
||||||
```yaml
|
```yaml
|
||||||
environment:
|
environment:
|
||||||
URL: "https://global.synologydownload.com/download/DSM/release/7.1.1/42962-1/DSM_VirtualDSM_42962.pat"
|
URL: "https://global.synologydownload.com/download/DSM/release/7.0.1/42218/DSM_VirtualDSM_42218.pat"
|
||||||
```
|
```
|
||||||
|
|
||||||
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.
|
||||||
|
|||||||
21
run/disk.sh
21
run/disk.sh
@@ -39,13 +39,15 @@ 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
|
||||||
|
|
||||||
REQ=$((DATA_SIZE-OLD_SIZE))
|
REQ=$((DATA_SIZE-OLD_SIZE))
|
||||||
|
|
||||||
# Check free diskspace
|
# Check free diskspace
|
||||||
SPACE=$(df --output=avail -B 1 "${STORAGE}" | tail -n 1)
|
SPACE=$(df --output=avail -B 1 "${STORAGE}" | tail -n 1)
|
||||||
|
|
||||||
if (( REQ > SPACE )); then
|
if (( REQ > SPACE )); then
|
||||||
@@ -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
|
||||||
|
|||||||
@@ -9,9 +9,11 @@ DL="https://global.synologydownload.com/download/DSM"
|
|||||||
|
|
||||||
if [ -z "$URL" ]; then
|
if [ -z "$URL" ]; then
|
||||||
|
|
||||||
URL="$DL/release/7.2/64561/DSM_VirtualDSM_64561.pat"
|
if [ "$ARCH" == "amd64" ]; then
|
||||||
#URL="$DL/release/7.1.1/42962-1/DSM_VirtualDSM_42962.pat"
|
URL="$DL/release/7.2/64570-1/DSM_VirtualDSM_64570.pat"
|
||||||
#URL="$DL/release/7.0.1/42218/DSM_VirtualDSM_42218.pat"
|
else
|
||||||
|
URL="$DL/release/7.0.1/42218/DSM_VirtualDSM_42218.pat"
|
||||||
|
fi
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -98,10 +100,10 @@ if [ -f "${RDC}" ]; then
|
|||||||
mv /run/extract/scemd /run/extract/syno_extract_system_patch
|
mv /run/extract/scemd /run/extract/syno_extract_system_patch
|
||||||
chmod +x /run/extract/syno_extract_system_patch
|
chmod +x /run/extract/syno_extract_system_patch
|
||||||
|
|
||||||
rm -rf "$TMP" && mkdir -p "$TMP"
|
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
rm -rf "$TMP" && mkdir -p "$TMP"
|
||||||
|
|
||||||
info "Install: Downloading $(basename "$URL")..."
|
info "Install: Downloading $(basename "$URL")..."
|
||||||
|
|
||||||
PAT="/$BASE.pat"
|
PAT="/$BASE.pat"
|
||||||
@@ -136,6 +138,7 @@ else
|
|||||||
apt-get -qq --no-install-recommends -y install qemu-user > /dev/null
|
apt-get -qq --no-install-recommends -y install qemu-user > /dev/null
|
||||||
|
|
||||||
export DEBIAN_FRONTEND=""
|
export DEBIAN_FRONTEND=""
|
||||||
|
export DEBCONF_NOWARNINGS=""
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -147,9 +150,10 @@ else
|
|||||||
{ qemu-x86_64 /run/extract/syno_extract_system_patch "$PAT" "$TMP/."; rc=$?; } || :
|
{ qemu-x86_64 /run/extract/syno_extract_system_patch "$PAT" "$TMP/."; rc=$?; } || :
|
||||||
fi
|
fi
|
||||||
|
|
||||||
(( rc != 0 )) && error "Failed to extract PAT file, reason $rc" && exit 63
|
|
||||||
export LD_LIBRARY_PATH=""
|
export LD_LIBRARY_PATH=""
|
||||||
|
|
||||||
|
(( rc != 0 )) && error "Failed to extract PAT file, reason $rc" && exit 63
|
||||||
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
HDA="$TMP/hda1"
|
HDA="$TMP/hda1"
|
||||||
@@ -175,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
|
||||||
|
|||||||
@@ -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
|
||||||
# ######################################
|
# ######################################
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -21,7 +21,9 @@ 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)
|
||||||
|
|
||||||
[ ! -d "$STORAGE" ] && error "Storage folder (${STORAGE}) not found!" && exit 13
|
[ ! -d "$STORAGE" ] && error "Storage folder (${STORAGE}) not found!" && exit 13
|
||||||
|
|
||||||
@@ -85,13 +87,13 @@ trap - ERR
|
|||||||
|
|
||||||
set -m
|
set -m
|
||||||
(
|
(
|
||||||
[[ "${DEBUG}" == [Yy1]* ]] && set -x
|
[[ "${DEBUG}" == [Yy1]* ]] && info "$VERS" && set -x
|
||||||
qemu-system-x86_64 ${ARGS:+ $ARGS} & echo $! > "${_QEMU_PID}"
|
qemu-system-x86_64 ${ARGS:+ $ARGS} & echo $! > "${_QEMU_PID}"
|
||||||
{ set +x; } 2>/dev/null
|
{ set +x; } 2>/dev/null
|
||||||
)
|
)
|
||||||
set +m
|
set +m
|
||||||
|
|
||||||
if (( KERNEL > 4 )); then
|
if (( KERNEL > 5 )) || ( (( KERNEL == 5 )) && (( MINOR > 10 )) ); then
|
||||||
pidwait -F "${_QEMU_PID}" & wait $!
|
pidwait -F "${_QEMU_PID}" & wait $!
|
||||||
else
|
else
|
||||||
tail --pid "$(cat "${_QEMU_PID}")" --follow /dev/null & wait $!
|
tail --pid "$(cat "${_QEMU_PID}")" --follow /dev/null & wait $!
|
||||||
|
|||||||
@@ -4,10 +4,12 @@ set -Eeuo pipefail
|
|||||||
# Docker environment variables
|
# Docker environment variables
|
||||||
|
|
||||||
: ${HOST_CPU:=''}
|
: ${HOST_CPU:=''}
|
||||||
|
: ${HOST_MAC:=''}
|
||||||
: ${HOST_BUILD:=''}
|
: ${HOST_BUILD:=''}
|
||||||
: ${HOST_DEBUG:=''}
|
: ${HOST_DEBUG:=''}
|
||||||
: ${HOST_SERIAL:=''}
|
: ${HOST_SERIAL:=''}
|
||||||
: ${GUEST_SERIAL:=''}
|
: ${GUEST_SERIAL:=''}
|
||||||
|
: ${HOST_MODEL:=''}
|
||||||
: ${HOST_VERSION:=''}
|
: ${HOST_VERSION:=''}
|
||||||
: ${HOST_TIMESTAMP:=''}
|
: ${HOST_TIMESTAMP:=''}
|
||||||
|
|
||||||
@@ -26,10 +28,12 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
HOST_ARGS=()
|
HOST_ARGS=()
|
||||||
|
HOST_ARGS+=("-cpu=${CPU_CORES}")
|
||||||
HOST_ARGS+=("-cpu_arch=${HOST_CPU}")
|
HOST_ARGS+=("-cpu_arch=${HOST_CPU}")
|
||||||
|
|
||||||
[ -n "$CPU_CORES" ] && HOST_ARGS+=("-cpu=${CPU_CORES}")
|
[ -n "$HOST_MAC" ] && HOST_ARGS+=("-mac=${HOST_MAC}")
|
||||||
[ -n "$HOST_BUILD" ] && HOST_ARGS+=("-build=${HOST_BUILD}")
|
[ -n "$HOST_BUILD" ] && HOST_ARGS+=("-build=${HOST_BUILD}")
|
||||||
|
[ -n "$HOST_MODEL" ] && HOST_ARGS+=("-model=${HOST_MODEL}")
|
||||||
[ -n "$HOST_SERIAL" ] && HOST_ARGS+=("-hostsn=${HOST_SERIAL}")
|
[ -n "$HOST_SERIAL" ] && HOST_ARGS+=("-hostsn=${HOST_SERIAL}")
|
||||||
[ -n "$GUEST_SERIAL" ] && HOST_ARGS+=("-guestsn=${GUEST_SERIAL}")
|
[ -n "$GUEST_SERIAL" ] && HOST_ARGS+=("-guestsn=${GUEST_SERIAL}")
|
||||||
[ -n "$HOST_VERSION" ] && HOST_ARGS+=("-version=${HOST_VERSION}")
|
[ -n "$HOST_VERSION" ] && HOST_ARGS+=("-version=${HOST_VERSION}")
|
||||||
@@ -41,7 +45,7 @@ if [[ "${HOST_DEBUG}" == [Yy1]* ]]; then
|
|||||||
{ set +x; } 2>/dev/null
|
{ set +x; } 2>/dev/null
|
||||||
echo
|
echo
|
||||||
else
|
else
|
||||||
./run/host.bin "${HOST_ARGS[@]}" > /dev/null 2>&1 &
|
./run/host.bin "${HOST_ARGS[@]}" 2> /dev/null &
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Configure serial ports
|
# Configure serial ports
|
||||||
|
|||||||
Reference in New Issue
Block a user