summaryrefslogtreecommitdiffstats
path: root/pkg
diff options
context:
space:
mode:
Diffstat (limited to 'pkg')
-rw-r--r--pkg/CMakeLists.txt8
-rw-r--r--pkg/config/CMakeLists.txt15
-rw-r--r--pkg/config/alt-servers15
-rw-r--r--pkg/config/rpc.acl5
-rw-r--r--pkg/config/server.conf91
-rw-r--r--pkg/docker/archlinux_dockerfile28
-rw-r--r--pkg/docker/ubuntu-20-04_dockerfile28
-rw-r--r--pkg/systemd/CMakeLists.txt13
-rw-r--r--pkg/systemd/dnbd3-server.service12
9 files changed, 215 insertions, 0 deletions
diff --git a/pkg/CMakeLists.txt b/pkg/CMakeLists.txt
new file mode 100644
index 0000000..3060345
--- /dev/null
+++ b/pkg/CMakeLists.txt
@@ -0,0 +1,8 @@
+cmake_minimum_required(VERSION 3.10)
+
+# set the project name
+project(dnbd3-pkg
+ LANGUAGES C)
+
+add_subdirectory(config)
+add_subdirectory(systemd)
diff --git a/pkg/config/CMakeLists.txt b/pkg/config/CMakeLists.txt
new file mode 100644
index 0000000..efbd2bf
--- /dev/null
+++ b/pkg/config/CMakeLists.txt
@@ -0,0 +1,15 @@
+cmake_minimum_required(VERSION 3.10)
+
+# set the project name
+project(dnbd3-config
+ LANGUAGES C)
+
+# define all configuration files
+set(DNBD3_CONFIG_FILES ${CMAKE_CURRENT_SOURCE_DIR}/alt-servers
+ ${CMAKE_CURRENT_SOURCE_DIR}/rpc.acl
+ ${CMAKE_CURRENT_SOURCE_DIR}/server.conf)
+
+# install configuration files into sample directory
+install(FILES ${DNBD3_CONFIG_FILES}
+ DESTINATION /etc/dnbd3-server/sample
+ COMPONENT server)
diff --git a/pkg/config/alt-servers b/pkg/config/alt-servers
new file mode 100644
index 0000000..d9d2636
--- /dev/null
+++ b/pkg/config/alt-servers
@@ -0,0 +1,15 @@
+[192.168.100.10]
+comment=Some alt server
+
+[192.168.100.100]
+comment=My first alt server that will not be used for replication
+for=client
+
+[192.168.100.50]
+comment=Super secret alt server that will be used for replication, but clients don't know about it
+for=replication
+
+[192.168.100.123]
+comment=Also just for replication, and only for images starting with foobar/baz/
+namespace=foobar/baz/
+for=replication
diff --git a/pkg/config/rpc.acl b/pkg/config/rpc.acl
new file mode 100644
index 0000000..b3b4561
--- /dev/null
+++ b/pkg/config/rpc.acl
@@ -0,0 +1,5 @@
+# Everything from localhost
+127.0.0.0/8 ALL
+
+# Some info reading for another machine
+132.230.8.113 STATS CLIENT_LIST IMAGE_LIST
diff --git a/pkg/config/server.conf b/pkg/config/server.conf
new file mode 100644
index 0000000..22bd14a
--- /dev/null
+++ b/pkg/config/server.conf
@@ -0,0 +1,91 @@
+[dnbd3]
+; port to listen on (default: 5003)
+listenPort=5003
+
+; relative root directory for images, ending in .r[1-9][0-9]*
+basePath=/mnt/storage
+
+; artificial connection delay for connecting servers
+serverPenalty=100000
+
+; artificial connection delay for connecting clients
+clientPenalty=0
+
+; is this server a proxy? if true, requests for non-existing images will be relayed to known alt-servers
+isProxy=true
+
+; if proxy is true and an image is incomplete, should idle bandwidth be used to replicate missing blocks?
+backgroundReplication=true
+
+; minimum amount of connected clients for background replication to kick in
+bgrMinClients=0
+
+; if another proxy requests and image that we don't have, should we ask our alt-servers for it?
+lookupMissingForProxy=true
+
+; create sparse files instead of preallocating; ignored if backgroundReplication=true
+; -- only recommended if cache space is small
+sparseFiles=false
+
+; if true (which is the default), images will automatically be removed from the list if they can't be accessed
+removeMissingImages=true
+
+; timeout in ms for send/recv on connections to uplink servers (used for replication)
+uplinkTimeout=5000
+
+; timeout in ms for send/recv on connections to clients (using an image on this server)
+clientTimeout=15000
+
+; set this to true to close handles of unused images after some timeout
+closeUnusedFd=false
+
+; set this to true to load files without the .r[0-9]+ extension too, assuming RID=1
+vmdkLegacyMode=false
+
+; Don't set the server flag when connecting to alt-servers
+; Intended for if the proxy is used for on-client caching
+pretendClient=false
+
+; When running in proxy mode and running out of space, automatically delete oldest image(s) to make
+; the newly replicated image fit. In sparse mode, this will make sure at least 2GB of free space are
+; available when replicating a new image. During normal operation, it will free at least 256MB whenever
+; an attempt to write more data to cache fails. In non-sparse mode, whenever a new image is replicated,
+; as much space as is required to store the entire image will be made available.
+; However, after startup the proxy will refuse to delete any images for the time span given below, to be
+; able to gather up to date usage information for the images available. If unitless, the value is
+; interpreted in seconds. Valid suffixes are m, h, d.
+; Setting this to -1 disables deletion of images. If the cache partition is full, no more images will
+; be replicated unless you manually free up more disk space.
+autoFreeDiskSpaceDelay=10h
+
+[limits]
+maxClients=2000
+maxImages=1000
+maxPayload=9M
+maxReplicationSize=150G
+
+; Maximum number of bytes to prefetch when relaying client request to upstream server
+maxPrefetch=256k
+
+[logging]
+; log file path and name
+; comment out to disable logging to file
+; protip: use SIGUSR2 to reopen log file
+file=./dnbd3.log
+
+; which type of messages to log to file
+fileMask=ERROR WARNING MINOR INFO DEBUG1
+
+; which type of messages to log to console (stdout)
+consoleMask=ERROR WARNING MINOR INFO
+
+; Valid types (warning: specifying invalid types will not yield an error!)
+; ERROR Fatal error, server will terminate
+; WARNING Major issue, something is broken but keep running
+; MINOR Minor issue, more of a hickup than serious problem
+; INFO Informational message
+; DEBUG1 Debug information, used for medium verbosity
+; DEBUG2 Used for debug messages that would show up a lot
+
+; Whether timestamps should be output to console too (or just to file if false)
+consoleTimestamps=false
diff --git a/pkg/docker/archlinux_dockerfile b/pkg/docker/archlinux_dockerfile
new file mode 100644
index 0000000..ea6145b
--- /dev/null
+++ b/pkg/docker/archlinux_dockerfile
@@ -0,0 +1,28 @@
+# use Archlinux as base image
+FROM archlinux:latest
+
+# declare arguments that should be set by 'docker build --build-arg ...'
+ARG DNBD3_PACKAGE_FILE_NAME
+
+# copy built package file from host to docker image
+COPY ${DNBD3_PACKAGE_FILE_NAME} /tmp
+
+# install required dependencies
+RUN pacman --noconfirm -Sy
+RUN pacman --noconfirm -S fuse2 jansson
+
+# install installation package
+RUN tar -xf /tmp/${DNBD3_PACKAGE_FILE_NAME} --strip-components=1 -C /
+
+# use default config for dnbd3-server
+RUN ln -s /etc/dnbd3-server/sample/server.conf /etc/dnbd3-server
+RUN ln -s /etc/dnbd3-server/sample/alt-servers /etc/dnbd3-server
+
+# make default storage point for dnbd3-server
+RUN mkdir -p /mnt/storage
+
+# expose the port of the dnbd3-server to the host
+EXPOSE 5003
+
+# run dnbd3-server
+CMD [ "dnbd3-server", "-n" ]
diff --git a/pkg/docker/ubuntu-20-04_dockerfile b/pkg/docker/ubuntu-20-04_dockerfile
new file mode 100644
index 0000000..ad2adcb
--- /dev/null
+++ b/pkg/docker/ubuntu-20-04_dockerfile
@@ -0,0 +1,28 @@
+# use Ubuntu 20.04 as base image
+FROM ubuntu:focal
+
+# declare arguments that should be set by 'docker build --build-arg ...'
+ARG DNBD3_PACKAGE_FILE_NAME
+
+# copy built package file from host to docker image
+COPY ${DNBD3_PACKAGE_FILE_NAME} /tmp
+
+# install required dependencies
+RUN apt-get update
+RUN apt-get install -y libfuse2 libjansson4
+
+# install installation package
+RUN dpkg -i /tmp/${DNBD3_PACKAGE_FILE_NAME}
+
+# use default config for dnbd3-server
+RUN ln -s /etc/dnbd3-server/sample/server.conf /etc/dnbd3-server
+RUN ln -s /etc/dnbd3-server/sample/alt-servers /etc/dnbd3-server
+
+# make default storage point for dnbd3-server
+RUN mkdir -p /mnt/storage
+
+# expose the port of the dnbd3-server to the host
+EXPOSE 5003
+
+# run dnbd3-server
+CMD [ "dnbd3-server", "-n" ]
diff --git a/pkg/systemd/CMakeLists.txt b/pkg/systemd/CMakeLists.txt
new file mode 100644
index 0000000..b094b4b
--- /dev/null
+++ b/pkg/systemd/CMakeLists.txt
@@ -0,0 +1,13 @@
+cmake_minimum_required(VERSION 3.10)
+
+# set the project name
+project(dnbd3-systemd
+ LANGUAGES C)
+
+# define all systemd related files
+set(DNBD3_SYSTEMD_FILES ${CMAKE_CURRENT_SOURCE_DIR}/dnbd3-server.service)
+
+# install systemd service files
+install(FILES ${DNBD3_SYSTEMD_FILES}
+ DESTINATION /usr/lib/systemd/system
+ COMPONENT server)
diff --git a/pkg/systemd/dnbd3-server.service b/pkg/systemd/dnbd3-server.service
new file mode 100644
index 0000000..de800ce
--- /dev/null
+++ b/pkg/systemd/dnbd3-server.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=DNBD3 server
+Wants=network-online.target
+After=network-online.target
+
+[Service]
+Type=simple
+ExecStart=/usr/bin/dnbd3-server -n -c /etc/dnbd3-server
+Restart=on-failure
+
+[Install]
+WantedBy=multi-user.target