Hook für IMAP Komandos

Status
Für weitere Antworten geschlossen.

Hawk999

Benutzer
Mitglied seit
08. Feb 2010
Beiträge
273
Punkte für Reaktionen
0
Punkte
16
Hätte ich die getmail.sh so lassen müssen. Hatte sie nämlich auf den Ursprungszustand geändert
Rich (BBCode):
#!/tmp/sh
PATH=/opt/bin:/opt/sbin:/opt/sbin:/opt/bin:/usr/sbin:/usr/bin:/sbin:/bin:/bin:/s
/opt/bin/getmail -q -d --rcfile /volume1/homes/User/.getmail/gmx.rc
 

Hawk999

Benutzer
Mitglied seit
08. Feb 2010
Beiträge
273
Punkte für Reaktionen
0
Punkte
16
ha wie geil ist das denn. Es funktioniert. Vielen Dank an alle!!!!!! :D:D:D:D:D
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
PATH musst du in deiner getmail.sh natürlich wieder auf einen "brauchbaren" Wert setzen. Sonst wird /tmp übernommen und dein getmail.sh scheitert
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
ha wie geil ist das denn. Es funktioniert. Vielen Dank an alle!!!!!!
Das heisst, die Platten schlafen sauber ein? Sehr schön, dann werde ich das mal wieder in meinen Code im svn übernehmen. :)
Bedank dich v.a. bei goetz, denn er hatte letztendlich die zündende Idee ;)

Als TODO habe ich mir mal noch vorgenommen, dass das Script erkennen kann welche(r) User angemeldet sind/ist und dann nur die getmail.sh starten die einem angemeldeten User gehört.
 

Hawk999

Benutzer
Mitglied seit
08. Feb 2010
Beiträge
273
Punkte für Reaktionen
0
Punkte
16
@jahlives
Ja sie legt sich schlafen!! Das steht mir auch noch bevor. Ein Konto ist eingebunden. Nun kommt das zweite! :D

@goetz
Vielen Dank an dich.
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
@jahlives
Ja sie legt sich schlafen!! Das steht mir auch noch bevor. Ein Konto ist eingebunden. Nun kommt das zweite! :D
Hier mal eine Idee wie es mit verschiedenen Usern klappen könnte. Das Script muss nun unter root laufen, damit Zugriff auf die Homeverzeichnisse der User besteht.
Wenn ein oder mehrere User angemeldet sind stellt das Script den Eigentümer des imap Prozesses fest und sucht dann in dessen home nach getmail.sh (wie das Script heisst, kannst du mit pfad_getmail festlegen). Für alle gefundenen getmail.sh im User home wird dann der Abholprozess mit su user ausgeführt.

Wenn kein User angemeldet ist legt sich das Script schlafen und nach der eingestellten Zeit holt das Script alle getmail.sh aus /volume1/homes (also die getmail.sh aller User) und führt diese dann wiederum mittels su als Eigentümer der Datei aus.

Zur Zeit macht das Scipt nur Testausgaben von den Befehlen, die es ausführen würde. Auch ist der sleep zum Testen auf 5sek eingestellt, damit man schneller sehen kann was geht.
Die benötigten Befehle erstellt das Script selber in /tmp (bis auf /tmp/sh welches du manuell anlegen musst).
Code:
#!/tmp/sh
## Name der Datei, die die getmail Befehle fuer den User hat
pfad_getmail=getmail.sh
## Logfile
getmail_log=/path/to/log

if test -e /tmp/checkmaill ; then
 echo "Code rennt bereits"
 exit
elif test "$(whoami)" != "root" ; then
 echo "Das Script MUSS unter root laufen. Mittels su <user> holt das Script die Emails dann als <user> ab"
 exit
elif test ! -e $getmail_log ; then
 echo "Das Logfile unter $getmail_log konnte nicht gefunden werden"
 exit
fi


## Benoetigte Kommandos in /tmp "erstellen", damit die Platten durchschlafen können
## WICTHIG: Der Link zwischen /tmp/busybox und /tmp/sh MUSS manuell vor dem Aufruf der Scriptes erstellt werden!!
cp -f /bin/busybox /tmp/ > $getmail_log 2>&1
ln -s /tmp/busybox /tmp/sleep > $getmail_log 2>&1
ln -s /tmp/busybox /tmp/expr > $getmail_log 2>&1
ln -s /tmp/busybox /tmp/test > $getmail_log 2>&1
ln -s /tmp/busybox /tmp/pidof > $getmail_log 2>&1
ln -s /tmp/busybox /tmp/cut > $getmail_log 2>&1
ln -s /tmp/busybox /tmp/ls > $getmail_log 2>&1
ln -s /tmp/busybox /tmp/grep > $getmail_log 2>&1
ln -s /tmp/busybox /tmp/su > $getmail_log 2>&1
ln -s /tmp/busybox /tmp/find > $getmail_log 2>&1

i=0
touch /tmp/checkmaill
echo $$ > /tmp/checkmaill
PATH=/tmp
while true; do
 s=`pidof imap`
 t=''
 if test "$s" != '' ; then
  for var in $s ; do
   tt=`ls -all /proc | grep $var | cut -d' ' -f6`
   if test "$tt" != "$t" ; then
     for ii in `find /volume1/homes/$tt -name $pfad_getmail`; do
      echo "su $tt -c \"$ii\" > $getmail_log 2>&1"
     done
   t=$tt
   else
     echo "Benutzer bereits bearbeitet"
   fi
  done
  i=`expr $i + 1`
  sleep 5
 else
  tt=''
  i=`expr $i + 1`
  sleep 1
  if test `expr $i % 5` -eq 0 ; then
   i=0
   for ii in `find /volume1/homes/ -name $pfad_getmail`; do
    tt=`ls -all $ii | cut -d' ' -f6`
    echo "su $tt -c \"$ii\" > $getmail_log 2>&1"
   done
  else
   echo schlafen
  fi
 fi
done
Teste es mal und schau ob die Ausgaben in etwa dem entsprechen was du haben willst. Bei mir schauts nach ersten Tests auf jeden Fall gut aus

Gruss

tobi
 
Zuletzt bearbeitet:

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Anbei mal der Code wie er bei mir seit 2 Tagen durchläuft. Bis jetzt keine Fehler und die Mails werden sauber abgeholt. Funzt wie gesagt auch mit mehreren Usern und die Platten sollten erst geweckt werden, wenn auch wirklich eine Aktion ansteht (Abholen der Emails)
Code:
#!/tmp/sh
## NAME des getmail Scripts hier anpassen (ohne Pfadangabe!!!)
pfad_getmail=getmail.sh
# Pfad fuer Logfile hier angeben. ALLE Ausgaben des Skriptes werden hierhin umgeleitet
getmail_log=/path/to/log


if test -e /tmp/checkmaill ; then
 echo "Code rennt bereits"
 exit
elif test "$(whoami)" != "root" ; then
 echo "Das Script MUSS unter root laufen. Mittels su <user> holt das Script die Emails dann als <user> ab"
 exit
elif test ! -e $getmail_log ; then
 echo "Das Logfile unter $getmail_log konnte nicht gefunden werden"
 exit
fi


## Benoetigte Kommandos in /tmp "erstellen", damit die Platten durchschlafen können
## WICTHIG: Der Link zwischen /tmp/busybox und /tmp/sh MUSS manuell vor dem Aufruf der Scriptes erstellt werden!!
cp -f /bin/busybox /tmp/ > $getmail_log 2>&1
ln -s /tmp/busybox /tmp/sleep > $getmail_log 2>&1
ln -s /tmp/busybox /tmp/expr > $getmail_log 2>&1
ln -s /tmp/busybox /tmp/test > $getmail_log 2>&1
ln -s /tmp/busybox /tmp/pidof > $getmail_log 2>&1
ln -s /tmp/busybox /tmp/cut > $getmail_log 2>&1
ln -s /tmp/busybox /tmp/ls > $getmail_log 2>&1
ln -s /tmp/busybox /tmp/grep > $getmail_log 2>&1
# su wird nur dann benoetigt wenn das Kommando DIREKT in diesem Script aufgerufen wird (siehe Zeile 48+49 und 65+66)
#ln -s /tmp/busybox /tmp/su > $getmail_log 2>&1
ln -s /tmp/busybox /tmp/find > $getmail_log 2>&1

i=0
touch /tmp/checkmaill
echo $$ > /tmp/checkmaill
PATH=/tmp
while true; do
 s=`pidof imap`
 t=''
 if test "$s" != '' ; then
  for var in $s ; do
   tt=`ls -all /proc | grep $var | cut -d' ' -f6`
   if test "$tt" != "$t" ; then
     for ii in `find /volume1/homes/$tt -name $pfad_getmail`; do
      # Die folgende Zeile nur dann "entkommentieren" wenn keine virtuellen Benutzer verwendet werden
      # Sonst gibt es Probleme mit deliver. ACHTUNG: Wenn diese Zeile auskommentiert ist MUSS su <user> in getmail.sh gesetzt werden,
      # sonst wird das Script (getmail.sh) unter root ausgeführt und das gibt garantiert Aerger mit dem dovecot
      #su $tt -c "$ii" > $getmail_log 2>&1
      $ii > $getmail_log 2>&1
      done
     t=$tt
   fi
  done
  i=`expr $i + 1`
  sleep 60
 else
  tt=''
  i=`expr $i + 1`
  sleep 1
  if test `expr $i % 3600` -eq 0 ; then
   i=0
   for ii in `find /volume1/homes/ -name $pfad_getmail`; do
    tt=`ls -all $ii | cut -d' ' -f6`
    # siehe oben (Zeile 44-46)
    #su $tt -c "$ii" > $getmail_log 2>&1
    $ii > $getmail_log 2>&1
   done
  fi
 fi
done
Der aktuellste Code liegt wieder im svn. WICHTIG: Es darf weder beim Aufruf von getmail.sh noch in getmail.sh selber eine Ausgabeumleitung à la &>/path/to/file haben. Sonst wird die Shell sofort wieder freigegeben, was zu übeln Race-Conditions des getmail führen kann
 
Zuletzt bearbeitet:

Hawk999

Benutzer
Mitglied seit
08. Feb 2010
Beiträge
273
Punkte für Reaktionen
0
Punkte
16
hallo,

wenn ich den neusten Diskstationmanager aufspiele, muss ich doch wieder die Links neu setzen? Mehr müsste ich aber nicht machen, da ja eigentlich keine dateien bei einem Firmwareupgrade gelöscht werden?
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
hallo,

wenn ich den neusten Diskstationmanager aufspiele, muss ich doch wieder die Links neu setzen? Mehr müsste ich aber nicht machen, da ja eigentlich keine dateien bei einem Firmwareupgrade gelöscht werden?
afaik müsste es reichen die Links neu zusetzen resp die Dateien zu kopieren.
 

Hawk999

Benutzer
Mitglied seit
08. Feb 2010
Beiträge
273
Punkte für Reaktionen
0
Punkte
16
Weiß irgendwer, ob ich die Mailstation aktualisieren kann und es dann immer noch klappt, dass meine Platte in Ruhezustand geht. Ich meine dass wegen Spamassasin? Habe eine DS 109 und da wurde ja auch auf die RAM-Problematik hingedeutet!
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Der Spamassassin wird den Sleep nicht verhindern. Denn er kommt erst zum Zug, wenn er eine Mail übergeben bekommt und in dem Fall sind die Platten ja schon durch getmail geweckt worden.
Welche RAM Problematik meinst du jetzt konkret?
 

Hawk999

Benutzer
Mitglied seit
08. Feb 2010
Beiträge
273
Punkte für Reaktionen
0
Punkte
16
ich meinte die Problematik, dass wenn viele Programme auf den Zwischenspeicher zugreifen, doch dann Programme herausgeschmissen werden!
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Dann musst du es wohl oder übel ausprobieren ob die HDs nach dem Update noch sauber schlafen gehen
 

Hawk999

Benutzer
Mitglied seit
08. Feb 2010
Beiträge
273
Punkte für Reaktionen
0
Punkte
16
Es klappt. Platte legt sich schlafen. Spamassasin ist eingeschaltet!
 

Hans1234

Benutzer
Mitglied seit
15. Okt 2011
Beiträge
10
Punkte für Reaktionen
0
Punkte
0
Hallo zusammen,

ich bin beim Suchen über diesen Thread gestolpert und würde gerne etwas ähnliches auf meiner DS einbauen. Allerdings habe ich keinen Plan von Linux und daher weder IPKG installiert noch getmail bzw. die weiteren Pakete die im Wiki erwähnt sind (Externe_Accounts_abrufen). Darauf würde ich auch gerne weiterhin verzichten (aber geht das überhaupt?).

Kann ich getmail mit fetchmail (das ist ja schon mit der Mailstation auf der DS drauf) ersetzen? Also quasi für fetchmail die Konfigurationen der POP-Konten in Dateien ablegen, dann das gleiche Skript nutzen wie hier nur nicht mit dem Aufruf des getmail.sh, sondern quasi einem äquivalenten fetchmail.sh, das wiederum fetchmail ausführt mit den Konfigs? Ist sowas möglich?

Für Infos, Hilfen und Ideen wäre ich dankbar :)

Viele Grüße,
Hanzzz
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Möglich ist das sicher auch irgendwie mit fetchmail. allerdings wirst du dann den Code anpassen müssen
Ich würde trotzdem empfehlen das via ipkg zu machen. Denn fetchmail wird ja auch von der Mailstation (Roundcube) selber genutzt. Könnte sonst ev. sein, dass sich die beiden ins Gehege kommen. Die ganze ipkg Geschichte ist nicht so schwierig. Wir haben einiges dazu im Wiki.

Zusätzlich brauchst du in jeden Fall, egal ob fetchmail oder getmail, ein Script pro User das den fetchmail- resp getmail-Aufruf macht. Ich verwende bei mir (mit getmail) das folgende:
Code:
#!/bin/sh
pid_getmail='/tmp/getmail.pid'
if [ "x$(cat $pid_getmail)" != 'x' ]; then
 exit
else
 touch $pid_getmail
 echo $$ > $pid_getmail
 su DEIN_BENUTZER -c "/opt/bin/getmail -q -d --getmaildir /home/DEIN_BENUTZER/.getmail -r DEIN_GMX.rc -r DEIN_GMAIL.rc -r DEIN_WEB.rc"
 echo > $pid_getmail
 exit
fi
alles Grossgeschriebenes musst du natürlich an deine Gegebenheiten anpassen
 
Zuletzt bearbeitet:

Hans1234

Benutzer
Mitglied seit
15. Okt 2011
Beiträge
10
Punkte für Reaktionen
0
Punkte
0
Wenn ich ipkg installiere, muss ich bei der DSM3.2-1922 dann immernoch die gleichen Änderungen machen wie sie im Wiki beschrieben sind? Das Skript aus Abschnitt "Neues separates Startup Script für Optware" kann ich einfach 1:1 übernehmen oder muss das noch angepasst werden.

Ich habe Sorge, dass das mit den Skripten ein Problem werden kann. Ich habe auf der DS folgendes eingerichtet:
1. OpenVPN Server
2. FTP Server
3. (Mailstation)
vorallem VPN und FTP sollten auch danach wieder funktionieren... Muss ich also "Startup Script openvpn mit NAT" und damit dann auch noch "modprobe" installieren?
Was ist wenn ich mit der Spielerei am System die DS lahmlege, kann ich dann das DSM/Betriebssystem neuinstallieren ohne alle Daten der gemeinsamen Ordner zu verlieren? Was ist mit den home-Verzeichnissen? Wegen einer neuen HDD: mach ich hiermit was falsch? Western Digital Caviar Green 1500GB (WD15EARS) laut Komp-Liste soll eine bestimmte Charge funktionieren, natürlich weiß ich nicht aus welcher die stammen würde.

Und zu getmail: wenn ich Mails mit getmail abhole, landen die dann im Posteingang des Benutzer, wobei "Posteingang" der ist, den auch Roundcube benutzt? Oder hat das nichts miteinander zu tun? Also sind die getmail-Mails dann quasi im Webmail/RC sichtbar?

Fragen über Fragen und dann noch das dunkle Gefühl mir gleich meine DS zu zerstören :(
 

jahlives

Benutzer
Mitglied seit
19. Aug 2008
Beiträge
18.275
Punkte für Reaktionen
4
Punkte
0
Ich habe Sorge, dass das mit den Skripten ein Problem werden kann. Ich habe auf der DS folgendes eingerichtet:
1. OpenVPN Server
2. FTP Server
3. (Mailstation)
Wenn du diese Komponenten allesamt von der Firmware nutzt, dann musst du keine weiteren Start/Stop-Scripte anlegen. Die Firmware beendet ihre eigenen Prozesse eigentlich immer sauber ;-)
Das mit den speziellen Start-Stop-Scripten gilt nur für via ipkg installierte Software. Für getmail brauchst du aber kein solches Script, weil getmail kein ständig laufender Prozess ist, sonder nur ein Kommando welches bei bedarf gestartet wird. Start-Stop-Scripte braucht nur was automatisch beim boot gestartet werden soll

vorallem VPN und FTP sollten auch danach wieder funktionieren... Muss ich also "Startup Script openvpn mit NAT" und damit dann auch noch "modprobe" installieren?
Was ist wenn ich mit der Spielerei am System die DS lahmlege, kann ich dann das DSM/Betriebssystem neuinstallieren ohne alle Daten der gemeinsamen Ordner zu verlieren? Was ist mit den home-Verzeichnissen? Wegen einer neuen HDD: mach ich hiermit was falsch? Western Digital Caviar Green 1500GB (WD15EARS) laut Komp-Liste soll eine bestimmte Charge funktionieren, natürlich weiß ich nicht aus welcher die stammen würde.
Natürlich kann man den Fall des kompletten Datenverlusts nicht gänzlich ausschliessen, aber in 99.999% der Fälle kann der "schlimmste Fall" durch einen harten Reset behoben werden. Und wiederum in 99.999% der Fälle bleiben dabei alle Userdaten erhalten. Userdaten sind alles was unterhalb von /volume1 liegt

Und zu getmail: wenn ich Mails mit getmail abhole, landen die dann im Posteingang des Benutzer, wobei "Posteingang" der ist, den auch Roundcube benutzt? Oder hat das nichts miteinander zu tun? Also sind die getmail-Mails dann quasi im Webmail/RC sichtbar?
Alle Prozesse liefern die Mail in die Mailbox des jeweiligen Users. RC und jeder andere Mailclient rufen diese Mailbox(en) dann auf und stellen die Mails dar. Vo dem her verwenden alle dasselbe
Fragen über Fragen und dann noch das dunkle Gefühl mir gleich meine DS zu zerstören :(
Wenn du ein regelmässiges Backup hast dann ich der Schaden auch im 0.0001% Fall relativ begrenzt ;-) Ich persönlich habe nur einmal einen "Komplettverlust" der Daten eingefahren bisher. Da war ich aber auch selber schuld, weil ich die Platte ausgebaut hatte und am PC anders partitionieren wollte. Das mochte die DS dann überhaupt ned.

Grusss

tobi
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat