Syndie

From I2P Wiki
Jump to navigation Jump to search

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

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

  1. Freenet compatibility repaired since Syndie v1.107b-0 released in august 2016
  2. 2014's Freenet patch : http://trac.i2p2.i2p/ticket/1424
  3. http://forum.i2p/viewtopic.php?t=12469&highlight=

External links

  • Forums in Syndie about new releases (files shared) on iMule network