
Som i ved startede jeg virksomhed sidste år, og jeg sidder nu og ligger sidste hånd på mailserveren.
Den har været noget af en udfordring at sætte op, ikke mindst fordi der praktisk taget ikke er nogen "rigtig" måde at gøre det på[1], og så fordi det er svært at få feedback fra venner og familie på sådan et projekt. Det sidste der mangler nu, er et program som ordner de sidste hængepartier, og jeg regner med at køre det som en daemon.
Jeg ville værdsætte alle typer af kommentarer på programmet, da jeg muligvis er ved at stirre mig blind på det. Det er ikke lavet færdigt, men jeg er godt i gang, og har indtil videre lavet / taget højde for følgende ting:
1. Programmet har 2 funktioner: A), at træne spamfilteret ud fra kopier af mails, som mailserveren opretter i /var/spool når en bruger flytter en mail til / fra sin spam-mappe. B), at tage en brugers sortliste[2] og konventere den til en blokeringsliste som mailserveren kan bruge til at afvise mails ud fra.
Jeg overvejede at lave ét program pr. funktion, men endte med at samle det for at holde al vedligeholdelse til mailserveren ét sted, for at undgå konflikter. Ligeledes laver jeg det som program i stedet for som script, for at undgå at crontab starter en ny instans inden den gamle er færdig. Det sidste kan løses med en PID-agtig fil, men alligevel.
2. Programmet kommer til at kunne bruge syslog eller sin egen logfil. Ønsker man begge dele, så må man sætte syslog op til at tage programmets logdata ud af syslog.
3. Programmet får sin konfiguration i /etc/default/ og sit eget init-script med {start|stop|restart|status} og default runlevels. Pt. kommer det kun til at understøtte Debian, men hvis nogen udpeger forskelle imellem Debian og fx Ubuntu, så integrerer jeg dem gerne. Ville github[3] være egnet til sådan noget?
4. Perl-specifikt bruger jeg kun core-moduler, og kun så lidt som muligt. Tanken er at holde afhængighederne så lavt som muligt, selv på bekostning af afviklingshastighed og udviklertimer. Nogen tanker til sådan en tilgang? Dertil bruger jeg warnings og strict for at holde koden så "korrekt" som mulig.
5. Programmet får brug for adgang til filer fra mailserveren, som har rettighederne vmail:vmail 600 og systemfiler som har root:root 644 og sikkert 600. Derfor regner jeg med at køre programmet som root. Udover de mere åbenlyse problemstillinger, er der så mere diskrete problemstillinger? Kan det faktisk betale sig i udviklertid at køre hvad der er muligt uden privilegier?
6. Pt. består programmet dermed af programfilen, init-scriptet og konfigurationsfilen. Hvad er den bedste måde at distribuere og installere det på? Manuelt virker tiltalende for så lidt, men hvis der kommer flere filer til bliver det hurtigt besværligt.
7. Både Perl-specifikt og Linux-specifikt, er der så nogle ting man skal være opmærksomme på med langtidskørende programmer? Jeg ved at Perl bruger meget hukommelse, men helt ærligt sagt, så er jeg ligeglad[4]. Derimod tænker jeg på mere specifikke ting som memory leaks, buffer overflows og den slags, og om der er særlige ting at være opmærksom på / undgå når man laver programmer til Linux.
Tak for at læse så langt

---
[1] Når bare den overholder diverse RFCs.
[2] Liste over afsendere i en database, som brugeren har markeret at de ikke ønsker mails fra.
[3] https://github.com/TitanusEramius
[4] Ram idag er ikke ret dyre, og om et program bruger 5 eller 50mb er i min mening underordnet, så længe det er tilsigtet.