8000 GitHub - nlfiedler/zorigami: Backup and restore application
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

nlfiedler/zorigami

Repository files navigation

zorigami

A backup and restore application written in Rust and Flutter with a GraphQL wire protocol.

Features

  • Unlimited backup: all files of any size
  • Maintains multiple versions of files, not only the most recent
  • Efficiency: compression, de-duplication among and within files
  • Encryption: all remotely stored data is encrypted using AES256-GCM AEAD
  • Cloud service agnostic: Amazon, Azure, Google, MinIO, SFTP
  • Restore entire directory tree as well as individual files
  • Local and Cloud storage
  • Scheduled backups
  • Cross Platform: Linux, macOS, Windows

Shortcomings

This project has been a work-in-progress since 2014 and there are still some items that have not yet been implemented. The most notable of these are:

  • This software is provided "as-is", WITHOUT WARRANTY OF ANY KIND, see the LICENSE for details.
  • The database schema and pack file formats have changed radically over the years. It may happen again.
  • No automatic pruning of the snapshots which would keep the database size to a reasonable limit.
  • Object-to-bucket allocation is very primitive and needs improvement.
  • Restoring to dissimilar hardware is not yet an easy task.
  • No readily available binaries you will need to build and deploy it yourself.
  • No QoS control on uploads over the network so a backup can slow everything else to a crawl.
  • Backup procedure operates file-by-file (not point-in-time) and hence may record changed content incorrectly or inconsistently (such as with database files).

Building and Testing

Prerequisites

Initial Setup

macOS

Use fvm to select a specific version of Flutter to be installed and used by the application. This is the most reliable method and produces consistent results when building the application.

brew install dart
dart pub global activate fvm
fvm install stable
fvm flutter config --enable-web

Windows

The application has not been tested on Windows, but building and running the automated tests does work, for the most part (symbolic link tests still fail). As exp 904E ected, this process is very complex because Windows was not made for this sort of thing.

  1. Microsoft C++ Build Tools
    • Select the following Individual components
      • MSVC ... build tools, latest version with appropriate architecture
      • Windows 11 SDK, or 10 if using Windows 10
  2. vcpkg (to install openssl)
    • Move the cloned vcpkg directory somewhere permanent (e.g. C:\bin)
  3. vcpkg install openssl
  4. $Env:OPENSSL_DIR = 'C:\bin\vcpkg\installed\x64-windows'
  5. LLVM/Clang
    • The windows file with the .tar.xz extension seems to work.
    • The LLVM/Clang available from the Visual Studio Installer will install multiple architectures and that seems to cause problems.
    • $Env:LIBCLANG_PATH = 'C:\bin\clang+llvm-18.1.7-x86_64-pc-windows-msvc\bin'

The openssl Rust crate should not be vendored otherwise it will attempt to build OpenSSL from source, which requires Perl in addition to the tools listed above.

Building, Testing, Starting the Backend

Note that on Windows it may be necessary to to run PowerShell as an administrator since, for the time being, calling symlink_file() requires special privileges. Alternatively, running Windows in developer mode should also work.

cargo update
cargo build
cargo test
RUST_LOG=info cargo run

For more verbose debugging output, use RUST_LOG=debug in the command above. For extremely verbose logging, use RUST_LOG=trace which will dump large volumes of output.

To build or run tests for a single package, use the -p option, like so:

cargo build -p store_minio
cargo test -p store_minio

Building, Testing, Starting the Frontend

fvm flutter pub get
fvm flutter pub run environment_config:generate
fvm flutter test
fvm flutter run -d chrome

Docker

Docker is used for testing some features of the application, such as the various remote pack stores. A Docker Compose file is located in the containers directory, which describes the services used for testing. With the services running, and an appropriately configured .env file in the base directory, the tests will leverage the services.

environment_config

The frontend has some configuration that is set up at build time using the environment_config package. The generated file (lib/environment_config.dart) is not version controlled, and the values can be set at build-time using either command-line arguments or environment variables. See the pubspec.yaml for the names and the environment_config README for instructions.

Deploying

See the DEPLOY.md document for details and examples of building the application for deployment into different environments.

Tools

Finding Outdated Crates

Use https://github.com/kbknapp/cargo-outdated and run cargo outdated

Origin of the name

A zorigami is a clock possessed by a spirit, as described on the Wikipedia page about Tsukumogami, which includes zorigami. This has nothing at all do with this application, accept maybe for the association with time.

About

Backup and restore application

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published
0