Marcus Schopen <marcus dot schopen at uni dash bielefeld dot de>
ftp.sendmail.org/pub/sendmail/sendmail.8.12.1.tar.gz und auspacken mit
$ tar -xvzf sendmail.8.12.1.tar.gz
2) Benutzer und Gruppe
$ groupadd smmsp $ useradd smmsp
3) Milter Support konfigurieren:
Datei site.config.m4 im Verzeichnis devtools/Site anlegen:
touch devtools/Site/site.config.m4 anlegenund in diese folgende Zeile einfügen:APPENDDEF(`conf_sendmail_ENVDEF', `-DMILTER')
4) sendmail bauen
Im sendmail Sourcen Verzeichnis
sh ./Buildaufrufen. In der Ausgabe des Build-Prozess sollte gleich in einer der ersten Zeilen auftauchen folgende Zeile auftauchen:
"Including /download/sendmail-8.12.1/devtools/Site/site.config.m4"Ist dies nicht der Fall, wurde die Datei site.config.m4 nicht beachtet. Überprüfen Sie noch einmal Schritt 3 und lesen Sie ggf. die README Datein in devtools/Site/ und libmilter/.
5) sendmail.mc erstellen
Im Verzeichnis cf/cf die Datei cyrusproto.mc nach sendmail.mc kopieren:
cp generic-linux.mc sendmail.mcund entsprechend anpassen. Als eigene Änderungen (rote Zeilen) wurden hier die features use_cw_file, virtusertable, mailertable und genericstable hinzugefügt. Die Unterstützung für Anti Spam mittels ORBZ (dazu später) und AMaViS können schon hier mit eingebaut werden.
Die sendmail.mc sollte nun so aussehen:
VERSIONID(`$Id: generic-linux.mc,v 8.1 1999/09/24 22:48:05 gshapiro Exp $') OSTYPE(linux)dnl DOMAIN(generic)dnl define(`confSMTP_LOGIN_MSG', `Jura Mailserver; $b') define(`confBIND_OPTS',`-DNSRCH -DEFNAMES') define(`confLOCAL_MAILER', `cyrus') FEATURE(`nocanonify') FEATURE(`always_add_domain') # eigene Änderungen FEATURE(`use_cw_file') FEATURE(`virtusertable', `hash -o /etc/mail/virtusertable') FEATURE(`mailertable') FEATURE(`genericstable', `hash -o /etc/mail/genericstable') # Anti Spam FEATURE(dnsbl,`inputs.orbz.org')dnl # AMaViS Milter define(`_FFR_MILTER', `1')dnl INPUT_MAIL_FILTER(`milter-amavis', `S=local:/var/amavis/amavis-milter.sock, T=S:10m;R:10m;E:10m')dnl MAILER(local)dnl MAILER(smtp)dnl MAILER(`cyrus') LOCAL_RULE_0 Rbb + $+ < @ $=w . > $#cyrusbb $: $1
Infos zu weiteren Features finden sich auf der Sendmail Seite unter http://www.sendmail.org/m4/readme.htmlUm zu verhüllen, welchen MTA man benutzt, kann noch folgende Zeile hinzugefügt werden:
define(`confSMTP_LOGIN_MSG', `Jura Mailserver; $b')
6) sendmail.cf generieren und installieren
Im cf/cf/ Verzeichnis folgende Kommando ausführen:
sh Build sendmail.cfVor der Installation der neuen sendmail.cf sollte noch schnell ein Backup der alten sendmail.cf Konfiguration und des sendmail binarys erstellt werden.
Jetzt die neu generierte sendmail.cf und submit.cf aus dem cf/cf Verzeichnis nach /etc/mail/ kopieren:sh Build install-cf
7) sendmail utils bauen:
In den Verzeichnissen makemap und mailstatus jeweils
sh Build; sh Build installaufrufen
8) sendmail installieren
im source root Verzeichnis
sh Build installaufrufen.
9) libmilter installieren:
cd libmilter sh ./Build sh ./Build install
10) sendmail starten
/usr/sbin/sendmail -bd -q30m -om WARNING: Xmilter-amavis: local socket name /var/amavis/amavis-milter.sock missingDie Waring Ausgabe ist o.k., da wir ja noch keinen AMaViS Dämon installiert haben. Der Mailserver sollte sich jetzt dennoch schon folgendermaßen melden:
cornholio:# telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 Jura ESMTP Mailserver; Tue, 16 Oct 2001 21:34:56 +0200bzw. ganz normal mit
cornholio:# telnet localhost 25 Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. 220 cornholio ESMTP Sendmail 8.12.1/8.12.1; Sat, 13 Oct 2001 17:40:45 +0200wenn unter 5) die sendmail.mc ohne den Zusatz confSMTP_LOGIN_MSG erstellt wurde.
12) Sonsiges
War auf dem System bereits eine ältere sendmail Version installiert, sollte man vor einem Start des neuen sendmails die Mailertables genericstable, mailertable und virtusertable mit:
makemap hash file.db < fileneue erstellen.
Auf älteren Linux System z.B. SuSE 6.x muss noch die /etc/sendmail.cw nach /etc/mail/local-host-names kopiert werden. Dasselbe gilt auf für /etc/aliases. Sie muss in das Verzeichnis /etc/mail/ verschoben werden. Danach sollte aus dem /etc/ Verzeichnis ein symbolischer Link auf die aliases und aliaes.db im mail Verzeichnis gelegt werden:ln -s /etc/mail/aliases /etc/aliases ln -s /etc/mail/aliaes.db /etc/aliases.dbDe aliases.db neue bauen:
cornholio:/ # newaliasesDas Verzeichnis /var/spool/mqueue sollte dem User root und der Gruppe daemon gehören.
Weiter Aufschlüsse gibt ein Blick in die /var/log/mail nach dem Start von sendmail.
Verabbemerkung: Cyrus und SASL müssen gegen dieselbe BerkeleyDB gebaut werden. Die BerkeleyDB muss mindestens in der Version 3.x
vorliegen.
1) BerkeleyDB 3.x (http://www.sleepycat.com)
Überprüfen Sie vor der Installation, ob auf Ihrem System nicht bereits eine ausreichend aktuelle BerkeleyDB installiert ist (siehe usr/local/BerkeleyDB.3.x). Ist dies nicht der Fall, kann parallel zu der alten Datenbank eine 3.x installiert werden:
a) Download
lynx --source http://www.sleepycat.com/update/3.3.11/db-3.3.11.tar.gz > db-3.3.11.tar.gzund auspacken:
tar -xvzf db-3.3.11.tar.gzb) bauen und installieren
cd dist configure; make; make installDen Pfad "/usr/local/BerkeleyDB.3.3/lib" in die "/etc/ld.so.config" eintragen und ldconfig aufrufen:
ldconfig -v
2) SASL (http://asg.web.cmu.edu/sasl/)
a) Download: ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-sasl-1.5.24.tar.gz
b) bauen und installieren mit Berkely 3.3cornholio:# env CPPFLAGS="-I/usr/local/BerkeleyDB.3.3/include" \ LDFLAGS="-L/usr/local/BerkeleyDB.3.3/lib -R/usr/local/BerkeleyDB.3.3/lib" \ ./configure --with-dblib=berkeleyIm Configure-Durchlauf sollte folgende Zeile auftauchen:
checking whether the C compiler (gcc -L/usr/local/BerkeleyDB.3.3/lib -R/usr/local/BerkeleyDB.3.3/lib) works... yesJetzt ganz normal bauen mit:
make make installSymlink von /usr/lib/sasl auf /usr/local/lib/sasl setzen:
ln -s /usr/local/lib/sasl /usr/lib/saslDen Pfad "/usr/local/lib/sasl" in die "/etc/ld.so.conf" eintragen und ldconfig aufrufen:
ldconfig -v
3) openssl (http://www.openssl.org)
Wir wollen unsere Mails später verschlüsselt abholen und benötigen daher openssl, um Cyrus mit SSL Support bauen zu können
a) Download
lynx --source http://www.openssl.org/source/openssl-0.9.6b.tar.gz > openssl-0.9.6b.tar.gzb) bauen, testen und installieren
./config make make test make installDen Pfad "/usr/local/ssl/lib" in die "/etc/ld.so.conf" eintragen und ldconfig aufrufen:
ldconfig -v
4) Cyrus (http://asg.web.cmu.edu/cyrus/)
1) Download: ftp.andrew.cmu.edu/pub/cyrus-mail/cyrus-imapd-2.0.16.tar.gz
2) User für Cyrus anlegenuser cyrus in der Gruppe mail mit homedir /usr/cyrus anlegen:
useradd -d /usr/cyrus -g mail cyrus
3) Konfigurieren und bauenconfigure --with-auth=unix --with-dbdir=/usr/local/BerkeleyDB.3.3\ --with-sasl=/usr/local/lib/sasl --with-openssl=/usr/local/ssl make; make install
4) cyrus.confDie Datei /etc/cyrus.conf anlegen. Es kann die normal.conf aus master/conf verwendet werden:
# standard standalone server implementation START { # do not delete these entries! mboxlist cmd="ctl_mboxlist -r" deliver cmd="ctl_deliver -r" # this is only necessary if using idled for IMAP IDLE # idled cmd="idled" } # UNIX sockets start with a slash and are put into /var/imap/socket SERVICES { # add or remove based on preferences imap cmd="imapd" listen="imap" prefork=0 imaps cmd="imapd -s" listen="imaps" prefork=0 pop3 cmd="pop3d" listen="pop3" prefork=0 pop3s cmd="pop3d -s" listen="pop3s" prefork=0 sieve cmd="timsieved" listen="sieve" prefork=0 # at least one LMTP is required for delivery # lmtp cmd="lmtpd" listen="lmtp" prefork=0 lmtpunix cmd="lmtpd" listen="/var/imap/socket/lmtp" prefork=0 } EVENTS { # this is required checkpoint cmd="ctl_mboxlist -c" period=30 # this is only necessary if using duplicate delivery suppression delprune cmd="ctl_deliver -E 3" period=1440 }
5) imapd.confDie Datei /etc/cyrus.conf mit folgendem Inhalt anlegen.
configdirectory: /var/imap partition-default: /var/spool/imap admins: cyrus root allowanonymouslogin: no sasl_passwd_check: sasldb tls_cert_file: /var/imap/server.pem tls_key_file: /var/imap/server.pem
6) Verzeichnisse
Die Verzeichnisse /var/imap und /var/spool/imap anlegen und mit entsprechenden Rechten versehen:
cd /var mkdir imap chown cyrus imap chgrp mail imap chmod 750 imapcd /var/spool mkdir imap chown cyrus imap chgrp mail imap chmod 750 imapAls User cyrus den Rest mit "mkimp" aus dem tools Verzeichnis der cyrus sourcen erledigen lassen:
su cyrus tools/mkimap exit7) /etc/services anpassen
pop3 110/tcp imap 143/tcp imsp 406/tcp acap 674/tcp imaps 993/tcp pop3s 995/tcp kpop 1109/tcp sieve 2000/tcp lmtp 2003/tcp fud 4201/udpIn der "/etc/inetd.conf" pop3 und imap auskommentieren und den inted mit "killall -HUP inetd" neu starten
8) /etc/sasldb initialisieren
Als root "/usr/local/sbin/salspasswd cyrus" aufrufen und ein Password für cyrus setzen. Schlägt dies fehlt, liegt es wahrscheinlich daran, dass die Datei /etc/sasldb schon existiert. Die Datei mit "rm /etc/sasldb" löschen.
Die Rechte auf die generierte /etc/sasldb jetzt mit "chown cyrus:mail /etc/sasldb" ändern.
9) SSL key generieren:
Wir brauchen noch einen SSL key:
cornhoilio:/# /usr/local/ssl/bin/openssl req -new -x509 -nodes \ -out /var/imap/server.pem -keyout /var/imap/server.pem -days 365
Using configuration from /usr/local/ssl/openssl.cnf Generating a 1024 bit RSA private key .................................................++++++ ............................++++++ writing new private key to '/var/imap/server.pem' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) [AU]:DE State or Province Name (full name) [Some-State]:Northrhein Westfalia Locality Name (eg, city) []:Bielefeld Organization Name (eg, company) [Internet Widgits Pty Ltd]:University of Bielefeld Organizational Unit Name (eg, section) []:Faculty of Law Common Name (eg, YOUR name) []:cornholio.jura.uni-bielefeld.de Email Address []:marcus.schopen@uni-bielefeld.deDer "Common Name" im vorletzten Punkt ist der Hostname des Servers und nicht der einer natürlichen Person.
10) master starten
/usr/cyrus/bin/master &
Der Master sollte sich so melden:
telnet localhost imap cornholio:/var # telnet localhost imap Trying 127.0.0.1... Connected to localhost. Escape character is '^]'. * OK cornholio Cyrus IMAP4 v2.0.16 server ready". logout" um zur shell zurückzukehren11) cyradm installieren:
Cyradm wird benötigt, um Cyrus zu administrieren
cd perl/imapVorab ist zu prüfen, ob die Pfade auf die ssllibs in Makefile.PL passen:
'LIBS' => ["$SASL_LIB -L/usr/local/ssl/lib -lssl -lcrypto"], perl Makefile.PL make make install12) IMAP User anlegen
Hierzu rufen wir als User cyrus den eben gebauten cyradm auf:
su - cyrus cyrus@cornholio:~ > /usr/bin/cyradm localhost Please enter your password: localhost> createmailbox user.schoppa localhost> listmailbox user.schoppa localhost> /usr/local/sbin/saslpasswd schoppa Password: Again (for verification):Einen User wieder löschen:
setaclmailbox user.schoppa cyrusadm c deletemailbox user.schoppa13) Sonstiges
Der SSL Support kann mit
imtest -t "" your.server.degestestet werden. Testen Sie auch, ob Sie z.B. mit Netscape im via SSL auf Ihren IMAP Server zugreifen können. Mit Outlook lässt sich auf verschlüsselt auf den POP3 von Cyrus zugreifen.
Desweiteren finden sich in der Dokumentation in den cyrus sourcen Anleitungen zur Anpassungen des Loggings im Syslog sowie das Setzen von Quotas auf die Cyrus Spool Verzeichnisse.
Das Verhalten des Cyrus kann mittels "tail -f /var/log/messages" oder "tail -f /var/log/mail" verfolgt werden. Wichtig ist auch, dass das Verzeichnis "/var/spool/imap/stage." dem User cyrus und der Gruppe mail gehört.
Auf der cyrus Homepage befindet sich ein Perl Script "user2cyrus.pl". Hiermit lassen sich sehr einfach alte UN*X Mailboxen ins IMAP Format konvertieren.
Entsprechende Zeilen sind in der sendmail.mc hinzuzufügen. Danach muss die sendmail.cf wie oben beschrieben neu gebaut werden.
1) ORBZ (http://www.orbz.org)
FEATURE(dnsbl,`inputs.orbz.org')dnl
2) MAPS für blackhole, relay und dialup Liste (http://www.mail-abuse.org)
FEATURE(dnsbl,`blackholes.mail-abuse.org')dnl FEATURE(dnsbl,`relays.mail-abuse.org'}dnl FEATURE(dnsbl,`dialups.mail-abuse.org')dnlAchtung: MAPS ist nun kostenpflichtig geworden.
Weitere Informationen zu den beiden ANTI-Spam Systemen finden Sie auf der jeweiligen Website.
1) benötigte Perl-Module
die Perl-Module mit cpan installieren ( http://www.cpan.org/modules/by-module/ )
# cpan cpan> install Unix::Syslog cpan> install Convert::UUlib cpan> install Convert::TNEF cpan> install Archive::Zip2) Virenscannner
Wir installieren beispielhaft drei Scanner. Eine Übersicht gibt es auf http://www.amavis.org.a) Sophos Anti-Virus (http://www.sophos.com/)
Auf der Homepage unter Download den "Sophos Anti-Virus for Unix" wählen und hier je nach System "Linux on Intel using libc5" oder "Linux on Intel using libc6". Wir installieren Sophos ohne InterCheck Modus tar -xvzf linux.intel.libc6.tar.z cd sav-install install -ni ./installb) H+BEDV AntiVir fuer Linux und FreeBSD (http://www.antivir.de)
AntiVir fuer Linux ist bei einem ausschliesslich(!) privaten Einsatz kostenfrei. Sie können sich registrieren lassen und erhalten dann eine Lizenzdatei (hbedv.key) per eMail.
Auf der Homepage unter Download "AntiVir für Server" Linux source (avlxsrv.tgz)tar -xvzf avlxsrv.tgz cd antivir-6.10.00.01-linux-glibc ./installDie Lizendatei "hbedv.key" in das Verzeichnis "/usr/lib/AntiVir" kopiert werden um von AntiVir gefunden zu werden.
c) McAfee VirusScan (http://www.nai.com)
Auf der Homepage unter "Download / Product Evaluations" - McAfee VirusScan for Unix Linux (4.14.0) herunterladen. Vor dem Auspacken ein eigendes Verzeichnis anlegen:
mkdir nai mv vlnx414e.tar.z nai/ cd nai tar -xvzf vlnx414e.tar.z
cornholio:/nai # ./install-uvscan Which directory do you want to install into? [/usr/local/uvscan] Uninstalling previous version ... done. Do you want a link to uvscan placed in /usr/local/bin [y]/n y Do you want a link to liblnxfv.so placed in /usr/local/lib [y]/n y Do you want a link to uvscan.1 placed in /usr/local/man/man1 [y]/n y Installation completed. Do you want to perform a scan of all filesystems y/[n] n
3) AMaViS bauen
a) Download: Snapshot von http://www.amavis.org/download.php3 (Dämon Version wählen) besorgen und auspacken.
b) Konfiguration
Grundsätzlich sollte es reichen, AMaViS folgendermaßen zu installieren:
./configure --enable-milter --with-warnrecip=yesDie vorher installierten Virenscanner werden von AMaViS selbständig gefunden. Die Option " --enable-relay" braucht bei dieser Konfiguration nicht eingesetzt zu werden.
Wichtig ist, dass beim configure die milter libs (rot) gefunden werden:
... checking for libmilter/mfapi.h... yes checking for smfi_main in -lmilter... yes We will use libmilter as the MTA ... ** Configuration summary for amavisd snapshot-20010714 2001-0714: Install amavis daemon as: /usr/sbin/amavisd Install amavis client as: /usr/sbin/amavis Daemon config file: /etc/amavisd.conf Path to socket: /var/amavis/amavisd.sock Configured for use with: sendmail/libmilter Use virus scanner(s): McAfee Virusscan Scanner runs as: root Logging to syslog: yes Warn sender: yes Warn recipient(s): no Notify admin: yesTo accept the above, type "make"
Läuft das configure nur mit "Configured for use with: sendmail" durch, wurden die entsprechenden libs nicht gefunden:checking for sm_errstring in -lsm... no checking for libmilter/mfapi.h... no We will use sendmail as the MTAIn diesem Fall kann folgende Lösung hilfreich sein:
a) Zunächst im sendmail-sourcen Verzeichnis mit "mkdir mylib" ein Unterverzeichnis mylib anlegen:
b) In dieses Verzeichnis wechseln und die folgenden symbolischen Links anlegen:
ln -s ../obj.linux.2.2.16.i686/libmilter/libmilter.a libmilter.a libsm.a -> ../obj.linux.2.2.16.i686/libsm/libsm.a libsmdb.a -> ../obj.linux.2.2.16.i686/libsmdb/libsmdb.a libsmutil.a -> ../obj.linux.2.2.16.i686/libsmutil/libsmutil.aDie exakte Position der Dateien hängt von der verwendeten Plattform ab.
c) Im AMaViS sourcen Verzeichnis zunächst den alten configure cache mit "rm config.cache" löschen.
d) Jetzt bauen wir AMaViS neu, aber jetzt direkt gegen das sendmail sourcen Verzeichnis:
LDFLAGS="-L/download/sendmail-8.12.1/mylib/" \ ./configure --with-sendmail-source=/download/sendmail-8.12.1 \ --enable-milter --with-warnrecip=yesDie Option --with-sendmail-source gibt an, wo configure die milter include Dateien finden kann.
Das vorangestellte LDFLAGS ist zum Auffinden der libs nötig.
Diesen Umweg musste ich z.B. auf einer SuSE 6.0, 6.1 und 7.1 gehen. Das configure sollte jetzt mit milter Funktionalität durchlaufen. Nun noch ein schnelles
make make installund AMaViS ist installiert.
4) AMaViS starten
rm -rf /var/amavis/amavis-milter.sock nohup /usr/sbin/amavis-milter -p /var/amavis/amavis-milter.sock & /usr/sbin/amavisdEin "ps -ax | grep amavis" sollte folgende Prozesse anzeigen:
27316 ? S N 0:04 /usr/sbin/amavis-milter -p /var/amavis/amavis-milter.sock 27320 ? S N 0:10 /usr/sbin/amavis-milter -p /var/amavis/amavis-milter.sock 27321 ? S N 0:00 /usr/sbin/amavis-milter -p /var/amavis/amavis-milter.sock 27322 ? S 0:01 perl -T /usr/sbin/amavisdZum Schluß sendmail noch einmal neu starten !
5) AMaViS testen
Auf der McAfee VirusScan Homepage (http://www.nai.com) befindet sich unter "Download / McAfee Anti-Virus Beta Program / Beta Utilities" das sog. EICAR Standard AntiVirus Test File.
Schicken Sie dieses Files als Attachment von einer externen Adresse auf einen lokalen Account. Ein "tail -f /var/log/mail" sollte im Maillog folgende Zeile anzeigen:
Oct 17 02:26:10 cornholio sendmail[26059]: f9H0Q77k026059: Milter add: header: X-Virus-Scanned: by amavisd-milter (http://amavis.org/Diese besagt nur, dass die Mail von AMaViS nach Viren durchforstet wurde.
Wurde aber wie in unserem Fall ein Virus gefunden erhält der Postmaster folgende Mail:
Desweiteren erhalten der Absender und Empfänger (--with-warnrecip=yes) eine Benachrichtigung. Beides lässt sich im configure aber abstellen Einfach mal "./configure --help" aufrufen.
6) Virensignaturen updaten
Damit die einzelnen Virenscanner aktuell bleiben, sollten man in regelmäßigen Abständen die neuesten Virenfiles von den Homepages der Hersteller laden und installieren. Dies lässt sich mit Hilfe einige Skripten automatisieren. Auf der Seite User Contributed Software von AMaViS gibt es hierzu noch einige weitere Progamme. Diese zwei von mir erstellten Skripten leisten seit geraumer Zeit zuverlässige Arbeit:
a) Update für Sophos Sweep:
#!/bin/sh
echo -e "From: root"
echo -e "To: admin@domain.de"
echo -e "Subject: Virus Update: Sophus\n"
cd /usr/local/sav/
lynx --source http://www.sophos.com/downloads/ide/ides.zip > ides.zip
unzip -o ides.zipund folgender Eintrag in der /etc/crontab
0 6 * * * root /root/bin/virusupdate/sophos_update.sh | sendmail -tum das Skipt z.B. täglich um 6:00 Uhr aufzurufen.
b) Update für McAfee VirusScan / NAIVor einem Download wird geprüft, ob überhaupt ein neues Update zur Verfügung gestellt wird. Nur in diesem Fall wird ein Download angestoßen.
#!/usr/bin/perl # Stand: 11.02.2001 (Marcus Schopen) $debug == 1; # 0 ohne Debug $versionpath = "/usr/local/uvscan"; $versionfile = "$versionpath\/VERSION"; use Net::FTP; # -- hier gibt's das Zeug # my $host = 'ftp.nai.com'; my $user = 'anonymous'; my $pass = 'me@home.com'; my $dir = '/pub/datfiles/english/'; # -- ein bisschen Fehlerabfang # my $ftp = Net::FTP->new($host) or die "Error connecting to $host: $!\n"; $ftp->login($user, $pass) or die "Error logging in to $host: $!\n"; my $ret = $ftp->pwd() or die "Error on pwd: $!\n"; $ftp->cwd($dir) or die "Error cd $dir: $!\n"; $ret = $ftp->dir() or die "Error on dir: $!\n"; my @dirs; my @files; # wir sondern die filename von den directory namen aus ... # foreach (@$ret) { chomp; next if length $_ < 39; my $filename = substr ($_, 39); my $dir = substr ($_, 24, 5); push @dirs, $filename if $dir eq '<DIR>'; push @files, $filename if $dir ne '<DIR>'; } print $files; # ... sortieren alle gefundenen Filenamen. # my @sorted = sort @files; # -- jetzt erst einaml die alte Version auslesen # if (-e $versionfile) { open(FILE, $versionfile); while (<FILE>) { chop; $old_version = $_; } close(FILE); } else { exit 0; } # alle files durchlaufen und anhand von "dat-" untersuchen, ob es sich um # ein dat-xxxx.tar" file handelt. Da die Liste sortiert ist, ist die letzte # zutreffende if-Abfrage das dat-File mit hoechsten Nummer, also das # aktuellste (geht bestimmt einfacher). # foreach (@sorted) { ($name,$suffix) = split(/\./); $is_dat = substr($name, 0, 4); if ($is_dat eq "dat-" && $suffix eq "tar") { ($trash, $version) = split(/\-/, $name); } } # -- wir testen ob unsere Version noch aktuell ist. # if ( $version > $old_version ) { $ftp->binary(); # konkretem binary Modus $ftp->get("dat-$version.tar","/usr/local/uvscan/dat-$version.tar"); system("echo $version > $versionfile"); # neue Version wegschreiben chdir $versionpath; # ins DAT Verszeichnis wecheln system("tar -xf $versionpath/dat-$version\.tar"); } open (MAIL, "|/usr/lib/sendmail -t") || die ("Error: opening sendmail:$!\n"); print MAIL "From: root\@cornholio.jura.uni-bielefeld.de\n"; print MAIL "To: marcus\@\n"; print MAIL "Subject: Virus Update: NAI\n\n"; print MAIL "update von Version $old_version auf $version\n"; close (MAIL); if ($debug == 1) { print "Pfad: $versionpath\n"; print "Versionsfile: $versionfile\n"; print "files: @sorted\n"; print "old version: $old_version\n"; print "new version: $version"; } # -- wir verabschieden uns $ftp->quit; exit 0;Und folgender Eintrag in der /etc/crontab
0 6 * * * root /root/bin/virusupdate/nai_update.pl
Stand: 17.10.2001
Änderungen und freundliche Kritik an: <marcus dot schopen at uni dash
bielefeld dot de>