PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : autolearn = failed (spamassassin)



d@tenmaulwurf
23.04.05, 13:13
Hi!

unser SPamfilter läuft endlich ;)
Jedoch erhalte ich manchmal in den Mailheadern folgende Meldung:

X-Spam-Status: No, score=0.0 required=6.0 tests=none autolearn=failed
version=3.0.2

statt wie üblich folgendes:

X-Spam-Status: No, score=3.9 required=6.0 tests=DRUGS_ERECTILE,
DRUGS_ERECTILE_OBFU,NO_REAL_NAME,PRIORITY_NO_NAME,
RAZOR2_CF_RANGE_51_100,RAZOR2_CHECK autolearn=no version=3.0.2

Warum wurden bei dem ersten keine tests gemacht (tests=none) und warum sagt autolearn=failed?

Wobei mich auch wundert, dass beim Zweiten gesagt wird autolearn=no - obwohl auto_learn auf 1 gesetzt ist.

Vielen Dank im voraus,

d@tenmaulwurf

Roger Wilco
23.04.05, 16:07
Warum wurden bei dem ersten keine tests gemacht (tests=none) und warum sagt autolearn=failed?
Der Grund sollte in deinen Logfiles stehen.


Wobei mich auch wundert, dass beim Zweiten gesagt wird autolearn=no - obwohl auto_learn auf 1 gesetzt ist.
Das ist eine FAQ.
Lies mal AutolearningNotWorking (http://wiki.apache.org/spamassassin/AutolearningNotWorking) im SpamAssassin-Wiki.

d@tenmaulwurf
23.04.05, 22:56
Vielen Dank! Jetzt weiß ich zumindest, warum das 'no' im Header zu finden ist.

In den Logfiles steht leider nur folgendes:

...
Apr 23 23:50:58 localhost imapd-ssl: LOGIN, user=XXXXXXXX@nanl.de, ip=[::ffff:84.191.104.96], protocol=IMAP
Apr 23 23:51:00 localhost spamd[19975]: clean message (0.0/6.0) for datenmaulwurf@XXXXXXXX.de:1015 in 2.8 seconds, 6425 bytes.
Apr 23 23:51:00 localhost spamd[19975]: result: . 0 - scantime=2.8,size=6425,mid=<426AC386.3080001@XXXXXXXX.de>,autolearn=failed
Apr 23 23:51:00 localhost postfix/pickup[32700]: B9D883002085: uid=65534 from=<datenmaulwurf@XXXXXXXX.de>
...

Eine Erklärung kann ich leider auch hier nicht finden, WARUM die Mail mit autolearn=failed beschriftet wird. :(

Roger Wilco
24.04.05, 01:24
Eine Erklärung kann ich leider auch hier nicht finden, WARUM die Mail mit autolearn=failed beschriftet wird. :(
Dann starte spamd (oder spamassassin, ja nach Variante) mal mit dem Parameter "--debug" bzw. "-D".

d@tenmaulwurf
24.04.05, 10:53
Jetzt bin ich völlig verwirrt: also, ich habe MySQL als Datenbankbackend für Spamassassin laufen - und es funktioniert auch (z.B. für die eine mailaddy, soll das subject so verändert werden, für die andere so, etc.)

Aber die Debugausgabe sagt mir was anderes:



Apr 24 11:45:34 localhost spamd[11549]: connection from localhost [127.0.0.1] at port 52187
Apr 24 11:45:34 localhost spamd[11549]: debug: Conf::SQL: executing SQL: SELECT preference, value FROM userpref WHERE username = 'lan@X.de' OR username = '$GLOBAL' OR username = CONCAT('%','X.de') ORDER BY username ASC
Apr 24 11:45:34 localhost spamd[11549]: debug: retrieving prefs for lan@X.de from SQL server
Apr 24 11:45:34 localhost spamd[11549]: debug: config: SpamAssassin failed to parse line, skipping: auto_learn_1
Apr 24 11:45:34 localhost spamd[11549]: debug: config: not parsing, administrator setting: bayes_path_/etc/mail/spamassassin/bayes
Apr 24 11:45:34 localhost spamd[11549]: debug: config: SpamAssassin failed to parse line, skipping: bayes_path_/etc/mail/spamassassin/bayes
Apr 24 11:45:34 localhost spamd[11549]: debug: config: SpamAssassin failed to parse line, skipping: always_add_headers_1
Apr 24 11:45:34 localhost spamd[11549]: debug: config: SpamAssassin failed to parse line, skipping: rewrite_subject_1
Apr 24 11:45:34 localhost spamd[11549]: debug: config: SpamAssassin failed to parse line, skipping: use_terse_report_0
Apr 24 11:45:34 localhost spamd[11549]: debug: user has changed
Apr 24 11:45:34 localhost spamd[11549]: debug: using "/home/vmail/.spamassassin" for user state dir
Apr 24 11:45:34 localhost spamd[11549]: debug: mkdir /home/vmail/.spamassassin failed: mkdir /home/vmail: Keine Berechtigung at /usr/share/perl5/Mail/SpamAssassin.pm line 1453_
Apr 24 11:45:34 localhost spamd[11549]: debug: bayes: no dbs present, cannot tie DB R/O: /home/vmail/.spamassassin/bayes_toks
Apr 24 11:45:34 localhost spamd[11549]: debug: Score set 1 chosen.
Apr 24 11:45:34 localhost spamd[11549]: logmsg: processing message <20050424094533.CB75A3002082@mail.X.de> for lan@X.de:1015.
Apr 24 11:45:34 localhost spamd[11549]: processing message <20050424094533.CB75A3002082@mail.X.de> for lan@X.de:1015.
Apr 24 11:45:34 localhost spamd[11549]: debug: bayes: no dbs present, cannot tie DB R/O: /home/vmail/.spamassassin/bayes_toks


Warum versucht der, auf das homedir von vmail zuzugreifen ?!
Ich habe ihm extra in der DB einen Bayes-Pfad gesetzt - nach /etc/spamassassin/bayes

Warum konnte er so viele Configeinstellungen aus der DB nicht parsen ??

Vielen Dank im voraus,

d@tenmaulwurf

d@tenmaulwurf
24.04.05, 11:06
Hi!

Habe jetzt einfach mal nen Homedir für vmail angelegt - dachte durch die bayes_path-Option wäre das nicht notwendig.

Jetzt schreibt er fleissig nach /home/vmail/.spamassassin - naja, wenns nicht anders geht, auch ok.

Folgende Fehler geben mir jedoch noch zu bedenken:

Apr 24 12:01:28 localhost spamd[11550]: debug: config: SpamAssassin failed to parse line, skipping: auto_learn_1
Apr 24 12:01:28 localhost spamd[11550]: debug: config: not parsing, administrator setting: bayes_path_/etc/mail/spamassassin/bayes
Apr 24 12:01:28 localhost spamd[11550]: debug: config: SpamAssassin failed to parse line, skipping: bayes_path_/etc/mail/spamassassin/bayes
Apr 24 12:01:28 localhost spamd[11550]: debug: config: SpamAssassin failed to parse line, skipping: always_add_headers_1
Apr 24 12:01:28 localhost spamd[11550]: debug: config: SpamAssassin failed to parse line, skipping: rewrite_subject_1
Apr 24 12:01:28 localhost spamd[11550]: debug: config: SpamAssassin failed to parse line, skipping: use_terse_report_0

Diese Werte stehen alle in der DB - sie sind doch eigentlich richtig ?!

Laut der SA-Website müssten sie korrekt sein.

Vielen Dank nochmal für alles !!

d@tenmaulwurf

[WCM]Manx
24.04.05, 11:34
Hi!

1.) Deine user_prefs (SQL) Anweisungen sind falsch!
Alle bei denen der Eintrag "SpamAssassin failed to parse line" steht.
rewrite_subject_1 heißt korrekt z.B "rewrite_header subject STRING"
auto_learn heißt "bayes_auto_learn 0|1) usw.

siehe:
http://spamassassin.apache.org/full/3.0.x/dist/doc/Mail_SpamAssassin_Conf.html

Seine Einstellungen dürften noch für SA 2.x gelten

2.) Mit einem MYSQL backend sind per user AWL und per-user bayes nicht so einfach, fast unmöglich.

sitewide bayes bekommst Du mit der Anweisung "bayes_path /path/to/file" in der local.cf.
z.B bayes_path /etc/spamassassin/bayes erstellt die Dateien "bayes_seen"
usw. in /etc/spamassassin
Das "bayes" im Pfad /etc/spamassassin/bayes ist kein Verzeichnisname, sondern ein Teil der bayes Dateinamen, was etwas verwirrend ist.

Grüße

Manx

Roger Wilco
24.04.05, 14:26
Warum versucht der, auf das homedir von vmail zuzugreifen ?!
Hast du spamd auch brav mit den Parametern "--sql-config --nouser-config" gestartet?


Warum konnte er so viele Configeinstellungen aus der DB nicht parsen ??
Wie von [WCM]Manx schon gesagt, verwendest du Optionen, die in SA 2.x zwar gültig waren, die es aber in SA 3.x nicht mehr oder in abgeänderter Form gibt.
Lies dazu mal http://spamassassin.apache.org/full/3.0.x/dist/UPGRADE



Manx']2.) Mit einem MYSQL backend sind per user AWL und per-user bayes nicht so einfach, fast unmöglich.
Nö, einfach spamd mit den richtigen Parametern starten und die MySQL-Zugangsdaten in die Konfigurationsdatei eintragen und schon funktioniert das problemlos. Ist gar kein Hexenwerk...

[WCM]Manx
24.04.05, 19:26
Nö, einfach spamd mit den richtigen Parametern starten und die MySQL-Zugangsdaten in die Konfigurationsdatei eintragen und schon funktioniert das problemlos. Ist gar kein Hexenwerk...
Hi Roger!

Mein Setup läuft zwar mit einem LDAP-Backend, aber das ist ja eigentlich egal.
per-user Auto-White-Lists und bayes schaff ich mit LDAP (--ldap-config) nicht.
--ldap-config und die --virtual-config-dir "Option" schließen sich gegenseitig aus (gleiches gilt für --sql-config).
Ich verwend' jetzt in meinem Testsetup die --virtual-config-dir Option und hab halt im virtuellen Homeverzeichnis des virtuellen Benutzers eine user_prefs Datei und AWL bzw. per-user bayes funktionieren.

Grüße

Manx

PS: oder ich überseh da was ...

Roger Wilco
25.04.05, 16:09
Manx']Mein Setup läuft zwar mit einem LDAP-Backend, aber das ist ja eigentlich egal.
Leider nicht ganz. SpamAssassin unterstützt bislang wohl nur die Speicherung der User Scores in einem LDAP-Verzeichnis, nicht aber die Bayes- und AWL-Daten.


Manx']per-user Auto-White-Lists und bayes schaff ich mit LDAP (--ldap-config) nicht.
--ldap-config und die --virtual-config-dir "Option" schließen sich gegenseitig aus (gleiches gilt für --sql-config).
Bei mir existieren die Benutzer ausschließlich virtuell, d. h. auch die SpamAssassin-Konfiguration wird in der (in meinem Fall) MySQL-Datenbank gespeichert. --virtual-config-dir benötige ich gar nicht. Bei meinem Setup landen die Bayes-, AWL- und Score-Einstellungen direkt in der DB.

Wenn es dir hilft, hänge ich mal meine Konfiguration an. Das ganze funktioniert mit SpamAssassin 3.x.

sql.cf

user_scores_dsn DBI:mysql:spamassassin:localhost:3306
user_scores_sql_username spamassassin
user_scores_sql_password geheim
user_scores_sql_custom_query SELECT preference, value FROM _TABLE_ WHERE username = _USERNAME_ OR username = '$GLOBAL' OR username = CONCAT('%',_DOMAIN_) ORDER BY username ASC

user_awl_dsn DBI:mysql:spamassassin:localhost
user_awl_sql_table awl
user_awl_sql_username spamassassin
user_awl_sql_password geheim

bayes_store_module Mail::SpamAssassin::BayesStore::SQL
bayes_sql_dsn DBI:mysql:spamassassin:localhost
bayes_sql_username spamassassin
bayes_sql_password geheim

MySQL Schemas

--
-- Table structure for table `awl`
--

CREATE TABLE awl (
username varchar(100) NOT NULL default '',
email varchar(200) NOT NULL default '',
ip varchar(10) NOT NULL default '',
count int(11) default '0',
totscore float default '0',
PRIMARY KEY (username,email,ip)
) ENGINE=MyISAM COMMENT='Spamassassin Auto-WhiteList';

--
-- Table structure for table `bayes_expire`
--

CREATE TABLE bayes_expire (
id int(11) NOT NULL default '0',
runtime int(11) NOT NULL default '0',
KEY bayes_expire_idx1 (id)
) TYPE=MyISAM;

--
-- Table structure for table `bayes_global_vars`
--

CREATE TABLE bayes_global_vars (
variable varchar(30) NOT NULL default '',
value varchar(200) NOT NULL default '',
PRIMARY KEY (variable)
) TYPE=MyISAM;

# Wichtig!
INSERT INTO bayes_global_vars VALUES ('VERSION','3');

--
-- Table structure for table `bayes_seen`
--

CREATE TABLE bayes_seen (
id int(11) NOT NULL default '0',
msgid varchar(200) binary NOT NULL default '',
flag char(1) NOT NULL default '',
PRIMARY KEY (id,msgid)
) TYPE=MyISAM;

--
-- Table structure for table `bayes_token`
--

CREATE TABLE bayes_token (
id int(11) NOT NULL default '0',
token char(5) NOT NULL default '',
spam_count int(11) NOT NULL default '0',
ham_count int(11) NOT NULL default '0',
atime int(11) NOT NULL default '0',
PRIMARY KEY (id,token)
) TYPE=MyISAM;

--
-- Table structure for table `bayes_vars`
--

CREATE TABLE bayes_vars (
id int(11) NOT NULL auto_increment,
username varchar(200) NOT NULL default '',
spam_count int(11) NOT NULL default '0',
ham_count int(11) NOT NULL default '0',
token_count int(11) NOT NULL default '0',
last_expire int(11) NOT NULL default '0',
last_atime_delta int(11) NOT NULL default '0',
last_expire_reduce int(11) NOT NULL default '0',
oldest_token_age int(11) NOT NULL default '2147483647',
newest_token_age int(11) NOT NULL default '0',
PRIMARY KEY (id),
UNIQUE KEY bayes_vars_idx1 (username)
) TYPE=MyISAM;

--
-- Table structure for table `userpref`
--

CREATE TABLE userpref (
username varchar(100) NOT NULL default '',
preference varchar(30) NOT NULL default '',
value varchar(100) NOT NULL default '',
prefid int(11) NOT NULL auto_increment,
PRIMARY KEY (prefid),
KEY username (username)
) TYPE=MyISAM COMMENT='Spamassassin Preferences';
Infos dazu: http://spamassassin.apache.org/dist/sql/

[WCM]Manx
25.04.05, 16:50
Hi Roger und Danke!

... so ein sch***ß, da ist die MySQL Lösung dann doch im Vorteil.
Mal schauen, vielleicht stell ich die Sache doch noch um.
... aber nur wegen der user_prefs, MySQL ...

Danke nochmal!

Manx

d@tenmaulwurf
25.04.05, 18:18
Sacht mal - wisst ihr, wo man sich Spams "bestellen" kann?
Ich muss meinen Spamfilter unbedingt trainieren - er filtert derzeit nur sehr, sehr spärrlich. Ich stelle mir so eine Seite vor, wo man seine E-mailaddy angibt und vllt. noch 'ne Checkbox anklickt in der steht: Ja, ich benutze diesen Service nur für meine eigenen Zwecke - nicht um jemanden damit zu schaden - und dann bekomme ich nen Packen von vllt. 100 Spams geliefert.

Gibebt sowas?

Vielen Dank!

BTW: Gibt es noch andere Möglichkeiten, Spamassassin zu optimieren? Habe derzeit bayes und razor im Betrieb (beides von Spamassassin).

Vielen Dank für die sql-config's! Lasse derzeit sämtliches bayes Zeug in /home/vmail/.spamassassin speichern - die SQL-Variante ist natürlich viel schöner, zumal ich sowieso sämtliche SA-userprefs aus der SQL-DB beziehe.

Vielen Dank nochmal an alle für eure Geduld und Hilfe!,

d@tenmaulwurf

Roger Wilco
25.04.05, 19:14
Sacht mal - wisst ihr, wo man sich Spams "bestellen" kann?
Ich könnte dir da einige MByte an Spam zukommen lassen. Auf Wunsch veröffentliche ich deine E-Mail-Adresse auch auf diversen Seiten im Internet ;)
Spass bei Seite, schau dir mal http://www.spamarchive.org/ an.

[WCM]Manx
26.04.05, 07:42
Hallo ihr zwei!

@Roger Wilco

Noch eine kurze Frage zu sa-learn in einem per-user bayes Szenario.
Wie gesagt schwanke ich noch auf MySQL umzustellen, werd das heute noch testen.

Meine Frage bezieht sich auf die sa-learn Problematik.
Sprich: Wie trainieren die Benutzer Ihren persönlichen bayes-Filter?

Meine bisherigen Recherchen bzw. Überlegungen.

Ich hab als Webmail Squirrelmail geplant.

Für mein jetziges Setup kommt nur webuserprefs in Frage. Das ist zwar nicht ganz taufrisch, manche panels passen nicht für SA 3.x, aber es ist anpassbar, funktioniert und man bekommt's mit ein paar Hacks in die Squirrelmail Optionen.

Problem: sa-learn

Meine Vorstellung für eine optimale Lösung:

Der Benutzer hat im Webfrontend einen Button für "Bayes jetzt trainieren", nach Klick wird z.B "sa-learn --prefs-file=/home/vmail/%username/... --folders=..." ausgeführt.

Weniger schöne Lösung:

Der Benutzer bekommt die von SA markierten Mails in einen "marked-SPAM" Ordner, hat zusätzlich einen HAM bzw. SPAM Ordner und muss die Mails händisch dort hineinkopieren (in Squirrelmail kann man nicht kopieren, nur verschieben!!).
sa-learn dann per cron.

Vorschläge, wie handhabt's ihr das?

Grüße

Manx

Roger Wilco
26.04.05, 08:03
Manx']Meine Frage bezieht sich auf die sa-learn Problematik.
Sprich: Wie trainieren die Benutzer Ihren persönlichen bayes-Filter?
Ich habe das über einen eigenen IMAP-Folder gelöst. Jeder Benutzer hat einen Ordner, in den er nicht-erkannten Spam verschieben kann. Nachts läuft dann ein Cronjob, der diese Mails für den entsprechenden Benutzer anlernt und die Mail sowohl in sa-learn, als auch dspam füttert.
Das gleiche Spiel mache ich mit false-positives, also Mails, die fälschlich als Spam erkannt wurden (was praktisch nie vorkommt).


Manx']Für mein jetziges Setup kommt nur webuserprefs in Frage. Das ist zwar nicht ganz taufrisch, manche panels passen nicht für SA 3.x, aber es ist anpassbar, funktioniert und man bekommt's mit ein paar Hacks in die Squirrelmail Optionen.
Es gibt das SpamAssassin+SQL (SASQL) Plugin: http://squirrelmail.org/plugin_view.php?id=167


Manx'](in Squirrelmail kann man nicht kopieren, nur verschieben!!).
Stimmt leider, wobei das bei meinem Setup egal ist, da die Benutzer lokale Mailclients benutzen und kein Webinterface.

[WCM]Manx
26.04.05, 08:08
Hi & Danke!

Das Squirrelmail SA-MySQL Plugin ist mir bekannt, allerdings hab' ich's mangels SQL dann nicht getestet.

Ich seh schon, ich muss PHP lernen ;)

Danke

Manx

d@tenmaulwurf
26.04.05, 12:27
mit PHP kann man viel falsch machen !!

Ich sag nur, system, exec, shell_exec, etc...

Auch wenns noch so verlockend ist: Diese Funktionen NIE benutzen!

d@tenmaulwurf
26.04.05, 12:35
Es gibt das SpamAssassin+SQL (SASQL) Plugin: http://squirrelmail.org/plugin_view.php?id=167


Das Plugin scheint nur für SA 2.x zu sein. Die meisten Optionen in der Liste (s.u.) sind in 3.x hinfällig (ja, ich lerne dazu ;))



SUPPORTED SPAMASSASSIN SETTINGS

* [un]whitelist_from / [un]blacklist_from / whitelist_to
* required_hits
* use_terse_report
* rewrite_subject
* subject_tag
* use_dcc
* use_razor1
* use_razor2
* always_add_header
* ... and many more



\\ EDIT: Ok, ok, habe wieder nicht richtig gelesen ;)

Revision:



Version 3.1.0a
by Randy Smith on Jan 3, 2005
[ download ] Requires: SquirrelMail 1.4.x; PHP PEAR-DB
Description:

* Add Support for SpamAssassin 3
* Move learing buttons to the Options line.
* Quiet a few warnings about undefined settings.


Hab doch nochma ne Verständnisfrage:

Sehe ich das richtig, dass bayes und auto_learn gaaanz dick zusammenhängt? Ich meine, ohne bayes würde auto_learn ja nix bringen, richtig? Aber warum gibt es dann seperate Schalter (bayes 1|0, auto_learn 1|0) ?

Zu den per user bayesfiltern. Wäre es nicht sinnvoller einen generellen bayesfilter anzulegen? Ich meine, welcher User macht sich schon richtig die Mühe auszusortieren und sa was beizubringen - nicht wirklich jeder.
Wenn man generell einen anlegen würde, würden doch alle was davon haben! Jeder würde sozusagen jedem helfen! Ich denke, dass ist mehr wert, als individuelle Anpassungen...

Oder sehe ich das falsch (Lasse mir gerne was anderes sagen)?


Zu deiner SA-Konfiguration, die du angehängt hast:
Wird da jetzt schon zwischen Usern differenziert? Ich weiß ja nicht, ob SA das intern schon so handled, dass da 'per mailadresse' eingetragen wird.

Danke ;)

d@tenmaulwurf
26.04.05, 13:30
Habe es jetzt schlichtweg einfach mal ausprobiert:

sql-queries in phpmyadmin (also die bayes-dinger, die userpref habe ich ja schon und awl habe ich jetzt mal außen vor gelassen).
Zusätzlich habe ich noch die locale.conf angeppasst (ebenfalls nur das bayeszeug, da meine userpref da ja auch schon enthalten ist).

Die Startparameter von Spamassassin habe ich jetzt weitergehend nicht verändert.

Mein Aufruf lautet derzeit so: OPTIONS="--port 8965 --create-prefs --max-children 5 -q -x -u vmail --debug"

--debug sagt mir folgendes:



Apr 26 14:14:42 localhost spamd[27278]: debug: bayes: Database connection established
Apr 26 14:14:42 localhost spamd[27278]: Use of uninitialized value in concatenation (.) or string at /usr/share/perl5/Mail/SpamAssassin/BayesStore/SQL.pm line 157, <GEN9> line 2.
Apr 26 14:14:42 localhost spamd[27278]: debug: bayes: found bayes db version
Apr 26 14:14:42 localhost spamd[27278]: Use of uninitialized value in numeric ne (!=) at /usr/share/perl5/Mail/SpamAssassin/BayesStore/SQL.pm line 159, <GEN9> line 2.
Apr 26 14:14:42 localhost spamd[27278]: Use of uninitialized value in concatenation (.) or string at /usr/share/perl5/Mail/SpamAssassin/BayesStore/SQL.pm line 160, <GEN9> line 2.
Apr 26 14:14:42 localhost spamd[27278]: bayes: Database version is different than we understand (3), aborting! at /usr/share/perl5/Mail/SpamAssassin/BayesStore/SQL.pm line 160, <GEN9> line 2.
Apr 26 14:14:42 localhost spamd[27278]: debug: Score set 1 chosen.
Apr 26 14:14:42 localhost spamd[27278]: logmsg: processing message <375144482.20050426141749@XX.de> for YY@XX.de:1015.
Apr 26 14:14:42 localhost spamd[27278]: processing message <375144482.20050426141749@XX.de> for YY@XX.de:1015.
Apr 26 14:14:42 localhost spamd[27278]: debug: bayes: Database connection established
Apr 26 14:14:42 localhost spamd[27278]: Use of uninitialized value in concatenation (.) or string at /usr/share/perl5/Mail/SpamAssassin/BayesStore/SQL.pm line 157, <GEN9> line 59.
Apr 26 14:14:42 localhost spamd[27278]: debug: bayes: found bayes db version
Apr 26 14:14:42 localhost spamd[27278]: Use of uninitialized value in numeric ne (!=) at /usr/share/perl5/Mail/SpamAssassin/BayesStore/SQL.pm line 159, <GEN9> line 59.
Apr 26 14:14:42 localhost spamd[27278]: Use of uninitialized value in concatenation (.) or string at /usr/share/perl5/Mail/SpamAssassin/BayesStore/SQL.pm line 160, <GEN9> line 59.
Apr 26 14:14:42 localhost spamd[27278]: bayes: Database version is different than we understand (3), aborting! at /usr/share/perl5/Mail/SpamAssassin/BayesStore/SQL.pm line 160, <GEN9> line 59.


Was darf ich darunter verstehen? Habe mir meine mySQL-DB selber kompiliert - database version different? Für ein paar SQL-Abfragen und insertes, kann dem Ding die MySQL-Version doch piep egal sein eigentlich oder?

Hier die entsprechenden Zeilen aus der ausgegeben Datei SQL.pm:



154 # If the DB version is one we don't understand, abort!
155 my $db_ver = $self->_get_db_version();
156 $self->{db_version} = $db_ver;
157 dbg("bayes: found bayes db version ".$self->{db_version});
158
159 if ( $db_ver != $self->DB_VERSION ) {
160 warn("bayes: Database version $db_ver is different than we understand (".$self-> DB_VERSION."), aborting!");
161 $self->untie_db();
162 return 0;
163 }


In die einzelnen Tabellen wurde jedoch (leider) nix eingetragen...

Vielen, vielen Dank nochmal (und im voraus),

d@tenmaulwurf


\\ EDIT: Ich kapier das nich :x habe MySQL 4.1.10a am Laufen und die userprefs werden ja auch erfolgreich aus der DB bezogen.

Meine local.cf:



user_scores_dsn DBI:mysql:c0nf1G:localhost
user_scores_sql_username mysqluser
user_scores_sql_password mysqlpw
user_scores_sql_custom_query SELECT preference, value FROM userpref WHERE username = _USERNAME_ OR username = '$GLOBAL' OR username = CONCAT('%',_DOMAIN_) ORDER BY username ASC

bayes_store_module Mail::SpamAssassin::BayesStore::SQL
bayes_sql_dsn DBI:mysql:c0nf1G:localhost
bayes_sql_username mysqluser
bayes_sql_password mysqlpw


Bitte helft mir :(

Roger Wilco
26.04.05, 13:51
Sehe ich das richtig, dass bayes und auto_learn gaaanz dick zusammenhängt? Ich meine, ohne bayes würde auto_learn ja nix bringen, richtig? Aber warum gibt es dann seperate Schalter (bayes 1|0, auto_learn 1|0) ?
Da liegst du schon richtig. Aber auto_learn gibt an, ob Mails ab einem bestimmten Threshold (bayes_auto_learn_threshold_spam/nonspam) automatisch angelernt werden sollen. use_bayes gibt an, dass die Mails mit dem Bayes klassifiziert werden sollen. Man will ja vielleicht nicht unbedingt, dass alle Mails gleich automatisch angelernt werden, nur weil sie einen hohen Score haben.


Zu den per user bayesfiltern. Wäre es nicht sinnvoller einen generellen bayesfilter anzulegen?
Jein, vielleicht steht ja jemand auf die Spam-Mails. Und vielleicht klassifiziert ein Benutzer einen gewissen Newsletter als Spam, während ihn der andere gern lesen will.
Globale Bayesfilter sind halt immer so eine Sache, die die Präferenzen der einzelnen Benutzer ausser Acht lässt.



Zu deiner SA-Konfiguration, die du angehängt hast:
Wird da jetzt schon zwischen Usern differenziert? Ich weiß ja nicht, ob SA das intern schon so handled, dass da 'per mailadresse' eingetragen wird.
Ja, wird. Aber das hängt wiederum davon ab, wie du SA aufrufst. Bei mir läuft das bspw. über Exiscan (mit Exim 4 als MTA).


In die einzelnen Tabellen wurde jedoch (leider) nix eingetragen...
Das ist der Fehler. Bei meinem DB-Schema fehlt eine kleine, aber wichtige Zeile:

INSERT INTO bayes_global_vars VALUES ('VERSION','3');
Dadurch wird die Version der Bayes-Datenbank angegeben, eben Version 3 für SA 3.x.

Infos findest du auch unter http://spamassassin.apache.org/dist/sql/

d@tenmaulwurf
26.04.05, 15:57
Perfekt!

Spamassassin spuckt keine Fehler mehr aus (auch nich im Debug-Modus).

Das einzige was mich irritiert sind die Einträge in der bayes_token-Tabelle - das sieht nämlich folgendermassen aus:


id token spam_count ham_count atime
Edit Delete 2 ½mÄàœ 0 1 1114526653
Edit Delete 2 5¤ ¸W 0 1 1114526653
Edit Delete 2 ›¦ŸAì 0 1 1114526653
Edit Delete 2 a‡¯3e 0 1 1114526653
Edit Delete 2 § hÍÜ 0 1 1114526653
Edit Delete 2 é³#Év 0 1 1114526653
Edit Delete 2 ¡ 2×. 0 1 1114526653
Edit Delete 2 È?Lè 0 1 1114526653
Edit Delete 2 OtS 0 1 1114526653
Edit Delete 2 ƒgÊ·ã 0 1 1114526653

Ist das normal?

Und dann noch eine Frage: Mit welchem Parameter sage ich sa-learn, dass alle spams/hams in diesem Ordner, nur für einen bestimmten user gelten? mit welchem parameter muss ich sa-learn dann aufrufen? Und hat evtl. schon jmd. ein entsprechendes Script, welches vom cron aufgerufen werdenn kann und spams/hams dann userdifferenziert dann eigenständig in die DB einsortiert?

Vielen Dank - juhuu - es geht ;)

\\ EDIT: Ohoh, obige Tabelle sieht zwar immernoch so aus, aber da drüber steht noch was: Showing rows 0 - 29 (22072 total, Query took 0.0017 sec)

22072 Einträge von dieser Sorte... - das ist nicht normal, oder?

\\ EDIT2: Habe noch eine weitere Frage: Mir ist nich so ganz ersichtlich, wo SA/Bayes nun mit sa-learn gelernte Mails hinpackt. Ich sehe nirgendwo einen Mailinhalt, welcher von SA aufgenommen wurde. Wo werden diese Mails gespeichert? Ich meine - irgendwo muss SA ja Mails hinpacken, die es mit autolearn=yes deklariert hat (ebenso mit ham).

Zudem funktioniert ein einfaches: sa-learn --spam --username=EMAILADRESSE /pfad/zur/mail
auch nicht - denke ich da zu primitiv?

Er sagt zwar am Ende, dass er sie gelernt hat, aber in der MySQL-DB steht nix davon :/

Vielen Dank zum x. Mal ;)

d@tenmaulwurf

d@tenmaulwurf
27.04.05, 08:35
In bayes_token sind nun genau 152987 Zeilen, welche alle (wenn auch in ein wenig abgeänderter Form) so aussehen, wie oben.

:x

Roger Wilco
27.04.05, 11:47
Ist das normal?
Ja. Wer sagt denn, dass die Daten für Menschen lesbar sein müssen? ;)


Und dann noch eine Frage: Mit welchem Parameter sage ich sa-learn, dass alle spams/hams in diesem Ordner, nur für einen bestimmten user gelten?

sa-learn -u benutzername


ein entsprechendes Script, welches vom cron aufgerufen werdenn kann und spams/hams dann userdifferenziert dann eigenständig in die DB einsortiert?
Ja, das ist aber auf die Nutzung mit Cyrus IMAP und virtuellen Domains ausgelegt. Wenn du was anderes verwendest, funktioniert es nicht.



\\ EDIT2: Habe noch eine weitere Frage: Mir ist nich so ganz ersichtlich, wo SA/Bayes nun mit sa-learn gelernte Mails hinpackt. Ich sehe nirgendwo einen Mailinhalt, welcher von SA aufgenommen wurde. Wo werden diese Mails gespeichert? Ich meine - irgendwo muss SA ja Mails hinpacken, die es mit autolearn=yes deklariert hat (ebenso mit ham).
Das sind die kryptischen Zeichen in der Bayes-DB. Wenn SA jedesmal den kompletten Mailinhalt speichern würde, dauerte die anschließende Klassifizierung einer Mail wesentlich länger.


Zudem funktioniert ein einfaches: sa-learn --spam --username=EMAILADRESSE /pfad/zur/mail
auch nicht - denke ich da zu primitiv?
Was sagt sa-learn, wenn du den Debug-Level ("-D") erhöhst?

d@tenmaulwurf
27.04.05, 16:11
OK, dann bin ich ja beruhigt - sind jetzt nämlich schon 257735 Zeilen - seit gestern, wow.

Werd' mir gleich nochma die genauen Debug-Meldungen anguggn, wie es aussieht mit sa-learn.

Hast du zufällig irgendeinen IM-Dienst oder bist im IRC vertreten? Will jetzt keinen Support von dir - aber vllt. ist das effizienter, wenn man das einmal richtig macht - nur wenn's ok für dich iss. Meine ICQ steht in meinem Profil.

-----

\\ EDIT:

Also ich habe ein Problem jetzt: Es ist (bitte keine Prädigt, dass man sowas dort nicht austestet) ein produktivsystem, wo ich bei eingeschaltetem Debug-Modus die Meldungen sehr, sher schlecht auseinanderhalten kann.

Ich habe jedoch in dem ganzen Wirrwarr keine fehlermessage erblicken können. In der mail.err und mail.warn waren diesbezüglich keine Meldungen drin.

Meine Vermutung, dass es nich funzt, beruft sich aber auch nur darauf, dass ich mir eine selbst verfasste Mail zukommen lassen habe (sie wurde mit autolearn=ham deklariert im header) und sie als SPAM mit sa-learn für meine emailadresse anlernen ließ.

Dann habe ich mir diese Mail nochmals geschickt - sie wurde NICHT als Spam markiert, im Header stand auch das wie vorher: autolearn=ham.

\\ EDIT2: Laut log-files werden sehr wohl als ham/spam markierte-Einträge in die Datenbank übernommen. Mein sa-learn-Aufruf scheint damit dann das Prob zu sein :x