Syndie
Introduction
About
The software Syndie (for "Syndication") is tool like a news reader/distributor. It distribute messages of various sizes between the syndies instances of different users. All messages are encrypted and bound to a special forum/board, which are created by the users.
On syndicating (synching), the messages between two Syndie instances are exchanged, and this way all messages hop through the net from one user to another. Syndie can use different transport networks:
- currently working (2016): I2P, Tor, clearnet, Freenet[1],[2]
- need to be developped: transport via USB stick, email, FTP, NNTP.
Screenshot
A Syndie user (nickname: 'Syndie user 17855') browsing a forum named 'Syndie chat':
File:Syndie user browsing a forum.png
How to get it
- Mirror eepsite of the installation files : http://echelon.i2p/syndie/
User guide
A full user guide is available:
- inside this Wiki : Syndie Handbook
- outside this Wiki : read the links in "#External links" section, where you will find a link to the eepsite "Syndie Documentation Project", then follow the link "User guide".
Tips and tricks
How to reset to the default archives known
Syndie comes preconfigured with several default archives addresses. Those archives that can be (un)selected during the first start.
If you start Syndie but have no archives configured (maybe you clicked cancel or ran it a long time ago), you can either:
- Manually add some archives (see a list in the section below)
or (the destructive way), quit Syndie then:
Warning: this will delete all your own Syndie profile !
- Under Linux/OSX: erase '~/.syndie' (Linux/OSX) then start Syndie
- Under Windows XP: erase C:\documents and settings\username\.syndie then start Syndie
- Under Windows Vista/7: erase 'C:\Users\USERNAME\.syndie' then start Syndie
A unofficial list of archives
Note: a more "official" list of archives is available on http://www.syndie.i2p/wiki/ ("List of known archives"). Readable on this copy of the [[Syndie_Documentation_Project/Standard_GUI/Syndie_Handbook#Partial_list_of_known_archives|Syndie_Handbook].
Note: you can know the last uptime date of a eepsite/archive with the help of http://inr.i2p
Syndicating in order to get very old messages
When syndicating (syncing), your Syndie client will retrieve several forums and posts, many of which you will be able to reply to. Every user has his/her own forum, and its posting rights can be as strict as desired.
To get older messages from a archive than the default setting ("2 weeks" as of 2015-12), you may change the setting "Age to treat as 'recent'" into a archive's settings (mouse: right button).
How to restore your Syndie if its database is corrupted
Example of error messages related :
- 'syndie.db.DBClient : Internal error building ancestors'
- 'syndie.db.DBClient : Error retrieving the channel hash'
If you have not backup your 'Secrets' (keys of your identities and of their forums), do it : You stop using Syndie ?: backup your secrets (keys) !
Then read : If your Syndie is break (unknown error message).
Advanced users
Setup to run a headless Syndie server (OS: Linux)
When running in CLI mode (Command Line Interface, called "headless"), Syndie use less RAM memory.
Manually
User Eche|on (2013) do start Syndie with "java -jar syndie-cli.jar /path/to/syndiearchive". Within syndie, type "prefs --paginate false" to not need press enter every x lines, then start the httpd server with this line: "httpserv --port 8080 --listeners 10 --writeable true". Should explain itself. To logout and exit, type: "exit".
Automatically (script)
If you want to run a headless Syndie server (to which other instances can sync only with), you can use the following script. Script wrote by KillYourTV, jan 2013 (ref). Confirmed working with v1.105b-0:
1
2#!/bin/sh
3
4# Syndie background archive controller
5# kytv, Jan 2013
6
7##########################################
8# Set these per your needs #
9##########################################
10ARCHIVEDIR=
11SYNDIECMD="java -Djava.net.preferIPv4Stack=true -jar $HOME/syndie/bin/syndie-cli.jar"
12SYNDIEPORT=8080
13SYNDIELISTENERS=10
14
15##########################################
16# Nothing below here should need editing #
17##########################################
18if [ "x$ARCHIVEDIR" = "x" ]; then
19 echo "ERROR: ARCHIVEDIR not configured!" >&2
20 exit 1
21fi
22PIDFILE="$ARCHIVEDIR/httpserv.pid"
23if [ -e "$PIDFILE" ]; then
24 PID=$(cat "$PIDFILE")
25fi
26
27
28create_config(){
29 cat << EOF > "$ARCHIVEDIR/runhttpserv.syndie"
30httpserv --port $SYNDIEPORT --listeners $SYNDIELISTENERS --writable true
31ctrlserv
32EOF
33}
34
35do_start() {
36 if [ -e "$PIDFILE" ]; then
37 PID=$(cat "$PIDFILE") 2>/dev/null
38 else
39 unset PID
40 fi
41 if [ "x$PID" != "x" ]; then
42 if ! kill -0 "$PID" > /dev/null 2>&1; then
43 rm "$PIDFILE"
44 else
45 echo "An instance of Syndie is already running at $PID!" >&2
46 exit 0
47 fi
48 fi
49 create_config
50 echo -n "Starting Syndie..."
51 cd "$ARCHIVEDIR"
52 TZ=UTC nohup $SYNDIECMD --nostdin @runhttpserv.syndie . >> $ARCHIVEDIR/syndie.log 2>&1 &
53 echo $! > "$PIDFILE"
54 echo "done."
55}
56
57do_stop(){
58 if [ -e "$PIDFILE" ]; then
59 echo -n "Stopping (this could take a while)."
60 kill "$PID" 2> /dev/null
61 while kill -0 "$PID" 2> /dev/null; do
62 echo -n .
63 sleep 1.5
64 done
65 rm "$PIDFILE"
66
67echo done.
68 else
69 echo "Syndie is not running." >&2
70 fi
71}
72
73
74case "$1" in
75 start)
76 do_start
77 ;;
78status)
79 if [ ! -r $PIDFILE ]; then
80 echo "Cannot find $PIDFILE. Syndie is probably not running." >&2
81 exit 4
82 fi
83
84if [ ! -f $PIDFILE -o -z $PID ]; then
85 echo "Syndie is not running" >&2
86 exit 3
87 fi
88
89if kill -0 $PID > /dev/null 2>&1 ; then
90 echo "Syndie is running [$PID]" >&2
91 exit 0
92 else
93 echo "Syndie is not running." >&2
94 rm "$PIDFILE"
95 exit 1
96 fi
97 ;;
98 restart)
99 do_stop
100 sleep 2
101 do_start
102 ;;
103 stop)
104 do_stop
105 ;;
106 *)
107 echo "Usage: $0 {stop, start, status, restart}"
108 ;;
109esac
Customization:
- Suggested filename for the script: syndiectrl.sh
- Example: ARCHIVEDIR=/home/yourusername/syndie
Using Syndie as a portable software
This is possible (ref: forum.i2p thread (2014)), just start Syndie and specify where you want the profile directory to be saved, e.g.:
Command line example for Windows:
X:\PortableApps\Syndie\bin\Syndie.exe X:\PortableApps\Syndie\Data
Command line example for Linux:
$HOME/syndie/bin/syndie.sh /your/profile/location
(this line use the default Syndie software location in order to create the default profile data, such as the new folders)
java -jar $HOME/syndie/bin/syndie.jar /your/profile/location/usr/bin/syndie /your/archive/location
(this line launches Syndie while specifying your customized profile)
For supported systems (Windows, Linux, OSX) you only need to supply Java, everything else is included within the Syndie installer. Another option is to run Syndie as a plugin to I2P.
Apparmor profile for Syndie
In 2016, Deb-mirror posted[3] the script he made for Syndie to work with Apparmor (see Wikipedia).
@{INSTALL_DIR} = /home/user/syndie #include <tunables/global> /home/user/syndie/bin/syndie.sh { #include <abstractions/base> /usr/lib/jvm/java-?-openjdk-{amd64,armel,armhf,i386,powerpc}/jre/bin/java Cx -> java, /usr/lib/jvm/java-?-openjdk/jre/bin/java Cx -> java, @{INSTALL_DIR}/bin/syndie.sh r, profile java { #include <abstractions/base> deny /etc/nsswitch.conf r, deny @{PROC}/** r, deny /sys/** r, /etc/fonts/** r, /etc/java-?-openjdk/jvm-*.cfg r, /etc/java-?-openjdk/logging.properties r, /etc/java-?-openjdk/net.properties r, /etc/java-?-openjdk/security/java.security r, /etc/java-?-openjdk/security/nss.cfg r, /etc/java-?-openjdk/tz.properties r, /etc/passwd r, /etc/timezone r, /tmp/ r, owner /tmp/hsperfdata_*/ rw, owner /tmp/hsperfdata_*/* rw, /usr/lib/jvm/java-?-openjdk-{amd64,armel,armhf,i386,powerpc}/jre/bin/java mr, /usr/lib/jvm/java-?-openjdk/jre/bin/java mr, /usr/local/share/fonts/ r, /usr/share/dict/* r, /usr/share/fontconfig/conf.avail/*.conf r, /usr/share/fonts/ r, /usr/share/fonts/** r, /usr/share/icons/ r, /usr/share/icons/** r, /usr/share/java/java-atk-wrapper.jar r, /usr/share/javazi/** r, /usr/share/mime/mime.cache r, /usr/share/pixmaps/ r, /usr/share/poppler/cMap/*/ r, /usr/share/themes/** r, /var/cache/fontconfig/*.cache-4 r, /var/tmp/ r, owner @{HOME}/.Xauthority r, owner @{HOME}/.cache/fontconfig/*.cache-4 r, owner @{HOME}/.config/font-manager/conf.d/ r, owner @{HOME}/.config/fontconfig/fonts.conf r, owner @{HOME}/.fonts/ r, owner @{HOME}/.local/share/font-manager/Library/ r, owner @{HOME}/.local/share/fonts/ r, owner @{HOME}/.local/share/icons/ r, owner @{HOME}/.local/share/icons/** r, owner @{HOME}/.local/share/mime/mime.cache r, owner @{HOME}/.swt/lib/linux/x86_64/*.so mr, owner @{HOME}/.syndie/ w, owner @{HOME}/.syndie/archive/ rw, owner @{HOME}/.syndie/archive/*/ rw, owner @{HOME}/.syndie/archive/*/*.syndie rw, owner @{HOME}/.syndie/db/ rw, owner @{HOME}/.syndie/db/syndie.backup rw, owner @{HOME}/.syndie/db/syndie.data rw, owner @{HOME}/.syndie/db/syndie.lck rw, owner @{HOME}/.syndie/db/syndie.lobs rw, owner @{HOME}/.syndie/db/syndie.log w, owner @{HOME}/.syndie/db/syndie.properties rw, owner @{HOME}/.syndie/db/syndie.properties.new rw, owner @{HOME}/.syndie/db/syndie.script rw, owner @{HOME}/.syndie/db/syndie.script.new rw, owner @{HOME}/.syndie/db/syndie.tmp/ rw, owner @{HOME}/.syndie/indexes/ w, owner @{HOME}/.syndie/indexes/*-shared-index.dat w, owner @{HOME}/.syndie/keyBackup/ w, owner @{HOME}/.syndie/keyBackup/nymkeys.*.zip w, owner @{HOME}/.syndie/logs/ w, owner @{HOME}/.syndie/logs/syndie-log-*.txt w, owner @{HOME}/.syndie/outbound/ w, owner @{HOME}/.syndie/outbound/*/ w, owner @{HOME}/.syndie/outbound/*/*.syndie rw, owner @{HOME}/.syndie/scripts/ w, owner @{HOME}/.syndie/scripts/defaultaliases rw, owner @{HOME}/.syndie/scripts/defaultprefs rw, owner @{HOME}/.syndie/scripts/login rw, owner @{HOME}/.syndie/scripts/newdatabase rw, owner @{HOME}/.syndie/scripts/startup rw, owner @{HOME}/.syndie/tmp/ rw, owner @{HOME}/.syndie/tmp/* rw, owner @{HOME}/.syndie/web/ w, owner @{HOME}/.syndie/web/favicon.ico w, owner @{HOME}/.syndie/web/index.html w, owner @{HOME}/.syndie/web/robots.txt w, @{INSTALL_DIR}/bin/ r, @{INSTALL_DIR}/bin/syndie.jar r, @{INSTALL_DIR}/lib/hsqldb.jar r, @{INSTALL_DIR}/lib/i2p.jar r, @{INSTALL_DIR}/lib/swt.jar r, @{INSTALL_DIR}/lib/syndie.jar r, } }
Save this profile to /etc/apparmor.d/home.user.syndie.bin.syndie.sh (adjust home.user.syndie to match your installation directory)
You have to adjust the path /home/user/syndie to where you have installed Syndie. Also this profile is only active when you start Syndie via the syndie.sh file, which is unfortunately not the case for the menu entry created by the installer, so you have to adjust it:
1. Open the file
~/.local/share/applications/Syndie-*.desktop
2. change the line
Exec=java -jar "/home/user/syndie/bin/syndie.jar"
to
Exec=/home/user/syndie/bin/syndie.sh
then save.
You can check if the profile is active by executing aa-status (requires root). If Syndie is running it should say something like:
... 5 processes are in enforce mode. /home/user/syndie/bin/syndie.sh (32499) /home/user/syndie/bin/syndie.sh//java (32501)
The profile was currently only tested under Debian 8.4 (amd64) with OpenJDK 7 and Cinnamon desktop environment. Server functionality was not tested.
Known issues:
- File import and export will not work unless you allow read access to the source.
- Running a server will very likely not work as this use case was not covered during profile creation.
See also
References
- ↑ Freenet compatibility repaired since Syndie v1.107b-0 released in august 2016
- ↑ 2014's Freenet patch : http://trac.i2p2.i2p/ticket/1424
- ↑ http://forum.i2p/viewtopic.php?t=12469&highlight=
External links
- Forums in Syndie about new releases (files shared) on iMule network
- (es) Syndie manual (2015). Copied from the Syndie Documentation Project.
- http://trac.i2p2.i2p - List of Syndie's open issues