anastasis

Credential backup and recovery protocol and service
Log | Files | Refs | Submodules | README | LICENSE

commit b54b60be71dbac974e247b9688186dbc3d896c74
parent 7615eedae52510f3d56058350b62934f7e720a31
Author: Christian Grothoff <christian@grothoff.org>
Date:   Wed, 29 Jul 2026 10:42:29 +0200

update stale docs

Diffstat:
MINSTALL | 481+++++++++++++++++++++++++------------------------------------------------------
MREADME | 53++++++++++++++++++++++++++++++++++++++++++-----------
2 files changed, 195 insertions(+), 339 deletions(-)

diff --git a/INSTALL b/INSTALL @@ -1,365 +1,190 @@ Installation Instructions ************************* +GNU Anastasis is built with Meson and Ninja. The ‘configure’ script in +this directory is *not* generated by Autoconf: it is a small hand-written +wrapper around ‘meson setup’. It therefore supports only the options +documented below — any other option is silently ignored. + + Basic Installation ================== - The following shell commands: + When building from a git checkout, first run: + + ./bootstrap + +This initialises the git submodules (notably ‘contrib/gana’, which +supplies the generated error codes) and installs the uncrustify +pre-commit hook. It is not needed when building from a distribution +tarball. + + Then the usual three commands: - test -f configure || ./bootstrap ./configure make make install -should configure, build, and install this package. The first line, -which bootstraps, is intended for developers; when building from -distribution tarballs it does nothing and can be skipped. - - The following more-detailed instructions are generic; see the -‘README’ file for instructions specific to this package. Some packages -provide this ‘INSTALL’ file but do not implement all of the features -documented below. The lack of an optional feature in a given package is -not necessarily a bug. More recommendations for GNU packages can be -found in the GNU Coding Standards. - - Many packages have scripts meant for developers instead of ordinary -builders, as they may use developer tools that are less commonly -installed, or they may access the network, which has privacy -implications. If the ‘bootstrap’ shell script exists, it attempts to -build the ‘configure’ shell script and related files, possibly using -developer tools or the network. Because the output of ‘bootstrap’ is -system-independent, it is normally run by a package developer so that -its output can be put into the distribution tarball and ordinary -builders and users need not run ‘bootstrap’. Some packages have -commands like ‘./autopull.sh’ and ‘./autogen.sh’ that you can run -instead of ‘./bootstrap’, for more fine-grained control over -bootstrapping. - - The ‘configure’ shell script attempts to guess correct values for -various system-dependent variables used during compilation. It uses -those values to create a ‘Makefile’ in each directory of the package. -It may also create one or more ‘.h’ files containing system-dependent -definitions. Finally, it creates a shell script ‘config.status’ that -you can run in the future to recreate the current configuration, and a -file ‘config.log’ containing output useful for debugging ‘configure’. - - It can also use an optional file (typically called ‘config.cache’ and -enabled with ‘--cache-file=config.cache’ or simply ‘-C’) that saves the -results of its tests to speed up reconfiguring. Caching is disabled by -default to prevent problems with accidental use of stale cache files. - - If you need to do unusual things to compile the package, please try -to figure out how ‘configure’ could check whether to do them, and mail -diffs or instructions to the address given in the ‘README’ so they can -be considered for the next release. If you are using the cache, and at -some point ‘config.cache’ contains results you don’t want to keep, you -may remove or edit it. - - The ‘autoconf’ program generates ‘configure’ from the file -‘configure.ac’. Normally you should edit ‘configure.ac’ instead of -editing ‘configure’ directly. - - The simplest way to compile this package is: - - 1. ‘cd’ to the directory containing the package’s source code. - - 2. If this is a developer checkout and file ‘configure’ does not yet - exist, type ‘./bootstrap’ to create it. You may need special - developer tools and network access to bootstrap, and the network - access may have privacy implications. - - 3. Type ‘./configure’ to configure the package for your system. This - might take a while. While running, ‘configure’ prints messages - telling which features it is checking for. - - 4. Type ‘make’ to compile the package. - - 5. Optionally, type ‘make check’ to run any self-tests that come with - the package, generally using the just-built uninstalled binaries. - - 6. Type ‘make install’ to install the programs and any data files and - documentation. When installing into a prefix owned by root, it is - recommended that the package be configured and built as a regular - user, and only the ‘make install’ phase executed with root - privileges. - - 7. Optionally, type ‘make installcheck’ to repeat any self-tests, but - this time using the binaries in their final installed location. - This target does not install anything. Running this target as a - regular user, particularly if the prior ‘make install’ required - root privileges, verifies that the installation completed - correctly. - - 8. You can remove the program binaries and object files from the - source code directory by typing ‘make clean’. To also remove the - files that ‘configure’ created (so you can compile the package for - a different kind of computer), type ‘make distclean’. There is - also a ‘make maintainer-clean’ target, but that is intended mainly - for the package’s developers. If you use it, you may have to - bootstrap again. - - 9. If the package follows the GNU Coding Standards, you can type ‘make - uninstall’ to remove the installed files. +‘configure’ runs ‘meson setup build’ and writes a ‘Makefile’ that +forwards to ‘ninja -C build’. Using it is optional; you can drive Meson +directly instead: -Compilers and Options -===================== + meson setup build + ninja -C build + meson install -C build - Some systems require unusual options for compilation or linking that -the ‘configure’ script does not know about. Run ‘./configure --help’ -for details on some of the pertinent environment variables. + Note that ‘configure’ deletes and re-creates the build directory. Run +it for the initial setup or when changing options; for ordinary rebuilds +just run ‘make’. - You can give ‘configure’ initial values for configuration parameters -by setting variables in the command line or in the environment. Here is -an example: + ‘configure’ records its arguments in ‘config.status’, and running that +script repeats the same configuration. - ./configure CC=gcc CFLAGS=-g LIBS=-lposix - See “Defining Variables” for more details. +Running the Test Suite +====================== -Compiling For Multiple Architectures -==================================== + The package must be installed before the tests can run, because the +test harness locates the installed binaries through the ANASTASIS_PREFIX +environment variable: + + make install + make check - You can compile the package for more than one kind of computer at the -same time, by placing the object files for each system in their own -directory. To do this, you can use GNU ‘make’. ‘cd’ to the directory -where you want the object files and executables to go and run the -‘configure’ script. ‘configure’ automatically checks for the source -code in the directory that ‘configure’ is in and in ‘..’. This is known -as a “VPATH” build. +A PostgreSQL server (see README for the required version) must be +running and reachable for the database and integration tests. - With a non-GNU ‘make’, it is safer to compile the package for one -system at a time in the source code directory. After you have installed -the package for one system, use ‘make distclean’ before reconfiguring -for another system. + Two groups of tests are excluded from ‘make check’ and have their own +targets: + + make installcheck + make integrationtests + + Tests are grouped into Meson suites, so a subset can be run directly: + + meson test -C build --suite stasis + meson test -C build test_anastasis_crypto - Some platforms, notably macOS, support “fat” or “universal” binaries, -where a single binary can execute on different architectures. On these -platforms you can configure and compile just once, with options specific -to that platform. Installation Names ================== - By default, ‘make install’ installs the package’s commands under -‘/usr/local/bin’, include files under ‘/usr/local/include’, etc. You -can specify an installation prefix other than ‘/usr/local’ by giving -‘configure’ the option ‘--prefix=PREFIX’, where PREFIX must be an -absolute file name. - - You can specify separate installation prefixes for -architecture-specific files and architecture-independent files. If you -pass the option ‘--exec-prefix=PREFIX’ to ‘configure’, the package uses -PREFIX as the prefix for installing programs and libraries. -Documentation and other data files still use the regular prefix. - - In addition, if you use an unusual directory layout you can give -options like ‘--bindir=DIR’ to specify different values for particular -kinds of files. Run ‘configure --help’ for a list of the directories -you can set and what kinds of files go in them. In general, the default -for these options is expressed in terms of ‘${prefix}’, so that -specifying just ‘--prefix’ will affect all of the other directory -specifications that were not explicitly provided. - - The most portable way to affect installation locations is to pass the -correct locations to ‘configure’; however, many packages provide one or -both of the following shortcuts of passing variable assignments to the -‘make install’ command line to change installation locations without -having to reconfigure or recompile. - - The first method involves providing an override variable for each -affected directory. For example, ‘make install -prefix=/alternate/directory’ will choose an alternate location for all -directory configuration variables that were expressed in terms of -‘${prefix}’. Any directories that were specified during ‘configure’, -but not in terms of ‘${prefix}’, must each be overridden at install time -for the entire installation to be relocated. The approach of makefile -variable overrides for each directory variable is required by the GNU -Coding Standards, and ideally causes no recompilation. However, some -platforms have known limitations with the semantics of shared libraries -that end up requiring recompilation when using this method, particularly -noticeable in packages that use GNU Libtool. - - The second method involves providing the ‘DESTDIR’ variable. For -example, ‘make install DESTDIR=/alternate/directory’ will prepend -‘/alternate/directory’ before all installation names. The approach of -‘DESTDIR’ overrides is not required by the GNU Coding Standards, and -does not work on platforms that have drive letters. On the other hand, -it does better at avoiding recompilation issues, and works well even -when some directory options were not specified in terms of ‘${prefix}’ -at ‘configure’ time. + By default ‘make install’ installs under ‘/usr/local’. Use ‘--prefix’ +to change this: + + ./configure --prefix=$HOME/anastasis + + The following directory options are accepted and forwarded to Meson. +Each takes the form ‘--NAME=DIRECTORY’: + + prefix exec_prefix bindir sbindir + libexecdir sysconfdir sharedstatedir localstatedir + runstatedir libdir includedir oldincludedir + datarootdir datadir infodir localedir + mandir docdir htmldir dvidir + pdfdir psdir + + Two further options control the build layout rather than the +installation layout: + + --srcdir=DIR the source directory (default: ‘.’ or ‘..’) + --mesonbuilddir=DIR the build directory (default: ‘build’) + Optional Features ================= - If the package supports it, you can cause programs to be installed -with an extra prefix or suffix on their names by giving ‘configure’ the -option ‘--program-prefix=PREFIX’ or ‘--program-suffix=SUFFIX’. - - Some packages pay attention to ‘--enable-FEATURE’ and -‘--disable-FEATURE’ options to ‘configure’, where FEATURE indicates an -optional part of the package. They may also pay attention to -‘--with-PACKAGE’ and ‘--without-PACKAGE’ options, where PACKAGE is -something like ‘gnu-ld’. ‘./configure --help’ should mention the -‘--enable-...’ and ‘--with-...’ options that the package recognizes. - - Some packages offer the ability to configure how verbose the -execution of ‘make’ will be. For these packages, running ‘./configure ---enable-silent-rules’ sets the default to minimal output, which can be -overridden with ‘make V=1’; while running ‘./configure ---disable-silent-rules’ sets the default to verbose, which can be -overridden with ‘make V=0’. - -Specifying a System Type -======================== - - By default ‘configure’ builds for the current system. To create -binaries that can run on a different system type, specify a -‘--host=TYPE’ option along with compiler variables that specify how to -generate object code for TYPE. For example, to create binaries intended -to run on a 64-bit ARM processor: - - ./configure --host=aarch64-linux-gnu \ - CC=aarch64-linux-gnu-gcc \ - CXX=aarch64-linux-gnu-g++ - -If done on a machine that can execute these binaries (e.g., via -‘qemu-aarch64’, ‘$QEMU_LD_PREFIX’, and Linux’s ‘binfmt_misc’ -capability), the build behaves like a native build. Otherwise it is a -cross-build: ‘configure’ will make cross-compilation guesses instead of -running test programs, and ‘make check’ will not work. - - A system type can either be a short name like ‘mingw64’, or a -canonical name like ‘x86_64-pc-linux-gnu’. Canonical names have the -form CPU-COMPANY-SYSTEM where SYSTEM is either OS or KERNEL-OS. To -canonicalize and validate a system type, you can run the command -‘config.sub’, which is often squirreled away in a subdirectory like -‘build-aux’. For example: - - $ build-aux/config.sub arm64-linux - aarch64-unknown-linux-gnu - $ build-aux/config.sub riscv-lnx - Invalid configuration 'riscv-lnx': OS 'lnx' not recognized - -You can look at the ‘config.sub’ file to see which types are recognized. -If the file is absent, this package does not need the system type. - - If ‘configure’ fails with the diagnostic “cannot guess build type”. -‘config.sub’ did not recognize your system’s type. In this case, first -fetch the newest versions of these files from the GNU config package -(https://savannah.gnu.org/projects/config). If that fixes things, -please report it to the maintainers of the package containing -‘configure’. Otherwise, you can try the configure option ‘--build=TYPE’ -where TYPE comes close to your system type; also, please report the -problem to <config-patches@gnu.org>. - - For more details about configuring system types, see the Autoconf -documentation. - -Sharing Defaults -================ - - If you want to set default values for ‘configure’ scripts to share, -you can create a site shell script called ‘config.site’ that gives -default values for variables like ‘CC’, ‘cache_file’, and ‘prefix’. -‘configure’ looks for ‘PREFIX/share/config.site’ if it exists, then -‘PREFIX/etc/config.site’ if it exists. Or, you can set the -‘CONFIG_SITE’ environment variable to the location of the site script. -A warning: not all ‘configure’ scripts look for a site script. - -Defining Variables -================== + ‘configure’ accepts the following ‘--enable-’ options. All of them +default to disabled. + + --enable-coverage + Build with coverage instrumentation (Meson’s ‘b_coverage’). + + --enable-logging=LEVEL + Set the logging level. LEVEL is one of ‘yes’, ‘no’, ‘verbose’ + or ‘veryverbose’. Only ‘no’ currently changes the build: it + compiles logging out entirely via GNUNET_CULL_LOGGING. The + two verbose levels are accepted but presently have no effect. + + Beware that ‘--disable-logging’ does *not* turn logging off; + write ‘--enable-logging=no’ for that. + + --enable-only-doc + Build the documentation only, skipping all C targets. + + --enable-install-rpath + Record an rpath pointing at the install prefix in the installed + binaries. + + There are no ‘--with-’ options. + + Meson understands one option that ‘configure’ does not forward, +‘disable-doc’. To build without documentation, configure with Meson +directly: + + meson setup build -Ddisable-doc=true + + +Compilers and Options +===================== + + Compilers, tools and flags are set by passing ‘VARIABLE=VALUE’ on the +‘configure’ command line: + + ./configure CC=clang CFLAGS=-O2 + +The recognised variables are: + + tools AR AS BISON CC CXX CPP FLEX INSTALL LD LDCONFIG LEX MAKE + MAKEINFO RANLIB TEXI2DVI YACC CHGRP CHMOD CHOWN MKNOD RM + NINJA MESON + flags ARFLAGS BISONFLAGS CFLAGS CXXFLAGS CPPFLAGS FLEXFLAGS + INSTALLFLAGS LDFLAGS LDCONFIGFLAGS LFLAGS MAKEFLAGS + MAKEINFOFLAGS RANLIBFLAGS TEXI2DVIFLAGS YACCFLAGS + CHGRPFLAGS CHMODFLAGS CHOWNFLAGS MKNODFLAGS + other INSTALL_DATA INSTALL_PROGRAM INSTALL_SCRIPT + +‘MESON’ and ‘NINJA’ are useful when those tools are not on the default +path. Most of the rest are inherited from the wrapper’s generic template +and have no effect on a Meson build; ‘CC’, ‘CXX’, ‘CFLAGS’, ‘CPPFLAGS’ +and ‘LDFLAGS’ are the ones that matter. + + +Compiling For Multiple Architectures +==================================== + + Meson always builds out of tree, so several build directories can +coexist. Give each one its own build and install directory: + + ./configure --mesonbuilddir=build-debug --prefix=/opt/anastasis-debug + +Each ‘configure’ run overwrites the top-level ‘Makefile’, so ‘make’ always +drives whichever build directory was configured last. To work with +several at once, use ninja directly: ‘ninja -C build-debug’. + + ‘configure’ has no ‘--build’, ‘--host’ or ‘--target’ options — the +Autoconf spellings are silently ignored, and passing them will *not* +produce a cross build. To cross-compile, invoke Meson directly with a +cross file: + + meson setup build --cross-file my-cross-file.txt + ninja -C build - Variables not defined in a site shell script can be set in the -environment passed to ‘configure’. However, some packages may run -configure again during the build, and the customized values of these -variables may be lost. In order to avoid this problem, you should set -them in the ‘configure’ command line, using ‘VAR=value’. For example: - ./configure CC=/usr/local2/bin/gcc +Other ‘make’ Targets +==================== -causes the specified ‘gcc’ to be used as the C compiler (unless it is -overridden in the site shell script). + The generated ‘Makefile’ also provides: -Unfortunately, this technique does not work for ‘CONFIG_SHELL’ due to an -Autoconf limitation. Until the limitation is lifted, you can use this -workaround: + make clean remove the build outputs + make uninstall remove the installed files + make dist create a distribution tarball + make format reformat the sources with uncrustify + make distclean remove ‘Makefile’ and ‘config.status’ - CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash ‘configure’ Invocation ====================== - ‘configure’ recognizes the following options to control how it -operates. - -‘--help’ -‘-h’ - Print a summary of all of the options to ‘configure’, and exit. - -‘--help=short’ -‘--help=recursive’ - Print a summary of the options unique to this package’s - ‘configure’, and exit. The ‘short’ variant lists options used only - in the top level, while the ‘recursive’ variant lists options also - present in any nested packages. - -‘--version’ -‘-V’ - Print the version of Autoconf used to generate the ‘configure’ - script, and exit. - -‘--cache-file=FILE’ - Enable the cache: use and save the results of the tests in FILE, - traditionally ‘config.cache’. FILE defaults to ‘/dev/null’ to - disable caching. - -‘--config-cache’ -‘-C’ - Alias for ‘--cache-file=config.cache’. - -‘--srcdir=DIR’ - Look for the package’s source code in directory DIR. Usually - ‘configure’ can determine that directory automatically. - -‘--prefix=DIR’ - Use DIR as the installation prefix. See “Installation Names” for - more details, including other options available for fine-tuning the - installation locations. - -‘--host=TYPE’ - Build binaries for system TYPE. See “Specifying a System Type”. - -‘--enable-FEATURE’ -‘--disable-FEATURE’ - Enable or disable the optional FEATURE. See “Optional Features”. - -‘--with-PACKAGE’ -‘--without-PACKAGE’ - Use or omit PACKAGE when building. See “Optional Features”. - -‘--quiet’ -‘--silent’ -‘-q’ - Do not print messages saying which checks are being made. To - suppress all normal output, redirect it to ‘/dev/null’ (any error - messages will still be shown). - -‘--no-create’ -‘-n’ - Run the configure checks, but stop before creating any output - files. - -‘configure’ also recognizes several environment variables, and accepts -some other, less widely useful, options. Run ‘configure --help’ for -more details. - -Copyright notice -================ - - Copyright © 1994–1996, 1999–2002, 2004–2017, 2020–2024 Free Software -Foundation, Inc. - - Copying and distribution of this file, with or without modification, -are permitted in any medium without royalty provided the copyright -notice and this notice are preserved. This file is offered as-is, -without warranty of any kind. + Run ‘./configure --help’ for a generated summary of the options +described above. diff --git a/README b/README @@ -26,26 +26,57 @@ 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 -- autoconf >= 2.69 (building from git) -- automake >= 1.11.1 (building from git) -- recutils >= 1.0 (building from git) -- libtool >= 2.2 -- makeinfo >= 4.8 -- make[*3] +- meson >= 1.1.0 +- ninja - pkgconf or pkg-config -- sphinx -- sphinx-rtd-theme -- sphinx-multiversion + +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 running Anastasis: +These are the direct dependencies for building and running Anastasis: -- GNU Taler merchant >= 0.14.0 +- 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