# Running GNU Taler in a container

**URL:** <https://ich.taler.net/t/running-gnu-taler-in-a-container/188>\
**Category:** Community\
**Created:** [26 April 2024 14:27 UTC](https://ich.taler.net/t/running-gnu-taler-in-a-container/188 "2024-04-26T14:27:12Z")\
**Posts on this page:** 6\
**Page:** 1

<div class="post-metadata">

**Author:** ![ErickHaehnsen](https://ich.taler.net/user_avatar/ich.taler.net/erickhaehnsen/32/145_2.png) [@ErickHaehnsen](https://ich.taler.net/u/ErickHaehnsen)\
**Post date:** [26 April 2024 14:27 UTC](https://ich.taler.net/t/running-gnu-taler-in-a-container/188/1 "2024-04-26T14:27:12Z")

</div>

Hello everybody,

A colleague, Guillaume Fe, tried to implement GNU Taler from scratch in a docker with Debian packages. He was unsuccessful. The same with Podman. The error came from SystemD, which doesn’t run in containers. To get around this problem, GF has implemented sandcastle NG: [GitHub - guillaumefe/sandcastle-ng-by-Taler-forked-: https://git.taler.net/sandcastle-ng.git/tree/](https://github.com/guillaumefe/sandcastle-ng-by-Taler-forked-/tree/main)

The solution runs but no interface goes up. And, in the sandcastle container logs, the SystemD error also occurs. Here are our tests :  
curl localhost:2019 # IPV4 - 404 not found  
curl localhost:5432 # IPV4 - PostgreSQL, empty reply from webserver  
curl localhost:8505 # IPV6 - Bank single page application  
curl localhost:8301 # IPV6 - None  
curl localhost:8021 # IPV6 - None  
curl localhost:8080 # IPV6 - None

Questions :  
1- Can sysVinit run GNU Taler applications? Or do you need SystemD?  
2- Can GNU Taler run in Docker containers, which would themselves incorporate SystemD? Or is Podman necessarily required?  
3- To date, are the sandcastle interfaces accessible when the project is correctly compiled? Is the fact that sandcastle’s Podman containers display SystemD errors blocking me? Does this explain why the interfaces don’t go up?  
4- Is Guillaume Fe’s procedure, modelled on the GNU Taler auto ([sandcastle-ng.git - Scripts for the deployment of Sandcastle (GNU Taler)](https://git.taler.net/sandcastle-ng.git/tree/)), still functional?

The answer to our questions will help us steer our efforts in the right direction.  
Thanks in advance.

_PS: For you information: These curl tests have been conducted from inside the container which has been accessed with ./sandcastle-enter_

---

<div class="post-metadata">

**Author:** ![how](https://ich.taler.net/user_avatar/ich.taler.net/how/32/42_2.png) [@how](https://ich.taler.net/u/how)\
**Post date:** [27 April 2024 09:28 UTC](https://ich.taler.net/t/running-gnu-taler-in-a-container/188/2 "2024-04-27T09:28:15Z")

</div>

@dvn do you know what is happening?

---

<div class="post-metadata">

**Author:** ![dvn](https://ich.taler.net/user_avatar/ich.taler.net/dvn/32/121_2.png) [@dvn](https://ich.taler.net/u/dvn)\
**Post date:** [27 April 2024 12:04 UTC](https://ich.taler.net/t/running-gnu-taler-in-a-container/188/3 "2024-04-27T12:04:52Z")

</div>

Hi there,

Well there are quite a few things to address in your post, but for one, the sandcastle-ng does work, but it requires you use `podman` because `docker` has issues with running systemd inside. As a side note, that is a strange way to fork a project, wherein there is no commit history from the original repo. It makes it challenging to identify any divergences.

As far as I know GNU Taler has no _hard_ requirements on systemd, but the Debian packages do expect systemd to be available.

I’m not sure what you mean by “sandcastle interfaces”, can you explain?

Barring any major differences in Guillaume Fe’s fork, then running `./sandcastle-build` followed by `./sandcastle-run` should result in a container with the full Taler stack running.

---

<div class="post-metadata">

**Author:** ![ErickHaehnsen](https://ich.taler.net/user_avatar/ich.taler.net/erickhaehnsen/32/145_2.png) [@ErickHaehnsen](https://ich.taler.net/u/ErickHaehnsen)\
**Post date:** [30 April 2024 13:24 UTC](https://ich.taler.net/t/running-gnu-taler-in-a-container/188/4 "2024-04-30T13:24:52Z")

</div>

Hi everybody,

Thank you for your feedback. I apologize for the delayed response.

About the forking process, we acknowledge the best practice of pushing the complete original repository, including its history, to GitHub. Plans are underway to restructure our repository to preserve its connection to the original project.

Docker Usage: Apologies for the previous unclear message. We did not attempt Docker for the sandcastle-ng but rather while following the developer documentation at Taler Developer Manual ([10. Developer’s Manual — GNU Taler](https://docs.taler.net/taler-developer-manual.html)). We encountered issues but will resume this effort.

About systemd, it’s clear now that the Debian package requires systemd but not GNU Taler itself, thanks for pointing that out.

And for clarification when we refer to “interface,” we mean the web pages or user interfaces. Currently, for the sandcastle-ng project, we have containers up and running; however, the only active interface is served by the “Bank” container and is IPV6 accessible.

That leads to a key question for us : what should we be able to see or access, particularly in terms of user interfaces, to confidently consider our implementation a success?

Thank you for your guidance and patience.

---

<div class="post-metadata">

**Author:** ![ErickHaehnsen](https://ich.taler.net/user_avatar/ich.taler.net/erickhaehnsen/32/145_2.png) [@ErickHaehnsen](https://ich.taler.net/u/ErickHaehnsen)\
**Post date:** [1 May 2024 14:23 UTC](https://ich.taler.net/t/running-gnu-taler-in-a-container/188/5 "2024-05-01T14:23:10Z")

</div>

For example:

**guillaumefe@TCA:~/Taler/sandcastle/sandcastle-ng-by-Taler-forked-$ ./print-component-versions**  
buildconfig/exchange.tag is: v0.10.2  
buildconfig/gnunet.tag is: v0.21.1  
buildconfig/libeufin.tag is: v0.10.1  
buildconfig/libmhd.tag is: v1.0.1  
buildconfig/merchant-demos.tag is: v0.10.0  
buildconfig/merchant.tag is: v0.10.2  
buildconfig/sync.tag is: v0.10.1  
buildconfig/wallet.tag is: v0.10.6

**guillaumefe@TCA:~/Taler/sandcastle/sandcastle-ng-by-Taler-forked-$ ./print-latest-versions  
[!] exchange curr: v0.10.2 latest: v0.10.3-dev.1**  
merchant curr: v0.10.2 latest: v0.10.2  
[!] merchant-demos curr: v0.10.0 latest: v0.10.1  
[!] libeufin curr: v0.10.1 latest: v0.10.3-dev.1  
[!] wallet curr: v0.10.6 latest: v0.10.8-dev.1  
gnunet curr: v0.21.1 latest: v0.21.1  
sync curr: v0.10.1 latest: v0.10.1  
libmhd curr: v1.0.1 latest: v1.0.1

**guillaumefe@TCA:~/Taler/sandcastle/sandcastle-ng-by-Taler-forked-/buildconfig$ find . -type f -name “\*.tag” -exec sh -c ‘echo “==== {} ====”; cat {}’ ;**  
==== ./merchant.tag ====  
v0.10.2  
==== ./sync.tag ====  
v0.10.1  
==== ./libmhd.tag ====  
v1.0.1  
==== ./merchant-demos.tag ====  
v0.10.0  
==== ./wallet.tag ====  
v0.10.6  
==== ./exchange.tag ====  
v0.10.2  
==== ./gnunet.tag ====  
v0.21.1  
==== ./libeufin.tag ====  
v0.10.1

**guillaumefe@TCA:~/Taler/sandcastle/sandcastle-ng-by-Taler-forked-$ ./sandcastle-build**  
…no errors…

**guillaumefe@TCA:~/Taler/sandcastle/sandcastle-ng-by-Taler-forked-$ ./sandcastle-run -d**  
allexport off  
braceexpand on  
emacs off  
errexit on  
errtrace off  
functrace off  
hashall on  
histexpand off  
history off  
ignoreeof off  
interactive-comments on  
keyword off  
monitor off  
noclobber off  
noexec off  
noglob off  
nolog off  
notify off  
nounset off  
onecmd off  
physical off  
pipefail off  
posix off  
privileged off  
verbose off  
vi off  
xtrace on

- SANDCASTLE\_PORT\_MERCHANT=127.0.0.1:16000
- SANDCASTLE\_PORT\_EXCHANGE=127.0.0.1:16001
- SANDCASTLE\_PORT\_BLOG=127.0.0.1:16002
- SANDCASTLE\_PORT\_DONATIONS=127.0.0.1:16003
- SANDCASTLE\_PORT\_LANDING=127.0.0.1:16005
- SANDCASTLE\_PORT\_LIBEUFIN\_BANK=127.0.0.1:16007
- SANDCASTLE\_PORT\_BANK\_SPA=127.0.0.1:16009
- PORT\_INTERNAL\_EXCHANGE=8201
- PORT\_INTERNAL\_MERCHANT=8301
- PORT\_INTERNAL\_LIBEUFIN\_BANK=8080
- PORT\_INTERNAL\_LANDING=8501
- PORT\_INTERNAL\_BLOG=8502
- PORT\_INTERNAL\_DONATIONS=8503
- PORT\_INTERNAL\_BANK\_SPA=8505  
+++ dirname – ./sandcastle-run  
++ cd – .  
++ pwd
- SCRIPT\_DIR=/home/guillaumefe/Taler/sandcastle/sandcastle-ng-by-Taler-forked-
- cd /home/guillaumefe/Taler/sandcastle/sandcastle-ng-by-Taler-forked-  
++ podman ps -q -a -f=name=taler-sandcastle
- existing\_id=
- [[! -z ‘’]]
- SETUP\_NAME=demo
- [[! -z ‘’]]
- OVERRIDES=
- exec podman run -d -p=127.0.0.1:16000:8301 -p=127.0.0.1:16001:8201 -p=127.0.0.1:16007:8080 -p=127.0.0.1:16005:8501 -p=127.0.0.1:16002:8502 -p=127.0.0.1:16003:8503 -p=127.0.0.1:16009:8505 --name taler-sandcastle --systemd=always -v talerdata:/talerdata:Z -v /home/guillaumefe/Taler/sandcastle/sandcastle-ng-by-Taler-forked-/scripts:/scripts:Z -v /home/guillaumefe/Taler/sandcastle/sandcastle-ng-by-Taler-forked-/scripts/demo:/provision:Z --entrypoint /sbin/init -d taler-base-all  
053f61861a84e02f8926e2bf91cc6e919759c7f7b23dab0b07a4250fbabc6fc1

**Result in :**

**guillaumefe@TCA:~/Taler/sandcastle/sandcastle-ng-by-Taler-forked-/buildconfig$ podman ps**  
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES  
053f61861a84 localhost/taler-base-all:latest 23 minutes ago Up 23 minutes 127.0.0.1:16000-\>8301/tcp, 127.0.0.1:16001-\>8201/tcp, 127.0.0.1:16002-16003-\>8502-8503/tcp, 127.0.0.1:16005-\>8501/tcp, 127.0.0.1:16007-\>8080/tcp, 127.0.0.1:16009-\>8505/tcp taler-sandcastle

**MERCHANT=[127.0.0.1:16000](http://127.0.0.1:16000)**  
image1.png

**EXCHANGE=[127.0.0.1:16001](http://127.0.0.1:16001)**  
image2.png

**BLOG=[127.0.0.1:16002](http://127.0.0.1:16002)**  
image3.png

**DONATIONS=[127.0.0.1:16003](http://127.0.0.1:16003)**  
image4.png

**LANDING=[127.0.0.1:16005](http://127.0.0.1:16005)**  
image5.png

**LIBEUFIN\_BANK=[127.0.0.1:16007](http://127.0.0.1:16007)**  
image6.png

**BANK\_SPA=[127.0.0.1:16009](http://127.0.0.1:16009)**  
image7.png

allexport off  
braceexpand on  
emacs off  
errexit on  
errtrace off  
functrace off  
hashall on  
histexpand off  
history off  
ignoreeof off  
interactive-comments on  
keyword off  
monitor off  
noclobber off  
noexec off  
noglob off  
nolog off  
notify off  
nounset off  
onecmd off  
physical off  
pipefail off  
posix off  
privileged off  
verbose off  
vi off  
xtrace on

- exec podman exec -it taler-sandcastle journalctl -f  
May 01 13:52:04 053f61861a84 caddy[189]: {“level”:“error”,“ts”:1714571524.9801953,“logger”:“http.log.error”,“msg”:“dial unix /run/taler/merchant-httpd/merchant-http.sock: connect: no such file or directory”,“request”:{“remote\_ip”:“10.0.2.100”,“remote\_port”:“47474”,“client\_ip”:“10.0.2.100”,“proto”:“HTTP/1.1”,“method”:“GET”,“host”:“127.0.0.1:16000”,“uri”:“/”,“headers”:{“User-Agent”:[“Mozilla/5.0 (X11; Linux x86\_64; rv:109.0) Gecko/20100101 Firefox/115.0”],“Accept”:[“text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,_/_;q=0.8”],“Accept-Language”:[“en-US,en;q=0.5”],“Accept-Encoding”:[“gzip, deflate, br”],“Upgrade-Insecure-Requests”:[“1”],“Sec-Fetch-Site”:[“none”],“Sec-Fetch-Dest”:[“document”],“Sec-Fetch-Mode”:[“navigate”],“Sec-Fetch-User”:[“?1”],“Connection”:[“keep-alive”]}},“duration”:0.000198395,“status”:502,“err\_id”:“x4pyz8j9s”,“err\_trace”:“reverseproxy.statusError (reverseproxy.go:1267)”}  
May 01 13:52:05 053f61861a84 caddy[189]: {“level”:“error”,“ts”:1714571525.7985656,“logger”:“http.log.error”,“msg”:“dial unix /run/taler/exchange-httpd/exchange-http.sock: connect: no such file or directory”,“request”:{“remote\_ip”:“10.0.2.100”,“remote\_port”:“36864”,“client\_ip”:“10.0.2.100”,“proto”:“HTTP/1.1”,“method”:“GET”,“host”:“127.0.0.1:16001”,“uri”:“/”,“headers”:{“Upgrade-Insecure-Requests”:[“1”],“Sec-Fetch-Dest”:[“document”],“Sec-Fetch-User”:[“?1”],“User-Agent”:[“Mozilla/5.0 (X11; Linux x86\_64; rv:109.0) Gecko/20100101 Firefox/115.0”],“Accept-Language”:[“en-US,en;q=0.5”],“Connection”:[“keep-alive”],“Sec-Fetch-Mode”:[“navigate”],“Sec-Fetch-Site”:[“none”],“Accept”:[“text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,_/_;q=0.8”],“Accept-Encoding”:[“gzip, deflate, br”]}},“duration”:0.000136084,“status”:502,“err\_id”:“sitssdwet”,“err\_trace”:“reverseproxy.statusError (reverseproxy.go:1267)”}  
May 01 13:52:08 053f61861a84 libeufin-bank[2102]: 01-May-2024T13:52:08.932 INFO libeufin-bank - 200 OK, GET /webui/  
May 01 13:52:08 053f61861a84 libeufin-bank[2102]: 01-May-2024T13:52:08.981 INFO libeufin-bank - 200 OK, GET /webui/index.css  
May 01 13:52:09 053f61861a84 libeufin-bank[2102]: 01-May-2024T13:52:09.039 INFO libeufin-bank - 200 OK, GET /webui/index.js  
May 01 13:52:09 053f61861a84 libeufin-bank[2102]: 01-May-2024T13:52:09.284 INFO libeufin-bank - 404 Not Found, GET /webui/settings.json, GENERIC\_ENDPOINT\_UNKNOWN There is no endpoint defined for the URL provided by the client. Check if you used the correct URL and/or file a report with the developers of the client software.  
May 01 13:52:09 053f61861a84 libeufin-bank[2102]: 01-May-2024T13:52:09.285 INFO libeufin-bank - 404 Not Found, GET /webui/settings.json, GENERIC\_ENDPOINT\_UNKNOWN There is no endpoint defined for the URL provided by the client. Check if you used the correct URL and/or file a report with the developers of the client software.  
May 01 13:52:09 053f61861a84 libeufin-bank[2102]: 01-May-2024T13:52:09.448 INFO libeufin-bank - 200 OK, GET /webui/index.js.map  
May 01 13:52:09 053f61861a84 libeufin-bank[2102]: 01-May-2024T13:52:09.581 INFO libeufin-bank - 200 OK, GET /config  
May 01 13:52:10 053f61861a84 libeufin-bank[2102]: 01-May-2024T13:52:10.471 INFO libeufin-bank - 200 OK, GET /webui/index.css.map

**Environment:**

**guillaumefe@TCA:~/Taler/sandcastle/sandcastle-ng-by-Taler-forked-/buildconfig$ uname -a**  
Linux TCA 6.6.15-amd64 #1 SMP PREEMPT\_DYNAMIC Kali 6.6.15-2kali1 (2024-04-09) x86\_64 GNU/Linux

**guillaumefe@TCA:~/Taler/sandcastle/sandcastle-ng-by-Taler-forked-/buildconfig$ dpkg -l | grep bash**  
…  
ii bash 5.2.21-2 amd64 GNU Bourne Again SHell  
…

**guillaumefe@TCA:~/Taler/sandcastle/sandcastle-ng-by-Taler-forked-/buildconfig$ dpkg -l | grep podman**  
ii podman 4.9.3+ds1-1 amd64 tool to manage containers and pods

**guillaumefe@TCA:~/Taler/sandcastle/sandcastle-ng-by-Taler-forked-$ git status**  
On branch master  
Your branch is up to date with ‘origin/master’.

nothing to commit, working tree clean

**guillaumefe@TCA:~/Taler/sandcastle/sandcastle-ng-by-Taler-forked-$ git remote -v**  
origin [git@github.com](mailto:git@github.com):guillaumefe/sandcastle-ng-by-Taler-forked-.git (fetch)  
origin [git@github.com](mailto:git@github.com):guillaumefe/sandcastle-ng-by-Taler-forked-.git (push)  
upstream [sandcastle-ng.git - Scripts for the deployment of Sandcastle (GNU Taler)](https://git.taler.net/sandcastle-ng.git/) (fetch)  
upstream [sandcastle-ng.git - Scripts for the deployment of Sandcastle (GNU Taler)](https://git.taler.net/sandcastle-ng.git/) (push)

**guillaumefe@TCA:~/Taler/sandcastle/sandcastle-ng-by-Taler-forked-$ git fetch --all**  
Fetching origin  
Fetching upstream

**guillaumefe@TCA:~/Taler/sandcastle/sandcastle-ng-by-Taler-forked-$ git checkout master**  
Already on ‘master’  
Your branch is up to date with ‘origin/master’.

**guillaumefe@TCA:~/Taler/sandcastle/sandcastle-ng-by-Taler-forked-$ git branch --show-current**  
master

**guillaumefe@TCA:~/Taler/sandcastle/sandcastle-ng-by-Taler-forked-$ git log --oneline master…upstream/master**  
**guillaumefe@TCA:~/Taler/sandcastle/sandcastle-ng-by-Taler-forked-$**

Are we on the good track? Thank you in advance for yoiur kind answer

 ![image1](https://ich.taler.net/uploads/default/original/1X/2c56a1657f16202950e51d146ecdd68219548c48.png)  
 ![image2](https://ich.taler.net/uploads/default/original/1X/757f34cb610c23d6df78a558f1fcfa23fc572dd1.png)  
 ![image3](https://ich.taler.net/uploads/default/original/1X/9d19de5487f00f905e9842793ec94012e5185f66.png)  
 ![image4](https://ich.taler.net/uploads/default/original/1X/f5c351dd52ff3e70d088cb3e7bb0ac416dab2467.png)  
 ![image5](https://ich.taler.net/uploads/default/original/1X/2859e50a3cfb2890a4f27188bfcc92dbf528ba94.png)  
 ![image6](https://ich.taler.net/uploads/default/original/1X/e1949150aab1ced4ce4a0e2f48905ee4dc710403.png)  
 ![image7](https://ich.taler.net/uploads/default/original/1X/2d56c2d4a33b041ad733dbeb3301e2ebbbb61d38.png)

---

<div class="post-metadata">

**Author:** ![ErickHaehnsen](https://ich.taler.net/user_avatar/ich.taler.net/erickhaehnsen/32/145_2.png) [@ErickHaehnsen](https://ich.taler.net/u/ErickHaehnsen)\
**Post date:** [23 May 2024 20:25 UTC](https://ich.taler.net/t/running-gnu-taler-in-a-container/188/7 "2024-05-23T20:25:44Z")

</div>

Hi How,

Could you precise your question “Do you know what’s happening ?”  
1- If you mean : “Did someone give a help in our attempt to install GNU Taler ?”  
Unfortunately the answer is “No. We’re stuck for now.”

2- If you mean : "what about our negociations with a major French banking partner ?"The answer is : “We are on the way to collaborate closely.” Which is a fantastic news (and a lot of work in the coming period) ! The way will be progressive and linked to our project Aipress24, the journalist-oriented platform for the actors of the news industry and of the innovation ecosystem - which is seroously improving.

3-If you mean : “Do you have any news about the NGI Taler call for projects ?” The answer is “no”. Maybe we’ll have to wait till the end of June, which is supposed to be the time of disclosing the results of the call. Nevertheless, I thought that we should have been contacted in order to provide NGI Taler’s team with more details about our proposal.

Conclusion: wait and see !
