mirror of
https://github.com/serai-dex/serai.git
synced 2025-12-09 12:49:23 +00:00
88 lines
2.4 KiB
Rust
88 lines
2.4 KiB
Rust
|
|
use std::{path::Path};
|
||
|
|
|
||
|
|
use crate::{Network, Os, mimalloc, write_dockerfile};
|
||
|
|
|
||
|
|
fn monero_internal(
|
||
|
|
network: Network,
|
||
|
|
os: Os,
|
||
|
|
orchestration_path: &Path,
|
||
|
|
folder: &str,
|
||
|
|
monero_binary: &str,
|
||
|
|
ports: &str,
|
||
|
|
) {
|
||
|
|
const MONERO_VERSION: &str = "0.18.3.1";
|
||
|
|
|
||
|
|
let arch = match std::env::consts::ARCH {
|
||
|
|
// We probably would run this without issues yet it's not worth needing to provide support for
|
||
|
|
"x86" | "arm" => panic!("unsupported architecture, please download a 64-bit OS"),
|
||
|
|
"x86_64" => "x64",
|
||
|
|
"aarch64" => "armv8",
|
||
|
|
_ => panic!("unsupported architecture"),
|
||
|
|
};
|
||
|
|
|
||
|
|
#[rustfmt::skip]
|
||
|
|
let download_monero = format!(r#"
|
||
|
|
FROM alpine:latest as monero
|
||
|
|
|
||
|
|
RUN apk --no-cache add gnupg
|
||
|
|
|
||
|
|
# Download Monero
|
||
|
|
RUN wget https://downloads.getmonero.org/cli/monero-linux-{arch}-v{MONERO_VERSION}.tar.bz2
|
||
|
|
|
||
|
|
# Verify Binary -- fingerprint from https://github.com/monero-project/monero-site/issues/1949
|
||
|
|
ADD orchestration/{}/coins/monero/hashes-v{MONERO_VERSION}.txt .
|
||
|
|
RUN gpg --keyserver hkp://keyserver.ubuntu.com:80 --keyserver-options no-self-sigs-only --receive-keys 81AC591FE9C4B65C5806AFC3F0AF4D462A0BDF92 && \
|
||
|
|
gpg --verify hashes-v{MONERO_VERSION}.txt && \
|
||
|
|
grep "$(sha256sum monero-linux-{arch}-v{MONERO_VERSION}.tar.bz2 | cut -c 1-64)" hashes-v{MONERO_VERSION}.txt
|
||
|
|
|
||
|
|
# Extract it
|
||
|
|
RUN tar -xvjf monero-linux-{arch}-v{MONERO_VERSION}.tar.bz2 --strip-components=1
|
||
|
|
"#,
|
||
|
|
network.label(),
|
||
|
|
);
|
||
|
|
|
||
|
|
let setup = mimalloc(os).to_string() + &download_monero;
|
||
|
|
|
||
|
|
let run_monero = format!(
|
||
|
|
r#"
|
||
|
|
COPY --from=monero --chown=monero {monero_binary} /bin
|
||
|
|
|
||
|
|
EXPOSE {ports}
|
||
|
|
|
||
|
|
ADD /orchestration/{}/coins/{folder}/run.sh /
|
||
|
|
CMD ["/run.sh"]
|
||
|
|
"#,
|
||
|
|
network.label(),
|
||
|
|
);
|
||
|
|
|
||
|
|
let run = crate::os(
|
||
|
|
os,
|
||
|
|
&("RUN mkdir /volume && chown monero /volume\r\n".to_string() +
|
||
|
|
if os == Os::Alpine { "RUN apk --no-cache add gcompat" } else { "" }),
|
||
|
|
"monero",
|
||
|
|
) + &run_monero;
|
||
|
|
let res = setup + &run;
|
||
|
|
|
||
|
|
let mut monero_path = orchestration_path.to_path_buf();
|
||
|
|
monero_path.push("coins");
|
||
|
|
monero_path.push(folder);
|
||
|
|
monero_path.push("Dockerfile");
|
||
|
|
|
||
|
|
write_dockerfile(monero_path, &res);
|
||
|
|
}
|
||
|
|
|
||
|
|
pub fn monero(orchestration_path: &Path, network: Network) {
|
||
|
|
monero_internal(network, Os::Alpine, orchestration_path, "monero", "monerod", "18080 18081")
|
||
|
|
}
|
||
|
|
|
||
|
|
pub fn monero_wallet_rpc(orchestration_path: &Path) {
|
||
|
|
monero_internal(
|
||
|
|
Network::Dev,
|
||
|
|
Os::Debian,
|
||
|
|
orchestration_path,
|
||
|
|
"monero-wallet-rpc",
|
||
|
|
"monero-wallet-rpc",
|
||
|
|
"18082",
|
||
|
|
)
|
||
|
|
}
|