Forums > Talk > Technology
gnunet peers
Created by divorce
Joined06/07/21
Posts24
Dec 16th, 2025 at 4:57 pm (edited)
#2871
hey folks,

GNUnet is a project to replace 'the (broken) internet' which leverages newer, more secure technologies on a fully p2p system, but currently no one's on it, i want to help change that by making installation and peering easier

the last time i fiddled with it was ~ version 0.11 or even prior which was released a long time ago, there's new things and conventions i have to accustom myself to, but i'm ready for a more serious go at it ... there are a ton of 'decentralized web alternative' projects, that i myself am interested in contributing to, like dat:// and ssb:// but they don't go as deep and as far as GNUnet has from the outset. TOR / Onion routing has been (in my opinion a honeypot which actually ensures you're snooped on rather than protecting you, nevertheless) merely a bandaid on the gaping wound of internet infrastructure. we're in as good a time as any to explore alternate routes.

i'm hoping to develop the first mmo that leverages GNUnet as the networking backend... as well as building other projects on top of it (rather than building for a web that is collapsing into corpo-controlled-tracking-ad-hell more every day) the potential that's waiting in the wings with this thing is just too big to be ignored.

i'm looking for peers who wanna try it out and help me test things, i can sit with you and guide you from 0 to 100 to get you connected. in doing so we'll document our tests to make it easier for others, and so on and so on. the documentation and install guides suck, and have sucked since inception. this has been a huge barrier to entry on what could be the thing we've all been searching for, not just a return to the good 'ol web, but a way forward that is even better than the mountain of random crap we had. i've been wanting to fully revamp the documentation since i heard about the project around a decade ago. any help in the peering aspect would be greatly appreciated.

lmk, hmu, glhf, tldr
buy worlds patent coin
左手
Dec 16th, 2025 at 7:16 pm
#2872
I'm interested. Are we authed on Jabber?
Your Worlio Webmaster


Jabber/XMPP: bonkmaykr@canithesis.org
Click here to report site abuse or a technical problem.
Joined06/07/21
Posts24
Dec 19th, 2025 at 9:54 am
#2873
I'm interested. Are we authed on Jabber?
hey, we were, when i updated sqlite3 for gnunet it borked psi+ ... was expecting to get stuck in dependancy hell for gnunet but not for this lol, so comms are down... workin' on it... wasn't expecting a reply so soon, i'll shoot for getting things up and running by the new year.

also gonna try to do a minimal install on a new hdd dedicated just to testing for this. i've been meaning to try out guix for the longest time, now's as good a time as ever.
buy worlds patent coin
左手
Joined08/05/25
Posts12
Dec 22nd, 2025 at 8:55 am
#2972
Swore I heard this before. Turns out I know it from GNU Taler. Impressive.
Joined06/07/21
Posts24
Dec 24th, 2025 at 8:29 pm
#2979
alrighty... lets get started... lots to dig in here... i wanna record my trial-and-errors for posterity and to decrease any barrier to entry that potential peers may have along the way

so we're on v0.26.1

the first issue i ran into during compilation (this time around) was that...
and let me just rant here for a second,
when installing new software i prefer just straight cd to the dir
./configure then make -j$(nproc) then log in as root and make install (i don't use sudo)
these new install thingies like ninja and meson drive me up the fahreeking wall, just because they're new and they're trying to do too much so they're bound to fail

that said i had to install meson-1.10.0
curl 8.18.0-DEV (x86_64-pc-linux-gnu) libcurl/8.18.0-DEV GnuTLS/3.7.11 zlib/1.2.11 brotli/1.0.9 libidn2/2.3.0 libpsl/0.21.0


after that, i was getting to 90% of the install until i ran into the error...
ninja: Entering directory build' [1/1] Linking target src/contrib/servi...versation/gnunet-helper-audio-playback FAILED: src/contrib/service/conversation/gnunet-helper-audio-playback cc -o src/contrib/service/conversation/gnunet-helper-audio-playback src/contrib/service/conversation/gnunet-helper-audio-playback.p/gnunet-helper-audio-playback-gst.c.o -Wl,--as-needed -Wl,--no-undefined -Wl,--unresolved-symbols=report-all '-Wl,-rpath,$ORIGIN/:$ORIGIN/../../../lib/util:$ORIGIN/../../../lib/gnsrecord:$ORIGIN/../../../service/gns:$ORIGIN/../../../service/identity:$ORIGIN/../../../service/namestore:/usr/local/lib' -Wl,--start-group src/contrib/service/conversation/libgnunetconversation.so.0.0.0 src/lib/util/libgnunetutil.so.18.1.0 src/contrib/service/conversation/libgnunetspeaker.so.0.0.0 src/contrib/service/conversation/libgnunetmicrophone.so.0.0.0 /usr/lib/x86_64-linux-gnu/libgstreamer-1.0.so /usr/lib/x86_64-linux-gnu/libgobject-2.0.so /usr/lib/x86_64-linux-gnu/libglib-2.0.so /usr/lib/x86_64-linux-gnu/libgstapp-1.0.so /usr/lib/x86_64-linux-gnu/libgstbase-1.0.so /usr/lib/x86_64-linux-gnu/libgstaudio-1.0.so /usr/lib/x86_64-linux-gnu/libgsttag-1.0.so /usr/lib/x86_64-linux-gnu/libpulse.so -Wl,--end-group /usr/bin/ld: src/contrib/service/conversation/gnunet-helper-audio-playback.p/gnunet-helper-audio-playback-gst.c.o: in function feed_buffer_to_gst': /home/***/path/gnunet-0.26.1/build/../src/contrib/service/conversation/gnunet-helper-audio-playback-gst.c:181: undefined reference to g_memdup2' collect2: error: ld returned 1 exit status ninja: build stopped: subcommand failed. make: *** [Makefile:94: all] Error 1


i still don't fully understand the crap that it is asking me to do, but i get that its about some gstreamer issue, or my glib is slightly out of date, which it always is, right? and i really don't feel like making a chroot to build a new glib yadda yadda yadda, that whole charade...

and right now i don't care about *audio* working, i just want to configure a domain on here and test sending some text files back and forth

so what i did was vim /src/contrib/service/conversation/gnunet-helper-audio-playback-gst.c
and added this to the top of the file
#ifndef g_memdup2
#define g_memdup2(mem, size) g_memdup((mem), (size))
#endif

then it linked okay

however, after it finished compiling and i installed it, i tried running
$ gnunet-arm -s
and got the error,
gnunet-arm: error while loading shared libraries: libgnunetutil.so.18: cannot open shared object file: No such file or directory

i needed to say
$ echo "/usr/local/lib" | tee /etc/ld.so.conf.d/gnunet.conf
$ ldconfig
as root

now! i was about to gripe about how bad the docs were, but it looks like they've come a long way since 0.13.0
merr crimbus and i'll get into more of an install / configure guide in the next post
buy worlds patent coin
左手
Joined06/07/21
Posts24
Dec 26th, 2025 at 8:18 pm (edited)
#2982
0.26.2 just released

now! i was about to gripe about how bad the docs were, but it looks like they've come a long way since 0.13.0
how naive a statement...

alright... after slamming against a wall like a crash-test dummy in an f1...

my goal is to write a comprehensive on-boarding guide, and i'm going to continue pursuing that goal...

these basic assumptions can be ruled out:

GNUnet today (0.26.x) has a serious “first-contact verification gap”:

There is no single, authoritative CLI that says:

“Peer A is connected to Peer B”

There is no supported manual peer-connect command

There is no stable, human-facing status API

Most verification is implicit, not explicit

This is not an accident. It’s the result of:

years of refactors

privacy-driven removals of “introspective” tools

a shift toward applications proving connectivity, not infrastructure

That may make sense academically — but it is disastrous for adoption, onboarding, and exactly the guide i'm trying to write.

in the interem and various refactors since i've been poking at this...

'peerinfo' and 'HELLO's have been removed, statistics and transport introspection are half gone... "APPS" prove connectivity, and that is undocumented.

so the previous goal was (and this makes sense coming from an 'INTERNET' peer exchange... intuitive sense) 'verify peers are connected'

but the goal has to shift to 'demonstrate successful peer-to-peer interaction'

When is a peer connected?

There is no ping

There is no peer list

Connectivity is inferred via successful protocol interaction

This is intentional (privacy model)

this trial and failure will at least hopefully save potential peers hours of the same shitshow

what's gonna have to happen is that a small test program has to be written... er, i forgot to mention this previously but i'm trying to avoid gnunet-gtk (graphical frontend) like the plague, it already is an atrocious abomination...

what i (or anyone) would expect is to be able to 'get' your peer 'id', and share it with another peer, and then be able to connect and share stuff back and forth... that's the way it used to work, and that's why i'm about to jump out a 5 storey window trying to get this up and running...

i need to reorient, reread the current docs, it doesn't help that they took the doxygen down & no way to browse the source code online hehe
$ doxygen gnunet.doxy
error: @INCLUDE = version.doxy: not found!
Exiting...
cool

i don't think they have enough cigarettes in the world for this
buy worlds patent coin
左手
Joined06/07/21
Posts24
Jan 9th, 2026 at 10:02 pm
#3019
the nightmare continues...

i had to comment out
@INCLUDE = "version.doxy"

and then the doxygen files built

also did find them online which is here https://docs.gnunet.org/doxygen/

this is an important next step because being able to visualize and reference libgnunetutil

as according to the developer's handbook,
It should be noted that only developers that fully understand this entire API will be able to write good GNUnet code.
digging into that now to try to come up with a simple test application
buy worlds patent coin
左手
Joined06/07/21
Posts24
Feb 9th, 2026 at 9:12 pm (edited)
#3058
alright so, i see a way forward, don't wanna lose my momentum here. the experiment is as follows,

the basic point of this test is to play with the 'time' tools available in libgnunetutil,
one user will request the time
another user 'should' perform the work (of computing the time)
the original user compares the network time to the local computation in order to account for errors

i'm doing a local multi user setup. so i have 3 users: "bob", chad, and gnunet

user gnunet runs 'the main thing', while bob and chad are trying to talk to each other over the network
user gnunet's home is /var/lib/gnunet, in there is a file gnunet.conf which reads
[PATHS]
GNUNET_HOME = ~/.local/share/gnunet

[arm]
START_SYSTEM_SERVICES = YES
START_USER_SERVICES = NO

[core]
ENABLED = YES

[transport]
ENABLED = YES

[nat]
ENABLED = YES

[peerstore]
ENABLED = YES

[statistics]
ENABLED = YES

[hostlist]
OPTIONS = -b -e
SERVERS = http://v10.gnunet.org/hostlist
# HOSTLISTFILE = $SERVICEHOME/hostlists.file



start with ```gnunet-arm -c gnunet.conf -s```
the 'bootstrapping' to the network requires that hostlist... need to make a better check for bootstrapping (and eventually figure out how to self-host ad-hoc etc).

users "bob" and chad's config are the same
[arm]
START_SYSTEM_SERVICES = NO
START_USER_SERVICES = YES

[datastore-mysql]
CONFIG = /home/bob/.config/gnunet/gnunet.conf

[hostlist]
OPTIONS = -b -e

[gns]
FORCESTART = YES

[PATHS]
DEFAULTCONFIG = ~/.config/gnunet.conf
LIBEXECDIR = /usr/lib/x86_64-linux-gnu/gnunet/libexec/
DOCDIR = /usr/share/doc/gnunet/
ICONDIR = /usr/share/icons/
LOCALEDIR = /usr/share/locale/
PREFIX = /usr/
BINDIR = /usr/bin/
LIBDIR = /usr/lib/x86_64-linux-gnu/gnunet/
DATADIR = /usr/share/gnunet/



bob and chad start with ```gnunet-arm -c ~/.config/gnunet.conf -s```
now, with every command the user has to specificly pass ``` -c ~/.config/gnunet.conf ```

also, it is important to set up logs and call logs in each command; this is the step where i am realisticly "at" "rn atm", what i'm noticing is that i need a console of sorts
that being so makes cli interface also not intuitive to work with, or very extensive, and following along with the docs tell you to call for things that simply no longer exist, i think it makes sense to just call functions mapped to tiny programs with bash scripts

what's actually going on there is kind of a black box atm, with stuff being sent to core and then core 'figures out' routing...

the higher-level part of this test is to calculate JD (Julian Date) or do astronomical calulations
those are based off of lat & long of the observer, passing that info to the peer would break anonimity naturally, however for the purposes of testing connectivity, you could anonymously pass along the 'effort', the 'do work', 'evaluate a function' portion
that is a better test for this, the way i interpret the available data, i guess, than ping

this specific application may turn out as a bust overall but its a test that will lead to some feedback that will inform the next subsequent tests

another high priority gizmo i'm eventually aiming for is to allow the dillo browser capability to access gnunet:// content
i'm praying that it'd be as easy as building dillo against a socks5 proxy library, but we'll see. i've seen dillo work with dat:// and ipfs, there is also a gemini plugin...

recent successes here
gnunet-messenger basic connectivity, room creation and join, would like to automate / incorporate message passing into some larger project
i created one 'ego' using
```gnunet-identity -C <name> -X```
-X generate an EdDSA identity.
then say
```gnunet-identity --display```
then i hosted one file 'on it' using fs, but the steps used to replicate it... i still need to 'get it' on the other peer to understand better sense-wise, and you get some large chk hash to go with it

eh anyway the early internet was interested people poking at the network, i'm animated by the same spirit, plus we have the benefit of already having an internet to look up technical specifications...
buy worlds patent coin
左手
Guest posting not allowed
Please log in to post a reply.