|
4 | 4 | # is released on GitHub. |
5 | 5 | # |
6 | 6 |
|
7 | | -FROM rust:1.75 |
| 7 | +FROM --platform=linux/amd64 rust:1.70.0 |
8 | 8 |
|
9 | 9 | ARG DEBIAN_FRONTEND=noninteractive |
10 | 10 |
|
11 | | -ARG SOLANA_CLI="1.14.7" |
12 | | -ARG ANCHOR_CLI="0.26.0" |
13 | | -ARG NODE_VERSION="v18.16.0" |
| 11 | +ARG SOLANA_CLI="1.16.27" |
| 12 | +ARG ANCHOR_CLI="0.29.0" |
| 13 | +ARG NODE_VERSION="20.18.x" |
14 | 14 |
|
15 | | -ENV HOME="/root" |
| 15 | +# Create a non-root user |
| 16 | +ARG USERNAME=vscode |
| 17 | +ARG USER_UID=1000 |
| 18 | +ARG USER_GID=$USER_UID |
| 19 | + |
| 20 | +RUN groupadd --gid $USER_GID $USERNAME \ |
| 21 | + && useradd --uid $USER_UID --gid $USER_GID -m $USERNAME \ |
| 22 | + && apt-get update \ |
| 23 | + && apt-get install -y sudo \ |
| 24 | + && echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \ |
| 25 | + && chmod 0440 /etc/sudoers.d/$USERNAME |
| 26 | + |
| 27 | +ENV HOME="/home/$USERNAME" |
16 | 28 | ENV PATH="${HOME}/.cargo/bin:${PATH}" |
17 | 29 | ENV PATH="${HOME}/.local/share/solana/install/active_release/bin:${PATH}" |
18 | | -ENV PATH="${HOME}/.nvm/versions/node/${NODE_VERSION}/bin:${PATH}" |
19 | 30 |
|
20 | 31 | # Install base utilities. |
21 | 32 | RUN mkdir -p /workdir && mkdir -p /tmp && \ |
22 | 33 | apt-get update -qq && apt-get upgrade -qq && apt-get install -qq \ |
23 | 34 | build-essential git curl wget jq pkg-config python3-pip \ |
24 | 35 | libssl-dev libudev-dev |
25 | 36 |
|
26 | | -RUN wget http://nz2.archive.ubuntu.com/ubuntu/pool/main/o/openssl/libssl1.1_1.1.1f-1ubuntu2_amd64.deb |
27 | | -RUN dpkg -i libssl1.1_1.1.1f-1ubuntu2_amd64.deb |
| 37 | +# libssl1.1 is not needed for newer versions |
28 | 38 |
|
29 | 39 | # Install rust. |
30 | 40 | RUN curl "https://sh.rustup.rs" -sfo rustup.sh && \ |
31 | 41 | sh rustup.sh -y && \ |
32 | 42 | rustup component add rustfmt clippy |
33 | 43 |
|
34 | 44 | # Install node / npm / yarn. |
35 | | -RUN curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.11/install.sh | bash |
36 | | -ENV NVM_DIR="${HOME}/.nvm" |
37 | | -RUN . $NVM_DIR/nvm.sh && \ |
38 | | - nvm install ${NODE_VERSION} && \ |
39 | | - nvm use ${NODE_VERSION} && \ |
40 | | - nvm alias default node && \ |
| 45 | +RUN apt-get install -y nodejs npm && \ |
41 | 46 | npm install -g yarn && \ |
42 | | - yarn add ts-mocha |
| 47 | + npm install -g ts-mocha && \ |
| 48 | + npm install -g typescript && \ |
| 49 | + npm install -g mocha |
43 | 50 |
|
44 | | -# Install Solana tools. |
45 | | -RUN sh -c "$(curl -sSfL https://release.solana.com/v${SOLANA_CLI}/install)" |
| 51 | +# Install Solana tools (x86_64 version). |
| 52 | +RUN curl -sSfL https://github.com/solana-labs/solana/releases/download/v${SOLANA_CLI}/solana-release-x86_64-unknown-linux-gnu.tar.bz2 | tar -xjC /tmp && \ |
| 53 | + mv /tmp/solana-release/bin/* /usr/local/bin/ && \ |
| 54 | + rm -rf /tmp/solana-release |
46 | 55 |
|
47 | 56 | # Install anchor. |
48 | | -RUN cargo install --git https://github.com/coral-xyz/anchor avm --locked --force |
49 | | -RUN avm install ${ANCHOR_CLI} && avm use ${ANCHOR_CLI} |
| 57 | +RUN cargo install --git https://github.com/coral-xyz/anchor --tag v${ANCHOR_CLI} anchor-cli --locked |
| 58 | + |
| 59 | +# Switch to the non-root user for the remaining setup |
| 60 | +USER $USERNAME |
50 | 61 |
|
51 | 62 | RUN solana-keygen new --no-bip39-passphrase |
52 | 63 |
|
| 64 | +# Set up Solana config for local development |
| 65 | +RUN solana config set --url localhost |
| 66 | + |
| 67 | +# Create necessary directories |
| 68 | +RUN mkdir -p $HOME/.config/solana |
| 69 | + |
53 | 70 | WORKDIR /workdir |
54 | | -#be sure to add `/root/.avm/bin` to your PATH to be able to run the installed binaries |
|
0 commit comments