Page tree
Skip to end of metadata
Go to start of metadata

Dokument-Updates

  • 14.01.2011: Neuer Abschnitt zum Einrichten eines SSH-Benutzers zum entfernen Herunterfahren des Servers.
  • 14.01.2011: Aktualisierung der Anleitung für Ubuntu 10.10 (Teil mit Undervolting ist noch unvollständig)
  • 14.01.2011: Bonjour/Avahi auch für Samba-Server eingerichtet.
  • 14.01.2011: Samba-Konfig angepasst: Drucker deaktiviert, Security auf "user" umgestellt.
  • 12.09.2010: Kurze Netzwerk-Performancetests ergänzt.
  • 27.08.2009: Undervolting-Abschnitt für neuesten Kernel aktualisiert.
  • 18.08.2009: Neuer Abschnitt "Nachträgliche Anpassungen" mit Beschreibung zur Vergrößerung der verschlüsselten Partition auf der LV.
  • 16.08.2009: Neuer Hardware-Abschnitt "Lüftersteuerung" erstellt.

Hardware

PC-Komponenten

  • Gehäuse: Chenbro ES34069 Mini-ITX Gehäuse mit 4 SATA Hotswap-Einschüben
  • Mainboard: Intel DG45FC Mini-ITX Mainboard
    • Reviews: SilentPCMiniTechNet, Xbit: Vergleich mit Zotac GeForce 9300-ITX WiFi
    • Vom Board unterstütze VCore-Spannung: 1.15V - 1.21V (siehe Undervolting); E5200 VCore-Range: 0.85V - 1.3625V
    • Stromverbrauch: E5200, DG45FC, 2x1GB RAM, 2.5" HDD, 80W Netzteil: Idle 32W, Load 44W (1.2Ghz@1.15V (mailto:\(!1.2Ghz@1.15V)), Load 60W (2.5Ghz@1.15V (mailto:\(!2.5Ghz@1.15V))
  • CPU: Intel E5200 Dual-Core 2.5Ghz (boxed)
  • RAM: 2x Kingston HyperX DIMM 2 GB DDR2-800
  • Festplatten: 1x Hitachi HTS54258 2.5" 80GB System-HDD + 4x Western Digital WD10EADS 3.5" 1TB Daten-HDDs
    • Stromverbrauch WD WD10EADS 1TB 3.5" HDD: Idle: 1.8W, Streaming Read: 5.3W
    • Vergleich Seagate Barracuda 7200.11 1.5TB 3.5" HDD: Idle: 7.4W, Streaming Read: 9.3W
    • Vergleich Western Digital Scorpio Black 320GB 2.5" HDD: Idle: 0.75-0.95W, Streaming Read: 3.2W (DVD Play: 1.3W, Workstation IO Test: 2.7W)
  • Zusätzliche Belüftung: 2x Papst 612/NGL 60cm Lüfter

Geräuscharme Kühlung

Im Chenbro ES34069 Mini-ITX Gehäuse sind von Werk hinten links 2x 70cm Lüfter zur Kühlung der 4 vorderen SATA-Festplattenslots verbaut. Die Lüfter sind nicht temperaturgeregelt und werden stetig mit 12V betrieben. In einer einigermaßen ruhigen Umgebung sind sie bei Betrieb leider deutlich zu hören. Regelt man die Lüfter auf 7-10V fällt der Geräuschpegel beachtlich.

Daher wurde zusätzlich eine Lüftersteuerung (den T-Balancer MiniNG) im Gehäuse verbaut:

Es handelt sich um eine 2-Kanal-Lüftersteuerung mit zwei unabhängigen Temperatursensoren für etwa 29 EUR, die vier Betriebsarten (Zieltemperatur, Kurve, Stufe und Manuell) zur Verfügung stellt und mehr als ausreichend Leistung besitzt (20W/50W im Analog-/PWM-Modus pro Kanal).

Als Einbauort eignet sich der Platz über dem ITX-Mainboard direkt hinter dem CD/DVD-Laufwerkslot (ggf. neben einem weiteren 60cm Lüfter). Für die Befestigung werden Klettverschlussstreifen mit doppelseitigem Klebeband mitgeliefert, die man auf die Unterseite der Lüftersteuerung (Kühlblech) und dem PC-Gehäuse kleben kann. Die beiden hinteren Lüfter wurden mittels einem 3-poligen Y-Lüfterkabels an einen Kanal der Lüftersteuerung angeschlossen:

Einen der beiden Temperatursensoren habe ich direkt in einen SATA-Festplattenslot geklebt, um dort unmittelbar die Temperatur der Festplatte zu ermitteln. Die Kabel an den Temperatursensoren sind ausreichend lang, um sie ordentlich im Gehäuse verlegen und an einer beliebigen Stelle platzieren zu können:

Als Betriebsart hat sich "Zieltemperatur" und als Ansteuerungsmodus der "PWM-Modus" als die optimale Konfiguration herausgestellt. Hierbei stellt man über einen der beiden Potis die gewünschte Temperatur am jeweiligen Sensor ein, die gehalten werden soll. Wird die Zieltemperatur überschritten, regelt die Steuerung die Lüfter langsam hoch, bis sich die Temperatur wieder bei der Zieltemperatur einpendelt. Beim Finden der richtigen Potistellung ist etwas Geduld gefragt. Nur geringe Änderung am Poti bewirken teilweise recht hohe Sprünge bei der Zieltemperatur. Da die Steuerung der Lüfter etwas verzögert stattfindet, ist es wichtig nach Änderung der Potieinstellung erst etwas zu warten, bis man eine weitere Anpassung durchführt. Meine Zieltemperatur liegt etwa bei 40°C Festplattentemperatur, die ich über hddtemp auslese (siehe Abschnitt "Sensoren auslesen").

Der Geräuschpegel der Lüfter ist dank der Lüftersteuerung bei normaler Umgebungstemperatur nun sehr angenehm (man hört fast nur noch die Laufgeräusche der Festplatte). Gehen die Festplatten in Standby schalten sich die Lüfter nach einer Zeit sogar komplett aus! Der Vorteil gegenüber einer manuellen Absenkung der Lüfterspannung (z.B. auf 7V) ist, dass bei höherer Umgebungstemperatur (Sommer) die Lüfter bei Bedarf schneller drehen und damit besser kühlen können und das bei Standby der Festplatten die Lüfter komplett abgeschaltet werden.

Möchte man auch auf der Mainboard-Seite des Gehäuses noch für etwas Umluft sorgen (vorallem für den Chipsatz des Intel DG45FC Boards ratsam), so lassen sich bis zu 2 weitere 60cm Lüfter im Gehäuse noch verbauen: einen vorne an der Innenseite des Gehäuses und einen nach oben über dem ITX-Mainboard (siehe Bild mit Lüftersteuerung). Zur Ansteuerung der beiden Lüfter kann dann der 2. Kanal der Lüftersteuerung verwendet werden. Den 2. Temperatursensor befestigt man dazu einfach an einer geeigneten Stelle in der Nähe des Boards (am besten nicht unmittelbar im Luftzug eines der Lüfter).

Stromverbrauch

Stromverbrauch wurde mit einem Voltcraft Energy Check 3000 gemessen (also quasi Highend-Equipment :P).

  • Konfiguration: 180W ext. Netzteil, DG45FC, E5200 mit Box-Lüfter, 2x2GB DDR2-800, 1x2.5" HDD, 4x3.5" HDD, GBe angeschlossen, 2x60cm@5V + 2x70cm@12V Lüfter
    • Ausgeschaltet: 1.6W - 1.7W
    • Ausgeschaltet, jedoch kein Gigabit-Netzwerk angeschlossen: 1.2W - 1.3W
    • Unmittelbar beim Einschalten, wenn alle 5 Festplatten gerade hochfahren: Max 92.4W (1 Sekunde lang)
    • Während BIOS: 72W - 77.1W
    • Beim Linux booten: 52W - 73.9W
    • Idle (Ubuntu vollständig mit allen Diensten hochgefahren): 46.2W - 47.1W
      • Idle, alle vier 1TB Festplatten im Standby: 37.3W - 38.1W
      • Idle, zusätzlich die beiden 70cm Festplattenlüfter ausgeschaltet: 36.4W - 37.4W
        • Kurzzeitig die 2.5" Systemplatte deaktiviert (wacht recht schnell wieder von selbst auf): Minimal 36W
      • Idle, zusätzlich Gigabit-Netzwerkkabel gezogen: 34.3W - 35.2W
    • Volllast mit Platten (2x burnP6, beide Kernel 100% load): 71.0W - 71.7W
  • Konfiguration: siehe oben, jedoch mit nur 1x2GB DDR2-800 RAM
    • Ausgeschaltet: 1.4W
    • Ausgeschaltet, jedoch kein Gigabit-Netzwerk angeschlossen: 1W
    • Unmittelbar beim Einschalten, wenn alle 5 Festplatten gerade hochfahren: Max 88.7W (<1 Sekunde lang)
    • Während BIOS: 70W - 75W
    • Beim Linux booten: 50W - 71.7W
    • Idle (Ubuntu vollständig mit allen Diensten hochgefahren): 45.4W - 46.2W
      • Idle, alle vier 1TB Festplatten im Standby: 36.0W - 36.5W
      • Idle, zusätzlich die beiden 70cm Festplattenlüfter ausgeschaltet: 35.0W - 35.5W
        • Kurzzeitig die 2.5" Systemplatte deaktiviert (wacht recht schnell wieder von selbst auf): Minimal 34.7W
      • Idle, zusätzlich Gigabit-Netzwerkkabel gezogen: 33.8W - 34.3W
        • Bei dieser geringen Leistung fängt das Netzteil plötzlich an fiepsen/krisseln
    • Film streamen: SD: 52.2W- 53W, HD: 52.5W - 53.6W
    • Per AFP auf einer verschlüsselten Partition mit dem Finder durchbrowsen (mit Vorschaufunktion aktiviert): 53W - 55W
      • Ohne Zugriff auf die Festplatten: 52.0W - 52.5W
      • Fällt dann nach ein paar Sekunden mit einem Festplattengeräusch wieder auf den Idle-Wert von 45W (IntelliPark von WD)
    • Timemachine-Backup: 52.3W - 57.5W
    • Volllast (2x burnP6, beide Kernel 100% load): 68.0W - 68.7W
      • Volllast (ohne CPU-Undervolting, siehe unten): 79.0W - 79.7W
    • Bonnie++ Test auf RAID5 mit verschlüsselter Partition: bis zu 75W (vorallem bei putc)
    • Bonnie++ Test und CPU-Volllast mit burnP6: bis zu 79W (vorallem bei putc)

Ein Idle-Wert von 35W für ein Dual-Core Pentium-System kann sich wirklich sehen lassen. Verfügbare Atom-Mainboards mit Dual-Core-CPUs verbrauchen im Idle je nach zusätzlicher Ausstattung 25W bis 35W (siehe Test bei Computerbase und bei Anandtech). Bei einer CPU-Volllast mit 51 Watt (68W Volllast - (52W Festplattenleerlauf - 35W Idle)) liegt das Dual-Core Pentium-System deutlich über den Atom-Mainboards mit 29W-39W, bietet jedoch auch wesentlich mehr Rechenleistung (siehe SYSMark 2007 Performance bei Anandtech). In meinen Augen also ein gutes Performance-per-Watt Verhältnis (siehe auch dieser Test bei Tomshardware).

Bei einem Idle-Wert von 37W und einem KW-Preis von 20,27 Cents ergeben sich bei 24/7 Betrieb Stromkosten von 66 EUR pro Jahr bzw. 5.50 EUR pro Monat. Ich persönlich werde das System nur bei Bedarf per Wake-on-Lan einschalten. Für den 24/7 Betrieb habe ich ein Linksys NSLU2, welches mit nur etwa 2.5W (4.50 EUR im Jahr) zu Buche schlägt. Darüber wickele ich Dienste wie DNS, DHCPd, DSL Einwahl (PPPoE), Routing (NAT), Firewall (IPTables) und SSH/VPN für den Remote-Zugriff ab. Bei Bedarf lässt sich das größere System dann darüber (auch remote) mit Wake-on-Lan einschalten.

Ubuntu Konfiguration

Installation

Standardinstallation von Ubuntu 9.04 Server Edition mit folgender Festplattenkonfiguration:

  • 1x 80GB 2.5" System-HDD: /dev/sde
    • sde1: 256MB vom Typ Linux (83) mit ext2 Dateisystem für /boot
    • sde2: Restliche Kapazität (knapp 80GB) vom Typ Linux LVM (8e)
  • 4x 1TB Daten-HDDs: /dev/sd[a-d]
    • sd[a-d]1: 1TB vom Typ Linux raid autodetect (fd)
  • RAID5-Device über die vier 1TB Raid-Partitionen sd[a-d]1: /dev/md0
    • md0: Komplette Kapazität (3TB) vom Typ Linux LVM (8e)
  • Volume Group "System" mit LVM-Partition sde2
    • LV "swap": 4GB mit Swap
    • LV "root": 8GB mit ext3 Dateisystem für /
  • Volume Group "Data" mit LVM-Partition md0
    • noch frei

IP Adresse anpassen

Datei /etc/network/interfaces

# The primary network interface
auto eth0
iface eth0 inet dhcp

ändern in

# The primary network interface
auto eth0
#iface eth0 inet dhcp
iface eth0 inet static
address x.x.x.x
netmask y.y.y.y
gateway z.z.z.z

Netzwerk neustarten:

sudo /etc/init.d/networking restart
sudo killall dhclient3

Installierte Pakete

sudo aptitude install ssh build-essential
sudo aptitude install cryptsetup cracklib2-dev libssl-dev
sudo aptitude install cvs subversion git
sudo aptitude install ethtool lm-sensors hddtemp wakeonlan pm-utils
sudo aptitude install bonnie++ sysstat secure-delete

sudo aptitude install nfs-client nfs-kernel-server samba smbfs
sudo aptitude install netatalk
sudo aptitude install mt-daapd libid3tag0

Boot-Meldungen beim Start anzeigen

Datei /boot/grub/menu.lst

# defoptions=quiet splash quiet

kernel          /vmlinuz-2.6.28-11-generic root=/dev/mapper/system-root ro quiet splash quiet

ändern in

# defoptions=

kernel          /vmlinuz-2.6.28-11-generic root=/dev/mapper/system-root ro

Neuerung seit grub2 in Ubuntu 10.10:

Standard Kommandozeile in Datei /etc/default/grub anpassen:

GRUB_CMDLINE_LINUX_DEFAULT=""

Anschließend "/boot/grub/grub.cfg" mit folgendem Befehl neu schreiben lassen:

update-grub

Wake on LAN konfiguriern

Datei /etc/init.d/halt

NETDOWN=yes

ändern in

NETDOWN=no

Quelle: http://wiki.ubuntuusers.de/Wake_on_LAN

Mit Ubuntu 10.10 funktioniert Wake on LAN mit den Standardeinstellungen, es sind also keine Anpassungen nötig.

Sensoren auslesen

Installieren:

sudo aptitude install lm-sensors hddtemp

sudo sensors-detect
sudo modprobe coretemp

Sensoren auslesen:

$ sensors
coretemp-isa-0000
Adapter: ISA adapter
Core 0:      +38.0°C  (high = +76.0°C, crit = +100.0°C)

coretemp-isa-0001
Adapter: ISA adapter
Core 1:      +38.0°C  (high = +76.0°C, crit = +100.0°C)

$ sudo hddtemp /dev/sd[a-e]
/dev/sda: WDC WD10EADS-65L5B1: 31°C
/dev/sdb: WDC WD10EADS-65L5B1: 32°C
/dev/sdc: WDC WD10EADS-65L5B1: 31°C
/dev/sdd: WDC WD10EADS-65L5B1: 31°C
/dev/sde: Hitachi HTS542580K9SA00: 29°C

Undervolting mit Linux-PHC konfigurieren

Mit Hilfe von Undervolting, dem gezielten Herabsetzen der Core-Spannung der CPU, lässt sich der Stromverbrauch und die Erwärmung der CPU senken. Im Gegensatz zum Underclocking, bei dem der CPU-Takt heruntergesetzt wird, bleibt beim Undervolting der CPU-Takt und damit die volle CPU-Leistung erhalten, sprich weniger Stromverbrauch und Abwärme bei gleicher Leistung. Da bei diesem Verfahren ähnlich wie beim Overclocking Fertigungstoleranzen der CPU ausgenutzt werden, lassen sich CPUs unterschiedlich "gut" undervolten.

Die CPU-Spannung lässt sich zum einen im BIOS einiger Mainboardhersteller herabsetzen oder auch per Software während des Betriebs. Unter Linux exisitiert das Linux-PHC Projekt: Alte Homepage (https:wwwdedigentooorgtraclinuxphcwikiUsingTheSysFsInterface),AktuelleHomepage, Neue Releases im Forum

Für Ubuntu-Systeme gibt es einen fertig phc-gepatchten Linux-Kernel, der auch hier zum Einsatz kommt.

Bis Ubuntu 9.10 wird das PPA-Repository wie folgt hinzugefügt:

PPA for linux-phc Repository in /etc/apt/sources.list hinzufügen:

deb http://ppa.launchpad.net/linux-phc/ppa/ubuntu jaunty main
deb-src http://ppa.launchpad.net/linux-phc/ppa/ubuntu jaunty main

Key des Repository importieren (siehe auch Ubuntu-Forum):

gpg --keyserver keyserver.ubuntu.com --recv 364E41D84D950ED1
gpg --export --armor 364E41D84D950ED1 | sudo apt-key add -

Das Hinzufügen von PPA-Repositories hat sich ab Ubuntu 9.10 vereinfacht. Hier das neue Vorgehen, welches die obigen zwei Schritte ersetzt:

sudo aptitude install python-software-properties
sudo add-apt-repository ppa:linux-phc/ppa

Anschließend Paketliste aktualisieren und System upgraden. Hiermit wird der Kernel mit dem "undervolt"/phc-Patch installiert:

sudo aptitude update
sudo aptitude safe-upgrade

Bzw. Kernel direkt installieren, Beispiel Ubuntu 10.10, Stand 14.01.2010:

sudo aptitude install linux-image-2.6.35-24-generic-phc

System mit neuen Kernel neustarten:

sudo shutdown -r now

$ uname -a
Linux triton 2.6.28-15-generic #50~undervolt2-Ubuntu SMP Fri Aug 21 10:35:00 UTC 2009 x86_64 GNU/Linux

Beispiel für Ubuntu 10.10:

$ uname -a
Linux triton 2.6.35-24-generic-phc #42~phc0-Ubuntu SMP Wed Dec 22 14:09:36 UTC 2010 x86_64 GNU/Linux

Der restliche Abschnitt muss noch für neuere Ubuntu-Versionen aktualisiert werden.

Aktuelle Spannungen auslesen und neue setzen (spezifisch für dieses Mainboard und CPU!):

$ cat  /sys/devices/system/cpu/cpu[01]/cpufreq/phc_controls
76:37 6:22
76:37 6:22

$ echo "76:22 6:22" | sudo tee /sys/devices/system/cpu/cpu[01]/cpufreq/phc_controls
76:22 6:22

$ cat  /sys/devices/system/cpu/cpu[01]/cpufreq/phc_controls
76:22 6:22
76:22 6:22

In diesem System bringt die neue Einstellung unter Volllast eine Ersparnis von 11W:

  • Stromverbrauch bei Volllast mit alten Werten: 79.0W - 79.7W
  • Stromverbrauch bei Volllast mit neuen Werten: 68.0W - 68.7W

Die Einstellung muss bei jedem Neustart erneut durchgeführt werden. Am einfachsten ist ein Eintrag in /etc/rc.local:

echo "76:22 6:22" | tee /sys/devices/system/cpu/cpu[01]/cpufreq/phc_controls

Weitere Informationen zum Patch im Ubuntu-Forum.

Festplatten automatisch in Standby fahren

Da die WD10EADS 1TB-Festplatten den "IDE idle timer" nicht unterstützen und deshalb die eingestellte Spindown-Time mit "hdparm -S" nicht funktioniert, setze ich das externe Programm hd-idle stattdessen ein:

Sourcecode per CVS auschecken:

aptitude install cvs
mkdir cd ~/src
cd ~/src
touch ~/.cvspass
cvs -d:pserver:anonymous@hd-idle.cvs.sourceforge.net:/cvsroot/hd-idle login
cvs -z3 -d:pserver:anonymous@hd-idle.cvs.sourceforge.net:/cvsroot/hd-idle co -P hd-idle

Kompilieren, installieren und dem Standard Runlevel hinzufügen (automatisch beim Booten starten):

cd ~/src/hd-idle
make
sudo make install-debian
sudo update-rc.d hd-idle defaults

Konfiguration in /etc/default/hd-idle anpassen (-i 600 entspricht 10 Minuten):

START_HD_IDLE=true
HD_IDLE_OPTS="-i 600"

Schließlich hd-idle starten:

sudo /etc/init.d/hd-idle start

Mail konfigurieren

MTA Postfix konfigurieren:

sudo aptitude install postfix

Oder wenn schon installiert Konfiguration nachträglich anpassen:

sudo dpkg-reconfigure postfix

Satellite system auswählen und Smarthost eintragen.

Verschlüsselte Temp- und Swap-Partition

Neue LV für Temp-Verzeichnis anlegen und mit Nullen überschreiben:

sudo lvcreate -L 256M -n tmp system
sudo dd if=/dev/zero of=/dev/system/tmp bs=10M

Einträge in /etc/crypttab für Swap- und Tmp-Partition vornehmen:

# <target name> <source device>  <key file>   <options>
crypt_tmp	    /dev/system/tmp  /dev/urandom tmp
crypt_swap		/dev/system/swap /dev/urandom swap

Schließlich noch die /etc/fstab anpassen:

# swap was on /dev/mapper/system-swap during installation
UUID=3f324c76-6bd0-4cef-aa47-8599059b4b83  none  swap  sw  0  0

ändern in

/dev/mapper/crypt_tmp	   /tmp	ext2	 defaults   0  0
/dev/mapper/crypt_swap	  none	swap	 sw   0  0

Festplatten-Verschlüsselung für einzelne Partitionen/LVs

Neue LV erstellen, auf der ein verschlüsseltes Dateisystem erstellt werden soll:

sudo lvcreate -L 160G -n secret_crypt data   # data = name of volume group

Verschlüsselung einrichten:

$ sudo cryptsetup -y -v --hash=sha256 --cipher=aes-xts-benbi --key-size=256 luksFormat /dev/data/secret_crypt

WARNING!
========
This will overwrite data on /dev/data/secret_crypt irrevocably.

Are you sure? (Type uppercase yes): YES
Enter LUKS passphrase:
Verify passphrase:
Command successful.

Verschlüsselte Daten öffnen, Dateisystem erstellen und mounten:

sudo cryptsetup luksOpen /dev/data/secret_crypt secret
sudo mkfs.ext3 /dev/mapper/secret
sudo mount /dev/mapper/secret /home/secret

Nach Nutzung der Partition wieder unmounten und schließen:

sudo umount /home/secret
sudo cryptsetup luksClose secret

Weitere Informationen:

Verschlüsselte Partionen/LVs beim Booten mit USB-Stick automatisch mounten

Um die Partition ohne Eingabe eines Passworts beim Booten automatisch zu mounten, wird ein Keyfile auf einem USB-Stick, der beim Booten eingesteckt sein muss, ausgelesen.

USB-Stick mounten und Keyfile erstellen:

sudo mkdir -p /mnt/usbstick
sudo mount /dev/sd?? /mnt/usbstick
sudo dd if=/dev/urandom of=/mnt/usbstick/keyfile bs=1k count=4

Zusätzlich zum Passwort soll auch der Zugriff auf das verschlüsselte Device über das Keyfile auf dem USB-Stick ermöglicht werden:

$ sudo cryptsetup luksAddKey /dev/data/secret_crypt /mnt/usbstick/keyfile
Enter any LUKS passphrase:
key slot 0 unlocked.
Command successful.

Um eine sichere Erkennung des USB-Sticks zu gewährleisten, bestimmen wir die UUID des USB-Sticks:

$ sudo vol_id --uuid /dev/sd??
c1234567-c123-1234-1234-12345678901234

Mit folgendem Befehl lassen sich unter Ubuntu 10.10 alle UUID aktiver Geräte anzeigen:

# blkid 
/dev/sda1: UUID="123456e1-1234-12f1-12b8-a1234fbbae2e" TYPE="linux_raid_member" 
/dev/sdb1: UUID="123456e1-1234-12f1-12b8-a1234fbbae2e" TYPE="linux_raid_member" 
/dev/sdd1: UUID="123456e1-1234-12f1-12b8-a1234fbbae2e" TYPE="linux_raid_member" 
/dev/sdc1: UUID="123456e1-1234-12f1-12b8-a1234fbbae2e" TYPE="linux_raid_member" 
...
/dev/sdh1: UUID="c0bfa987-c2b4-98ae-ae21-98e0e8d98ebd" TYPE="ext2" 

Wir nehmen den USB-Stick und das verschlüsselte Device in der /etc/fstab auf:

UUID=c0bfa987-c2b4-98ae-ae21-98e0e8d98ebd /mnt/usbstick	ext2	ro,noauto	0 	0
/dev/mapper/secret /home/secret ext3 defaults 0 0

Nun benötigen wir noch ein Script (/root/keyscript.sh), dass den Key vom USB-Stick beim Booten ausliest.

#!/bin/sh
modprobe usb-storage 1>&2
sleep 3
mount /mnt/usbstick
cat /mnt/usbstick/keyfile
umount /mnt/usbstick

Schließlich geben wir in der Datei /etc/crypttab das verschlüsselte Device mit dem Keyscript an:

# <target name>	<source device>  <key file> <options>
secret		      /dev/data/secret_crypt  none      luks,keyscript=/root/keyscript.sh

Bei eingesteckten USB-Stick wird nun die verschlüsselte Partition beim Booten automatisch gemäß /etc/fstab gemounted.

Weitere Informationen: Beschreibung von Andreas Janssen, Forenbeitrag bei linuxforen.de

Samba für Windows-Freigaben einrichten

Samba installieren:

sudo aptitude install samba

Benutzerpasswörter setzen:

sudo smbpasswd -a user1
sudo smbpasswd -a user2

Konfigurationsdatei /etc/samba/smb.conf anpassen (noch wenige Performance-Tuningmaßnahmen enthalten):

#### Global ####

[global]
   workgroup = HOME
   server string = %h
   wins support = no
   dns proxy = no

#### Networking ####

   interfaces = eth0
   bind interfaces only = yes

#### Debugging/Accounting ####

;  log file = /var/log/samba/log.%m
;  max log size = 1000

####### Authentication #######

   security = user
   encrypt passwords = true
   passdb backend = tdbsam
   obey pam restrictions = yes
   map to guest = bad user

############ Misc ############

;  include = /home/samba/etc/smb.conf.%m
   socket options = TCP_NODELAY SO_RCVBUF=8192 SO_SNDBUF=8192
   usershare allow guests = no
   load printers = no
   printing = bsd
   printcap name = /dev/null
   disable spoolss = yes

############ Shares ############

[share1]
   path = /tmp
   comment = Share Directory #1
   browseable = yes
   valid users = user1 user2
   write list = user1

Netatalk für AFP-Freigaben einrichten

In Ubuntu 10.10 Dienste einfach über Paketmanagement installieren:

sudo aptitude install netatalk

In älteren Ubuntu-Systemen musste man netatalk noch selbst kompilieren. Ab Ubuntu 10.10 definitiv überspringen:

sudo aptitude install cracklib2-dev libssl-dev
mkdir -p ~/src/netatalk
cd ~/src/netatalk

sudo apt-get source netatalk
sudo apt-get build-dep netatalk

cd netatalk-2.0.4~beta2/
sudo DEB_BUILD_OPTIONS=ssl dpkg-buildpackage -us -uc
sudo debi
echo "netatalk hold" | sudo dpkg --set-selections

Folgende Dienste sollten in der /etc/default/netatalk standardmäßig aktiviert sein:

ATALKD_RUN=no
PAPD_RUN=no
AFPD_RUN=yes
CNID_METAD_RUN=yes

Für sehr alte Mac OS X Versionen 10.3.3 bis 10.4 folgende Zeile in die Datei /etc/netatalk/afpd.conf hinzufügen (am Ende noch eine Leerzeile anfügen). Bitte im Zweifel nicht übernehmen:

- -transall -uamlist uams_randnum.so,uams_dhx.so,uams_dhx2.so -nosavepassword -advertise_ssh

Z.B. für TimeMachine Backups neue Freigaben in /etc/netatalk/AppleVolumes.default konfigurieren:

/home/timemachine/mpb "TimeMachine MBP" allow:segfault cnidscheme:dbd options:usedots,upriv
/home/timemachine/imac "TimeMachine IMac" allow:segfault cnidscheme:dbd options:usedots,upriv

In älteren Ubuntu-Versionen muss eine andere Datenbank für CNID verwendet werden: cnidscheme:cdb

Neustart:

sudo /etc/init.d/netatalk restart

Möchte man, dass der AFP-Server automatisch per Bonjour/Avahi im Mac OS X Client erkannt wird, sollte auch der nächste Abschnitt eingerichtet werden.

Bonjour/Avahi für AFP und Samba einrichten

Pakete installieren:

sudo apt-get install avahi-daemon
sudo apt-get install libnss-mdns

Bei älteren Ubuntu und/oder Mac OS X Versionen in der Datei /etc/nsswitch.conf den "mdns"-Dienst bei hosts-Anfragen ergänzen:

hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4 mdns

Mit der Datei /etc/avahi/services/afpd.service und folgenden Inhalt den Avahi-Dienst für AFP-Freigaben konfigurieren:

<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name replace-wildcards="yes">%h AFP</name>
<service>
<type>_afpovertcp._tcp</type>
<port>548</port>
</service>
<service>
<type>_device-info._tcp</type>
<port>0</port>
<txt-record>model=Xserve</txt-record>
</service>
</service-group>

Möchte man auch den Samba-Server automatisch in Mac OS X angezeigt bekommt, ist noch die Datei /etc/avahi/services/samba.service anzulegen:

<?xml version="1.0" standalone='no'?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
    <name replace-wildcards="yes">%h Samba</name>
    <service>
        <type>_smb._tcp</type>
        <port>139</port>
    </service>
</service-group>

Neustart des Dienstes:

sudo /etc/init.d/avahi-daemon restart

Einrichten von TimeMachine auf den Mac OS X Rechnern

Neues Sparsebundle für TimeMachine-Backups erstellen und auf gemountete AFP-Freigabe des Ubuntu-Servers verschieben:

hdiutil create -size 500G -fs HFS+J -volname "TimeMachine Computername" Computername_MacAdresseVonEN0OhneDoppelpunkte.sparsebundle
mv Computername_MacAdresseVonEN0OhneDoppelpunkte.sparsebundle /Volumes/TimeMachine\ MBP/

Um die AFP-Freigabe des Ubuntu-Servers für TimeMachine-Backup unter Mac OS X nutzen zu können, muss mit folgenden Konsolen-Befehl auch nicht unterstützte Netzwerklaufwerke freigeschaltet werden:

defaults write com.apple.systempreferences TMShowUnsupportedNetworkVolumes 1

Nun kann in den TimeMachine-Einstellungen die AFP-Freigabe des Ubuntu-Servers ausgewählt und das erste Backup erstellt werden.

Weitere Informationen gibt es am Ende des Blog-Eintrags von Matthias Kretschmann als Update-Nachträge.

Streaming-Server mit FireFly installieren

Pakete installieren:

sudo aptitude install mt-daapd libid3tag0

Möchte man FireFly mit Avahi betreiben, gibt es mit dem mt-daapd Paket unter den aktuellen (64bit-)Ubuntu-Versionen teilweise Probleme. Der FireFly-Server stürzt direkt beim Starten mit einem Segmentation Fault ab. Über den Bug wird hier diskutiert (https:bugslaunchpadnetubuntu+sourcemtdaapd+bug343069). Als Workaround kann man den Avahi-Dienst nach dem FireFly-Server starten. Besser ist es jedoch eine gepatchte Version von FireFly zu verwenden: Patch oder direkt das gepatchte 64bit-Debian-Paket zum Download.

Gepatchte Version installieren

sudo dpkg -i mt-daapd_0.9~r1696.dfsg-9ubuntu1_amd64.deb

Bei neueren Ubuntu Versionen, z.B. 10.10 ist der Patch nicht mehr nötig.

Der Server lässt sich entweder über die Konfigurationsdatei /etc/mt-daapd.conf oder nach Start über die Web-Administrationsoberfläche http://IP-des-Server:3689 konfigurieren. Folgende Werte sollte man mindestens anpassen:

  • admin_pw: Administrator-Passwort für Weboberfläche
  • mp3_dir: Verzeichnis mit MP3-Dateien (es können auch mehrere mit Komma getrennt angegeben werden)
  • password: Passwort für Zugriff auf Streaming-Server über z.B. ITunes

Möchte man die SQLite Datenbank, in der FireFly die Songinformationen speichert, an einem speziellen Ort ablegen, so muss noch folgende Option angepasst werden:

  • db_parms = /somewhere/cache

Der Benutzer mt-daapd benötigt auf das Verzeichnis Schreibrechte:

chown mt-daapd /somewhere/cache

Remote-Shutdown per SSH konfigurieren

Um den Server bequem remote herunterzufahren, wird ein eingeschränkter SSH-Benutzer eingerichtet.

Benutzer anlegen:

sudo useradd -m shutdown

SSH-Key für Shutdown-Benutzer generieren:

sudo su - shutdown

ssh-keygen

SSH-Key für Login konfigurieren:

cd .ssh
ln -s id_rsa.pub authorized_keys

Spezielle Optionen vor dem Public-Key in der Datei "id_rsa.pub" hinzufügen, damit die Ausführungsrechte des Benutzers auf das minimalste eingeschränkt sind:

no-port-forwarding,command="/bin/touch ~/SHUTDOWN && echo system shutdown triggered, please disconnect and wait." ssh-rsa AAA.....

Den Privat-Key auf einen anderen Rechner kopieren:

scp id_rsa user@CLIENTNAME:~/.ssh/id_rsa-SERVERNAME-shutdown

Sudo konfigurieren, dazu wieder zum Adminbenutzer zurückwechseln:

exit

sudo visudo

Folgende Zeile hinzufügen:

shutdown ALL = NOPASSWD: /sbin/shutdown

Nun noch einen Crontab-Eintrag in /etc/crontab hinzufügen:

*  *    * * *   shutdown [ -f ~/SHUTDOWN ] && rm ~/SHUTDOWN && sudo shutdown -h now

Nun kann mittels dem Private-Key auf dem entfernen Rechner der Server mit folgendem Befehl ohne Passwort heruntergefahren werden:

CLIENTNAME# ssh -i ~/.ssh/id_rsa-SERVERNAME-shutdown shutdown@SERVERNAME

Somit lässt sich der Server entfernt per SSH herunter und mit Wake on LAN wieder hochfahren.

Komfortabel kann das auch über ein Smartphone (z.B. Iphone) abgewickelt werden. Ein SSH-App auf dem Smartphone lässt den Server auf Knopfdruck herunterfahren (ohne Passwort und Eingabe von Befehlen), ein Wake-On-LAN-App wieder Starten.

Nachträgliche Anpassungen

Verschlüsseltes LVM vergrößern

Partition unmounten und Verschlüsselung schließen:

# sudo umount /home/fileserver
# sudo cryptsetup luksClose fileserver

LVM vergrößern (hier um 512GB):

# sudo lvresize /dev/data/fileserver_crypt -L +512G
Extending logical volume fileserver_crypt to 2.00 TB
Logical volume fileserver_crypt successfully resized

Verschlüsselung wieder aktiveren:

# sudo cryptsetup luksOpen /dev/data/fileserver_crypt fileserver
Enter LUKS passphrase:
key slot 0 unlocked.
Command successful.

Dateisystemcheck durchführen (sonst beschwert sich resize2fs):

# sudo e2fsck -f /dev/mapper/fileserver
e2fsck 1.41.4 (27-Jan-2009)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/mapper/fileserver: 541068/100663296 files (1.6% non-contiguous), 365371747/402652927 blocks

Schließlich Dateisystem auf verschlüsselten Device vergrößern:

# sudo resize2fs /dev/mapper/fileserver
resize2fs 1.41.4 (27-Jan-2009)
Resizing the filesystem on /dev/mapper/fileserver to 536870655 (4k) blocks.
The filesystem on /dev/mapper/fileserver is now 536870655 blocks long.

Tipps

Ubuntu 10.10 Powersave / Suspend / Hibernate

Mit folgenden Befehlen kann ein Ubuntu 10.10 System auf unterschiedliche Weise zum Strom sparen gebracht werden:

pm-powersave
pm-suspend
pm-suspend-hybrid
pm-hibernate

Performance Tests

Netzwerk Test

Hier ein einfacher Performancetest der Onboard Netzwerkkarte auf dem Mini-ITX Mainboard.

Testequipment:

  • MacBook Pro mit Intel X-25M G2 SSD
  • Der in diesem Dokument beschriebene Ubuntu Mini-ITX Server
  • Gigabit Netzwerk per SoHo Netgear Gigabit Switch

Testfile mit 2.5GB:

$ ls -la Downloads/xcode_3.2.3_and_ios_sdk_4.0.2.dmg 
-rw-r--r--@ 1 benny  staff  2675189630 11 Aug 19:14 Downloads/xcode_3.2.3_and_ios_sdk_4.0.2.dmg

Transfer per SCP:

$ scp Downloads/xcode_3.2.3_and_ios_sdk_4.0.2.dmg segfault@triton:/dev/null
segfault@triton's password: 
xcode_3.2.3_and_ios_sdk_4.0.2.dmg              100% 2551MB  56.7MB/s   00:45 

Kontrollrechnung der Performancerechnung:
2675189630 Bytes / 45 Sekunden / 2^20 = 56,69MB/s

IO Tests

Vorbereitung:

sudo lvcreate -L 20G -n test system
sudo lvcreate -L 20G -n test data
sudo lvcreate -L 20G -n crypttest data
sudo lvcreate -L 20G -n crypttest2 data

sudo cryptsetup -y -v --hash=sha256 --cipher=aes-xts-benbi --key-size=256 luksFormat /dev/data/crypttest
sudo cryptsetup -y -v --hash=sha256 --cipher=aes-xts-benbi --key-size=512 luksFormat /dev/data/crypttest2
sudo cryptsetup luksOpen /dev/data/crypttest crypttest
sudo cryptsetup luksOpen /dev/data/crypttest2 crypttest2

sudo mkfs.ext3 /dev/system/test
sudo mkfs.ext3 /dev/data/test
sudo mkfs.ext3 /dev/mapper/crypttest
sudo mkfs.ext3 /dev/mapper/crypttest2

sudo mkdir /mnt/test1 /mnt/test2 /mnt/test3
sudo mount /dev/system/test /mnt/test1
sudo mount /dev/data/test /mnt/test2
sudo mount /dev/mapper/crypttest /mnt/test3
sudo mount /dev/mapper/crypttest2 /mnt/test4

bonnie++ Test auf Hitachi HTS54258 2.5" 80GB System-HDD:

$ sudo cd /mnt/test1; bonnie++ -u root
Version 1.03c       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
triton        7584M 30993  49 30603  10 16683   5 39763  76 40717   6 149.6   0
                    ------Sequential Create------ --------Random Create--------
                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16 +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++
triton,7584M,30993,49,30603,10,16683,5,39763,76,40717,6,149.6,0,16,+++++,+++,+++++,+++,+++++,+++,+++++,+++,+++++,+++,+++++,+++

bonnie++ Test auf RAID5 mit 4x WD10EADS 3.5" 1TB Daten-HDDs:

$ sudo cd /mnt/test2; bonnie++ -u root
Version 1.03c       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
triton        7584M 63300  93 89239  33 51662  19 59598  85 175811  34 238.7   0
                    ------Sequential Create------ --------Random Create--------
                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16 +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++
triton,7584M,63300,93,89239,33,51662,19,59598,85,175811,34,238.7,0,16,+++++,+++,+++++,+++,+++++,+++,+++++,+++,+++++,+++,+++++,+++

bonnie++ Test auf verschlüsselten RAID5 mit Cyper aes-cbc-essiv:sha256 und Key-Size 256:

Version 1.03c       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
triton        7584M 44596  68 64655  17 32579   6 58465  77 80679   7 248.4   0
                    ------Sequential Create------ --------Random Create--------
                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16 +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++
triton,7584M,44596,68,64655,17,32579,6,58465,77,80679,7,248.4,0,16,+++++,+++,+++++,+++,+++++,+++,+++++,+++,+++++,+++,+++++,+++

bonnie++ Test auf verschlüsselten RAID5 mit Cyper aes-lrw-benbi und Key-Size 256:

Version 1.03c       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
triton        7584M 47590  71 71148  18 36581   7 56186  78 96772   8 254.4   0
                    ------Sequential Create------ --------Random Create--------
                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16 +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++
triton,7584M,47590,71,71148,18,36581,7,56186,78,96772,8,254.4,0,16,+++++,+++,+++++,+++,+++++,+++,+++++,+++,+++++,+++,+++++,+++

bonnie++ Test auf verschlüsselten RAID5 mit Cyper aes-xts-benbi und Key-Size 256:

$ sudo cd /mnt/test3; bonnie++ -u root
Version 1.03c       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
triton        7584M 46103  68 70602  19 37770   8 58586  77 99091   9 255.9   0
                    ------Sequential Create------ --------Random Create--------
                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16 +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++
triton,7584M,46103,68,70602,19,37770,8,58586,77,99091,9,255.9,0,16,+++++,+++,+++++,+++,+++++,+++,+++++,+++,+++++,+++,+++++,+++

bonnie++ Test auf verschlüsselten RAID5 mit Cyper aes-xts-benbi und Key-Size 512:

$ sudo cd /mnt/test4; bonnie++ -u root
Version 1.03c       ------Sequential Output------ --Sequential Input- --Random-
                    -Per Chr- --Block-- -Rewrite- -Per Chr- --Block-- --Seeks--
Machine        Size K/sec %CP K/sec %CP K/sec %CP K/sec %CP K/sec %CP  /sec %CP
triton        7584M 45594  69 66371  17 33677   6 58608  77 80201   7 269.5   0
                    ------Sequential Create------ --------Random Create--------
                    -Create-- --Read--- -Delete-- -Create-- --Read--- -Delete--
              files  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP  /sec %CP
                 16 +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++ +++++ +++
triton,7584M,45594,69,66371,17,33677,6,58608,77,80201,7,269.5,0,16,+++++,+++,+++++,+++,+++++,+++,+++++,+++,+++++,+++,+++++,+++