# ffs

## Build binaries

```sh
make linux
```

## Build multi-platform images

```sh
make buildx TAG=latest
```

## Deploy

Put the binary of `bin/universe-server-linux`, `bin/zone-server-linux`, `bin/realm-server-linux` and `bin/ffs-client-linux` into a single directory.

#### Step 1: Start etcd

```sh
./etcd --name cd0  \
    --initial-advertise-peer-urls http://127.0.0.1:12380  \
    --listen-peer-urls http://127.0.0.1:12380  \
    --listen-client-urls http://127.0.0.1:12379  \
    --advertise-client-urls http://127.0.0.1:12379  \
    --initial-cluster-token etcd-cluster-1  \
    --initial-cluster cd0=http://127.0.0.1:12380  \
    --initial-cluster-state new  \
    --quota-backend-bytes=$((100*1024*1024*1024))
```

#### Step 2: Start universe server
The universe server is stateless and can run more than one at a time.
```sh
./universe-server-linux --log-level=debug --endpoints=127.0.0.1:12379 --addr=127.0.0.1:19091
```

#### Step 3: Start zone server
The zone server is also stateless.
```sh
./zone-server-linux --log-level=debug --universe=127.0.0.1:19091 --endpoints=127.0.0.1:12379  \
    --name=zone-1 --addr=127.0.0.1:19092
```

#### Step 4: Start realm server

```sh
mkdir -p /tmp/ffs/realm-1 /tmp/ffs/realm-2
./realm-server-linux --log-level=debug --universe=127.0.0.1:19091 --zone=zone-1  \
    --name=realm-1 --addr=127.0.0.1:19196 --root=/tmp/ffs/realm-1
./realm-server-linux --log-level=debug --universe=127.0.0.1:19091 --zone=zone-1  \
    --name=realm-2 --addr=127.0.0.1:29196 --root=/tmp/ffs/realm-2
```

#### Step 5: Start ffs client

```sh
mkdir ./mnt-1 ./mnt-2
./ffs-client-linux --log-level=debug --universe=127.0.0.1:19091 --zone=zone-1  \
    --volume=volume-1 --target=./mnt-1 --tenant=tenant-1 --keep-cache --async-write
./ffs-client-linux --log-level=debug --universe=127.0.0.1:19091 --zone=zone-1  \
    --volume=volume-2 --target=./mnt-2 --tenant=tenant-2 --keep-cache --merge
```