aboutsummaryrefslogtreecommitdiff
path: root/docker
diff options
context:
space:
mode:
authordvn <git@dvn.me>2018-08-01 17:24:40 +0200
committerdvn <git@dvn.me>2018-08-01 17:24:40 +0200
commitd538fb055b1ba63181c779c189a5f17e796a8b4b (patch)
tree51cc82dfb499eb355c3c9aac97e73dd2648df0aa /docker
parent3256190f26310f367ad336f90cad460401e8c1da (diff)
downloadgnunet-d538fb055b1ba63181c779c189a5f17e796a8b4b.tar.gz
gnunet-d538fb055b1ba63181c779c189a5f17e796a8b4b.zip
docker: Add a docker quick-start directory
Diffstat (limited to 'docker')
-rw-r--r--docker/Dockerfile102
-rw-r--r--docker/README.md130
-rw-r--r--docker/docker-entrypoint.sh15
-rw-r--r--docker/gnunet.conf21
4 files changed, 268 insertions, 0 deletions
diff --git a/docker/Dockerfile b/docker/Dockerfile
new file mode 100644
index 000000000..c91ce4210
--- /dev/null
+++ b/docker/Dockerfile
@@ -0,0 +1,102 @@
1FROM ubuntu:18.04
2
3ENV DEBIAN_FRONTEND noninteractive
4
5# Install tools and dependencies
6RUN apt-get update && \
7 apt-get -y install --no-install-recommends \
8 ca-certificates \
9 libsasl2-modules \
10 git \
11 automake \
12 autopoint \
13 autoconf \
14 texinfo \
15 libtool \
16 libltdl-dev \
17 libgpg-error-dev \
18 libidn11-dev \
19 libunistring-dev \
20 libglpk-dev \
21 libbluetooth-dev \
22 libextractor-dev \
23 libmicrohttpd-dev \
24 libgnutls28-dev \
25 libgcrypt20-dev \
26 libpq-dev \
27 libsqlite3-dev && \
28 apt-get clean all && \
29 apt-get -y autoremove && \
30 rm -rf \
31 /var/lib/apt/lists/* \
32 /tmp/*
33
34# Install GNUrl
35ENV GNURL_GIT_URL https://git.taler.net/gnurl.git
36ENV GNURL_GIT_BRANCH gnurl-7.57.0
37
38RUN git clone $GNURL_GIT_URL \
39 --branch $GNURL_GIT_BRANCH \
40 --depth=1 \
41 --quiet && \
42 cd /gnurl && \
43 autoreconf -i && \
44 ./configure \
45 --enable-ipv6 \
46 --with-gnutls \
47 --without-libssh2 \
48 --without-libmetalink \
49 --without-winidn \
50 --without-librtmp \
51 --without-nghttp2 \
52 --without-nss \
53 --without-cyassl \
54 --without-polarssl \
55 --without-ssl \
56 --without-winssl \
57 --without-darwinssl \
58 --disable-sspi \
59 --disable-ntlm-wb \
60 --disable-ldap \
61 --disable-rtsp \
62 --disable-dict \
63 --disable-telnet \
64 --disable-tftp \
65 --disable-pop3 \
66 --disable-imap \
67 --disable-smtp \
68 --disable-gopher \
69 --disable-file \
70 --disable-ftp \
71 --disable-smb && \
72 make install && \
73 cd - && \
74 rm -fr /gnurl
75
76# Install GNUnet
77ENV GNUNET_PREFIX /usr/local/gnunet
78ENV CFLAGS '-g -Wall -O0'
79
80COPY ../ /gnunet
81
82RUN cd /gnunet && \
83 ./bootstrap && \
84 ./configure \
85 --with-nssdir=/lib \
86 --prefix="$GNUNET_PREFIX" \
87 --enable-logging=verbose && \
88 make -j3 && \
89 make install && \
90 ldconfig && \
91 cd - && \
92 rm -fr /gnunet
93
94# Configure GNUnet
95COPY gnunet.conf /etc/gnunet.conf
96COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint
97RUN chmod 755 /usr/local/bin/docker-entrypoint
98
99ENV LOCAL_PORT_RANGE='40001 40200'
100ENV PATH "$GNUNET_PREFIX/bin:/usr/local/bin:$PATH"
101
102ENTRYPOINT ["docker-entrypoint"]
diff --git a/docker/README.md b/docker/README.md
new file mode 100644
index 000000000..4e0e6b951
--- /dev/null
+++ b/docker/README.md
@@ -0,0 +1,130 @@
1# gnunet-docker
2A Dockerfile (and maybe later docker-compose.yml) for getting a running GNUnet docker container.
3
4> This README and parts of the Dockerfile were adapted from https://github.com/compiaffe/gnunet-docker
5
6
7## Build it
8This will take quite a while and will consume a bit of data.
9
10```bash
11docker build -t gnunet .
12```
13
14## Start it from the newly created gnunet image
15Start a container from `gnunet` image, which can access /dev/net/tun, has access to the host network. We are going to name it `gnunet1`.
16
17Note the `--rm` that will delete the container as soon as you stop it and `-ti` gives you an interactive terminal.
18
19#### Linux Users
20```bash
21docker run \
22 --rm \
23 -ti \
24 --privileged \
25 --name gnunet1 \
26 --net=host \
27 -v /dev/net/tun:/dev/net/tun \
28 gnunet
29```
30
31#### Mac Users
32```bash
33docker run \
34 --rm \
35 -it \
36 --privileged \
37 --name gnunet1 \
38 -e LOCAL_PORT_RANGE='40001 40200' \
39 -e GNUNET_PORT=2086 \
40 -p 2086:2086 \
41 -p 2086:2086/udp \
42 -p40001-40200:40001-40200 \
43 -p40001-40200:40001-40200/udp \
44 gnunet
45```
46
47This terminal will keep on printing to screen at the moment. So go on in a new terminal please.
48
49Don't worry about warnings too much...
50
51## Check if you are connected
52Open a new terminal and connect to the container we just started:
53
54```bash
55docker exec -it gnunet1 gnunet-peerinfo -i
56```
57
58If you get a list of peers, all is good.
59
60## Multiple containers on the same host
61### Running
62#### Run Container 1
63```bash
64export GPORT=2086 LPORT='40001-40200' GNAME=gnunet1
65docker run \
66 --rm \
67 -it \
68 --privileged \
69 -e GNUNET_PORT=$GPORT \
70 -e LOCAL_PORT_RANGE="${LPORT/-/ }" \
71 -p $GPORT:$GPORT \
72 -p $GPORT:$GPORT/udp \
73 -p$LPORT:$LPORT \
74 -p$LPORT:$LPORT/udp \
75 --name $GNAME \
76 gnunet
77```
78
79#### Run Container 2
80```bash
81export GPORT=2087 LPORT='40201-40400' GNAME=gnunet2
82docker run \
83 --rm \
84 -it \
85 --privileged \
86 -e GNUNET_PORT=$GPORT \
87 -e LOCAL_PORT_RANGE="${LPORT/-/ }" \
88 -p $GPORT:$GPORT \
89 -p $GPORT:$GPORT/udp \
90 -p$LPORT:$LPORT \
91 -p$LPORT:$LPORT/udp \
92 --name $GNAME \
93 gnunet
94```
95
96### Testing cadet example
97#### Container 1
98```bash
99$ docker exec -it gnunet1 bash
100$ gnunet-peerinfo -s
101I am peer `VWPN1NZA6YMM866EJ5J2NY47XG692MQ6H6WASVECF0M18A9SCMZ0'.
102$ gnunet-cadet -o asdasd
103```
104
105#### Container 2
106```bash
107$ docker exec -it gnunet2 bash
108$ gnunet-cadet VWPN1NZA6YMM866EJ5J2NY47XG692MQ6H6WASVECF0M18A9SCMZ0 asdasd
109```
110
111### Testing file sharing example
112#### Container 1
113```bash
114$ docker exec -it gnunet1 bash
115$ echo 'test' > test.txt
116$ gnunet-publish test.txt
117Publishing `/test.txt' done.
118URI is `gnunet://fs/chk/1RZ7A8TAQHMF8DWAGTSZ9CSA365T60C4BC6DDS810VM78D2Q0366CRX8DGFA29EWBT9BW5Y9HYD0Z1EAKNFNJQDJ04QQSGTQ352W28R.7MYB03GYXT17Z93ZRZRVV64AH9KPWFSVDEZGVE84YHD63XZFJ36B86M48KHTZVF87SZ05HBVB44PCXE8CVWAH72VN1SKYPRK1QN2C98.5'.
119```
120
121#### Container 2
122```bash
123$ docker exec -it gnunet2 bash
124$ gnunet-download -o out.file "gnunet://fs/chk/1RZ7A8TAQHMF8DWAGTSZ9CSA365T60C4BC6DDS810VM78D2Q0366CRX8DGFA29EWBT9BW5Y9HYD0Z1EAKNFNJQDJ04QQSGTQ352W28R.7MYB03GYXT17Z93ZRZRVV64AH9KPWFSVDEZGVE84YHD63XZFJ36B86M48KHTZVF87SZ05HBVB44PCXE8CVWAH72VN1SKYPRK1QN2C98.5"
125100% [============================================================]
126Downloading `out.file' done (0 b/s).
127$ cat out.file
128test
129```
130
diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh
new file mode 100644
index 000000000..7f98ef68b
--- /dev/null
+++ b/docker/docker-entrypoint.sh
@@ -0,0 +1,15 @@
1#!/bin/bash -e
2
3echo "${LOCAL_PORT_RANGE:-49152 65535}" > /proc/sys/net/ipv4/ip_local_port_range
4sed -i 's/$GNUNET_PORT/'${GNUNET_PORT:-2086}'/g' /etc/gnunet.conf
5
6if [[ $# -eq 0 ]]; then
7 exec gnunet-arm \
8 --config=/etc/gnunet.conf \
9 --start \
10 --monitor
11elif [[ -z $1 ]] || [[ ${1:0:1} == '-' ]]; then
12 exec gnunet-arm "$@"
13else
14 exec "$@"
15fi
diff --git a/docker/gnunet.conf b/docker/gnunet.conf
new file mode 100644
index 000000000..c8299ef46
--- /dev/null
+++ b/docker/gnunet.conf
@@ -0,0 +1,21 @@
1[arm]
2SYSTEM_ONLY = NO
3USER_ONLY = NO
4
5[fs]
6FORCESTART = NO
7
8[nat]
9ENABLE_UPNP = NO
10BEHIND_NAT = YES
11
12[transport-tcp]
13PORT = $GNUNET_PORT
14ADVERTISED_PORT = $GNUNET_PORT
15
16[transport-udp]
17PORT = $GNUNET_PORT
18BROADCAST = YES
19
20[cadet]
21TESTING_IGNORE_KEYS = ACCEPT_FROM;