=============
GNU ANASTASIS
=============

This package includes the Anastasis core logic.  The code is released
under the GNU Affero General Public License (v3 or later).  See
COPYING for details.

Description
===========

GNU Anastasis is a key backup and recovery tool from the GNU project.
This package includes the backend run by the Anastasis providers as
well as libraries for clients and a command-line interface.

Installation instructions can be found in INSTALL and
also in the handbook at https://docs.anastasis.lu/ which
is also in the doc/ folder. Please note that you must run
'make install' before you can run the testsuite using
'make check'.


Dependencies
============

Build tools for compiling Anastasis from source:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Anastasis is built with Meson and Ninja.  The './configure' script in
the top-level directory is a thin wrapper that runs 'meson setup build',
and the generated 'Makefile' is a wrapper around 'ninja -C build'; you
can equally invoke meson and ninja directly.

- gcc or clang
- meson              >= 1.1.0
- ninja
- pkgconf or pkg-config

Optional, enabling additional build targets or tests:

- make                              (to use the generated Makefile
                                     wrapper instead of ninja)
- makeinfo           >= 4.8         (to build the Texinfo manual)
- gettext                           (to build translations)
- python3                           (to run the database naming
                                     convention test)

Only needed when regenerating files that are checked into git, not to
build the package:

- recutils           >= 1.0         used by contrib/gana-update.sh to
                                    regenerate the error codes
- sphinx                            used by contrib/update-tos.sh and
- sphinx-rtd-theme                  contrib/update-pp.sh to regenerate
- sphinx-multiversion               the terms of service and privacy
                                    policy


Direct dependencies
~~~~~~~~~~~~~~~~~~~

These are the direct dependencies for building and running Anastasis:

- GNU Taler exchange >= 1.5.0
- GNU Taler merchant >= 1.5.0
- GNUnet             >= 0.27.0
- PostgreSQL         >= 15.0
- GNU libmicrohttpd
- libgcrypt          >= 1.6.1
- libsodium          >= 1.0.18
- libcurl            >= 7.34.0
- jansson
- zlib

The Taler exchange and merchant packages supply the libtaler* libraries
(libtalerutil, libtalerexchange, libtalermerchant, libtalerjson,
libtalerpq, libtalermhd, libtalercurl and the testing libraries), and
GNUnet supplies libgnunetutil, libgnunetjson, libgnunetcurl and
libgnunetpq.  All of them are found via pkg-config.


Directory structure
===================

src/include/ includes installed (public) headers
src/util/ implements helper and crypto routines
src/backend/ contains the REST service
src/stasis/ implements the database logic for the backend
src/authorization/ contains various authorization plugins
src/restclient/ implements a REST client for the backend
src/lib/ implements the main client-side backup and recovery logic
src/testing/ contains test cases for 'src/restclient/' and 'src/lib/'
src/reducer/ implements a reducer API on top of 'src/lib/'
src/cli/ includes a reducer-based command-line interface
contrib/ contains resource files, like what identity attributes to ask for
doc/ contains documentation files, like TeXinfo
po/ internationalization via GNU gettext


Development note
================

To test against a local development service, add

	{
	    "code" : "xx",
	    "name" : "Testland",
	    "continent" : "Demoworld",
	    "call_code" : "+00"
	}

to contrib/redux.countries.json, and also append something like

	{
            "url" : "http://localhost:8086/",
            "restricted" : "xx"
	},
	{
            "url" : "http://localhost:8087/",
            "restricted" : "xx"
	},
	{
            "url" : "http://localhost:8088/",
            "restricted" : "xx"
	},
	{
            "url" : "http://localhost:8089/",
            "restricted" : "xx"
	}

to contrib/provider-list.json. Then the reducer will use these
providers on loopback for the "testland" country.


Experimental providers
======================

We hope to have another provider running soon. Once it is operational,
we should add

        {
            "url" : "https://v1.anastasis.openw3b.org/",
            "name" : "Openw3b Foundation, India"
        },

to the contrib/provider-list.json.
