diff options
Diffstat (limited to 'pkg')
-rw-r--r-- | pkg/CMakeLists.txt | 8 | ||||
-rw-r--r-- | pkg/config/CMakeLists.txt | 15 | ||||
-rw-r--r-- | pkg/config/alt-servers | 15 | ||||
-rw-r--r-- | pkg/config/rpc.acl | 5 | ||||
-rw-r--r-- | pkg/config/server.conf | 91 | ||||
-rw-r--r-- | pkg/docker/archlinux_dockerfile | 28 | ||||
-rw-r--r-- | pkg/docker/ubuntu-20-04_dockerfile | 28 | ||||
-rw-r--r-- | pkg/systemd/CMakeLists.txt | 13 | ||||
-rw-r--r-- | pkg/systemd/dnbd3-server.service | 12 |
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 |