-- mode: org --
The Guix Data Service processes, stores and provides data about Guix over time.
It's written in Guile, stores data in a PostgreSQL database, and provides a web interface and API to browse and access the data.
The aim of the Guix Data Service is to provide a complementary interface to Guix itself, providing a different way of interacting with Guix data, which hopefully enables tools and services that otherwise wouldn't be feasible to write.
For example, with the command line tooling or Guile API for Guix, you can quickly and easily access information about packages, and manipulate derivations. However, if you wish to compare two revisions of Guix, or look at the history of the derivations for a package over recent Guix revisions, it could take some time until you have the information you're looking for.
However, with the Guix Data Service, this information can be gathered continuously, and stored in a way that makes these kind of queries much quicker to answer. By storing data about multiple Guix revisions in a SQL database (PostgreSQL), it becomes possible to quickly compare the data for different revisions. By configuring the Guix Data Service to listen for changes in the Guix Git repository, the database can be kept up to date.
There's no one right way of doing local development, but outlined here is a recommended approach.
You will need to have:
If you have any problems with the instructions here, you can ask for help on the #guix IRC channel on Freenode. You can also email help-guix@gnu.org, please include the step you got to, and the problem you encountered (with the error message if applicable).
To clone the Git repository, run the following command:
git clone https://git.savannah.gnu.org/git/guix/data-service.git guix-data-service
direnv is used to update the environment within the shell to contain the dependencies of the Guix Data Service. If you've just installed direnv, check you've hooked it in to your shell https://direnv.net/docs/hook.html .
Change in to the guix-data-service
directory. You should see direnv
prompting to trust the .envrc
file contained within the repository.
Check the contents of the .envrc
file, and if you trust it, run direnv
allow
.
Dumps of the database behind data.guix.gnu.org are available at http://data.guix.gnu.org/dumps, use the following URL to download the latest small dump.
http://data.guix.gnu.org/dumps/latest/guix_data_service_small.dump
There are multiple ways you can setup the database, the instructions here
involve creating a guix_data_service
user with a password, then connecting
to the database over the local network interface.
To create the user and database use the scripts from PostgreSQL. The
createuser
command will prompt for a password for the database user, you'll
need this at multiple points so it might be useful to keep it simple.
createuser guix_data_service --pwprompt createdb guix_data_service --owner=guix_data_service
You may need to run these commands as the postgres user.
To restore the downloaded dump, run pg_restore
. This command should prompt
for a password, at which point enter the password for the database user that
you set earlier.
pg_restore --jobs=4 --user=guix_data_service --no-tablespaces --host=127.0.0.1 --dbname=guix_data_service guix_data_service_small.dump
To setup the configuration for your local environment, create a file called
.local.envrc. To provide the password you've set for the guix_data_service
user, you'll need to set the GUIX_DATA_SERVICE_DATABASE_PARAMSTRING
environment variable in this file. Add the following line, replacing
THEPASSWORD with the password you set earlier.
export GUIX_DATA_SERVICE_DATABASE_PARAMSTRING="dbname=guix_data_service user=guix_data_service password=THEPASSWORD host=127.0.0.1"
After, run direnv reload
to update the environment in your shell.
The following three commands will compile the .go
files and generate the
scripts used as entry points to the Guix Data Service.
./bootstrap.sh ./configure make
The guix-data-service
script is the main entry point in to the service, run
it from the shell.
guix-data-service
You should now be able to access the Guix Data Service web interface through a web browser using the URL http://localhost:8765/
To automatically restart the Guix Data Service when a change to the code is made, you can use the rerun command:
rerun -d guix-data-service -p "**/*.scm" guix-data-service
You now should be ready to do local development. To double check that you can
change the code and see those changes, try changing the "Guix Data Service"
text within the index function, in the (guix-data-service web view html)
module (contained in the guix-data-service/web/view/html.scm
file). That
text appears towards the top of the index page (the page with the path /
).
Please send patches to guix-devel@gnu.org.
Ideas for future enhancements to the Guix Data Service, in no particular order.