Dokumentation: Aufbau meines Fileservers

(2008-02-21)

Inhaltsverzeichnis

Als System habe ich mir für Gentoo Linux entschieden, da ich ohnehin vorhabe, die Serverprogramme selbst zu kompilieren um die nicht benötigten Features von vorneherein draußen zu lassen und etwas Geschwindigkeit herauszuholen. Außerdem klappte die Einrichtung der Festplattenverschlüsselung und des Software-RAIDs erstaunlich problemlos.

Die Komponenten des Systems sind schon etwas älter, haben mir aber gute Dienste erwiesen, sodass ich sie weiterhin verwenden werde. Im einzelnen sind das:

  • AMD Athlon XP 2400+
  • 1024 MB Infineon DDR-RAM
  • EPoX 8RDA3 Mainboard (nForce2-400 Chipsatz, weder Onboard-LAN noch SATA)
  • Promise SATA300 TX4 (SATA-Controller mit 4 Anschlüssen)
  • D-Link DGE-528T Gigabit-LAN-Karte
  • WDC WD2000JB-00GVA0 (200 GB)
  • WDC WD2500JB-00GVA0 (250 GB)
  • WDC WD1200JB-75CRA0 (120 GB)
  • WDC WD740GD-00FL (74 GB, Systemplatte)
  • SAMSUNG HD400LJ (400 GB)

(Ja, der Festplattenbestand ist historisch gewachsen ;-).)

Eingebaut wird das ganze in ein 19"-Rackgehäuse von Yeong-Yang. Alle Platten sollen komplett verschlüsselt werden, die Heimverzeichnisse der einzelnen User sollen zudem noch auf einem Software-RAID-1 abgelegt werden.

Update: Mehr Karten und Skalierungsprobleme

Nachdem ich im Laufe der Zeit für Asterisk eine Fritz!ISDN PCI-Karte einbaute und dann noch der 3WARE-RAID-Controller dazukam, stürzte der Rechner scheinbar unregelmäßig ab. Genauere Analysen brachten dann zu Tage, dass das Problem sich bei hoher Interrupt-Load zeigte. Durch den Vollausbau (Ethernet, ISDN, 2xSATA) an PCI-Karten war diese Auslastung erheblich höher als früher.

Das Problem äußerte sich dadurch, dass die System-Festplatte, welche am Promise-Controller hing, plötzlich nicht mehr vorhanden war. Nach dem Tausch des Controllers durch einen Dawicontrol DC154 traten die selben Probleme zwar weiterhin auf, aber die Festplatte verschwand nicht. Der Promise-Treiber (oder Controller?) konnte sich also von einer SATA-Exception nicht erholen. Beim Dawicontrol (mit SiL-Chipsatz) klappte das, aber dass das Problem immernoch auftrat, war merkwürdig.

Da auch verschiedene APIC-Modi nichts bewirkten (diese sind für dynamische IRQ-Zuteilung zuständig), entschied ich mich, die Hardware auszutauschen (also CPU, Mainboard, RAM). Mittlerweile läuft das System mit den neuen Komponenten stabil. Mehr zu den neuen Komponenten gibt’s in einem bald folgenden Artikel.

Das Gehäuse (Yeong Yang W201)

Da ich mit Yeong Yang-Gehäusen auch bisher schon gute Erfahrungen gemacht hatte und die Testberichte sehr überzeugend klangen, bestellte ich mir das zugegebenermaßen schwer zu bekommende W201 bei pc-planet.de. Es ist auf EATX-Boards ausgelegt, hat aber passende Löcher für normale ATX- und MATX-Boards.

Der Einbau von Netzteil, Mainboard und PCI-Karten klappte problemlos. Zu beachten ist, dass die beiden kleinen Lüfter direkt über den PCI-Karten erst fest eingebaut werden sollten, wenn man sich sicher ist, dass mit den Karten soweit alles in Ordnung ist, da man die Lüfter vor jedem Kartentausch abschrauben muss ;-).

Die Festplatten werden in separat kaufbaren Käfigen untergebracht, jeweils 5 Stück pro Käfig. Diese sind so ausgelegt, dass die Festplatten so ausgerichtet sind, wie sie es in einem normalen Gehäuse (Tower) sind, wenn man das Gehäuse ins Rack einbaut (man könnte es auch aufrecht anbringen).

Von diesen Käfigen kann man zwei Stück einbauen, somit hätte man also Platz für 10 Festplatten. Außerdem sind noch zwei 5,25"-Einschübe frei und das Gehäuse bietet noch eine etwas außergewöhnliche Befestigungsmöglichkeit auf dem vorderen Käfig (siehe Bild ;-)). Macht insgesamt 14 Festplatten.

Die eingebauten Lüfter sind angenehm leise (für ’nen Server, also erwartet keinen Super-Silent-PC).

Alles in allem bin ich mit dem Gehäuse sehr zufrieden, alles klappte problemlos, ich hab’ mich nicht am Gehäuse, sondern am Inhalt der PCI-Karten geschnitten ;-). Bilder habe ich natürlich auch gemacht…

Installation

Ich habe die Live-CD Gentoo 2006.1 verwendet, es sollte mit neueren Versionen aber auch funktionieren.

Nach dem Booten in die Live-CD empfiehlt es sich, nachzusehen, ob alle Festplatten und (zumindest die wichtigsten) Geräte erkannt wurden. Somit kann man später Hardware-Fehler ausschließen, falls etwas nicht funktioniert.

Anschließend werden wir die Systemplatte (mit fdisk) formatieren, ich habe sie bei mir in 50 MB für den Kernel und initrd (viel zu groß, ich weiß), 2 GB Swap und den Rest (von 74 GB in diesem Fall) für / aufgeteilt.

Die Festplatte ist bei mir am zweiten SATA-Port angeschlossen, die Devices sind jedoch umgedreht numeriert. Ob das am Treiber oder am Controller selbst liegt, weiß ich nicht. Jedenfalls booten wir deshalb von /dev/sdc, statt von /dev/sda (der Controller nimmt einfach die erste Platte, die er findet).

Wir erstellen dann die Dateisysteme für die jeweiligen Partitionen: ext2 für /boot, verschlüsseltes ext3 für / und das verschlüsselte Swap setzen wir später auf.

# mkfs.ext2 /dev/sdc1
# cryptsetup -c blowfish-cbc-essiv:sha256 -y -s 256 luksFormat /dev/sdc3
# cryptsetup luksOpen /dev/sdc3 root
# mkfs.ext2 -j /dev/mapper/root

Dann führen wir eine ganz normale Gentoo-Installation durch: Wir laden das Stage-3-Archiv und Portage herunter und entpacken das ganze:

# mount /dev/mapper/root /mnt/gentoo
# cd /mnt/gentoo
# wget http://gentoo.osuosl.org/releases/x86/current/stages/stage3-i686-2006.1.tar.bz2
# tar xjpf stage3*
# cd usr
# wget http://gentoo.osuosl.org/snapshots/portage-latest.tar.bz2
# tar xjf portage*

Anschließend kopieren wir uns noch die Nameserver-Konfiguration (die, im Gegensatz zu den IP-Einstellungen, nicht erhalten bleiben nach dem Changeroot) und /proc und /dev:

# cp /etc/resolv.conf /mnt/gentoo/etc/resolv.conf
# mount -t proc none /mnt/gentoo/proc
# mount -o bind /dev /mnt/gentoo/dev

Dann wechseln wir in die neue Gentoo-Installation:

# chroot /mnt/gentoo /bin/bash
# env-update
# source /etc/profile
# export PS1="(chroot) $PS1"

Wir aktualisieren den Portage-Tree und dann Portage selbst (falls es ein Update gibt):

# emerge --sync
# emerge portage

Danach setzen wir das Serverprofil:

# rm /etc/make.profile
# ln -s /usr/portage/profiles/default-linux/x86/2006.1/server /etc/make.profile

Und passen die Einstellungen zum Kompilieren an unsere Plattform und Wünsche an:

/etc/make.conf

CFLAGS="-O2 -march=athlon-xp -pipe"
USE="-ldap -x11"

Anschließend wählen wir noch die Locales:

/etc/locale.gen

en_US ISO-8859-1
de_DE ISO-8859-1
[email protected] ISO-8859-15

…und generieren die selbigen:

# locale-gen

Noch kurz die Zeitzone setzen, dann geht's ans Kernelbacken:

# cp /usr/share/zoneinfo/Europe/Berlin /etc/localtime

Kernel kompilieren

Zuerst lassen wir uns die letzten Kernel-Sources herunterladen und wechseln in das Verzeichnis derselbigen:

# USE="-doc symlink" emerge gentoo-sources
# cd /usr/src/linux

Dann konfigurieren wir den Kernel nach unseren Wünschen. Dabei ist zu beachten, dass unbedingt Treiber für den entsprechenden IDE-/SATA-Controller (bei mir CONFIG_BLK_DEV_AMD74XX und CONFIG_SATA_SX4) fest im Kernel einkompiliert sind, ebenso das Dateisystem der root-Partition, sonst können wir den Rechner später nicht booten. Außerdem brauchen wir im Kernel einkompilierte Unterstützung für das Crypt-Target des Device-Mappers (CONFIG_DM_CRYPT) und die Crypto-Algorithmen (CONFIG_CRYPTO, CONFIG_CRYPTO_CBC, CONFIG_CRYPTO_BLOWFISH, CONFIG_CRYPTO_SHA256).

Um den Kernel nun zu kompilieren, die ausgewählten Module (bei mir lediglich der TUN-treiber für OpenVPN, CONFIG_TUN) zu installieren und den Kernel in die /boot-Partition zu kopieren nutzen wir folgenden Befehl:

# make && make modules_install
# cp arch/i386/boot/bzImage /boot/kernel-2.6.19-r5-stability

Grundeinstellungen

Nun sollten wir dem System noch klarmachen, welche (virtuellen) Laufwerke er wohin zu mounten hat bei Systemstart:

/etc/fstab

/dev/sdc1       /boot       ext2    noauto,noatime      1   2
/dev/mapper/root    /       ext3    noatime         0   1
proc            /proc       proc    defaults        0   0
shm         /dev/shm    tmpfs   nodev,nosuid,noexec 0   0

Dann setzen wir noch den Hostname:

/etc/conf.d/hostname

HOSTNAME="stability"

Und erledigen die Netzwerkkonfiguration:

/etc/conf.d/net

dns_servers_eth0="192.168.1.2 192.168.1.1 194.25.2.129"
dns_sortlist_eth0="192.168.1.0/24"
config_eth0=( "192.168.1.5 netmask 255.255.255.0 brd 192.168.1.255" )
routes_eth0=( "default gw 192.168.1.1" )

Dieses Interface möchten wir beim Systemstart automatisch konfigurieren lassen:

# rc-update add net.eth0 default

Ein Root-Passwort sollten wir nicht vergessen:

# passwd

Falls alle Stränge reißen, möchten wir uns eventuell über Serielle Konsole anmelden:

# echo "tts/0" >> /etc/securetty

Zu guter letzt installieren wir noch ein paar benötigte Systemprogramme:

# emerge syslog-ng vixie-cron slocate
# rc-update add syslog-ng default
# rc-update add vixie-cron default

Initrd erstellen

Die Initrd ist eine Ramdisk (wie das rd im Namen erkennen lässt), welche nach Laden des Kernels und vor dem Laden von init ausgeführt wird. Wir brauchen eine initrd, damit wir die verschlüsselte Platte mounten können, denn das System soll ja davon booten.

Auf dem neuen System ist übrigens noch kein cryptsetup-luks installiert, was wir nun nachholen sollten:

# emerge cryptsetup-luks

Eine solche Ramdisk ist nichts anderes, als ein (Gzip-)komprimierte ext2-Image, welches wir mit den folgenden Befehlen erzeugen und mounten können:

# cd /mnt
# mkdir ramdisk
# dd if=/dev/zero of=initrd bs=1024 count=4096
# mke2fs -F ./initrd
# mount -o loop initrd ramdisk

Nun legen wir also in /mnt/ramdisk den Inhalt der Ramdisk ab – wir brauchen ein paar Programme und Bibliotheken, sowie das Initscript selbst:

# mkdir ramdisk/{bin,dev,lib,sbin,proc}
# cp -a /bin/{bash,cat,chroot,cryptsetup,echo,mkdir,mknod,mount,rm,sed,sleep,umount} ramdisk/bin/
# cp -a /sbin/{blockdev,pivot_root} ramdisk/sbin
# ln -s bash ramdisk/bin/sh

Außerdem müssen wir die Device-Node der Console (fix) und der zu öffnenden Festplatte erstellen, welche wir mit file /dev/sdc herausfinden:

# mknod ramdisk/dev/console c 5 1
# file /dev/sdc3
/dev/sdc3: block special (8/35)
# mknod ramdisk/dev/sdc3 b 8 35

Für jedes der kopierten Programme brauchen wir noch die entsprechenden Libraries, welche man mit dem ldd-Befehl herausfinden kann:

cp /lib/{ld-2.4.so,libblkid.so.1.0,libc-2.4.so,libdevmapper.so.1.02} ramdisk/lib
cp /lib/{libdl-2.4.so,libncurses.so.5.5,libuuid.so.1.2,libz.so.1} ramdisk/lib
cp /lib/{ld-linux.so.2,libblkid.so.1,libc.so.6,libdl.so.2,libncurses.so.5,libuuid.so.1} ramdisk/lib

Anschließend erzeugen wir das eigentliche Script (stammt größtenteils aus dem Gentoo-Wiki, siehe Quellen):

ramdisk/sbin/init

#!/bin/sh

echo "INITRD Loading :-)"
ROOT_DEV=/dev/sdc3
ROOT_MAP=root

export PATH=/bin:/sbin
mount -t proc proc /proc
CMDLINE=`cat /proc/cmdline`
sh /sbin/devmap_mknod.sh
if [ $? -ne 0 ]; then
        echo Creation of /dev/mapper/control failed
        exit 0
fi

echo "Ok, let's have a look at the headers..."
cryptsetup luksDump ${ROOT_DEV}

count=0
sesam=1
while [ ${sesam} -ne 0 ]; do
        if [ "$count" = "3" ]; then
                echo "Hm, doesnt seem to work. Go play with the shell. Press Ctrl+D when done."
                bash
                echo System halted
                exit 0
        fi

        count=$(( $count + 1 ))
        echo "Enter passphrase:"
        read -s pass
        echo
        echo ${pass} | cryptsetup luksOpen ${ROOT_DEV} ${ROOT_MAP}
        sesam=$?
done
echo "Mounting root..."
mount /dev/mapper/${ROOT_MAP} /mnt
if [ $? -ne 0 ]; then
        echo "Mounting root failed"
        cryptsetup luksClose ${ROOT_MAP}
        exit 0
fi

echo "Booting..."
umount /proc
cd /mnt
mkdir initrd
pivot_root . initrd
echo "Starting init"
exec chroot . /bin/sh <<- EOF >/dev/console 2>&1
umount initrd
rm -rf initrd
blockdev --flushbufs /dev/ram0
echo "Exec init ${CMDLINE}"
exec /sbin/init ${CMDLINE}
EOF

Im Gegensatz zu der Originalversion von Gentoo-Wiki gibt diese Version beim Boot die Header des zu mountenden Devices aus, wodurch man sieht, ob die Device-Node korrekt erzeugt wurde, und ob mit dem LUKS-Header alles in Ordnung ist. Außerdem bekommt man nach drei erfolglosen Versuchen, das Passwort einzugeben, eine Shell. Diese Zeilen sollte man, nachdem das System ordnungsgemäß bootet, entfernen.

Kleiner Tipp: Bei mir verursachte ein Passwort, welches Sonderzeichen wie Doppelpunkte und Klammern enthielt, Probleme. Die Platte ließ sich einfach nicht mounten, trotz korrekter Eingabe des Passworts. Letztendlich habe ich ein anderes gewählt. Man sollte auch darauf achten, dass das Tastaturlayout noch nicht umgestellt ist, das heißt, dass man mit dem Layout en_US tippt (vertauschte Position von y und z und der Sonderzeichen).

Hier noch das Script um die device-mapper-Nodes anzulegen:

ramdisk/sbin/devmap_mknod.sh

#!/bin/sh

# Startup script to create the device-mapper control device
# on non-devfs systems.
# Non-zero exit status indicates failure.
DM_DIR="mapper"
DM_NAME="device-mapper"

set -e

DIR="/dev/$DM_DIR"
CONTROL="$DIR/control"

# Check for devfs, procfs
if test -e /dev/.devfsd ; then
        echo "devfs detected: devmap_mknod.sh script not required."
        exit
fi
if test ! -e /proc/devices ; then
        echo "procfs not found; please create $CONTROL manually."
        exit 1
fi
# Get major, minor, and mknod
MAJOR=$(sed -n 's/^ *\([0-9]\+\) \+misc$/\1/p' /proc/devices)
MINOR=$(sed -n "s/^ *\([0-9]\+\) \+$DM_NAME\$/\1/p" /proc/misc)

if test -z "$MAJOR" -o -z "$MINOR" ; then
        echo "$DM_NAME kernel module not loaded: can't create $CONTROL."
        exit 1
fi

mkdir -p --mode=755 $DIR
test -e $CONTROL && rm -f $CONTROL

echo "Creating $CONTROL character device with major:$MAJOR minor:$MINOR."
mknod --mode=600 $CONTROL c $MAJOR $MINOR

Dieser Schritt ist wichtig, sonst wird gar nichts ausgeführt:

# chmod 755 ramdisk/sbin/{init,devmap_mknod.sh}

So, das war’s. Nun unmounten wir den ramdisk-Ordner, packen die initrd mit gzip und kopieren sie in die /boot-Partition:

# umount ramdisk
# gzip initrd
# cp initrd.gz /boot/

Update: Neue initrd

Mittlerweile läuft eine neue initrd, welche den Schlüssel automatisch von einem anderen, vertrauenswürdigen Rechner via LAN lädt. Auf diese werde ich in einem bald folgenden Artikel genauer eingehen. Für die neue Hardware (siehe Update ganz oben) wurde dies notwendig, da ich keine PCI-Express-Grafikkarte übrig habe (und auf dem neuen Board keine PCI-Steckplätze mehr frei) und somit im Regelfall blind das Passwort eingeben müsste.

Bootloader installieren

Als Bootloader verwende ich am liebsten GRUB, das hat keinen besonderen Grund – er funktioniert einfach und ich kenne mich einigermaßen damit aus :-). Also rauf damit auf’s System:

emerge grub

Die Konfigurationsdatei von GRUB ist /boot/grub/menu.lst. Dort bringen wir GRUB nun bei, welchen Kernel auf welcher Festplatte mit welcher Initrd er booten soll:

/boot/grub/menu.lst

default 0
timeout 5

title=Gentoo Linux 2.6.19-r5-stability
root (hd0,0)
kernel /kernel-2.6.19-r5-stability root=/dev/ram0 ide0=0x1f0,0x3f6,14 rw
initrd /initrd.gz
boot

Die Nummern der Festplatte bekommt man übrigens per Tab-Completion in GRUB selbst heraus. Es macht also nichts, wenn hier (hd0,0) steht, obwohl die Festplatte eigentlich (hd1,2) wäre, wir können das vor dem ersten Boot nochmal prüfen und gegebenenfalls editieren.

Wozu eigentlich die Angabe von ide0? Tja, anscheinend habe ich in meiner Kernelkonfiguration irgendetwas anders gemacht, als derjenige, der den Kernel der Gentoo Live-CD gebaut hat. Dort findet der Kernel nämlich den ide0-Channel. Bei meinem Kernel findet er ihn nicht, außer man zeigt ihm ganz genau den Weg. Die Werte sind übrigens Standardwerte, wie in Documentation/ide.txt nachzulesen ist. Wenn jemand ’nen Hinweis hat, wie man das Ändern kann, immer her damit :-).

Nun installieren wir GRUB noch in den Master Boot Record der Festplatte und leiten dann den Reboot ein:

# grub-install /dev/sdc
# exit
# umount /mnt/gentoo/boot /mnt/gentoo/proc /mnt/gentoo/dev /mnt/gentoo
# cryptsetup luksClose root
# reboot

Nach dem Boot

Je nach Lärmpegel des Servers werden wir nun den befreiendsten Schritt durchführen: SSHd für Remote-Zugriff installieren und gegebenenfalls den Rechner in ein anderes Zimmer tragen ;-):

# emerge openssh
# rc-update add sshd default
# /etc/init.d/sshd start

Dann werden wir eine Benutzerkennung und eine Gruppe anlegen, damit wir nicht immer als root arbeiten müssen:

# groupadd staff
# useradd -m -u 101 -g staff -G cdrom,portage,usb,video,wheel -s /bin/bash michael -c "Michael Stapelberg"

Und wenn wir es uns gerade gemütlich machen, installieren wir doch auch gleich einen gescheiten Editor, allerdings ohne Perl/Python-Bindings:

USE="-perl -python" emerge vim

Jetzt formatieren wir die restlichen Festplatten mit cryptsetup-luks und ext3, setzen den reservierten Speicher auf 0 (nicht notwendig bei Datenfestplatten), erstellen die Mountpoints und mounten die Festplatten:

cryptsetup -c blowfish-cbc-essiv:sha256 -y -s 256 luksFormat /dev/sda
cryptsetup -c blowfish-cbc-essiv:sha256 -y -s 256 luksFormat /dev/hda2
cryptsetup -c blowfish-cbc-essiv:sha256 -y -s 256 luksFormat /dev/hdb2
cryptsetup -c blowfish-cbc-essiv:sha256 -y -s 256 luksFormat /dev/hdc

cryptsetup luksOpen /dev/sda backup
cryptsetup luksOpen /dev/hda2 movies
cryptsetup luksOpen /dev/hdb2 wii
cryptsetup luksOpen /dev/hdc mp3

mkfs.ext2 -j /dev/mapper/backup
mkfs.ext2 -j /dev/mapper/movies
mkfs.ext2 -j /dev/mapper/wii
mkfs.ext2 -j /dev/mapper/mp3

tune2fs -m 0 /dev/mapper/backup
tune2fs -m 0 /dev/mapper/movies
tune2fs -m 0 /dev/mapper/wii
tune2fs -m 0 /dev/mapper/mp3

mkdir /fs/Backup
mkdir /fs/Movies
mkdir /fs/Wii
mkdir /fs/MP3

mount /dev/mapper/backup /fs/Backup
mount /dev/mapper/movies /fs/Movies
mount /dev/mapper/wii /fs/Wii
mount /dev/mapper/mp3 /fs/MP3

Außerdem richten wir das RAID-1 für die Homedirs ein:

emerge mdadm
mdadm --create --verbose /dev/md0 --level=1 --raid-devices=2 /dev/hda1 /dev/hdb1

Und formatieren/mounten dieses ebenfalls:

cryptsetup -c blowfish-cbc-essiv:sha256 -y -s 256 luksFormat /dev/md0
cryptsetup luksOpen /dev/md0 home
mkfs.ext2 -j /dev/mapper/home
mount /dev/mapper/home /home

Script zum automatischen Mounten

Damit wir nun nicht jedesmal nach dem Boot die ganzen Festplatten manuell mounten müssen, nutzen wir folgendes Script:

/root/mountHDDs.sh

#!/bin/sh
status=1
while [ ${status} -ne 0 ]; do
    read -s pass
    echo ${pass} | cryptsetup luksOpen /dev/sda backup
    status=$?
done
# Sobald das richtige Passwort eingegeben wurde und die erste Festplatte gemountet wurde, folgen die anderen
echo ${pass} | cryptsetup luksOpen /dev/hda2 movies
echo ${pass} | cryptsetup luksOpen /dev/hdb2 wii
echo ${pass} | cryptsetup luksOpen /dev/hdc mp3

mount /dev/mapper/backup /fs/Backup
mount /dev/mapper/movies /fs/Movies
mount /dev/mapper/wii /fs/Wii
mount /dev/mapper/mp3 /fs/MP3

mdadm -As /dev/md0
echo ${pass} | cryptsetup luksOpen /dev/md0 home
mount /dev/mapper/home /home

Ich gehe davon aus, dass für alle verschlüsselten Partitionen (außer der Root-Partition eventuell) das selbe Passwort verwendet wurde. Wer kann sich schon so viele ausreichend sichere Passwörter merken?

Encrypted swap

Bei Gentoo befindet sich die Initialisierung der Swap-Partitionen in der Datei /etc/init.d/localmount. Dort ersetzen wir die Zeile "/sbin/swapon -a" durch folgende Zeilen:

cryptsetup -c blowfish -s 64 -d /dev/urandom create swap0 /dev/sdc2
mkswap /dev/mapper/swap0
swapon /dev/mapper/swap0

Dadurch wird bei jedem Boot eine verschlüsselte Partition erstellt, auf die dann ausgelagert wird. Der Key wird aus /dev/urandom genommen, ist also zufällig. Das macht aber nichts, denn mit den Swap-Daten können wir nach einem Reboot eh nichts anfangen – vielleicht aber jemand anders, um nachzuweisen, dass bestimmte Dinge im RAM waren, also gehen wir lieber sicher, dass wirklich niemand etwas mehr damit anstellen kann :-).

Abschluss: Serveranwendungen installieren

So, der Server läuft. Jetzt erstmal zurücklehnen, Getränk und Konsumgut seiner Wahl konsumieren und entspannen. Danach folgt der etwas einfachere Teil: Die Installation von den benötigten Diensten.

Bei mir sind das apache (Webserver), dhcpd (DHCP-Server), bind (DNS-Server), vsftpd (FTP-Server), mysql (Datenbank) und mt-daapd (iTunes Musikserver).

Die Übernahme der Konfigurationsdateien von Debian Linux lief weitestgehend problemlos, alles in allem war das die schnellste Serverinstallation, die ich je hatte ;-).

Da dieser Teil sehr individuell ist, überlasse ich die genaue Konfiguration euch. Viel Spaß :-).

Quellen

Diese Seiten haben mir beim Installieren geholfen und sind einen Besuch wert: