Init
This commit is contained in:
		
							
								
								
									
										66
									
								
								docker-demo.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								docker-demo.sh
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,66 @@ | ||||
| #!/bin/bash | ||||
|  | ||||
| # This script is meant to be run in a fresh Ubuntu VM. It demonstrates how to | ||||
| # assign Mycelium addresses to Docker containers, from a single Mycelium | ||||
| # instance running on the host. When the script completes, there will be a | ||||
| # container running with a Mycelium address assigned to it. | ||||
|  | ||||
| # Install prerequisites | ||||
| apt update && apt install -y wget iproute2 | ||||
|  | ||||
| # Install Docker | ||||
| wget -qO- get.docker.com | bash | ||||
|  | ||||
| # Install Mycelium | ||||
| MYCELIUM_VERSION="v0.5.6" | ||||
| wget https://github.com/threefoldtech/mycelium/releases/download/${MYCELIUM_VERSION}/mycelium-x86_64-unknown-linux-musl.tar.gz | ||||
| tar xf mycelium-x86_64-unknown-linux-musl.tar.gz | ||||
| cp mycelium /usr/local/bin/ | ||||
|  | ||||
| # Create Mycelium service | ||||
| cat > /etc/systemd/system/mycelium.service <<EOF | ||||
| [Unit] | ||||
| Description=Mycelium Network | ||||
| After=network.target | ||||
|  | ||||
| [Service] | ||||
| ExecStart=/usr/local/bin/mycelium --peers tcp://188.40.132.242:9651 tcp://136.243.47.186:9651 tcp://185.69.166.7:9651 tcp://65.21.231.58:9651 tcp://209.159.146.190:9651 | ||||
| Restart=always | ||||
|  | ||||
| [Install] | ||||
| WantedBy=multi-user.target | ||||
| EOF | ||||
|  | ||||
| systemctl daemon-reload | ||||
| systemctl enable --now mycelium | ||||
|  | ||||
| # Symlink the docker net namespaces so we can use `ip netns` with them | ||||
| ln -Ts /var/run/docker/netns  /var/run/netns | ||||
|  | ||||
| # Start container | ||||
| docker run -d --name mycelium-container ubuntu sleep infinity | ||||
|  | ||||
| # Get container PID and network namespace | ||||
| NETNS_ID=$(docker inspect -f '{{.NetworkSettings.SandboxKey}}' mycelium-container | awk -F'/' '{print $NF}') | ||||
|  | ||||
| # Create veth pair | ||||
| ip link add veth-host type veth peer name veth-container | ||||
| ip link set veth-host up | ||||
|  | ||||
| # Move veth-container to container's netns | ||||
| ip link set veth-container netns $NETNS_ID | ||||
| ip netns exec $NETNS_ID ip link set veth-container up | ||||
|  | ||||
| # Configure IPv6 addresses | ||||
| MYCELIUM_IP6=$(ip -6 a show dev mycelium | awk '/inet6.*global/ {print $2}' | cut -d'/' -f1 | cut -d: -f1-4) | ||||
| ip netns exec "$NETNS_ID" ip a add "${MYCELIUM_IP6}::1/64" dev veth-container | ||||
|  | ||||
| # Make sure forwarding is enabled for ipv6 | ||||
| sysctl -w net.ipv6.conf.all.forwarding=1 | ||||
|  | ||||
| # Add routes | ||||
| VETH_HOST_LL=$(ip -6 a show dev veth-host | awk '/inet6.*link/ {print $2}' | cut -d'/' -f1) | ||||
| ip netns exec "$NETNS_ID" ip r add 400::/7 via "$VETH_HOST_LL" dev veth-container | ||||
| ip r add "${MYCELIUM_IP6}::1/128" dev veth-host | ||||
|  | ||||
| echo "Setup complete. Container should now have Mycelium connectivity." | ||||
		Reference in New Issue
	
	Block a user