From 2c79a515d8089c53193c78aea5bfa1d3abcfbc43 Mon Sep 17 00:00:00 2001 From: status404 Date: Tue, 11 Mar 2025 17:40:10 +0300 Subject: [PATCH] first commit --- README.md | 38 ++++++++++++++++++++++++++++++++++++++ docker-compose.yml | 17 +++++++++++++++++ docker/Dockerfile | 23 +++++++++++++++++++++++ docker/run.sh | 26 ++++++++++++++++++++++++++ 4 files changed, 104 insertions(+) create mode 100644 README.md create mode 100644 docker-compose.yml create mode 100644 docker/Dockerfile create mode 100755 docker/run.sh diff --git a/README.md b/README.md new file mode 100644 index 0000000..e19e467 --- /dev/null +++ b/README.md @@ -0,0 +1,38 @@ +# Intro + +[Yggdrasil](https://yggdrasil-network.github.io/about.html) is a new experimental compact routing scheme. It is designed to be a future-proof and decentralised alternative to the structured routing protocols commonly used today on the Internet, as well as an enabling technology for future large-scale mesh networks. The current implementation of Yggdrasil is a lightweight userspace software router which is easy to configure. + +# Usage + +The container generates new Yggdrasil config if empty. And automatically update available public peers in the Yggdrasil configuration file with [peers_updater](https://github.com/ygguser/peers_updater) at every start. + +Here are some example snippets to help you get started creating a container. + +## docker-compose + +```yaml +services: + yggdrasil: + cap_add: + - NET_ADMIN + devices: + - /dev/net/tun + volumes: + - "./yggdrasil:/etc/yggdrasil" + sysctls: + - "net.ipv6.conf.all.disable_ipv6=0" +``` + +## docker cli + +```sh +docker run \ +--rm \ +--cap-add "NET_ADMIN" \ +--device "/dev/net/tun" \ +--volume "./yggdrasil.conf:/etc/yggdrasil/yggdrasil.conf" \ +--sysctl "net.ipv6.conf.all.disable_ipv6=0" \ +--mac-address "52:2a:ed:47:e9:25" \ +yggdrasil +``` + diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..3beb96d --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,17 @@ +services: + yggdrasil: + build: + context: https://git.bitdeals.org/private/yggdrasil.git + dockerfile: ./docker/Dockerfile + cap_add: + - NET_ADMIN + devices: + - /dev/net/tun + volumes: + - "yggdrasil:/etc/yggdrasil" + sysctls: + - "net.ipv6.conf.all.disable_ipv6=0" + +volumes: + yggdrasil: + diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..df39796 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,23 @@ +FROM debian:testing-slim + +SHELL [ "/bin/sh", "-eux", "-c" ] + +RUN apt-get update \ + && apt-get install -y --no-install-recommends yggdrasil wget ca-certificates unzip libcap2-bin gosu ;\ + apt-get clean ;\ + rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +RUN PU_VERSION="$(wget --server-response https://github.com/ygguser/peers_updater/releases/latest 2>&1 \ + | grep -E -m1 'Location: ' \ + | cut -d'/' -f8)" ;\ + wget https://github.com/ygguser/peers_updater/releases/download/$PU_VERSION/x86_64-unknown-linux-gnu.zip ;\ + unzip -d /usr/local/bin/ x86_64-unknown-linux-gnu.zip ;\ + rm x86_64-unknown-linux-gnu.zip + +# Set file capability to run as regular user +RUN setcap cap_net_admin=eip /usr/sbin/yggdrasil + +COPY ./run.sh /usr/local/bin/run.sh + +CMD ["/usr/local/bin/run.sh"] + diff --git a/docker/run.sh b/docker/run.sh new file mode 100755 index 0000000..a9f26ff --- /dev/null +++ b/docker/run.sh @@ -0,0 +1,26 @@ +#!/bin/sh + +if ! [ -d /var/run/yggdrasil ] +then + install -d -o yggdrasil -g yggdrasil /run/yggdrasil /var/run/yggdrasil +fi + + +if ! [ -f /etc/yggdrasil/yggdrasil.conf ] +then + mkdir -p /etc/yggdrasil/ + yggdrasil -genconf > /etc/yggdrasil/yggdrasil.conf +fi + + +# Show node address +until yggdrasilctl getself | grep -v "^[[:digit:]]" +do + sleep 5 +done & + + +peers_updater --config /etc/yggdrasil/yggdrasil.conf --update_cfg --number 5 + +gosu yggdrasil /usr/sbin/yggdrasil -useconffile /etc/yggdrasil/yggdrasil.conf +