Loading src/disk.sh +19 −5 Original line number Diff line number Diff line Loading @@ -17,6 +17,14 @@ SYSTEM="$STORAGE/$BASE.system.img" [ ! -s "$BOOT" ] && error "Virtual DSM boot-image does not exist ($BOOT)" && exit 81 [ ! -s "$SYSTEM" ] && error "Virtual DSM system-image does not exist ($SYSTEM)" && exit 82 if ! setOwner "$BOOT"; then error "Failed to set the owner for \"$BOOT\" !" fi if ! setOwner "$SYSTEM"; then error "Failed to set the owner for \"$SYSTEM\" !" fi fmt2ext() { local DISK_FMT="$1" Loading Loading @@ -338,23 +346,23 @@ checkFS () { DIR=$(dirname "$DISK_FILE") [ ! -d "$DIR" ] && return 0 if [[ "${FS,,}" == "overlay"* ]]; then info "Warning: the filesystem of $DIR is OverlayFS, this usually means it was binded to an invalid path!" if [[ "${FS,,}" == "overlay"* && "$PODMAN" != [Yy1]* ]]; then warn "the filesystem of $DIR is OverlayFS, this usually means it was binded to an invalid path!" fi if [[ "${FS,,}" == "fuse"* ]]; then info "Warning: the filesystem of $DIR is FUSE, this extra layer will negatively affect performance!" warn "the filesystem of $DIR is FUSE, this extra layer will negatively affect performance!" fi if ! supportsDirect "$FS"; then info "Warning: the filesystem of $DIR is $FS, which does not support O_DIRECT mode, adjusting settings..." warn "the filesystem of $DIR is $FS, which does not support O_DIRECT mode, adjusting settings..." fi if isCow "$FS"; then if [ -f "$DISK_FILE" ]; then FA=$(lsattr "$DISK_FILE") if [[ "$FA" != *"C"* ]]; then info "Warning: COW (copy on write) is not disabled for $DISK_DESC image file $DISK_FILE, this is recommended on ${FS^^} filesystems!" warn "COW (copy on write) is not disabled for $DISK_DESC image file $DISK_FILE, this is recommended on ${FS^^} filesystems!" fi fi fi Loading Loading @@ -543,6 +551,12 @@ addDisk () { fi if [ -f "$DISK_FILE" ]; then if ! setOwner "$DISK_FILE"; then error "Failed to set the owner for \"$DISK_FILE\" !" fi fi DISK_OPTS+=$(createDevice "$DISK_FILE" "$DISK_TYPE" "$DISK_INDEX" "$DISK_ADDRESS" "$DISK_FMT" "$DISK_IO" "$DISK_CACHE" "" "") return 0 Loading src/install.sh +23 −7 Original line number Diff line number Diff line Loading @@ -82,16 +82,16 @@ rm -f "$STORAGE/$BASE.system.img" # Check filesystem FS=$(stat -f -c %T "$STORAGE") if [[ "${FS,,}" == "overlay"* ]]; then info "Warning: the filesystem of $STORAGE is OverlayFS, this usually means it was binded to an invalid path!" if [[ "${FS,,}" == "overlay"* && "$PODMAN" != [Yy1]* ]]; then warn "the filesystem of $STORAGE is OverlayFS, this usually means it was binded to an invalid path!" fi if [[ "${FS,,}" == "fuse"* ]]; then info "Warning: the filesystem of $STORAGE is FUSE, this extra layer will negatively affect performance!" warn "the filesystem of $STORAGE is FUSE, this extra layer will negatively affect performance!" fi if [[ "${FS,,}" == "ecryptfs" || "${FS,,}" == "tmpfs" ]]; then info "Warning: the filesystem of $STORAGE is $FS, which does not support O_DIRECT mode, adjusting settings..." warn "the filesystem of $STORAGE is $FS, which does not support O_DIRECT mode, adjusting settings..." fi if [[ "${FS,,}" == "fat"* || "${FS,,}" == "vfat"* || "${FS,,}" == "msdos"* ]]; then Loading @@ -100,6 +100,10 @@ fi if [[ "${FS,,}" != "exfat"* && "${FS,,}" != "ntfs"* && "${FS,,}" != "unknown"* ]]; then TMP="$STORAGE/tmp" rm -rf "$TMP" if ! makeDir "$TMP"; then error "Failed to create directory \"$TMP\" !" && exit 93 fi else TMP="/tmp/dsm" TMP_SPACE=2147483648 Loading @@ -108,9 +112,8 @@ else if (( TMP_SPACE > SPACE )); then error "Not enough free space inside the container, have $SPACE_MB available but need at least 2 GB." && exit 93 fi fi rm -rf "$TMP" && mkdir -p "$TMP" fi # Check free diskspace ROOT_SPACE=536870912 Loading Loading @@ -224,6 +227,8 @@ if ! touch "$SYSTEM"; then error "Could not create file $SYSTEM for the system disk." && exit 98 fi ! setOwner "$SYSTEM" && error "Failed to set the owner for \"$SYSTEM\" !" if [[ "${FS,,}" == "btrfs" ]]; then { chattr +C "$SYSTEM"; } || : FA=$(lsattr "$SYSTEM") Loading Loading @@ -256,7 +261,11 @@ PART="$TMP/partition.fdisk" sfdisk -q "$SYSTEM" < "$PART" MOUNT="$TMP/system" rm -rf "$MOUNT" && mkdir -p "$MOUNT" rm -rf "$MOUNT" if ! makeDir "$MOUNT"; then error "Failed to create directory \"$MOUNT\" !" && exit 93 fi MSG="Extracting system partition..." info "Install: $MSG" && html "$MSG" Loading Loading @@ -291,6 +300,7 @@ fakeroot -- bash -c "set -Eeu;\ rm -rf "$MOUNT" echo "$BASE" > "$STORAGE/dsm.ver" ! setOwner "$STORAGE/dsm.ver" && error "Failed to set the owner for \"$STORAGE/dsm.ver\" !" if [[ "$URL" == "file://$STORAGE/$BASE.pat" ]]; then rm -f "$PAT" Loading @@ -298,7 +308,13 @@ else mv -f "$PAT" "$STORAGE/$BASE.pat" fi if [ -f "$STORAGE/$BASE.pat" ]; then ! setOwner "$STORAGE/$BASE.pat" && error "Failed to set the owner for \"$STORAGE/$BASE.pat\" !" fi mv -f "$BOOT" "$STORAGE/$BASE.boot.img" ! setOwner "$STORAGE/$BASE.boot.img" && error "Failed to set the owner for \"$STORAGE/$BASE.boot.img\" !" rm -rf "$TMP" return 0 src/network.sh +15 −5 Original line number Diff line number Diff line Loading @@ -218,11 +218,14 @@ getUserPorts() { for hostport in ${exclude//,/ }; do local val="${hostport///tcp}" local port="${hostport///tcp}" port="${port///udp}" if [[ "$num" == "${val///udp}" ]]; then if [[ "$num" == "$port" ]]; then num="" warn "Could not assign port ${val///udp} to \"USER_PORTS\" because it is already in \"HOST_PORTS\"!" if [[ "$port" != "$WEB_PORT" ]]; then warn "Could not assign port $port to \"USER_PORTS\" because it is already in \"HOST_PORTS\"!" fi fi done Loading Loading @@ -343,6 +346,12 @@ configurePasst() { PASST_OPTS+=" -H $VM_NET_HOST" PASST_OPTS+=" -M $GATEWAY_MAC" local uid gid uid=$(id -u) gid=$(id -g) PASST_OPTS+=" --runas $uid:$gid" PASST_OPTS+=" -P /var/run/passt.pid" PASST_OPTS+=" -l $log" PASST_OPTS+=" -q" Loading Loading @@ -697,7 +706,7 @@ getInfo() { [ -z "$MTU" ] && MTU="0" if [[ "${ADAPTER,,}" != "virtio-net-pci" ]]; then if [[ "$MTU" != "0" && "$MTU" != "1500" ]]; then if [[ "$MTU" != "0" ]] && [ "$MTU" -lt "1500" ]; then warn "MTU size is $MTU, but cannot be set for $ADAPTER adapters!" && MTU="0" fi fi Loading @@ -710,6 +719,7 @@ getInfo() { # Generate MAC address based on Docker container ID in hostname VM_NET_MAC=$(echo "$HOST" | md5sum | sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/02:11:32:\3:\4:\5/') echo "${VM_NET_MAC^^}" > "$file" ! setOwner "$file" && error "Failed to set the owner for \"$file\" !" fi fi Loading Loading @@ -828,7 +838,7 @@ else "passt" | "slirp" ) if [ -z "$USER_PORTS" ]; then info "Notice: because user-mode networking is active, if you need to expose ports, add them to the \"USER_PORTS\" variable." info "Notice: because user-mode networking is active, when you need to forward custom ports to DSM, add them to the \"USER_PORTS\" variable." fi ;; esac Loading src/reset.sh +4 −3 Original line number Diff line number Diff line Loading @@ -78,8 +78,7 @@ fi # Check folder if [[ "${COMMIT:-}" == [Yy1]* ]]; then STORAGE="/local" if [[ "${STORAGE,,}" != "/storage" ]]; then mkdir -p "$STORAGE" fi Loading @@ -88,7 +87,9 @@ if [ ! -d "$STORAGE" ]; then fi if [ ! -w "$STORAGE" ]; then error "Storage folder ($STORAGE) is not writeable!" && exit 13 msg="Storage folder ($STORAGE) is not writeable!" msg+=" If SELinux is active, you need to add the \":Z\" flag to the bind mount." error "$msg" && exit 13 fi # Check filesystem Loading src/utils.sh +34 −3 Original line number Diff line number Diff line Loading @@ -67,6 +67,37 @@ fKill() { return 0 } setOwner() { local file="$1" local dir uid gid [ ! -f "$file" ] && return 1 dir=$(dirname -- "$file") uid=$(stat -c '%u' "$dir") gid=$(stat -c '%g' "$dir") ! chown "$uid:$gid" "$file" && return 1 return 0 } makeDir() { local path="$1" local dir uid gid [ -d "$path" ] && return 0 ! mkdir -p "$path" && return 1 dir=$(dirname -- "$path") uid=$(stat -c '%u' "$dir") gid=$(stat -c '%g' "$dir") ! chown "$uid:$gid" "$path" && return 1 return 0 } escape () { local s s=${1//&/\&} Loading Loading @@ -123,11 +154,11 @@ cpu() { fi cpu="${cpu// CPU/}" cpu="${cpu// [0-9] Core}" cpu="${cpu// [0-9][0-9] Core}" cpu="${cpu// [0-9][0-9][0-9] Core}" cpu="${cpu//[0-9]th Gen }" cpu="${cpu// [0-9][0-9] Core}" cpu="${cpu// [0-9] Core}" cpu="${cpu//[0-9][0-9]th Gen }" cpu="${cpu//[0-9]th Gen }" cpu="${cpu// Processor/}" cpu="${cpu// Quad core/}" cpu="${cpu// Dual core/}" Loading Loading
src/disk.sh +19 −5 Original line number Diff line number Diff line Loading @@ -17,6 +17,14 @@ SYSTEM="$STORAGE/$BASE.system.img" [ ! -s "$BOOT" ] && error "Virtual DSM boot-image does not exist ($BOOT)" && exit 81 [ ! -s "$SYSTEM" ] && error "Virtual DSM system-image does not exist ($SYSTEM)" && exit 82 if ! setOwner "$BOOT"; then error "Failed to set the owner for \"$BOOT\" !" fi if ! setOwner "$SYSTEM"; then error "Failed to set the owner for \"$SYSTEM\" !" fi fmt2ext() { local DISK_FMT="$1" Loading Loading @@ -338,23 +346,23 @@ checkFS () { DIR=$(dirname "$DISK_FILE") [ ! -d "$DIR" ] && return 0 if [[ "${FS,,}" == "overlay"* ]]; then info "Warning: the filesystem of $DIR is OverlayFS, this usually means it was binded to an invalid path!" if [[ "${FS,,}" == "overlay"* && "$PODMAN" != [Yy1]* ]]; then warn "the filesystem of $DIR is OverlayFS, this usually means it was binded to an invalid path!" fi if [[ "${FS,,}" == "fuse"* ]]; then info "Warning: the filesystem of $DIR is FUSE, this extra layer will negatively affect performance!" warn "the filesystem of $DIR is FUSE, this extra layer will negatively affect performance!" fi if ! supportsDirect "$FS"; then info "Warning: the filesystem of $DIR is $FS, which does not support O_DIRECT mode, adjusting settings..." warn "the filesystem of $DIR is $FS, which does not support O_DIRECT mode, adjusting settings..." fi if isCow "$FS"; then if [ -f "$DISK_FILE" ]; then FA=$(lsattr "$DISK_FILE") if [[ "$FA" != *"C"* ]]; then info "Warning: COW (copy on write) is not disabled for $DISK_DESC image file $DISK_FILE, this is recommended on ${FS^^} filesystems!" warn "COW (copy on write) is not disabled for $DISK_DESC image file $DISK_FILE, this is recommended on ${FS^^} filesystems!" fi fi fi Loading Loading @@ -543,6 +551,12 @@ addDisk () { fi if [ -f "$DISK_FILE" ]; then if ! setOwner "$DISK_FILE"; then error "Failed to set the owner for \"$DISK_FILE\" !" fi fi DISK_OPTS+=$(createDevice "$DISK_FILE" "$DISK_TYPE" "$DISK_INDEX" "$DISK_ADDRESS" "$DISK_FMT" "$DISK_IO" "$DISK_CACHE" "" "") return 0 Loading
src/install.sh +23 −7 Original line number Diff line number Diff line Loading @@ -82,16 +82,16 @@ rm -f "$STORAGE/$BASE.system.img" # Check filesystem FS=$(stat -f -c %T "$STORAGE") if [[ "${FS,,}" == "overlay"* ]]; then info "Warning: the filesystem of $STORAGE is OverlayFS, this usually means it was binded to an invalid path!" if [[ "${FS,,}" == "overlay"* && "$PODMAN" != [Yy1]* ]]; then warn "the filesystem of $STORAGE is OverlayFS, this usually means it was binded to an invalid path!" fi if [[ "${FS,,}" == "fuse"* ]]; then info "Warning: the filesystem of $STORAGE is FUSE, this extra layer will negatively affect performance!" warn "the filesystem of $STORAGE is FUSE, this extra layer will negatively affect performance!" fi if [[ "${FS,,}" == "ecryptfs" || "${FS,,}" == "tmpfs" ]]; then info "Warning: the filesystem of $STORAGE is $FS, which does not support O_DIRECT mode, adjusting settings..." warn "the filesystem of $STORAGE is $FS, which does not support O_DIRECT mode, adjusting settings..." fi if [[ "${FS,,}" == "fat"* || "${FS,,}" == "vfat"* || "${FS,,}" == "msdos"* ]]; then Loading @@ -100,6 +100,10 @@ fi if [[ "${FS,,}" != "exfat"* && "${FS,,}" != "ntfs"* && "${FS,,}" != "unknown"* ]]; then TMP="$STORAGE/tmp" rm -rf "$TMP" if ! makeDir "$TMP"; then error "Failed to create directory \"$TMP\" !" && exit 93 fi else TMP="/tmp/dsm" TMP_SPACE=2147483648 Loading @@ -108,9 +112,8 @@ else if (( TMP_SPACE > SPACE )); then error "Not enough free space inside the container, have $SPACE_MB available but need at least 2 GB." && exit 93 fi fi rm -rf "$TMP" && mkdir -p "$TMP" fi # Check free diskspace ROOT_SPACE=536870912 Loading Loading @@ -224,6 +227,8 @@ if ! touch "$SYSTEM"; then error "Could not create file $SYSTEM for the system disk." && exit 98 fi ! setOwner "$SYSTEM" && error "Failed to set the owner for \"$SYSTEM\" !" if [[ "${FS,,}" == "btrfs" ]]; then { chattr +C "$SYSTEM"; } || : FA=$(lsattr "$SYSTEM") Loading Loading @@ -256,7 +261,11 @@ PART="$TMP/partition.fdisk" sfdisk -q "$SYSTEM" < "$PART" MOUNT="$TMP/system" rm -rf "$MOUNT" && mkdir -p "$MOUNT" rm -rf "$MOUNT" if ! makeDir "$MOUNT"; then error "Failed to create directory \"$MOUNT\" !" && exit 93 fi MSG="Extracting system partition..." info "Install: $MSG" && html "$MSG" Loading Loading @@ -291,6 +300,7 @@ fakeroot -- bash -c "set -Eeu;\ rm -rf "$MOUNT" echo "$BASE" > "$STORAGE/dsm.ver" ! setOwner "$STORAGE/dsm.ver" && error "Failed to set the owner for \"$STORAGE/dsm.ver\" !" if [[ "$URL" == "file://$STORAGE/$BASE.pat" ]]; then rm -f "$PAT" Loading @@ -298,7 +308,13 @@ else mv -f "$PAT" "$STORAGE/$BASE.pat" fi if [ -f "$STORAGE/$BASE.pat" ]; then ! setOwner "$STORAGE/$BASE.pat" && error "Failed to set the owner for \"$STORAGE/$BASE.pat\" !" fi mv -f "$BOOT" "$STORAGE/$BASE.boot.img" ! setOwner "$STORAGE/$BASE.boot.img" && error "Failed to set the owner for \"$STORAGE/$BASE.boot.img\" !" rm -rf "$TMP" return 0
src/network.sh +15 −5 Original line number Diff line number Diff line Loading @@ -218,11 +218,14 @@ getUserPorts() { for hostport in ${exclude//,/ }; do local val="${hostport///tcp}" local port="${hostport///tcp}" port="${port///udp}" if [[ "$num" == "${val///udp}" ]]; then if [[ "$num" == "$port" ]]; then num="" warn "Could not assign port ${val///udp} to \"USER_PORTS\" because it is already in \"HOST_PORTS\"!" if [[ "$port" != "$WEB_PORT" ]]; then warn "Could not assign port $port to \"USER_PORTS\" because it is already in \"HOST_PORTS\"!" fi fi done Loading Loading @@ -343,6 +346,12 @@ configurePasst() { PASST_OPTS+=" -H $VM_NET_HOST" PASST_OPTS+=" -M $GATEWAY_MAC" local uid gid uid=$(id -u) gid=$(id -g) PASST_OPTS+=" --runas $uid:$gid" PASST_OPTS+=" -P /var/run/passt.pid" PASST_OPTS+=" -l $log" PASST_OPTS+=" -q" Loading Loading @@ -697,7 +706,7 @@ getInfo() { [ -z "$MTU" ] && MTU="0" if [[ "${ADAPTER,,}" != "virtio-net-pci" ]]; then if [[ "$MTU" != "0" && "$MTU" != "1500" ]]; then if [[ "$MTU" != "0" ]] && [ "$MTU" -lt "1500" ]; then warn "MTU size is $MTU, but cannot be set for $ADAPTER adapters!" && MTU="0" fi fi Loading @@ -710,6 +719,7 @@ getInfo() { # Generate MAC address based on Docker container ID in hostname VM_NET_MAC=$(echo "$HOST" | md5sum | sed 's/^\(..\)\(..\)\(..\)\(..\)\(..\).*$/02:11:32:\3:\4:\5/') echo "${VM_NET_MAC^^}" > "$file" ! setOwner "$file" && error "Failed to set the owner for \"$file\" !" fi fi Loading Loading @@ -828,7 +838,7 @@ else "passt" | "slirp" ) if [ -z "$USER_PORTS" ]; then info "Notice: because user-mode networking is active, if you need to expose ports, add them to the \"USER_PORTS\" variable." info "Notice: because user-mode networking is active, when you need to forward custom ports to DSM, add them to the \"USER_PORTS\" variable." fi ;; esac Loading
src/reset.sh +4 −3 Original line number Diff line number Diff line Loading @@ -78,8 +78,7 @@ fi # Check folder if [[ "${COMMIT:-}" == [Yy1]* ]]; then STORAGE="/local" if [[ "${STORAGE,,}" != "/storage" ]]; then mkdir -p "$STORAGE" fi Loading @@ -88,7 +87,9 @@ if [ ! -d "$STORAGE" ]; then fi if [ ! -w "$STORAGE" ]; then error "Storage folder ($STORAGE) is not writeable!" && exit 13 msg="Storage folder ($STORAGE) is not writeable!" msg+=" If SELinux is active, you need to add the \":Z\" flag to the bind mount." error "$msg" && exit 13 fi # Check filesystem Loading
src/utils.sh +34 −3 Original line number Diff line number Diff line Loading @@ -67,6 +67,37 @@ fKill() { return 0 } setOwner() { local file="$1" local dir uid gid [ ! -f "$file" ] && return 1 dir=$(dirname -- "$file") uid=$(stat -c '%u' "$dir") gid=$(stat -c '%g' "$dir") ! chown "$uid:$gid" "$file" && return 1 return 0 } makeDir() { local path="$1" local dir uid gid [ -d "$path" ] && return 0 ! mkdir -p "$path" && return 1 dir=$(dirname -- "$path") uid=$(stat -c '%u' "$dir") gid=$(stat -c '%g' "$dir") ! chown "$uid:$gid" "$path" && return 1 return 0 } escape () { local s s=${1//&/\&} Loading Loading @@ -123,11 +154,11 @@ cpu() { fi cpu="${cpu// CPU/}" cpu="${cpu// [0-9] Core}" cpu="${cpu// [0-9][0-9] Core}" cpu="${cpu// [0-9][0-9][0-9] Core}" cpu="${cpu//[0-9]th Gen }" cpu="${cpu// [0-9][0-9] Core}" cpu="${cpu// [0-9] Core}" cpu="${cpu//[0-9][0-9]th Gen }" cpu="${cpu//[0-9]th Gen }" cpu="${cpu// Processor/}" cpu="${cpu// Quad core/}" cpu="${cpu// Dual core/}" Loading