Archive for February, 2009

Install Coldfusion 8 Multiserver on Debian 5.0 Lenny with Apache 2

Coldfusion, Development, Linux, Systemadministration | Posted by sebastian
Feb 23 2009

Dieser Artikel beschreibt, wie man Adobe Coldfusion 8 in der Multiserverkonfiguration installiert. Man kann diese Konfiguration für ein ISP ähnliches Setup verwenden. Jede Instanz/Virtualhost hat seinen eigenen Coldfusion Administrator mit eigenen Einstellungen.

1. Vorbedingungen:

* Apache 2 ist installiert und arbeitet korrekt.

* libstdc++5 ist installiert.

aptitude install libstdc++5

* Eine eigene Domain für den virtuellen Host steht bereit. (www.testsrv.local)

* Der neuste Coldfusion Installer wurde von www.adobe.com heruntergeladen. (z.B. coldfusion-801-lin64.bin)

2. Coldfusion Installation:

chmod +x coldfusion-801-lin64.bin
./coldfusion-801-lin64.bin

Bemerkung: Dies ist der 64-Bit Installer. Wenn kein 64-Bit Betriebssystem vorhanden ist, wird die 32-Bit Version benötigt (coldfusion-801-lin.bin).

Konfigurationseinstellungen:

CHOOSE LOCALE BY NUMBER: 1
PRESS <ENTER> TO CONTINUE: <ENTER>
PRESS <ENTER> TO CONTINUE: <ENTER>
...
DO YOU ACCEPT THE TERMS OF THIS LICENSE AGREEMENT? (Y/N): Y
Installation Choice: 1 (Install new version of Adobe ColdFusion 8 with a serial number)
Serial Number: XXXX-XXXX-XXXX-XXXX-XXXX-XXXX
Choose one of the following options:: 2 (Multiserver configuration)
Is there already a multiserver configuration of Adobe ColdFusion 8, or Macromedia JRun 4, installed?: 2 (No)
Select an option: 5 (Continue with installation)
Default Install Folder: /opt/jrun4 <ENTER>
PRESS <ENTER> TO CONTINUE: <ENTER>
PRESS <ENTER> TO CONTINUE: <ENTER>
...
DO YOU ACCEPT THE TERMS OF THIS LICENSE AGREEMENT? (Y/N): Y
Serial Number:: <ENTER>
Earlier Versions of Adobe ColdFusion installed?
ENTER THE NUMBER FOR YOUR CHOICE, OR PRESS <ENTER> TO ACCEPT THE DEFAULT: 2 (No)
Configure Webserver: 1 (Add Web Server Configuration)
Select "Apache" 1
Directory: /etc/apache2
File: /usr/sbin/apache2
File: /etc/init.d/apache2
Choice: 4 (Continue with installation)
Directory: (DEFAULT: /etc/htdocs): /var/www
User Name: (DEFAULT: nobody): <ENTER>
Password: <Default Development Password>
Enable RDS  (Y/N): Y
Password: <Your Password>
PRESS <ENTER> TO CONTINUE: <ENTER>

Time for a cup of coffee ...

Press Enter to exit the installer: <ENTER>

3. Init-Skript anlegen:

Unter Suse oder Redhat kann man <pre>/opt/jrun4/bin/cf-init.sh install<pre> verwenden, um ein init-Skript anzulegen. Unter Ubuntu oder Debian muss man jedoch sein eigenes Skript anlegen:

vim /etc/init.d/coldfusion8multi
#!/bin/sh
# MultiServer cfusion instance Init-Script

CF_DIR="/opt/jrun4"

cfstart() {
echo "The ColdFusion 8 server is starting up and will be available shortly."
nohup $CF_DIR/bin/jrun -start cfusion > $CF_DIR/logs/cfusion-event.log &
echo "======================================================================"
echo "ColdFusion 8 has been started."
echo "ColdFusion 8 will write logs to $CF_DIR/logs/cfusion-event.log"
echo "======================================================================"
}

cfstop() {
echo "Stopping ColdFusion 8, please wait"
nohup $CF_DIR/bin/jrun -stop cfusion
echo "ColdFusion 8 has been stopped"
}

case $1 in
    start)
        cfstart
    ;;
    stop)
        cfstop
    ;;
    restart)
        cfstop

    cfstart
    ;;
esac

exit 0

Init-Skript installieren:

update-rc.d coldfusion8multi defaults

Coldfusion Server starten:

/etc/init.d/coldfusion8multi start

Den Apache Connector einrichten:

/opt/jrun4/bin/cf-connectors.sh

Dies wird das “mod_jrun22″ für den Apache installieren und konfigurieren. (/etc/apache2/httpd.conf)

# JRun Settings
LoadModule jrun_module /opt/jrun4/lib/wsconfig/1/mod_jrun22.so
<IfModule mod_jrun22.c>
    JRunConfig Verbose false
    JRunConfig Apialloc false
    JRunConfig Ignoresuffixmap false
    JRunConfig Serverstore /opt/jrun4/lib/wsconfig/1/jrunserver.store
    JRunConfig Bootstrap 127.0.0.1:51020
    #JRunConfig Errorurl url <optionally redirect to this URL on errors>
    #JRunConfig ProxyRetryInterval 600 <number of seconds to wait before trying to reconnect to unreachable clustered server>
    #JRunConfig ConnectTimeout 15 <number of seconds to wait on a socket connect to a jrun server>
    #JRunConfig RecvTimeout 300 <number of seconds to wait on a socket receive to a jrun server>
    #JRunConfig SendTimeout 15 <number of seconds to wait on a socket send to a jrun server>
    AddHandler jrun-handler .jsp .jws .cfm .cfml .cfc .cfr .cfswf
</IfModule>

Den Apache neu starten:

/etc/init.d/apache2 restart

Nun kann man den Coldfusion Administrator öffnen:

http://<SERVER>/CFIDE/administrator/index.cfm

Nun kann man die Installation mit dem Coldfusion Administrator abschließen.

4. Eine neue Coldfusion Instanz und virtuellen Host anlegen:

Zuerst muss man die neue Instanz mit dem “Instance Manager” anlegen. Dazu den Coldfusion Administrator öffnen und unter “Enterprise Manager” den “Instance Manager” auswählen. Der nächste Schritt ist dort mit “Add New Instance” eine weitere Instanz anzulegen. Einfach einen neuen “Server Name” eingeben “webapp1″ in diesem Beispiel und das ganze mit “Submit” bestätigen.

Jrun erzeugt nun ein neues Serververzeichnis “/opt/jrun4/servers/webapp1″ und startet die neue Instanz. Im “Instance Manager” kann man diese sehen. Außerdem sieht man dort den zugewiesenen HTTP-Port. Zum Beispiel “8301″. Damit kann man nun den Coldfusion Administrator für diese neue Instanz öffnen “http://<SERVER>:8301/CFIDE/administrator/index.cfm”.

Das “Document root” befindet sich unter “/opt/jrun4/servers/webapp1/cfusion.ear/cfusion.war/”.

Man kann ein einfaches Test-Skript erzeugen:

vim /opt/jrun4/servers/webapp1/cfusion.ear/cfusion.war/test.cfm
<h2>Test</h2>
<cfset test="Hello World">
<cfoutput>#test#</cfoutput>

Man kann diese Skript mit “http://<SERVER>:8301/test.cfm” aufrufen.

Nun muss man einen virtuellen Host für “webapp1″ im Apache anlegen:

vim /etc/apache2/sites-available/webapp1
<VirtualHost *>
    ServerName www.testsrv.local

    <IfModule mod_jrun22.c>
        JRunConfig Verbose false
        JRunConfig Apialloc false
        JRunConfig Ignoresuffixmap false
        JRunConfig Serverstore /opt/jrun4/lib/wsconfig/1/jrunserver.store
        JRunConfig Bootstrap 127.0.0.1:51000
        #JRunConfig Errorurl url <optionally redirect to this URL on errors>
        #JRunConfig ProxyRetryInterval 600 <number of seconds to wait before trying to reconnect to unreachable clustered server>
        #JRunConfig ConnectTimeout 15 <number of seconds to wait on a socket connect to a jrun server>
        #JRunConfig RecvTimeout 300 <number of seconds to wait on a socket receive to a jrun server>
        #JRunConfig SendTimeout 15 <number of seconds to wait on a socket send to a jrun server>
        AddHandler jrun-handler .jsp .jws .cfm .cfml .cfc .cfr .cfswf
    </IfModule>

    DocumentRoot /opt/jrun4/servers/webapp1/cfusion.ear/cfusion.war/
    <Directory /opt/jrun4/servers/webapp1/cfusion.ear/cfusion.war/>
        Options Indexes FollowSymLinks MultiViews
        AllowOverride None
        Order allow,deny
        allow from all
    </Directory>

    ErrorLog /var/log/apache2/error.log
    CustomLog /var/log/apache2/access.log combined
</VirtualHost>

Bemerkung: Sehr wichtig ist die Zeile “JRunConfig Bootstrap 127.0.0.1:51000″. Für jede Multiserver-Instanz erzeugt Coldfusion einen eigenen Port für den “JRunProxyService”. Dieser Port ist in der “jrun.xml” für jede Instanz definiert.

vim /opt/jrun4/servers/webapp1/SERVER-INF/jrun.xml
...
<service class="jrun.servlet.jrpp.JRunProxyService" name="ProxyService">
...
<attribute name="port">51000</attribute>
<attribute name="deactivated">false</attribute>
...
</service>
...

Nun kann man den neuen virtuellen Host installieren:

a2ensite webapp1

und den Apache Server neu laden:

/etc/init.d/apache2 reload

Nun kann man mit “http://www.testsrv.local/test.cfm” auf das Test-Skript zugreifen.

Auch auf den Coldfusion Administrator kann über “http://www.testsrv.local/CFIDE/administrator/index.cfm” zugegriffen werden

Man sollte natürlich noch weitere Konfigurationen an dem virtuellen Host vornehmen. Zum Beispiel den Zugriff auf “CFIDE” mit einer zusätzlichen “.htaccess” Datei einschränken, das Verzeichnisauflisten deaktivieren und weitere Apache Sicherheitseinstellungen vornehmen.

5. Init-Skript anpassen:

Der Coldfusion Server startet die Instanzen nicht automatisch beim starten. Deshalb müssen die Instanzen zum Init-Skript hinzugefügt werden. Hier ist eine angepasste Version für “webapp1″:

#!/bin/sh
# MultiServer cfusion instance Init-Script

CF_DIR="/opt/jrun4"

cfstart() {
echo "The ColdFusion 8 server is starting up and will be available shortly."
nohup $CF_DIR/bin/jrun -start cfusion > $CF_DIR/logs/cfusion-event.log &
nohup $CF_DIR/bin/jrun -start -childVM webapp1 > $CF_DIR/servers/webapp1/cfusion.ear/cfusion.war/WEB-INF/cfusion/logs/cfusion-event.log &
echo "======================================================================"
echo "ColdFusion 8 has been started."
echo "ColdFusion 8 will write logs to $CF_DIR/logs/cfusion-event.log"
echo "======================================================================"
}

cfstop() {
    echo "Stopping ColdFusion 8, please wait"
    nohup $CF_DIR/bin/jrun -stop cfusion
    nohup $CF_DIR/bin/jrun -stop -childVM webapp1
    echo "ColdFusion 8 has been stopped"
}

case $1 in
    start)
        cfstart
    ;;
    stop)
        cfstop
    ;;
    restart)
        cfstop
        sleep 20
        cfstart
    ;;
esac

exit 0

Bemerkung: Man könnte auch eigene Init-Skripte für jede Instanz anlegen. Die Haupt Coldfusion Applikation wird übrigens nicht benötigt um die Instanzen laufen zu lassen.

Create an iCalendar server with debian 5.0 lenny

Linux, Systemadministration | Posted by sebastian
Feb 16 2009

Zuerst benötigt man einen funktionsfähigen Apache2 Webserver mit dem Modul “dav_fs”. Wenn man iCal über SSL verwenden will, muss der Apache2 Webserver zusätzlich mit “mod_ssl” konfiguriert sein.

a2enmod dav_fs

Nun muss man die Apache Konfiguration anpassen:

Folgende Konfiguration in den entsprechenden “virtualhost” einfügen;

Alias /iCalendar /your/path/to/iCalendar
<location /iCalendar>
    DAV On
</location>


Nun kann man z.B. mit Sunbird einen neuen Kalender anlegen. Dazu einfach einen neuen Kalender hinzufügen, “Network calendar” und “iCalendar (ICS)” auswählen. Anschließend die URL zum Kalenderserver eingeben: “http://your.server.address/iCalendar/myCalendar.ics” (Oder https)

Natürlich kann man das Kalenderverzeichnis auch mit Benutzername und Passwort absichern:

Beispiel mit MySQL-autentifizierung:

Alias /iCalendar /your/path/to/iCalendar
<location /iCalendar>
    DAV On
    AuthBasicAuthoritative Off
    AuthUserFile /dev/null
    AuthMySQL On
    AuthName "Calendar"
    AuthType Basic
    Auth_MySQL_Host localhost
    Auth_MySQL_User DB_USER
    Auth_MySQL_Password DB_PASS
    AuthMySQL_DB DB_NAME
    AuthMySQL_Password_Table DB_TABLE
    Auth_MySQL_Username_Field DB_USER_FIELD
    Auth_MySQL_Password_Field DB_PASSWORD_FIELD
    Auth_MySQL_Empty_Passwords Off
    Auth_MySQL_Encryption_Types Crypt_DES
    Auth_MySQL_Authoritative On
    require valid-user
</location>

Beispiel mit Password-file:

Alias /iCalendar /your/path/to/iCalendar
<location /iCalendar>
    DAV On
    AuthName "Calendar"
    AuthUserFile "/your/path/to/.htpasswd"
    require valid-user
</location>

Das Password-file anlegen:

htpasswd -c /your/path/to/.htpasswd MY_USER

Jetzt muss man die URL zu seinem Kalender in Sunbird ändern zu “http://MY_USER:MY_PASSWORD@your.server.address/iCalendar/myCalendar.ics”.

Wenn man zusätzlich ein Webinterface für seinen Kalender haben will, sollte man sich http://www.php-calendar.com ansehen.

New blog layout

General | Posted by sebastian
Feb 11 2009


Heute dachte ich meine Webseite braucht ein neues Layout.


Es ist eine etwas modifizierte Version des “Auroral Theme“.


Ich denke ich brauche noch ein paar neue nutzlose Addons für Wordpress … :-)

Update:


Ich habe einige Übersetzungsseiten in meinen Blogstats entdeckt. Ich schreibe die meisten Blogeinträge in Deutsch und Englisch. Man kann nun die Sprache im Header der Seite selber wählen.

Greylisting with sqlgrey, postfix and mysql on Debian Lenny

Linux, Systemadministration | Posted by sebastian
Feb 10 2009

Dieser Artikel beschreibt, wie man sqlgrey mit postfix und mysql unter Debian Lenny einrichtet.

Das normale greylisting mit postgrey speichert seine whitelist in einer Berkeley Datenbank, welche bei einem Mailservercluster repliziert werden muss. Mit sqlgrey kann man diese Replikation mit einer mysql datenbank erledigen.

Zuerst eine neue Datenbank “sqlgrey” mit einem Benutzer “sqlgrey” auf dem Datenbankserver anlegen. (Die Tabellen werden von sqlgrey angelegt.)

1. Installation sqlgrey:

aptitude install sqlgrey

2. Bearbeiten der sqlgrey Konfigurationsdatei:

vim /etc/sqlgrey/sqlgrey.conf

Datenbankeinstellungen:

## Database settings
db_type = mysql
db_name = sqlgrey
db_host = YOUR_DATABASE_SERVER
db_port = default
db_user = sqlgrey
db_pass = YOUR_PASS_WORD
db_cleandelay = 1800
clean_method = sync

4. sqlgrey zur postfix Konfiguration hinzufügen:

vim /etc/postfix/main.cf

Empfängerfilter hinzufügen:

smtpd_recipient_restrictions = permit_sasl_authenticated,
permit_mynetworks,
reject_unauth_destination,
reject_unknown_client,
reject_invalid_hostname,
check_policy_service inet:127.0.0.1:2501,
permit

5. Services neu starten:

/etc/init.d/sqlgrey restart
/etc/init.d/postfix restart

6. Kontrollieren

Der Inhalt der Tabelle “connect” zeigt Informationen über die Sender aller eingehenden Mails.