Category Archives: Servers

Mijn belevenissen met het opzetten en onderhouden van een server.

Logrotate en compressed

Vooral als aantekening voor mezelf, omdat ik hier gisteren best wel naar heb lopen zoeken.
Als de sharedscript optie gebruikt wordt in de logrotatie, dan wordt de compressie pas uitgevoerd nadat het postrotate gedeelte gedaan is.

Dit heb ik nu:

/var/log/apache2/*.log {
        daily
        missingok
        rotate 35
        compress
        sharedscripts
        postrotate
        day=`date -d 'yesterday' +%Y%m%d`
        mv access.log.1 access.log-$day
        mv error.log.1 error.log-$day
        if [ -f /var/run/apache2.pid ]; then
        /etc/init.d/apache2 restart > /dev/null
        fi
        chmod 640 /var/log/apache2/*.log
        endscript
}

In het postrotate gedeelte hernoem ik dus de geroteerde bestanden zodat er de datum van gisteren in voorkomt. Daarmee komen ze wel buiten het bereik van de logrotatie, maar dat los ik wel op een andere manier op.

Heb ook nog even gekeken naar de dateext optie, maar daarmee kan ik niet aangeven dat het de datum van gisteren moet zijn.

Na de crash

Een dag na de crash zijn een aantal belangrijke zaken weer ingericht:

  • apache, php en mysql geinstalleerd
  • logrotatie voor apache opnieuw ingesteld
  • webstatistieken
  • backup databases (nu nog lokaal, nog aanpassen naar opslag extern)

Staat nog heleboel te doen komende weken, maar voorlopig is belangrijkste weer up en running.

Crash

Het kan zomaar ineens gebeuren, een harddisk die overlijdt. Het komt altijd ongelegen en ondanks alle goede voornemens waren mijn backups niet al te recent meer (ongeveer 3 maanden oud). Dondermiddag begonnen de problemen met de harddisk en donderdagavond hield alles er opeens mee op.

Inmiddels weer op het punt dat ik in ieder geval weer mijn belangrijkste website in de lucht kan brengen. Weliswaar met de stand van begin februari, maar dat is niet anders.

Komende dagen dus druk met weer alles op te zetten en in te regelen.

Apache 2.4 voorbereiden compilatie

Al enige tijd zit ik er aan te denken om te upgraden van Apache 2.2 naar versie 2.4. Enige probleem, deze zit niet in de repositories van Debian Squeeze. Nu kan ik een precompiled binary downloaden, maar waarom zelf niet compileren? Ben vooral benieuwd naar de nieuwe mpm event.

Wat ik voor Apache 2.4 in ieder geval nodig heb:

Als eerste maar eens alle archieven uitpakken (archieven staan bij mijn in /opt/dsl/sources):

$ cd /tmp/
$ tar xzf /opt/dsl/sources/apr-1.4.6.tar.gz
$ tar xzf /opt/dsl/sources/apr-util-1.5.1.tar.gz
$ tar xzf /opt/dsl/sources/httpd-2.4.3.tar.gz

Apr en apr-util zijn nodig voor Apache, dus die compileren we eerst:

$ cd /tmp/apr-1.4.6
$ ./configure --prefix=/opt/apr
$ make
# make install
$ cd /tmp/apr-util-1.5.1
$ ./configure --prefix=/opt/apr-util ---with-apr=/opt/apr
$ make
# make install

Ik kies hier bewust voor een prefix om alles een eigen directory onder /opt te geven. Op die manier weet ik zeker dat alle bestanden netjes bij elkaar staan. Nu nog alles netjes in een archief stoppen:

$ tar czvf /opt/dsl/apr-1.4.6-bin.tar.gz /opt/dsl/apr/
$ tar czvf /opt/dsl/apr-util-1.5.1-bin.tar.gz /opt/dsl/apr-util/

Mooiste zou zijn om zelf een deb package te maken, maar daar moet ik me eerst nog in verdiepen. En aangezien het toch voornamelijk voor mezelf is, is deze werkwijze voldoende.

Edit 28-01-2013
Wat ik vergat, ik moet php waarschijnlijk ook opnieuw compileren omdat de geinstalleerde versie van php tegen Apache 2.2 gecompileerd is.

Nog maar eens goed over nadenken wat ik ga doen.

Courier vervangen door Dovecot

Omdat ik af wil van het pakket saslauthd dat voor Courier nodig is, ben ik eens gaan kijken hoe makkelijk het is om over te stappen op Dovecot. En dat bleek eenvoudiger dan gedacht.

Allereerst maar de benodigde pakketten installeren:

aptitude install dovecot-common dovecot-imapd

Hiermee werden de geinstalleerde Courier pakketten verwijderd. Volgende stap is dan het configureren van Dovecot. Allereerst maar even een kopie gemaakt van de default configuratie:

cp /etc/dovecot/dovecot.conf /etc/dovecot/dovecot.conf.default

Vervolgens is het een kwestie van de volgende bestanden configureren:

  • /etc/postfix/main.cf
  • /etc/postfix/master.cf
  • /etc/dovecot/dovecot.conf
  • /etc/dovecot/dovecot-sql.conf

Een van de problemen die ik tegen kwam, was de volgende foutmelding in de mail.log:

echo postfix/pipe[28624]: AC7AB11BA168: to=, relay=dovecot, delay=56, delays=56/0.01/0/0.01, dsn=4.3.0, status=deferred (temporary failure. Command output: Can't open log file /var/log/mail.log: Permission denied )

De oplossing voor dit probleem was -na een uurtje gezocht en nagedacht te hebben- eigenlijk vrij simpel. In /etc/dovecot/dovecot.conf had ik de volgende regel opgenomen:

log_path = /var/log/mail.log

Deze heb ik verwijderd en na een herstart was het probleem verholpen. Het is immers niet nodig om expliciet een aparte logfile op te geven, als ik het weglaat komt het automatisch wel in de mail.log terecht.

Volgende issue was de volgende melding:

deliver(mailaddress): Fatal: setgid(1001(vmail)) failed with euid=5000(vmail), gid=5000, egid=5000: Operation not permitted (This binary should probably be called with process group set to 1001(vmail) instead of 5000)

Deze fout werd veroorzaakt door het feit dat in de dovecot.conf twee regels niet opgenomen waren:

mail_uid=5000
mail_gid=1001

De rest van de configuratie kon zonder problemen worden ingesteld door de voorbeeld configuratie door te nemen. Aangezien ik met Courier ook het ssl/tls gedeelte werkend had, was het een kleine moeite om ook Dovecot te laten werken met ssl/tls. Al met al heeft het twee avonden gekost om het weer tot een werkende configuratie te brengen.

Volgende stap is het opschonen van de configuratie, maar dat komt later. Eerst even een tijdje laten draaien.

Postfix met ipv6

Aangezien eergisteren de laatste twee /8 blokken van ipv4-adressen zijn uitgedeeld, ben ik maar eens gaan uitzoeken wat ik allemaal moet doen om Postfix gereed te maken voor ipv6.

Dat levert het volgende lijstje op:

  • een AAAA-record toevoegen aan de waarde van mijn mx-record
  • reverse dns instellen voor mijn mx-record voor het ipv6 adres
  • parameters in Postfix toevoegen c.q. wijzigen

De eerste is geen probleem, in het controlepanel van Transip kan ik een AAAA-record toevoegen. Echter, de reverse dns voor ipv6 kan ik zelf niet instellen. Wordt dus een puntje om uit te zoeken.

In het bestand /etc/postfix/main.cf gaat het om twee parameters:

inet_protocols = ipv4, ipv6
smtp_bind_address6 = 2001:..:1

Hierna is een stop-start van Postfix voldoende om zowel mail te ontvangen als te versturen via ipv6.

Tunnel voor Mysql

Soms werkt het voor Mysql prettiger als je je werk kunt doen in een grafische omgeving. Om dit te bereiken zet ik via ssh een tunnel op met:

ssh -L 3306:127.0.0.1:3306 user@server

Na het ingeven van mijn wachtwoord, kan ik vervolgens op mijn werkstation in mijn databaseprogramma verbinding maken met 127.0.0.1:3306 en kan ik aan de slag.

Ben nog wel even aan het rondkijken wat voor programma ik lokaal ga gebruiken. Voorlopig is mijn keuze gevallen op Database browser portable.

Verhuizing (2)

De nieuwe server is inmiddels zover gevorderd dat deze site wel overgezet kan worden. In de loop van de dag even de oude server in de gaten houden en zodra daar geen requests meer binnenkomen voor dit domein, kan ik daar de boel wat verder opruimen.

Edit 03-12-2010:
Inmiddels is de oude server opgeruimd en is de verhuizing compleet.

Htpasswd in Lighttpd

De statistiekenpagina’s van mijn sites zijn afgeschermd met een simpele htpasswd beveiliging. Voornaamste doel daarbij is om de zoekmachines buiten de deur te houden. Nu ik bezig ben met de overstap naar Lighttpd, moet dit dus ook geregeld worden.

Allereerst heb ik een scriptje aangemaakt:

#!/bin/sh
user=$1
realm=$2
pass=$3

hash=`echo -n "$user:$realm:$pass" | md5sum | cut -b -32`

echo "$user:$realm:$hash" 

Dit kan dan als volgt worden gebruikt:

$ htdigest.sh 'user' 'realm' 'secret'
user:realm:8364d0044ef57b3defcfa141e8f77b65

Daarna de configuratie in Lighttpd toegevoegd:

# statistieken pagina afgeschermd
$HTTP["url"] =~ "^/statistieken/" {
auth.backend = "htpasswd"
auth.backend.htpasswd.userfile = "/path/to/.htpasswd"
auth.require = ("/webstats" => (
"method"  => "basic",
"realm"   => "anything",
"require" => "valid-user"
))
}

Lighttpd als vervanger voor Apache

De basisinstallatie van Lighttpd met php werkt nu, zowel voor ipv4 als ipv6. Volgende stap wordt het mogelijk maken van verschillende virtual hosts.

Nu wordt met de standaardinstallatie de module mod_simple_vhost gebruikt. Dat werkt weliswaar, maar er is een andere module die wat krachtiger is, mod_evhost. Mijn eerste gedachte was als volgt:

# vi /etc/lighttpd/lighttpd.conf
-> toevoegen module mod_evhost
-> toevoegen evhost.path-pattern  = "/var/www/%0/%3/"
# /etc/init.d/lighttpd force-reload

Hierna zou het dus zou moeten zijn dat als de directory bestaat, de virtualhost dus wijst naar de directory zoals die in het pattern is opgegeven (%0 is domein+tld, %3 is 1e sub). Als de directory niet bestaat, wordt de default documentroot gebruikt.

Echter, wat ik ook probeerde, voor alle verzoeken werd de content uit de default documentroot getoond en niet uit de directory voor dat specifieke domein. Oplossing hiervoor was eigenlijk best wel simpel. Het blijkt dus dat er maar 1 vhost module geladen mag zijn. Inderdaad, ik had zowel de mod_evhost als de mod_simple_vhost geladen. Weliswaar had ik alleen configuratie voor de mod_evhost, maar het simpelweg geladen zijn van beide is al voldoende om het niet te laten werken.

Kan ik nu verder met de mysql module en de verdere fine-tuning.