A stasis /ˈsteɪsɪs/ or stasis field, in science fiction, is a confined area of space in which time has been stopped or the contents have been rendered motionless.
stasis
is a backup and recovery system with an emphasis on security and privacy; no personal information is collected,
no unencrypted data leaves a client device and all encryption keys are fully in the control of their owner.
Along with provision
, the goal is to be able to grab a blank/off-the-shelf
device and recover the original system in an automated and repeatable way.
Docker images for server
, server-ui
, identity
and identity-ui
can be found under Packages.
See deployment/production for more information on how to set up and deploy the services.
Client binaries for Linux, macOS and Android can be found for each release.
The provided installer can be used:
$ curl -s "https://raw.githubusercontent.com/sndnv/stasis/master/deployment/production/scripts/client_install.sh" | bash
The Linux and macOS clients can be uninstalled using:
$ curl -s "https://raw.githubusercontent.com/sndnv/stasis/master/deployment/production/scripts/client_uninstall.sh" | bash
The Linux and macOS clients can be updated by uninstalling the current version and installing the latest one:
$ curl -s "https://raw.githubusercontent.com/sndnv/stasis/master/deployment/production/scripts/client_uninstall.sh" | bash
$ curl -s "https://raw.githubusercontent.com/sndnv/stasis/master/deployment/production/scripts/client_install.sh" | bash
Secrets, configuration, logs and operation state are NOT removed when uninstalling the client!
On Android, installing and updating is done by simply downloading the apk
file and running it.
Images and binaries for testing/development purposes can be created locally using the existing dev tools.
The majority of the code is Scala so, at the very least, Java (JDK17) and SBT need to be available on your dev machine.
Some submodules use Python (ex: client-cli
), Flutter (ex: identity-ui
)
or Kotlin for Android (ex: client-android
) so the appropriate tools for those platforms need to be
available as well.
Protobuf is also used, however, it is handled by an sbt plugin and no additional tools are needed.
There are also some Python and Bash scripts to help with deployment and testing.
1) Clone or fork the repo
2) Run sbt qa
To execute all tests and QA steps for the Scala submodules, simply run
sbt qa
from the root of the repo.
assets
Image assets used by other submodules.
n/a
n/a
proto
Protocol Buffers file(s) defining gRPC services and messages used by the core
networking and routing.
n/a
n/a
core
Core routing, networking and persistence code. Represents the subsystem that handles data exchange.
sbt "project core" qa
n/a
shared
API and model code shared between the server
and client
submodules.
sbt "project shared" qa
n/a
identity
OAuth2 identity management service based on RFC 6749.
sbt "project identity" qa
sbt "project identity" docker:publishLocal
identity-ui
Web UI for identity
.
cd ./identity-ui && ./qa.py
cd ./identity-ui && ./deployment/production/build.py
server
Backup management and storage service.
sbt "project server" qa
sbt "project server" docker:publishLocal
server-ui
Web UI for server
.
cd ./server-ui && ./qa.py
cd ./server-ui && ./deployment/production/build.py
client
Linux / macOS backup client, using server
for management and storage.
sbt "project client" qa
sbt "project client" docker:publishLocal
client-cli
Command-line interface for client
.
cd ./client-cli && source venv/bin/activate && ./qa.py
cd ./client-cli && source venv/bin/activate && pip install .
client-ui
Desktop interface for client
.
cd ./client-ui && ./qa.py
client-android
Android backup client, using server
for management and storage.
cd ./client-android && ./gradlew qa
AndroidStudio
- Build
> Build Bundle(s)/APK(s)
> Build APK(s)
deployment
Deployment, artifact and certificate generation scripts and configuration.
cd ./deployment/dev/scripts && ./run_smoke_test.sh
see ./deployment/dev/docker-compose.yml
Ready for prime time but run in production at your own risk!
identity
/ identity-ui
- authentication service and web UI - completeserver
/ server-ui
- backup server and web UI - operational; some features are not yet availableclient
/ client-cli
/ client-ui
- Linux / macOS client, CLI and UI - operational; some features are not yet availableclient-android
- Android client - operational; some features are not yet available;Contributions are always welcome!
Refer to the CONTRIBUTING.md file for more details.
We use SemVer for versioning.
This project is licensed under the Apache License, Version 2.0 - see the LICENSE file for details
Copyright 2018 https://github.com/sndnv
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.