diff --git a/.gitignore b/.gitignore index 284453e775053..1b70fb7bcb660 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,5 @@ substrate/pwasm-libc/Cargo.lock demo/runtime/wasm/target/ **/._* .vscode -polkadot.* \ No newline at end of file +polkadot.* +.DS_Store diff --git a/README.adoc b/README.adoc index 458ddd955b793..401419df74fef 100644 --- a/README.adoc +++ b/README.adoc @@ -6,6 +6,7 @@ Implementation of a https://polkadot.network node in Rust. + == To play If you'd like to play with Polkadot, you'll need to install a client like this @@ -46,6 +47,7 @@ polkadot --dev You can muck around by cloning and building the http://github.com/paritytech/polka-ui and http://github.com/paritytech/polkadot-ui or just heading to https://polkadot.js.org/apps. + == Local Two-node Testnet If you want to see the multi-node consensus algorithm in action locally, then @@ -62,6 +64,7 @@ polkadot --chain=local --validator --key Bob -d /tmp/bob --port 30334 --bootnode Ensure you replace `ALICE_BOOTNODE_ID_HERE` with the node ID from the output of the first terminal. + == Hacking on Polkadot If you'd actually like hack on Polkadot, you can just grab the source code and @@ -74,7 +77,7 @@ rustup update nightly rustup target add wasm32-unknown-unknown --toolchain nightly rustup update stable cargo install --git https://github.com/alexcrichton/wasm-gc -sudo apt install cmake pkg-config libssl-dev +sudo apt install cmake pkg-config libssl-dev git ---- Then, grab the Polkadot source code: @@ -103,4 +106,91 @@ You can start a development chain with: [source, shell] cargo run -- --dev + +== Using Docker + +=== The easiest way + +The easiest/faster option is to use the latest image. + +Let´s first check the version we have. The first time you run this command, the polkadot docker image will be downloaded. This takes a bit of time and bandwidth, be patient: + +[source, shell] +docker run --rm -it chevdor/polkadot:0.2.0 ./version + +You can also pass any argument/flag that polkadot supports: + +[source, shell] +docker run --rm -it chevdor/polkadot:0.2.0 polkadot --name "PolkaDocker" + +Once you are done experimenting and picking the best node name :) you can start polkadot as daemon, exposes the polkadot ports and mount a volume that will keep your blockchain data locally: + +[source, shell] +docker run -d -p 30333:30333 -p 9933:9933 -v /my/local/folder:/data chevdor/polkadot:0.2.0 polkadot + + +=== Build your own image + +To get up and running with the smallest footprint on your system, you may use the Polkadot Docker image. +You can either build it yourself (it takes a while...): + +[source, shell] +---- +ccd docker +./build.sh +---- + +=== Reporting issues + +If you run into issues with polkadot when using docker, please run the following command +(replace the tag with the appropriate one if you do not use latest): + +[source, shell] +docker run --rm -it chevdor/polkadot:latest version + +This will show you the polkadot version as well as the git commit ref that was used to build your container. +Just paste that in the issue you create. + + +== Shell completion + +The Polkadot cli command supports shell auto-completion. For this to work, you will need to run the completion script matching you build and system. + +Assuming you built a release version using `cargo build --release` and use `bash` run the following: + +[source, shell] +source target/release/completion-scripts/polkadot.bash + +You can find completion scripts for: +- bash +- fish +- zsh +- elvish +- powershell + +To make this change persistent, you can proceed as follow: + +=== First install + +[source, shell] +---- +COMPL_DIR=$HOME/.completion +mkdir -p $COMPL_DIR +cp -f target/release/completion-scripts/polkadot.bash $COMPL_DIR/ +echo "source $COMPL_DIR/polkadot.bash" >> $HOME/.bash_profile +source $HOME/.bash_profile +---- + +=== Update + +When you build a new version of Polkadot, the following will ensure you auto-completion script matches the current binary: + +[source, shell] +---- +COMPL_DIR=$HOME/.completion +mkdir -p $COMPL_DIR +cp -f target/release/completion-scripts/polkadot.bash $COMPL_DIR/ +source $HOME/.bash_profile +---- + include::doc/packages.adoc[] diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000000000..40589c0ac5287 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,33 @@ +FROM phusion/baseimage:0.10.1 +LABEL maintainer "chevdor@gmail.com" + +ARG PROFILE=release + +RUN mkdir -p polkadot && \ + apt-get update && \ + apt-get upgrade -y && \ + apt-get install -y cmake pkg-config libssl-dev git && \ + apt-get clean && \ + mkdir -p /root/.local/share/Polkadot && \ + ln -s /root/.local/share/Polkadot /data + +RUN curl https://sh.rustup.rs -sSf | sh -s -- -y && \ + export PATH=$PATH:$HOME/.cargo/bin && \ + rustup update nightly && \ + rustup target add wasm32-unknown-unknown --toolchain nightly && \ + rustup update stable && \ + cargo install --git https://github.com/alexcrichton/wasm-gc && \ + git clone https://github.com/paritytech/polkadot.git && \ + cd polkadot && \ + ./build.sh && \ + cargo build --$PROFILE && \ + mv target/$PROFILE/polkadot /usr/local/bin && \ + cargo clean && \ + rm -rf /root/.cargo /root/.rustup /tmp/* + +COPY version /polkadot +WORKDIR /polkadot +EXPOSE 30333 9933 +VOLUME ["/data"] + +CMD ["/bin/sh", "polkadot"] diff --git a/docker/build.sh b/docker/build.sh new file mode 100755 index 0000000000000..fdbe8c3f8108c --- /dev/null +++ b/docker/build.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +set -e + +# Find the current version from Cargo.toml +VERSION=`grep "^version" ../Cargo.toml | egrep -o "([0-9\.]+)"` +GITUSER=chevdor +GITREPO=polkadot + +# Build the image +echo "Building ${GITREPO}:$VERSION docker image, hang on!" +time docker build --build-arg PROFILE=release -t ${GITUSER}/${GITREPO}:$VERSION . + +# Show the list of available images for this repo +echo "Image is ready" +docker images | grep ${GITREPO} + +echo -e "\nIf you just built the latest, you may want to update your tag:" +echo " $ docker tag ${GITUSER}/${GITREPO}:$VERSION ${GITUSER}/${GITREPO}:latest" diff --git a/docker/cleanup.sh b/docker/cleanup.sh new file mode 100755 index 0000000000000..b4de473a1b54f --- /dev/null +++ b/docker/cleanup.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +# This script helps reduce the size of the built image +# It removes data that is not required. + +export PATH=$PATH:$HOME/.cargo/bin + +cargo clean +rm -rf /root/.cargo /root/.rustup /tmp/* diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml new file mode 100644 index 0000000000000..b76d41da1d03a --- /dev/null +++ b/docker/docker-compose.yml @@ -0,0 +1,15 @@ +version: '3' +services: + polkadot: + build: + context: . + ports: + - "127.0.0.1:30333:30333/tcp" + - "127.0.0.1:9933:9933/tcp" + image: chevdor/polkadot:latest + volumes: + - "polkadot-data:/data" + command: polkadot + +volumes: + polkadot-data: diff --git a/docker/readme-docker.adoc b/docker/readme-docker.adoc new file mode 100644 index 0000000000000..bbaceacd7f5c6 --- /dev/null +++ b/docker/readme-docker.adoc @@ -0,0 +1,16 @@ + +== Polkadot Docker + +=== Start a Polkadot docker container + +Run the following command + + docker run -d chevdor/polkadot:latest polkadot + +=== Building the image + +To build your own image from the source, you can run the following command: + + ./build.sh + +NOTE: Building the image takes a while. Count at least 30min on a good machine. diff --git a/docker/version b/docker/version new file mode 100755 index 0000000000000..047da3302ab95 --- /dev/null +++ b/docker/version @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +# This script show the polkadot version and commit ref that was +# used to build the image. +# If you report an issue, call this script to get all details. +# This script will no longer be required once the polkadot cli +# can report its commit ref. + +echo "-----------------------------------------" +printf "Polkadot Docker Container: " +polkadot --version +printf " " +git rev-parse HEAD +echo "-----------------------------------------"