|
| 1 | +FROM ubuntu:24.04 |
| 2 | + |
| 3 | +# Install dependencies |
| 4 | +RUN apt-get update -qq --fix-missing |
| 5 | + |
| 6 | +RUN apt -y --no-install-recommends install \ |
| 7 | + automake build-essential pkg-config libffi-dev libgmp-dev libssl-dev libncurses-dev libsystemd-dev zlib1g-dev make \ |
| 8 | + g++ tmux git jq wget libncursesw5-dev libtool autoconf liblmdb-dev curl ca-certificates |
| 9 | + |
| 10 | +# Install ghcup |
| 11 | +ENV BOOTSTRAP_HASKELL_NONINTERACTIVE=1 |
| 12 | +RUN bash -c "curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh " |
| 13 | +#curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org > ghcup_install.sh |
| 14 | + |
| 15 | +# Add ghcup to PATH |
| 16 | +ENV PATH=${PATH}:/root/.local/bin |
| 17 | +ENV PATH=${PATH}:/root/.ghcup/bin |
| 18 | + |
| 19 | +RUN bash -c "ghcup upgrade" |
| 20 | + |
| 21 | +# Install cabal |
| 22 | +ENV CABAL_VERSION=3.8.1.0 |
| 23 | +RUN bash -c "ghcup install cabal $CABAL_VERSION" |
| 24 | +RUN bash -c "ghcup set cabal $CABAL_VERSION." |
| 25 | + |
| 26 | +# Install GHC |
| 27 | +ENV GHC_VERSION=8.10.7 |
| 28 | +RUN bash -c "ghcup install ghc $GHC_VERSION" |
| 29 | +RUN bash -c "ghcup set ghc $GHC_VERSION" |
| 30 | + |
| 31 | +ARG CARDANO_NODE_VERSION=8.7.3 |
| 32 | +RUN mkdir -p ~/src && cd ~/src |
| 33 | + |
| 34 | +#Install sodium |
| 35 | +RUN export IOHKNIX_VERSION=$(curl https://raw.githubusercontent.com/IntersectMBO/cardano-node/$CARDANO_NODE_VERSION/flake.lock | jq -r '.nodes.iohkNix.locked.rev') \ |
| 36 | + && echo "iohk-nix version: $IOHKNIX_VERSION" \ |
| 37 | + && export SODIUM_VERSION=$(curl https://raw.githubusercontent.com/input-output-hk/iohk-nix/$IOHKNIX_VERSION/flake.lock | jq -r '.nodes.sodium.original.rev') \ |
| 38 | + && echo "Using sodium version: $SODIUM_VERSION" \ |
| 39 | + && git clone https://github.com/intersectmbo/libsodium \ |
| 40 | + && cd libsodium \ |
| 41 | + && git checkout $SODIUM_VERSION \ |
| 42 | + && ./autogen.sh \ |
| 43 | + && ./configure \ |
| 44 | + && make \ |
| 45 | + && make check \ |
| 46 | + && make install \ |
| 47 | + && cd .. |
| 48 | + |
| 49 | +ENV LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH |
| 50 | +ENV PKG_CONFIG_PATH=/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH |
| 51 | + |
| 52 | +# Install libsodium |
| 53 | +RUN apt -y --no-install-recommends install libsodium-dev |
| 54 | + |
| 55 | +# Install secp256k1 |
| 56 | +RUN export IOHKNIX_VERSION=$(curl https://raw.githubusercontent.com/IntersectMBO/cardano-node/$CARDANO_NODE_VERSION/flake.lock | jq -r '.nodes.iohkNix.locked.rev') \ |
| 57 | + && echo "iohk-nix version: $IOHKNIX_VERSION" \ |
| 58 | + && export SECP256K1_VERSION=$(curl https://raw.githubusercontent.com/input-output-hk/iohk-nix/${IOHKNIX_VERSION}/flake.lock | jq -r '.nodes.secp256k1.original.ref') \ |
| 59 | + && echo "Using secp256k1 version:$SECP256K1_VERSION" \ |
| 60 | + && git clone --depth 1 --branch $SECP256K1_VERSION https://github.com/bitcoin-core/secp256k1 \ |
| 61 | + && cd secp256k1 \ |
| 62 | + && ./autogen.sh \ |
| 63 | + && ./configure --enable-module-schnorrsig --enable-experimental \ |
| 64 | + && make \ |
| 65 | + && make check \ |
| 66 | + && make install \ |
| 67 | + && cd .. |
| 68 | + |
| 69 | +# Install blst |
| 70 | +RUN export BLST_VERSION=$(curl https://raw.githubusercontent.com/input-output-hk/iohk-nix/master/flake.lock | jq -r '.nodes.blst.original.ref') \ |
| 71 | + && git clone --depth 1 --branch ${BLST_VERSION} https://github.com/supranational/blst \ |
| 72 | + && cd blst \ |
| 73 | + && ./build.sh \ |
| 74 | + && echo "prefix=/usr/local" >> libblst.pc \ |
| 75 | + && echo "exec_prefix=\${prefix}" >> libblst.pc \ |
| 76 | + && echo "libdir=\${exec_prefix}/lib" >> libblst.pc \ |
| 77 | + && echo "includedir=\${prefix}/include" >> libblst.pc \ |
| 78 | + && echo "" >> libblst.pc \ |
| 79 | + && echo "Name: libblst" >> libblst.pc \ |
| 80 | + && echo "Description: Multilingual BLS12-381 signature library" >> libblst.pc \ |
| 81 | + && echo "URL: https://github.com/supranational/blst" >> libblst.pc \ |
| 82 | + && echo "Version: ${BLST_VERSION#v}" >> libblst.pc \ |
| 83 | + && echo "Cflags: -I\${includedir}" >> libblst.pc \ |
| 84 | + && echo "Libs: -L\${libdir} -lblst" >> libblst.pc \ |
| 85 | + && cp libblst.pc /usr/local/lib/pkgconfig/ \ |
| 86 | + && cp bindings/blst_aux.h bindings/blst.h bindings/blst.hpp /usr/local/include/ \ |
| 87 | + && cp libblst.a /usr/local/lib \ |
| 88 | +# && chmod u=rw,go=r /usr/local/{lib/{libblst.a,pkgconfig/libblst.pc},include/{blst.{h,hpp},blst_aux.h}} \ |
| 89 | + && cd .. |
| 90 | + |
| 91 | +#Install node |
| 92 | +ENV NODE_VERSION=8.9.2 |
| 93 | + |
| 94 | +RUN git clone https://github.com/intersectmbo/cardano-node.git \ |
| 95 | + && cd cardano-node \ |
| 96 | +# && git fetch --all --recurse-submodules --tags \ |
| 97 | +# && git tag | sort -V \ |
| 98 | + && git checkout tags/$NODE_VERSION \ |
| 99 | + && echo "with-compiler: ghc-$GHC_VERSION" >> cabal.project.local \ |
| 100 | + && echo "" >> cabal.project.local \ |
| 101 | + && echo "package cardano-crypto-praos" >> cabal.project.local \ |
| 102 | + && echo " flags: -external-libsodium-vrf" >> cabal.project.local \ |
| 103 | + && echo "" >> cabal.project.local \ |
| 104 | + && echo "package trace-dispatcher" >> cabal.project.local \ |
| 105 | + && echo " ghc-options: -Wwarn" >> cabal.project.local \ |
| 106 | + && echo "" >> cabal.project.local \ |
| 107 | + && echo "package HsOpenSSL" >> cabal.project.local \ |
| 108 | + && echo " flags: -homebrew-openssl" >> cabal.project.local \ |
| 109 | + && echo "" >> cabal.project.local \ |
| 110 | + && mkdir -p /usr/local/opt/openssl \ |
| 111 | + && ln -s /opt/homebrew/opt/openssl@3/lib /usr/local/opt/openssl/lib \ |
| 112 | + && ln -s /opt/homebrew/opt/openssl@3/include /usr/local/opt/openssl/include \ |
| 113 | + && cd .. |
| 114 | + |
| 115 | +RUN bash -c "cabal update" |
| 116 | +RUN bash -c "cabal build all" |
| 117 | +RUN bash -c "cabal build cardano-cli" |
| 118 | + |
| 119 | +RUN kdir -p ~/.local/bin \ |
| 120 | + && cp -p "$(./scripts/bin-path.sh cardano-node)" ~/.local/bin/ \ |
| 121 | + && cp -p "$(./scripts/bin-path.sh cardano-cli)" ~/.local/bin/ |
| 122 | + |
| 123 | +RUN cardano-cli --version |
| 124 | + |
| 125 | +ARG CARDANO_NODE_SOCKET="./node-ipc" |
| 126 | +ARG CARDANO_NODE_DB="./node/db" |
| 127 | +#ARG CARDANO_CONFIG="./docker/${NETWORK}" |
| 128 | +ARG CARDANO_CONFIG="./docker/config/${NETWORK}" |
| 129 | + |
| 130 | +COPY ${CARDANO_NODE_SOCKET} /node/ipc |
| 131 | +COPY ${CARDANO_NODE_DB} /node/data/db |
| 132 | +COPY ${CARDANO_CONFIG} /node/config |
| 133 | + |
| 134 | +EXPOSE 3001 12788 12798 |
| 135 | + |
| 136 | +#ENTRYPOINT cardano-node run --database-path /data/db --host-addr 0.0.0.0 --port 3001 --socket-path /node/ipc/node.socket --topology /node/config/topology.json --config /node/config/config.json |
| 137 | +CMD ["/bin/sh", "-c", "bash"] |
| 138 | + |
| 139 | + |
| 140 | + |
0 commit comments