Available clients

While a lot of the core tools in qaul.net already exist, the user-facing applications are mostly still prototypes. Following is a list of supported clients/ platforms with instructions on how to build, and configure them.

Client nameDesktop platformsMobile platformVersion
qaul-hubdLinux, MacOS-0.1.0
qauldroid-Android0.1.0

Nix builds

While it is possible to install dependencies with platform specific tools (such as apt on Debian, etc), it is far more recommended to use nix to build qaul.net instead.

While the actual build isn't handled by nix (yet), it makes aquiring the dependencies a lot easier. Follow the instructions on how to install nix on your platform here

Fetch dependencies

The shell.nix in the qaul.net repo root defines dependencies. Fetch them into your environment by running nix-shell in the repo root (this might take a while).

Afterwards you can simple run cargo build --bin qaul-hubd --release to build a new hubd binary.

The output artefact will be written to ./target/release/qaul-hubd.

Lorri & direnv

You can enable automatic environment loading when you enter the qaul.net repository, by configuring lorri and direnv on your system.

 ❤ (uwu) ~/p/code> cd qaul.net
direnv: loading ~/projects/code/qaul.net/.envrc
direnv: export +AR +AR_FOR_TARGET +AS +AS_FOR_TARGET +CC
        // ... snip ...
 ❤ (uwu) ~/p/c/qaul.net> cargo build                           lorri-keep-env-hack-qaul
 ...

Building this manual

This manual is part of the main source repository and you can build it from the same nix environment as the rest of the project.

$ cd docs/users
$ mdbook build

If you want to enable live-reloading to work on this manual, you can also use the dev server.

$ mdbook serve

qaul-hubd

This is a multi purpose router and database daemon for qaul.net. It handles network driver and user state as a detached process, and allows both http and unix ipc clients to connect to it.

It doesn't come with it's own user interface, which means you will have to build one separately and configure it to connect to your qaul-hubd instance.

Because all networking is done in userspace, no root access is required.

Manual build

Building qaul-hubd with nix is recommended! If you need to build via system dependencies, follow this guide, depending on your platform.

Install dependencies

Rust

You will need to have a Rust compiler, and cargo toolchain installed on your system (minimum version v1.42). Install instructions

Homebrew

On MacOS you will need to install a package manager first to install all the developer tools. Alternatively you can also get them by downloading XCode from the App Store.

Homebrew is a popular package manager for MacOS!

Build Tools

You need to install a general development environment with the following tools available.

  • Debian/ Ubuntu/ Mint: sudo apt install make gcc cmake git
  • Fedora/ CentOS: sudo dnf install make gcc cmake git
  • Arch Linux: sudo pacman -Sy make gcc cmake git
  • MacOS: brew install make gcc cmake git

Build from source

Clone the main code repo:

$ git clone https://git.open-communication.net/qaul/qaul.net
$ cd qaul.net/

Then simply run cargo build --bin qaul-hubd --release to build the hubd binary.

The output artefact will be written to ./target/release/qaul-hubd.

Configuration

In order for qaul-hubd to work properly it will have to run in the background to handle incoming and outgoing network connections. It's recommended to launch it via a user systemd unit.

[Unit]
Description=qaul.net hub daemon
After=network.target

[Service]
Type=simple
ExecStart=$HOME/bin/qaul-hubd <your parameters here>

Save this file in ~/.local/share/systemd/user/

Now you can reload the daemon and start the unit.

$ systemctl daemon-reload --user
$ systemctl enable --user qaul-hubd.service
$ systemctl start --user qaul-hubd.service

Available configuration

Following is a list of qaul-hubd configuration values. Those marked with a * are mandatory. Commandline arguments take precedence over environment variables.

ENV variableRuntime argumentDescription
* HUBD_PEERS=[PATH]-P / --peers [PATH]Specify the path to a peer file, containing a newline-separated list of peers to connect to
* HUBD_PORT=[PORT]-p / --port [PORT]Specify a tcp port to which qaul-hubd should bind itself to listen for incoming network traffic
HUBD_UDP_DISCOVERY=0--no-udp-discoverPrevent qaul-hubd from registering a multicast address to find other clients on the same network. Some networks may forbid this, or cause performance issues.
HUBD_SETUP_UPNP=0--no-upnpDisable automatic UPNP port forwarding. Some networks may forbid this, or cause performance issues.
HUBD_RUN_MODE=[MODE]-m / --mode [MODE]Specify the peering mode of this hub. Possible values: "static", "dynamic"
HUBD_ADDR=[ADDR]-a / --addr [ADDR]A valid address to bind to. Must be a valid ip address format.

qaul-emberweb

This is a web client written in ember.js. It's meant to be installed on a communal computer and can provide multiple users access to an underlying qaul.net instance.

Requires a running qaul-hubd instance to connect to.

Manual build