updated README
All checks were successful
BlockStorage/repertory_mac/pipeline/head This commit looks good
BlockStorage/repertory/pipeline/head This commit looks good

This commit is contained in:
2025-08-12 19:32:23 -05:00
parent d06b24674f
commit 9c8f045db8

749
README.md
View File

@@ -1,149 +1,307 @@
# Repertory # Repertory
Repertory allows you to mount S3 and Sia via FUSE on Linux/macOS or via WinFSP Repertory allows you to mount **S3** and **Sia** storage as local drives using:
on Windows. - **FUSE** (Linux/macOS)
- **WinFSP** (Windows)
## Contents It supports:
- Local mounts
- Remote encrypted mounts between systems
- Optional file name and data encryption using `XChaCha20-Poly1305`
1. [Details and Features](#details-and-features) ---
2. [Minimum Requirements](#minimum-requirements)
1. [Supported Operating Systems](#supported-operating-systems)
3. [GUI](#gui)
4. [Usage](#usage)
1. [Important Options](#important-options)
2. [Sia](#sia)
* [Sia Initial Configuration](#sia-initial-configuration)
* [Sia Mounting](#sia-mounting)
* [Sia Configuration File](#sia-configuration-file)
3. [S3](#s3)
* [S3 Initial Configuration](#s3-initial-configuration)
* [S3 Mounting](#s3-mounting)
* [S3 Configuration File](#s3-configuration-file)
5. [Data Directories](#data-directories)
1. [Linux Directories](#linux-directories)
2. [Windows Directories](#windows-directories)
6. [Remote Mounting](#remote-mounting)
1. [Server Setup](#server-setup)
* [Remote Mount Configuration File Section](#remote-mount-configuration-file-section)
2. [Client Setup](#client-setup)
* [Client Remote Mounting](#client-remote-mounting)
* [Remote Mount Configuration File](#remote-mount-configuration-file)
7. [Compiling](#compiling)
1. [Linux Compilation](#linux-compilation)
2. [Windows Setup](#windows-compilation)
8. [Credits](#credits)
9. [Developer Public Key](#developer-public-key)
10. [Consult the Wiki for additional information](https://git.fifthgrid.com/BlockStorage/repertory/wiki)
## Details and Features ## 📖 Contents
* Optimized for [Plex Media Server](https://www.plex.tv/) 1. [Quick Start (Sia Example)](#-quick-start-sia-example)
* Remote mounting of `repertory` instances between Linux, macOS, and/or Windows 2. [Details & Features](#-details-and-features)
* Securely share your mounts over TCP/IP via `XChaCha20-Poly1305` with other systems on your network or over the internet. 3. [Minimum Requirements](#-minimum-requirements)
* Cross-platform support (Linux, macOS, and Windows) - [Supported Operating Systems](#supported-operating-systems)
* Optionally encrypt file names and file data via `XChaCha20-Poly1305` in S3 mounts 4. [Data Directories](#-data-directories)
5. [GUI](#-gui)
6. [Usage](#-usage)
- [Important Options](#important-options)
- [Unmounting](#unmounting)
7. [Sia Setup](#-sia)
- [Sia Initial Configuration](#sia-initial-configuration)
- [Sia Mounting](#sia-mounting)
- [Sia Configuration File](#sia-configuration-file)
8. [S3 Setup](#-s3)
- [S3 Initial Configuration](#s3-initial-configuration)
- [S3 Mounting](#s3-mounting)
- [S3 Configuration File](#s3-configuration-file)
9. [Remote Mounting](#-remote-mounting)
- [Server Setup](#server-setup)
- [Client Setup](#client-setup)
- [Remote Mount Configuration File](#remote-mount-configuration-file)
10. [Compiling from Source](#-compiling)
- [Linux Compilation](#linux-compilation)
- [macOS Compilation](#macos-compilation)
- [Windows Compilation](#windows-compilation)
11. [Credits](#-credits)
12. [Developer Public Key](#-developer-public-key)
13. [Consult the Wiki for additional information](https://git.fifthgrid.com/BlockStorage/repertory/wiki)
## Minimum Requirements ---
* [Sia renterd](https://github.com/SiaFoundation/renterd/releases) v2.0.0+ for Sia support ## 🚀 Quick Start (Sia Example)
* Linux requires `fusermount3`; otherwise, `repertory` must be manually compiled with `libfuse2` support
* macOS requires the following dependencies to be installed: > 💡 Want to mount S3 instead?
* [macFUSE 4.10-2](https://github.com/macfuse/macfuse/releases/download/macfuse-4.10.2/macfuse-4.10.2.dmg) > Skip ahead to [S3 Setup](#-s3) — the process is almost identical.
* Windows requires the following dependencies to be installed:
* [WinFSP 2025](https://github.com/winfsp/winfsp/releases/download/v2.1/winfsp-2.1.25156.msi) This example mounts a Sia bucket from a running [renterd](https://github.com/SiaFoundation/renterd) instance.
---
### 1. Install dependencies
**Linux**
```bash
sudo apt install fuse3 # Debian/Ubuntu
# or
sudo dnf install fuse3 # Fedora
```
**macOS**
- Install [macFUSE 4.10.2](https://github.com/macfuse/macfuse/releases/download/macfuse-4.10.2/macfuse-4.10.2.dmg)
**Windows**
- Install [WinFSP 2025](https://github.com/winfsp/winfsp/releases/download/v2.1/winfsp-2.1.25156.msi)
---
### 2. Configure
Replace placeholders with your values:
```bash
repertory --name mybucket -set HostConfig.ApiPassword "<renterd api password>"
repertory --name mybucket -set SiaConfig.Bucket "<bucket name>"
```
Optional:
```bash
# If renterd is not running locally
repertory --name mybucket -set HostConfig.HostNameOrIp "<hostname or IP>"
# If renterd uses a non-default port (default 9980)
repertory --name mybucket -set HostConfig.ApiPort <port>
```
---
### 3. Mount
**Linux**
```bash
repertory --name mybucket /mnt/mybucket
```
**macOS**
```bash
repertory --name mybucket /Volumes/mybucket
```
**Windows**
```powershell
repertory --name mybucket t:
```
---
### 4. Unmount
**Linux**
```bash
fusermount3 -u /mnt/mybucket
```
**macOS**
```bash
diskutil unmount /Volumes/mybucket
```
**Windows**
```powershell
net use t: /delete
```
---
## ✨ Details and Features
- **Optimized for [Plex Media Server](https://www.plex.tv/).**
- Remote mounting of `repertory` instances between Linux, macOS, and/or Windows.
- Securely share your mounts over TCP/IP via `XChaCha20-Poly1305` with other systems on your network or over the internet.
- Cross-platform support (Linux, macOS, and Windows).
- Optionally encrypt file names and file data via `XChaCha20-Poly1305` in S3 mounts.
---
## 📋 Minimum Requirements
- **Sia:** [renterd](https://github.com/SiaFoundation/renterd/releases) v2.0.0+ for Sia support
- **Linux:** requires `fusermount3`; otherwise, `repertory` must be manually compiled with `libfuse2` support
- **macOS:** requires:
- [macFUSE 4.10.2](https://github.com/macfuse/macfuse/releases/download/macfuse-4.10.2/macfuse-4.10.2.dmg)
- **Windows:** requires:
- [WinFSP 2025](https://github.com/winfsp/winfsp/releases/download/v2.1/winfsp-2.1.25156.msi)
### Supported Operating Systems ### Supported Operating Systems
Only 64-bit operating systems are supported Only **64-bit operating systems** are supported:
* Linux `arm64/aarch64` - Linux `arm64/aarch64`
* Linux `x86-64` - Linux `x86_64`
* macOS `arm64/aarch64` - macOS `arm64/aarch64`
* macOS `x86-64` - macOS `x86_64`
* Windows `x86-64` 10, 11 - Windows `x86_64` 10, 11
## GUI ---
As of `v2.0.6-release`, mounts can be managed using the `Repertory Management Portal`. ## 📂 Data Directories
To launch the portal, execute the following command:
* `repertory -ui` **Linux**
* The default username is `repertory` ```
* The default password is `repertory` ~/.local/repertory2/s3
~/.local/repertory2/sia
```
After first launch, `ui.json` will be created in the appropriate data directory. **Windows**
See [Data Directories](#data-directories). ```
You should modify this file directly or use the portal to change the default %LOCALAPPDATA%\repertory2\s3
username and password. %LOCALAPPDATA%\repertory2\sia
```
**IMPORTANT:**
It is highly recommended to **exclude** these folders from any anti-virus/anti-malware applications as severe performance issues may arise. Excluding the mounted drive letter is also highly recommended.
### Screenshot ---
## 🖥 GUI
As of `v2.0.6-release`, mounts can be managed using the **Repertory Management Portal**.
Launch the portal:
```bash
repertory -ui
```
- Default username: `repertory`
- Default password: `repertory`
After first launch, `ui.json` will be created in the appropriate data directory (see [Data Directories](#-data-directories)). Modify this file directly or use the portal to change the default credentials.
**Screenshot**
<a href="https://ibb.co/fVyJqnbF"><img src="https://i.ibb.co/fVyJqnbF/repertory-portal.png" alt="repertory-portal" border="0"></a> <a href="https://ibb.co/fVyJqnbF"><img src="https://i.ibb.co/fVyJqnbF/repertory-portal.png" alt="repertory-portal" border="0"></a>
## Usage ---
## 🛠 Usage
### Important Options ### Important Options
* `--help` - `--help`
* Display all mount utility options Display all mount utility options.
* `-f` - `-f`
* Keep process in foreground on Linux. Keep process in foreground on Linux.
* `--name, -na [name]` - `--name, -na [name]`
* Identifies a unique configuration name to support multiple mounts. Identifies a unique configuration name to support multiple mounts.
* The `--name` option can be set to any valid value allowed as a file name for your filesystem. The `--name` option can be set to any valid value allowed as a file name for your filesystem.
* The `--name` option is required **The `--name` option is required.**
* `-dc` - `-dc`
* Display mount configuration Display mount configuration.
* For Sia, the `--name` option is required For Sia, the `--name` option is required.
* For S3, the `-s3` and `--name` options are required For S3, the `-s3` and `--name` options are required.
### Sia ### Unmounting
#### Sia Initial Configuration **Linux**
```bash
fusermount3 -u /path/to/mountpoint
```
* Required steps: **macOS**
* Set the appropriate bucket name and `renterd` API password in `repertory` configuration: ```bash
* `repertory --name '<my config name>' -set HostConfig.ApiPassword '<my password>'` diskutil unmount /Volumes/yourmount
* `repertory --name '<my config name>' -set SiaConfig.Bucket '<my bucket name>'` ```
* Optional steps: **Windows**
* Set a user name used during `renterd` basic authentication: ```powershell
* `repertory -set HostConfig.ApiUser '<my user>'` net use <driveletter>: /delete
* `repertory --name '<my config name>' -set HostConfig.ApiUser '<my user>'` ```
* Set a custom agent string (default `Sia-Agent`):
* `repertory -set HostConfig.AgentString '<my agent>'`
* `repertory --name '<my config name>' -set HostConfig.AgentString '<my agent>'`
* Set the host name or IP of the `renterd` instance (default `localhost`):
* `repertory -set HostConfig.HostNameOrIp '<my host name>'`
* `repertory --name '<my config name>' -set HostConfig.HostNameOrIp '<my host name>'`
* Set the `renterd` API port (default `9980`):
* `repertory -set HostConfig.ApiPort 9981`
* `repertory --name '<my config name>' -set HostConfig.ApiPort 9981`
* To verify/view all configuration options: ---
* `repertory -dc`
* `repertory --name '<my config name>' -dc`
* Example:
* `repertory --name my_bucket -dc`
#### Sia Mounting ## 🔒 Security Best Practices
* Linux: When enabling **encryption tokens** for S3 or remote mounts:
* `repertory /mnt/location` - Use a **long, random string**.
* `repertory --name '<my config name>' /mnt/location` - Store it **offline** (password manager and an offline backup).
* Example: - Losing it means **permanent data loss**.
* `repertory --name my_bucket /mnt/location`
* Windows: ---
* `repertory t:`
* `repertory --name '<my config name>' t:`
* Example:
* `repertory --name my_bucket t:`
#### Sia Configuration File ## 🗄 Sia
### Sia Initial Configuration
**Required steps:**
- Set the appropriate bucket name and `renterd` API password in `repertory` configuration:
```bash
repertory --name '<my config name>' -set HostConfig.ApiPassword '<my password>'
repertory --name '<my config name>' -set SiaConfig.Bucket '<my bucket name>'
```
**Optional steps:**
- Set a user name used during `renterd` basic authentication:
```bash
repertory --name '<my config name>' -set HostConfig.ApiUser '<my user>'
```
- Set a custom agent string (default `Sia-Agent`):
```bash
repertory --name '<my config name>' -set HostConfig.AgentString '<my agent>'
```
- Set the host name or IP of the `renterd` instance (default `localhost`):
```bash
repertory --name '<my config name>' -set HostConfig.HostNameOrIp '<my host name>'
```
- Set the `renterd` API port (default `9980`):
```bash
repertory --name '<my config name>' -set HostConfig.ApiPort 9981
```
**Verify/view all configuration options:**
```bash
repertory --name '<my config name>' -dc
# Example:
repertory --name my_bucket -dc
```
### Sia Mounting
**Linux**
```bash
repertory --name '<my config name>' /mnt/location
# Example:
repertory --name my_bucket /mnt/location
```
**macOS**
```bash
repertory --name '<my config name>' /Volumes/mybucket
# Example:
repertory --name my_bucket /Volumes/mybucket
```
**Windows**
```powershell
repertory --name '<my config name>' t:
# Example:
repertory --name my_bucket t:
```
### Sia Configuration File
```json ```json
{ {
@@ -190,48 +348,77 @@ username and password.
} }
``` ```
### S3 ---
#### S3 Initial Configuration ## 🗄 S3
* Required steps: ### S3 Initial Configuration
* Set the appropriate base URL:
* `repertory -s3 --name '<my config name>' -set S3Config.URL '<my url>'`
* Example:
* `repertory -s3 --name minio -set S3Config.URL 'http://localhost:9000'`
* Set the appropriate bucket name:
* `repertory -s3 --name '<my config name>' -set S3Config.Bucket '<my bucket name>'`
* Set the appropriate access key:
* `repertory -s3 --name '<my config name>' -set S3Config.AccessKey '<my access key>'`
* Set the appropriate secret key:
* `repertory -s3 --name '<my config name>' -set S3Config.SecretKey '<my secret key>'`
* For Sia and most local S3 gateway instances, enable path style URL's:
* `repertory -s3 --name '<my config name>' -set S3Config.UsePathStyle true`
* Optional steps: **Required steps:**
* Set an appropriate region. Default is set to `any`: - Set the appropriate base URL:
* `repertory -s3 --name '<my config name>' -set S3Config.Region '<my region>'` ```bash
* Enable encrypted file names and file data. Set a strong, random encryption token and be sure to store it in a secure backup location: repertory -s3 --name '<my config name>' -set S3Config.URL '<my url>'
* `repertory -s3 --name '<my config name>' -set S3Config.EncryptionToken '<my strong password>'` # Example:
repertory -s3 --name minio -set S3Config.URL 'http://localhost:9000'
```
- Set the appropriate bucket name:
```bash
repertory -s3 --name '<my config name>' -set S3Config.Bucket '<my bucket name>'
```
- Set the appropriate access key:
```bash
repertory -s3 --name '<my config name>' -set S3Config.AccessKey '<my access key>'
```
- Set the appropriate secret key:
```bash
repertory -s3 --name '<my config name>' -set S3Config.SecretKey '<my secret key>'
```
- For Sia and most local S3 gateway instances, enable path style URLs:
```bash
repertory -s3 --name '<my config name>' -set S3Config.UsePathStyle true
```
* To verify/view all configuration options: **Optional steps:**
* `repertory -s3 --name '<my config name>' -dc` - Set an appropriate region. Default is `any`:
* Example: ```bash
* `repertory -s3 --name minio -dc` repertory -s3 --name '<my config name>' -set S3Config.Region '<my region>'
```
- Enable encrypted file names and file data. Set a strong, random encryption token and store it securely:
```bash
repertory -s3 --name '<my config name>' -set S3Config.EncryptionToken '<my strong password>'
```
#### S3 Mounting **Verify/view all configuration options:**
```bash
repertory -s3 --name '<my config name>' -dc
# Example:
repertory -s3 --name minio -dc
```
* Linux: ### S3 Mounting
* `repertory -s3 --name '<my config name>' /mnt/location`
* Example:
* `repertory -s3 --name minio /mnt/location`
* Windows: **Linux**
* `repertory -s3 --name '<my config name>' t:` ```bash
* Example: repertory -s3 --name '<my config name>' /mnt/location
* `repertory -s3 --name minio t:` # Example:
repertory -s3 --name minio /mnt/location
```
#### S3 Configuration File **macOS**
```bash
repertory -s3 --name '<my config name>' /Volumes/minio
# Example:
repertory -s3 --name minio /Volumes/minio
```
**Windows**
```powershell
repertory -s3 --name '<my config name>' t:
# Example:
repertory -s3 --name minio t:
```
### S3 Configuration File
```json ```json
{ {
@@ -276,100 +463,103 @@ username and password.
} }
``` ```
### Data Directories ---
#### Linux Directories ## 🌐 Remote Mounting
* `~/.local/repertory2/s3` `repertory` allows local mounts to be shared with other computers on your network or over the internet. This option is referred to as **remote mounting**.
* `~/.local/repertory2/sia`
#### Windows Directories
* `%LOCALAPPDATA%\repertory2\s3`
* `%LOCALAPPDATA%\repertory2\sia`
* Examples:
* `C:\Users\Tom\AppData\Local\repertory2\s3`
* `C:\Users\Tom\AppData\Local\repertory2\sia`
* IMPORTANT:
* It is highly recommended to exclude this folder from any anti-virus/anti-malware applications as severe performance issues may arise.
* Excluding the mounted drive letter is also highly recommended.
## Remote Mounting
`repertory` allows local mounts to be shared with other computers on your network
or over the internet. This option is referred to as remote mounting.
### Server Setup ### Server Setup
The following steps must be performed on the mount you wish to share with The following steps must be performed on the mount you wish to share with other systems. Changes to configuration will not take effect while a mount is active, so it is recommended to unmount beforehand.
other systems. Changes to configuration will not take affect while a mount is
active, so it is recommended to unmount beforehand.
* Required steps: **Required steps:**
* Enable remote mount: - Enable remote mount:
* Sia - **Sia**
* `repertory -set RemoteMount.Enable true` ```bash
* `repertory --name '<my config name>' -set RemoteMount.Enable true` repertory -set RemoteMount.Enable true
* S3: repertory --name '<my config name>' -set RemoteMount.Enable true
* `repertory -s3 --name '<my config name>' -set RemoteMount.Enable true` ```
* Set a secure encryption token: - **S3**
* Sia: ```bash
* `repertory -set RemoteMount.EncryptionToken '<my secure password>'` repertory -s3 --name '<my config name>' -set RemoteMount.Enable true
* `repertory --name '<my config name>' -set RemoteMount.EncryptionToken '<my secure password>'` ```
* S3: - Set a secure encryption token:
* `repertory -s3 --name '<my config name>' -set RemoteMount.EncryptionToken '<my secure password>'` - **Sia**
```bash
repertory -set RemoteMount.EncryptionToken '<my secure password>'
repertory --name '<my config name>' -set RemoteMount.EncryptionToken '<my secure password>'
```
- **S3**
```bash
repertory -s3 --name '<my config name>' -set RemoteMount.EncryptionToken '<my secure password>'
```
* Optional steps: **Optional steps:**
* Change the port clients will use to connect to your mount: - Change the port clients will use to connect to your mount:
* Sia: - **Sia**
* `repertory -set RemoteMount.ApiPort 20000` ```bash
* `repertory --name '<my config name>' -set RemoteMount.ApiPort 20000` repertory -set RemoteMount.ApiPort 20000
* S3: repertory --name '<my config name>' -set RemoteMount.ApiPort 20000
* `repertory -s3 --name '<my config name>' -set RemoteMount.ApiPort 20000` ```
- **S3**
```bash
repertory -s3 --name '<my config name>' -set RemoteMount.ApiPort 20000
```
* IMPORTANT: **IMPORTANT:**
* Be sure to configure your firewall to allow incoming TCP connections on the port configured in `RemoteMount.ApiPort`. Be sure to configure your firewall to allow incoming TCP connections on the port configured in `RemoteMount.ApiPort`.
#### Remote Mount Configuration File Section #### Remote Mount Configuration File Section
```json ```json
{ {
...
"RemoteMount": { "RemoteMount": {
"ApiPort": 20000, "ApiPort": 20000,
"ClientPoolSize": 20, "ClientPoolSize": 20,
"Enable": true, "Enable": true,
"EncryptionToken": "<my secure password>" "EncryptionToken": "<my secure password>"
}, }
...
} }
``` ```
### Client Setup ### Client Setup
Client configuration is provider agnostic, so there's no need to specify `-s3` Client configuration is provider agnostic, so there's no need to specify `-s3` for S3 providers.
for S3 providers.
* Required steps: **Required steps:**
* Set the encryption token to the same value configured during server setup: - Set the encryption token to the same value configured during server setup:
* `repertory -rm <host name or IP>:<port> -set RemoteConfig.EncryptionToken '<my secure password>'` ```bash
* Replace `<host name or IP>` with the host name or IP of the server repertory -rm <host name or IP>:<port> -set RemoteConfig.EncryptionToken '<my secure password>'
* Replace `<port>` with the value of `RemoteMount.ApiPort` used in the server configuration # Replace <host name or IP> with the host name or IP of the server
* Example: # Replace <port> with the value of RemoteMount.ApiPort used in the server configuration
* `repertory -rm 192.168.1.10:20000 -set RemoteConfig.EncryptionToken '<my secure password>'` # Example:
* `repertory -rm my.host.com:20000 -set RemoteConfig.EncryptionToken '<my secure password>'` repertory -rm 192.168.1.10:20000 -set RemoteConfig.EncryptionToken '<my secure password>'
repertory -rm my.host.com:20000 -set RemoteConfig.EncryptionToken '<my secure password>'
```
#### Client Remote Mounting #### Client Remote Mounting
* Linux: **Linux**
* `repertory -rm <host name or IP>:<port> /mnt/location` ```bash
* Example: repertory -rm <host name or IP>:<port> /mnt/location
* `repertory -rm 192.168.1.10:20000 /mnt/location` # Example:
repertory -rm 192.168.1.10:20000 /mnt/location
```
* Windows: **macOS**
* `repertory -rm <host name or IP>:<port> t:` ```bash
* Example: repertory -rm <host name or IP>:<port> /Volumes/remotemount
* `repertory -rm 192.168.1.10:20000 t:` # Example:
repertory -rm 192.168.1.10:20000 /Volumes/remotemount
```
**Windows**
```powershell
repertory -rm <host name or IP>:<port> t:
# Example:
repertory -rm 192.168.1.10:20000 t:
```
#### Remote Mount Configuration File #### Remote Mount Configuration File
@@ -393,81 +583,96 @@ for S3 providers.
} }
``` ```
## Compiling ---
Successful compilation will result in all files required for execution to be placed ## 🧰 Compiling
in the `dist/` directory
Successful compilation will place all required files for execution in the `dist/` directory.
### Linux Compilation ### Linux Compilation
* Ensure `docker` is installed - Ensure `docker` is installed
* For `x86-64`: - For `x86_64`:
* RelWithDebInfo: `scripts/make_unix.sh x86_64` ```bash
* Release: `scripts/make_unix.sh x86_64 Release` scripts/make_unix.sh x86_64
* Debug: `scripts/make_unix.sh x86_64 Debug` scripts/make_unix.sh x86_64 Release
scripts/make_unix.sh x86_64 Debug
* For `aarch64`: ```
* RelWithDebInfo: `scripts/make_unix.sh aarch64` - For `aarch64`:
* Release: `scripts/make_unix.sh aarch64 Release` ```bash
* Debug: `scripts/make_unix.sh aarch64 Debug` scripts/make_unix.sh aarch64
scripts/make_unix.sh aarch64 Release
scripts/make_unix.sh aarch64 Debug
```
### macOS Compilation ### macOS Compilation
* Ensure `Xcode` and `CMake` are installed - Ensure `Xcode` and `CMake` are installed
* For `x86-64`: - For `x86_64`:
* RelWithDebInfo: `scripts/make_unix.sh x86_64` ```bash
* Release: `scripts/make_unix.sh x86_64 Release` scripts/make_unix.sh x86_64
* Debug: `scripts/make_unix.sh x86_64 Debug` scripts/make_unix.sh x86_64 Release
scripts/make_unix.sh x86_64 Debug
* For `aarch64`: ```
* RelWithDebInfo: `scripts/make_unix.sh aarch64` - For `aarch64`:
* Release: `scripts/make_unix.sh aarch64 Release` ```bash
* Debug: `scripts/make_unix.sh aarch64 Debug` scripts/make_unix.sh aarch64
scripts/make_unix.sh aarch64 Release
scripts/make_unix.sh aarch64 Debug
```
### Windows Compilation ### Windows Compilation
* OFFICIAL: Cross-compiling on Linux - **OFFICIAL: Cross-compiling on Linux**
* Ensure `docker` is installed - Ensure `docker` is installed
* RelWithDebInfo: `scripts/make_win32.sh x86_64` ```bash
* Release: `scripts/make_win32.sh x86_64 Release` scripts/make_win32.sh x86_64
* Debug: `scripts/make_win32.sh x86_64 Debug` scripts/make_win32.sh x86_64 Release
scripts/make_win32.sh x86_64 Debug
```
* UNOFFICIAL: Compiling on Windows - **UNOFFICIAL: Compiling on Windows**
* Ensure latest [MSYS2](https://www.msys2.org/) is installed - Ensure latest [MSYS2](https://www.msys2.org/) is installed
* RelWithDebInfo: `scripts\make_win32.cmd x86_64` ```powershell
* Release: `scripts\make_win32.cmd x86_64 Release` scripts\make_win32.cmd x86_64
* Debug: `scripts\make_win32.cmd x86_64 Debug` scripts\make_win32.cmd x86_64 Release
scripts\make_win32.cmd x86_64 Debug
```
## Credits ---
* [binutils](https://www.gnu.org/software/binutils/) ## 📜 Credits
* [boost c++ libraries](https://www.boost.org/)
* [cpp-httplib](https://github.com/yhirose/cpp-httplib)
* [curl](https://curl.haxx.se/)
* [docker](https://www.docker.com/)
* [Google Test](https://github.com/google/googletest)
* [ICU](https://icu.unicode.org/)
* [JSON for Modern C++](https://github.com/nlohmann/json)
* [libexpat](https://github.com/libexpat/libexpat)
* [libfuse](https://github.com/libfuse/libfuse)
* [libsodium](https://doc.libsodium.org/)
* [macFUSE](https://macfuse.github.io/)
* [mingw-w64](https://www.mingw-w64.org/)
* [MSYS2](https://www.msys2.org)
* [OpenSSL](https://www.openssl.org/)
* [pkg-config](https://www.freedesktop.org/wiki/Software/pkg-config/)
* [pugixml](https://pugixml.org/)
* [RocksDB](https://rocksdb.org)
* [ScPrime](https://scpri.me/)
* [Sia Decentralized Cloud Storage](https://sia.tech/)
* [spdlog](https://github.com/gabime/spdlog)
* [SQLite](https://www.sqlite.org)
* [stduuid](https://github.com/mariusbancila/stduuid)
* [Storj](https://www.storj.io/)
* [WinFSP - FUSE for Windows](https://github.com/billziss-gh/winfsp)
* [zlib](https://zlib.net/)
## Developer Public Key - [binutils](https://www.gnu.org/software/binutils/)
- [boost c++ libraries](https://www.boost.org/)
- [cpp-httplib](https://github.com/yhirose/cpp-httplib)
- [curl](https://curl.haxx.se/)
- [docker](https://www.docker.com/)
- [Google Test](https://github.com/google/googletest)
- [ICU](https://icu.unicode.org/)
- [JSON for Modern C++](https://github.com/nlohmann/json)
- [libexpat](https://github.com/libexpat/libexpat)
- [libfuse](https://github.com/libfuse/libfuse)
- [libsodium](https://doc.libsodium.org/)
- [macFUSE](https://macfuse.github.io/)
- [mingw-w64](https://www.mingw-w64.org/)
- [MSYS2](https://www.msys2.org)
- [OpenSSL](https://www.openssl.org/)
- [pkg-config](https://www.freedesktop.org/wiki/Software/pkg-config/)
- [pugixml](https://pugixml.org/)
- [RocksDB](https://rocksdb.org)
- [ScPrime](https://scpri.me/)
- [Sia Decentralized Cloud Storage](https://sia.tech/)
- [spdlog](https://github.com/gabime/spdlog)
- [SQLite](https://www.sqlite.org)
- [stduuid](https://github.com/mariusbancila/stduuid)
- [Storj](https://www.storj.io/)
- [WinFSP - FUSE for Windows](https://github.com/billziss-gh/winfsp)
- [zlib](https://zlib.net/)
---
## 🔑 Developer Public Key
```text ```text
-----BEGIN PUBLIC KEY----- -----BEGIN PUBLIC KEY-----