| |
|
| |
The output must correspond to the above.
|
| |
|
| - |
## Installation
|
| + |
### Installation
|
| + |
|
| + |
To install, simply extract the files to a location in your `PATH`, for example:
|
| + |
|
| + |
$ tar -xvJf ARCHIVE.tar.xz --strip-components=1 -C ~/.radicle/
|
| + |
|
| + |
This will place binaries in `~/.radicle/bin` and manuals in `~/.radicle/man`,
|
| + |
and overwrite any existing Radicle binaries.
|
| + |
|
| + |
## `radicle-httpd`
|
| + |
|
| + |
<p id="httpd-release" class="loading">
|
| + |
<span class="release-loader"></span>
|
| + |
<span>
|
| + |
<h2 id="httpd-release-name">Latest release</h2>
|
| + |
<p id="httpd-release-info"><!-- Dynamic --></p>
|
| + |
</span>
|
| + |
</p>
|
| + |
|
| + |
<noscript>
|
| + |
<p>
|
| + |
Browse the latest release at
|
| + |
<a href="https://files.radicle.xyz/releases/radicle-httpd/latest">https://files.radicle.xyz/releases/radicle-httpd/latest</a>
|
| + |
</p>
|
| + |
</noscript>
|
| + |
|
| + |
<table class="hidden loading" id="httpd-releases">
|
| + |
<thead>
|
| + |
<th scope="col">OS</th>
|
| + |
<th scope="col" class="desktop">Arch</th>
|
| + |
<th scope="col">File</th>
|
| + |
<th scope="col">Signature</th>
|
| + |
<th scope="col">Checksum</th>
|
| + |
</thead>
|
| + |
<tr data-release-arch="x86_64" data-release-binary="unknown-linux-musl">
|
| + |
<th scope="row" rowspan="2">Linux</th>
|
| + |
<td class="release-arch desktop">Loading…</td>
|
| + |
<td>💾 <a class="release-url">Loading…</a></td>
|
| + |
<td><a class="release-sig">Loading…</a></td>
|
| + |
<td><a class="release-checksum">Loading…</a></td>
|
| + |
</tr>
|
| + |
<tr data-release-arch="aarch64" data-release-binary="unknown-linux-musl">
|
| + |
<td class="release-arch desktop">Loading…</td>
|
| + |
<td>💾 <a class="release-url">Loading…</a></td>
|
| + |
<td><a class="release-sig">Loading…</a></td>
|
| + |
<td><a class="release-checksum">Loading…</a></td>
|
| + |
</tr>
|
| + |
<tr data-release-arch="x86_64" data-release-binary="apple-darwin">
|
| + |
<th scope="row" rowspan="2">macOS</th>
|
| + |
<td class="release-arch desktop">Loading…</td>
|
| + |
<td>💾 <a class="release-url">Loading…</a></td>
|
| + |
<td><a class="release-sig">Loading…</a></td>
|
| + |
<td><a class="release-checksum">Loading…</a></td>
|
| + |
</tr>
|
| + |
<tr data-release-arch="aarch64" data-release-binary="apple-darwin">
|
| + |
<td class="release-arch desktop">Loading…</td>
|
| + |
<td>💾 <a class="release-url">Loading…</a></td>
|
| + |
<td><a class="release-sig">Loading…</a></td>
|
| + |
<td><a class="release-checksum">Loading…</a></td>
|
| + |
</tr>
|
| + |
</table>
|
| + |
|
| + |
### Download
|
| + |
|
| + |
You can download the appropriate tarball for your operating system with:
|
| + |
|
| + |
curl -O -L https://files.radicle.xyz/releases/radicle-httpd/latest/radicle-$TARGET.tar.xz
|
| + |
|
| + |
Replace `$TARGET` with the appropriate target for your system:
|
| + |
|
| + |
<table>
|
| + |
<thead>
|
| + |
<th scope="col">OS</th>
|
| + |
<th scope="col">Arch</th>
|
| + |
<th scope="col">Target</th>
|
| + |
</thead>
|
| + |
<tr data-release-arch="x86_64" data-release-binary="unknown-linux-musl">
|
| + |
<th scope="row" rowspan="2">Linux</th>
|
| + |
<td>x86_64</td>
|
| + |
<td>x86_64-unknown-linux-musl</td>
|
| + |
</tr>
|
| + |
<tr data-release-arch="aarch64" data-release-binary="unknown-linux-musl">
|
| + |
<td>aarch64 (ARM)</td>
|
| + |
<td>aarch64-unknown-linux-musl</td>
|
| + |
</tr>
|
| + |
<tr data-release-arch="x86_64" data-release-binary="apple-darwin">
|
| + |
<th scope="row" rowspan="2">macOS</th>
|
| + |
<td>x86_64</td>
|
| + |
<td>x86_64-apple-darwin</td>
|
| + |
</tr>
|
| + |
<tr data-release-arch="aarch64" data-release-binary="apple-darwin">
|
| + |
<td>aarch64 (ARM)</td>
|
| + |
<td>aarch64-apple-darwin</td>
|
| + |
</tr>
|
| + |
</table>
|
| + |
|
| + |
### Verification
|
| + |
|
| + |
Release tarballs are signed using the SSH public key with this fingerprint:
|
| + |
|
| + |
SHA256:mqjWN1YrPRDTcVTxB4IZPHyH+vXpjWSogi+3zezZ/rQ
|
| + |
|
| + |
After you've downloaded the archive (`ARCHIVE.tar.xz` in the examples below),
|
| + |
verify the signature using the `.sig` file and `ssh-keygen`. The output must
|
| + |
match exactly, including the key fingerprint:
|
| + |
|
| + |
$ ssh-keygen -Y check-novalidate -n file -s ARCHIVE.tar.xz.sig < ARCHIVE.tar.xz
|
| + |
Good "file" signature with ED25519 key SHA256:iTDjRHSIaoL8dpHbQ0mv+y0IQqPufGl2hQwk4TbXFlw
|
| + |
|
| + |
To verify the checksum, download the `.sha256` file, and run:
|
| + |
|
| + |
$ sha256sum -c ARCHIVE.tar.xz.sha256
|
| + |
ARCHIVE.tar.xz: OK
|
| + |
|
| + |
The output must correspond to the above.
|
| + |
|
| + |
### Installation
|
| |
|
| |
To install, simply extract the files to a location in your `PATH`, for example:
|
| |
|
| |
and overwrite any existing Radicle binaries.
|
| |
|
| |
<script>
|
| - |
const releases = document.getElementById("releases");
|
| - |
releases.classList.remove("hidden");
|
| - |
|
| - |
fetch("https://files.radicle.xyz/releases/latest/radicle.json")
|
| - |
.then(res => res.json())
|
| - |
.then(data => {
|
| - |
const version = data.version;
|
| - |
const commit = data.commit;
|
| - |
const release = document.getElementById("release");
|
| - |
const releaseName = document.getElementById("release-name");
|
| - |
const releaseInfo = document.getElementById("release-info");
|
| - |
|
| - |
document.querySelectorAll("#releases [data-release-binary]").forEach((row) => {
|
| - |
const arch = row.dataset.releaseArch;
|
| - |
const binary = row.dataset.releaseBinary;
|
| - |
const archive = `radicle-${version}-${arch}-${binary}.tar.xz`;
|
| - |
const url = `https://files.radicle.xyz/releases/latest/${archive}`;
|
| - |
|
| - |
row.querySelector(".release-arch").innerText = arch;
|
| - |
row.querySelector(".release-url").innerText = archive;
|
| - |
row.querySelector(".release-sig").innerText = ".sig";
|
| - |
row.querySelector(".release-checksum").innerText = ".sha256";
|
| - |
|
| - |
row.querySelector(".release-url").href = url;
|
| - |
row.querySelector(".release-sig").href = `${url}.sig`;
|
| - |
row.querySelector(".release-checksum").href = `${url}.sha256`;
|
| + |
function radrelease (id, base_url, json_file) {
|
| + |
const releases = document.getElementById(id);
|
| + |
releases.classList.remove("hidden");
|
| + |
|
| + |
fetch(`${base_url}/${json_file}`)
|
| + |
.then(res => res.json())
|
| + |
.then(data => {
|
| + |
const version = data.version;
|
| + |
const commit = data.commit;
|
| + |
const release = document.getElementById(id);
|
| + |
const releaseName = document.getElementById(`${id}-name`);
|
| + |
const releaseInfo = document.getElementById(`${id}-info`);
|
| + |
|
| + |
// it is very important that the releases table has an id
|
| + |
// ending with an added 's' at the end
|
| + |
document.querySelectorAll(`#${id}s [data-release-binary]`).forEach((row) => {
|
| + |
const arch = row.dataset.releaseArch;
|
| + |
const binary = row.dataset.releaseBinary;
|
| + |
const archive = `radicle-${version}-${arch}-${binary}.tar.xz`;
|
| + |
const url = `${base_url}/${archive}`;
|
| + |
|
| + |
row.querySelector(".release-arch").innerText = arch;
|
| + |
row.querySelector(".release-url").innerText = archive;
|
| + |
row.querySelector(".release-sig").innerText = ".sig";
|
| + |
row.querySelector(".release-checksum").innerText = ".sha256";
|
| + |
|
| + |
row.querySelector(".release-url").href = url;
|
| + |
row.querySelector(".release-sig").href = `${url}.sig`;
|
| + |
row.querySelector(".release-checksum").href = `${url}.sha256`;
|
| + |
});
|
| + |
|
| + |
release.classList.remove("loading");
|
| + |
releaseName.innerText = `Radicle ${version}`;
|
| + |
releaseInfo.innerHTML = `Built from commit <code>${commit}</code> on ${new Date(data.timestamp * 1000).toUTCString()}.`;
|
| |
});
|
| + |
}
|
| |
|
| - |
release.classList.remove("loading");
|
| - |
releaseName.innerText = `Radicle ${version}`;
|
| - |
releaseInfo.innerHTML = `Built from commit <code>${commit}</code> on ${new Date(data.timestamp * 1000).toUTCString()}.`;
|
| - |
});
|
| + |
radrelease("release", "https://files.radicle.xyz/releases/latest", "radicle.json");
|
| + |
radrelease("httpd-release", "https://files.radicle.xyz/releases/radicle-httpd/latest", "radicle-httpd.json");
|
| |
</script>
|