LinuxNetMag
Web2Fax-Gateway
Archiv | Home
Inhalt
   
LinuxNetMag #5

  Software
 Aktuell
kurz vorgestellt
SuSE7.0 Testbericht
Mozilla Preview
 Applikationen
Videoschnittsystem
Windows X-Server
Windowmanager
 3D
 Spiele
  
 

Hardware

TV-Karte
Wheel-Mouse
Webcam selbstgebaut
  
 

Netzwerk

Web2Fax-Gateway
Apache mit SSI
Booten übers Netz
Webcam-Streaming
offline Mailingliste
  
 Wissen
Abenteuer ReiserFS
Linux-Devices
LinuxExpo Brasilien
  
 

Sonstiges

Mailing-Liste
Gästebuch
Artikelliste
Unterstützen Sie uns !
zurück zur Hauptseite



Druckversion


  Fax-Gateway Wer ein Modem besitzt, möchte auch gerne vom PC aus Faxe verschicken.
Wenn nun auch alle Benutzer des lokalen Netzes über ein Modem Faxe verschicken sollen, eignet sich ein Web-Frontend.

übers Netzwerk Faxen

In Verbindung mit einem Hylafax-Server gibt es eine große Anzahl an Software-Lösungen, um vom gesamten Netzwerk aus Faxe verschicken zu können. Denn der Server besitzt die Fähigkeit, von speziellen Clients aus, Verbindung mit dem Server aufzunehmen, um sein Fax zu verschicken, oder ein ankommendes Fax zu lesen.

Eine große Anzahl an Clients existiert bereits, von denen der SuSE-Java-Client wohl mit die beste Lösung ist, da er betriebssystemunabhängig eingesetzt werden kann.
Der Nachteil ist, daß auf jedem Rechner im Netz dieses Client-Programm installiert werden muß und sich der Netzwerkadministrator auf viele Fragen der User einstellen kann, da das Programm nicht gerade einen Preis für die komfortabelste Bedienung gewinnen wird.

Am unkompliziertesten für den normalen User ist ein simples Web-Frontend, in dem man nur seinen Text und die Telefonnummer eingeben muß und der Rest von alleine geschieht.

Frontend selbst gemacht

Natürlich besitzen wir genügend Ehrgeiz, um ein deratiges Web-Frontend von Grund auf selbst zu schreiben, und nicht auf bereits fertige Lösungen zurückgreifen.
Bevor Sie jetzt erschrecken, was das für Arbeit wird, kann ich Sie beruhigen, da wir insgesamt kaum Programmcode benötigen.
Wenn nämlich der Web-Server und Fax-Server auf dem selben Rechner laufen, muß man gar nicht die Netzwerkfähigkeiten des Hylafax-Servers benutzen, sondern kann die geschriebenen Texte direkt übergeben.
Beachten Sie: Wir setzen bei der folgenden Konfiguration einen bereits funktionsfähig installierten Hylafax-Server voraus.

Schritt I: Die Webseite

Zuerst erstellen wir die Webseite, die der User anwählen soll, um seinen Fax-Text einzutippen. Dafür erstellt man ein Unterverzeichnis namens Fax auf dem Web-Server und in diesem noch ein weiteres namens cgi-bin, in dem das Skript plaziert werden soll:

>> mkdir /usr/local/httpd/htdocs/Fax
>> mkdir /usr/local/httpd/htdocs/Fax/cgi-bin
(Unter SuSE liegt das Verzeichnis des Web-Servers unter /usr/local/httpd/htdocs/. Bei anderen Distributionen kann dies abweichen.)
Als nächstes erstellen wir das Web-Formular, welches ungefähr folgendermaßen aussehen sollte:

Datei /usr/local/httpd/htdocs/Fax/index.html

<html>
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
   <title>Homepage</title>
</head>

<body>



<form METHOD=POST action="/Fax/cgi-bin/faxout.cgi">
<pre>
             Empfänger  <input type="text" name="ToName" size=30>
            Fax-Nummer  <input type="text" name="ToNumber" size=20>
                        <input type="hidden" name="ToCompany" value=" " size=20>
                        <input type="hidden" name="FromName"  value="[email protected]" size=30>
                        <hr>
             Betreff    <input type="text" name="Regarding" size=30>
<center>
Text:
<textarea name="Comments" rows=10 cols=60></textarea>
</center>
</pre>
<center>
<input type="submit" value="Fax abschicken!"> <input type="reset" value="Löschen">
</center>
</body>
</html>

Das resultierende Frontend wird dann folgendermaßen aussehen:

Homepage
  Empfänger  
 Fax-Nummer  
             
             

Betreff
Text:

Grafische Verziehrungen sind natürlich erlaubt, so lange die <input>-Tags nicht gelöscht werden.

Schritt II: Apache umstellen

Weil das CGI-Script, welches den eingegebenen Text an den Fax-Server weiterleitet, zur besseren Übersicht im selben Unterverzeichnis liegen soll, muß man Apache noch mitteilen, daß auch CGI-Skripte von diesem Unterverzeichnis aus gestartet werden dürfen.
Dafür benötigt man einen folgenden Eintrag in der Datei /etc/httpd/srm.conf zusätzlich zu den bestehenden anderen:

Datei /etc/httpd/srm.conf
 #ScriptAlias: This controls which directories contain server scripts. 
 #Format: ScriptAlias fakename realname 
 ScriptAlias /cgi-bin/ "/usr/local/httpd/cgi-bin/" 
 ScriptAlias /Fax/cgi-bin/ "/usr/local/httpd/htdocs/Fax/cgi-bin"

Ein Neustart des Apache-Servers bewirkt, daß die neuen Einstellungen auch ausgeführt werden:
(Unter SuSE)

>> /sbin/init.d/apache restart
(Unter RedHat)
>> /etc/rc.d/init.d/apache restart
oder, falls alles nicht hilft: Neu Booten (auch wenn es einem in der Seele weh tut, so etwas zu empfehlen)

Schritt III: Das CGI-Skript

Das eigentliche Skript ist schnell programmiert, und es bewirkt eigentlich nur, daß der geschriebene Text im Verzeichnis /tmp/.fax/ abgelegt wird, von wo aus der Text im nächsten Schritt mittels eines Cron-Jobs an den Server übergeben wird.
Das Skript "faxout.cgi" sollte sich im Unterverzeichnis "cgi-bin" innerhalb des Verzeichnisses Fax befinden.

Datei /usr/local/httpd/htdocs/Fax/cgi-bin/faxout.cgi
 #!/usr/bin/perl

 require "flush.pl";
 
 $| = 1;

 $tmpfaxcover="/tmp/.fax/faxcover.$$";
 $faxcover='faxcover';	# location of faxcover binary

 use CGI;
 $query = new CGI;
 require "ctime.pl";
 $tt = &ctime(time());
 chop($tt);
 $sendfax = "/usr/bin/sendfax";
 print STDOUT "Content-type: text/html\n\n";

 print $query->dump;

 print"<pre>";

 @fax = $query->param('fax');
 $to = $query->param('ToName');
 $phone = $query->param('ToNumber');
 $company = $query->param('ToCompany');
 $from = $query->param('FromName');
 $cover = $query->param('Cover');
 $regard = $query->param('Regarding');
 $comments = $query->param('Comments');
 $comment =~ s/\n//g;
 $comment =~ s/\r//g;


 push(@args, '-P', 'high');
 push(@args, '-m', '-D');
 push(@args, '-f', "$from");
 push(@args, '-d', "$phone");
 push(@args, '-n');

 push(@args, "@fax");

 push(@args, "/tmp/.fax/fax_test.$$");

 print"Performing $sendfax @args\n";

 open(TEST, ">>/tmp/.fax/fax_test.$$");
 print TEST "$comments";
 close(TEST);

 open(LOG, ">>/var/spool/fax/log/sendlog");
 print LOG "$tt web $sendfax @args\n";
 close(LOG);
 
 open(SCR, ">>/tmp/.fax/fax_script.$$");
 print SCR "#!/bin/sh\n";
 print SCR "$sendfax @args\n";
 close(SCR);
 
 &flush(STDOUT);
 system("chmod og+x /tmp/.fax/fax_script.$$");
 &flush(STDOUT);
 print "</pre>";
 print "<p><hr><p><center><h1>Fax wurde abgeschickt!</h1></center>";
download faxout

Dieses Script muß die notwendigen Rechte besitzen, um von den Web-Usern gestartet werden zu können (Befehl als root ausführen)

>> chmod og+x /usr/local/httpd/htdocs/Fax/cgi-bin/faxout.cgi
Außerdem muß noch das Unterverzeichnis /tmp/.fax generiert werden, in dem die geschriebenen Texte zwischengespeichert werden:
>> mkdir /tmp/.fax

Schritt IV: Der Cron-Job

Die eigentliche Arbeit erfolgt im Aufrufen eines weiteren Skriptes aus einem Cron-Job heraus.
Mit diesem Skript werden die geschriebenen Texte aus dem Verzeichnis /tmp/.fax an den Hylafax-Server weitergeleitet.
Dieses Skript sollte sicherheitshalber im /root-Verzeichnis liegen.
Es empfiehlt sich dort das Unterverzeichnis .cron_jobs zu erzeugen, in dem wir all diejenigen Skripte ablegen, die vom root regelmäßig ausgeführt werden müssen.

>> mkdir /root/.cron_jobs
Wir erzeugen dort ein Skript htmlfax.sh

Datei /root/.cron_jobs/htmlfax.sh

#!/bin/sh /tmp/.fax/fax_script.* sleep 2 rm /tmp/.fax/fax_script.* rm /tmp/.fax/fax_test.* #END

Außerdem muß dieses Skript auch noch als ausführbar gekennzeichnet werden:

>> chmod u+x /root/.cron_jobs/htmlfax.sh
In regelmäßigen Abständen soll nun mit diesem Skript das Verzeichnis /tmp/.fax/ durchsucht werden, um die dort befindlichen Faxe abzuschicken.
Damit dies auch geschieht, benötigt man einen Eintrag mit folgender Form in der Crontab

Crontab-Eintrag

0-55/15 * * * * /root/.cron_scripts/htmlfax.sh > /dev/null

Die Crontab läßt sich entweder über grafische Frontends wie VCron oder Kcrontab ändern oder mittels des Befehls (als root ausführen!)

>> crontab -e
Dieser Eintrag schickt nun alle 15 Minuten die bis dahin angefallenen neuen Faxe an den zugehörigen Empfänger.
Mit einem anderen Eintrag ist es sogar möglich, die Faxe nur ab bestimmten Zeiten zu verschicken (z.B. ab 6 Uhr), um somit in einen günstigeren Tarifbereich zu fallen.

Schritt V: Genießen

Das Web2Fax-Gateway ist hiermit fertig, sollte ohne Probleme funktionieren und kann auch sofort ausprobiert werden. Natürlich bietet diese noch recht simple Lösung kaum Komfort; sie ist allerdings sehr robust, und man sieht an diesem Beispiel wunderbar, wie die einzelnen Komponenten eines Unix-Systems zusammenarbeiten können.
Man muß nur minimalen Programmieraufwand tätigen, um große Funktionalität zu erhalten.

Von deratiger Einfachheit (speziell in Sachen Server-Dienste) sollten sich andere sog. "Betriebssysteme" mal ein Stück abschneiden.

 


Platz für Kommentare & Fragen:
(selbst eintragen)

 

Weitere Ausgaben Linux NetMag
[ #1 | #2 | #3 | #4 | Main ]