diff options
author | dvn <git@dvn.me> | 2018-08-01 17:24:40 +0200 |
---|---|---|
committer | dvn <git@dvn.me> | 2018-08-01 17:24:40 +0200 |
commit | d538fb055b1ba63181c779c189a5f17e796a8b4b (patch) | |
tree | 51cc82dfb499eb355c3c9aac97e73dd2648df0aa /docker | |
parent | 3256190f26310f367ad336f90cad460401e8c1da (diff) | |
download | gnunet-d538fb055b1ba63181c779c189a5f17e796a8b4b.tar.gz gnunet-d538fb055b1ba63181c779c189a5f17e796a8b4b.zip |
docker: Add a docker quick-start directory
Diffstat (limited to 'docker')
-rw-r--r-- | docker/Dockerfile | 102 | ||||
-rw-r--r-- | docker/README.md | 130 | ||||
-rw-r--r-- | docker/docker-entrypoint.sh | 15 | ||||
-rw-r--r-- | docker/gnunet.conf | 21 |
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 @@ | |||
1 | FROM ubuntu:18.04 | ||
2 | |||
3 | ENV DEBIAN_FRONTEND noninteractive | ||
4 | |||
5 | # Install tools and dependencies | ||
6 | RUN 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 | ||
35 | ENV GNURL_GIT_URL https://git.taler.net/gnurl.git | ||
36 | ENV GNURL_GIT_BRANCH gnurl-7.57.0 | ||
37 | |||
38 | RUN 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 | ||
77 | ENV GNUNET_PREFIX /usr/local/gnunet | ||
78 | ENV CFLAGS '-g -Wall -O0' | ||
79 | |||
80 | COPY ../ /gnunet | ||
81 | |||
82 | RUN 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 | ||
95 | COPY gnunet.conf /etc/gnunet.conf | ||
96 | COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint | ||
97 | RUN chmod 755 /usr/local/bin/docker-entrypoint | ||
98 | |||
99 | ENV LOCAL_PORT_RANGE='40001 40200' | ||
100 | ENV PATH "$GNUNET_PREFIX/bin:/usr/local/bin:$PATH" | ||
101 | |||
102 | ENTRYPOINT ["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 | ||
2 | A 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 | ||
8 | This will take quite a while and will consume a bit of data. | ||
9 | |||
10 | ```bash | ||
11 | docker build -t gnunet . | ||
12 | ``` | ||
13 | |||
14 | ## Start it from the newly created gnunet image | ||
15 | Start 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 | |||
17 | Note 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 | ||
21 | docker 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 | ||
33 | docker 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 | |||
47 | This terminal will keep on printing to screen at the moment. So go on in a new terminal please. | ||
48 | |||
49 | Don't worry about warnings too much... | ||
50 | |||
51 | ## Check if you are connected | ||
52 | Open a new terminal and connect to the container we just started: | ||
53 | |||
54 | ```bash | ||
55 | docker exec -it gnunet1 gnunet-peerinfo -i | ||
56 | ``` | ||
57 | |||
58 | If 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 | ||
64 | export GPORT=2086 LPORT='40001-40200' GNAME=gnunet1 | ||
65 | docker 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 | ||
81 | export GPORT=2087 LPORT='40201-40400' GNAME=gnunet2 | ||
82 | docker 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 | ||
101 | I 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 | ||
117 | Publishing `/test.txt' done. | ||
118 | URI 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" | ||
125 | 100% [============================================================] | ||
126 | Downloading `out.file' done (0 b/s). | ||
127 | $ cat out.file | ||
128 | test | ||
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 | |||
3 | echo "${LOCAL_PORT_RANGE:-49152 65535}" > /proc/sys/net/ipv4/ip_local_port_range | ||
4 | sed -i 's/$GNUNET_PORT/'${GNUNET_PORT:-2086}'/g' /etc/gnunet.conf | ||
5 | |||
6 | if [[ $# -eq 0 ]]; then | ||
7 | exec gnunet-arm \ | ||
8 | --config=/etc/gnunet.conf \ | ||
9 | --start \ | ||
10 | --monitor | ||
11 | elif [[ -z $1 ]] || [[ ${1:0:1} == '-' ]]; then | ||
12 | exec gnunet-arm "$@" | ||
13 | else | ||
14 | exec "$@" | ||
15 | fi | ||
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] | ||
2 | SYSTEM_ONLY = NO | ||
3 | USER_ONLY = NO | ||
4 | |||
5 | [fs] | ||
6 | FORCESTART = NO | ||
7 | |||
8 | [nat] | ||
9 | ENABLE_UPNP = NO | ||
10 | BEHIND_NAT = YES | ||
11 | |||
12 | [transport-tcp] | ||
13 | PORT = $GNUNET_PORT | ||
14 | ADVERTISED_PORT = $GNUNET_PORT | ||
15 | |||
16 | [transport-udp] | ||
17 | PORT = $GNUNET_PORT | ||
18 | BROADCAST = YES | ||
19 | |||
20 | [cadet] | ||
21 | TESTING_IGNORE_KEYS = ACCEPT_FROM; | ||