Archiv

Archiv für Mai, 2012

Homeserver

Hallo Homeserver,

kürzlich habe ich beschlossen mir einen Homeserver, aus meiner alten Hardware, zu basteln. Er sollte vor allem als Netzwerkspeicher dienen jedoch auch alle möglichen Jobs für mich erledigen wenn er ja schon 24/7 läuft oder zumindest länger als mein Standpc. Das heisst natürlich, dass das Betriebsystem meine Hardware unterstützen sollte und mir aber trotzdem die Freiheiten lassen sollte Scripts und Zusatzprogramme hinzuzufügen.

Hardware:

Wie gesagt alte, herumliegende Teile werden zusammegestöpselt und voilà der Server steht.
Mobo: Asus A8R32-MVP Deluxe
CPU: AMD Opteron 170
Ram: 4G DDR
Graka: NVidia 7800GT
HDD: Kingston DT108-8GB, 5x 80GB HDD

Die Idee: als Systempartition wird der USB Stick verwendet und die 80er Disken über ein mdadm-Software Raid6 verbunden.

Betriebssystem:

Auch wenn ich lange mit FreeNAS geliebäugelt hatte, beschloss ich ein „normales“ Linux zu nehmen, wegen besagter Zusatzprogramme und weil es im Forum hieß FreeNAS sei ja eigentlich für kleine NAS-Systeme gedacht.
Gut also Linux hmmm, da gibt es ja auch ordentlich an Auswahl: Mint, Ubuntu, Debian, Archlinux, Gentoo, ….
Da ich jedoch die Hardware in 64Bit betreiben möchte, um sie möglichst gut auslassten zu können, siehe RAM. War meine Auswahl aber bereits eingeschränkt, nebenbei wollte ich mich auch nicht ewigkeiten mit einem neuen OS herumspielen, also bin ich wieder einmal bei Debian gelandet 🙂

Debian it is:

Nun zur Installation des Systems auf einen USB-Stick. Im Netz gibt es einige Möglichkeiten das System auf ein USB-Stick zu bekommen. Die einfachste die mir eingefallen ist, einfach einmal den Stick als einziges Speichergerät anzustecken und über eine Netinst-CD installieren und siehe da es funktioniert. Das Setup erkennt den Stick als SDA man kann gleich darauf los installiern. Einziges Manko an der Geschichte ist die Installationsdauer, ich vermute es liegt an den beschränkten IOPS der USB-Lösung.

Systemkonfiguration:

Netzwerk:

Aktuell besteht das Netzwerk aus einem Modem/Router PRG AV 4202N, zwei kleinen Switches, einigen Rechnern und eben dem neuen Homeserver. Der Router spielt den DHCP, WINS und Time Server.

IP: DHCP/Static

Da, wie die Bezeichnung schon erahnen lässt, der Homeserver als Server betrieben wird. Werde ich Ihm eine Fixe-IP zuweisen, dass im Falle eines Router/Modem-ausfalls es keine Probleme gibt.
Bei Debien ist das in der Datei /etc/network/interfaces hinterlegt. Einfach mit deinem Bevorzugtem Textbearbeitungswerkzeug öffnen und eintragen.

allow-hotplug eth0
auto eth0
iface eth0 inet static
        address 192.168.0.50
        netmask 255.255.255.0
        network 192.168.0.0
        gateway 192.168.0.1

Natürlich die lokalen gegebenheiten anpassen:). Nachdem das gespeicherwurde muss das Interface einmal DOWN und UP genommen werden um die aktellen Einstellungen zu übernehemen.

sudo ifdown eth0 && sudo ifup eth0

Nun sollte die IP eingestellt und statisch sein. Es sollte auch darauf geachtet werden, dass der DHCP-Server davon weis und die IP für diese MAC-Adresse reserviert hält.
Mit folgendem Befehl kann man die MAC-Adresse und die aktuelle Interface-Einstellugen sehen:

ifconfig

Zeitsynchronisation: ntp, ntpdate

Zunächsteinmal müssen die entsprechenden Packete installiert werden.

aptitude install ntp ntpdate

Leider ist es mir nicht gelungen den Router als Zeitserver hinzuzufügen deswegen wurden die, entsprechend ntp.org, vorgeschlagenen Server verwendet. Wieder muss die Konfiguration in eine Datei, /etc/ntp.conf, eingetragen werden.

server 0.at.pool.ntp.org iburst
server 1.at.pool.ntp.org iburst
server 2.at.pool.ntp.org iburst
server 3.at.pool.ntp.org iburst

Nach einem Dienstneustart sollte sich die Zeit von alleien Synchronisieren.

/etc/init.d/ntp restart

Die aktuelle Zeit kann einfach per Befehl

date

abgefragt werden.
Falls diese nicht aktuell ist, oder stark abweicht, muss man per

ntpdate

einen initiale, manuelle Zeitsynchronisation starten. Es muss jedoch der NTP-Dienst hierfür beendet werden.

/etc/init.d/ntp stop
ntpdate at.pool.ntp.org
/etc/init.d/ntp start

Nun sollte sich der Server selbstständig synchronisieren.

Webserver: lighttpd

Als Webserver verwende ich lighttpd, er wird einfach über den Packetmanager installiert.

aptitude install lighttpd php5-cgi

Um auch PHP-Seiten darstellen zu können muss zusätzlich das entsprechende Modul installiert werden.
Jetzt muss dem Webserver beigebracht werden wie die Seiten zu verarbeiten sind, dies passiert über die Modul aktivierung.

sudo lighty-enable-mod fastcgi 
sudo lighty-enable-mod fastcgi-php

Ein Neustart des Dienstes erledigt den Rest.

sudo service lighttpd force-reload

Speicher:

Softwareraid: mdadm

Ich möchte ein Raid 6 aus meinen 5 80er Platten erstellen um bei einem möglichen Ausfall von 2 Platten noch immer meine Daten abrufen zu können.

Nun gut nach Anschluss aller Platten und dem korrekten erkennen durch das OS kann man sich daran machen die Partitionen auf den HDD’s zu erstellen.

Partition schreiben:

Um ungleich große Festplatten in Ihrer Größe zu „Normieren“ erstelle ich überall eine gleich große Partition mit Hilfe von cfdisk hier setzte ich auch den Partitiontyp auf fd was als Linux Raid interpretiert wird.

cfdisk /dev/sda
sfdisk -d /dev/sda | sfdisk /dev/sdb
sfdisk -d /dev/sda | sfdisk /dev/sdc
sfdisk -d /dev/sda | sfdisk /dev/sdd
sfdisk -d /dev/sda | sfdisk /dev/sde

Raid erstellen:

mdadm --create --verbose /dev/md1 --level=raid6 
      --chunk=64 --raid-devices=5 --spare-devices=0 /dev/sd{a,b,c,d,e}1

Dateisystem erstellen:

Ich habe mich für ein ext4 entschieden. Um nun das Dateisystem an das Raid anzupassen wurde die Blocksize von 4kB gewählt und eine Stride von 16 verwendet womit man nun auf die Chunksize 64kB vom Raid kommt.

mkfs.ext4 -b 4096 -R stride=16 /dev/md1 -L <Label_Name>

Der Name des Raid’s kann auch im Nachhinein bearbeitet werden.

e2label /dev/md1 <Label_Name>

Automatisches mounten:

Das Dateisystem kann nun in die fstab Datei eingetragen werden um das Mounten nach dem Start zu automatisieren.

vi /etc/fstab

Raid einbinden:

Damit das Softwareraid auch nach einem Neustart nicht auf seine Konfiguration vergisst kann man diese mit folgenden Befehl in der mdadm.conf hinterlegen.

cp /etc/mdadm/mdadm.conf /etc/mdadm/mdadm.conf_orig
mdadm --examine --scan >> /etc/mdadm/mdadm.conf

Windows Filesharing: Samba

Hardwaremonitoring:

CPU Taktung: cpufrequtils

CPU Temperatur: lm-sensors

Festplatten Temperatur: hddtemp

SMART Monitoring: smartmontools

Zusatzfunktionen:

Downloader: pyLoad

Nähere Infos hierzu auf der entsprechenden Seite.
http://www.zettabyte.eu/homeserver-pyload/

Torrent Loader: Transmission

Media Server: Plex

EBay Helper: esniper

Nähere Infos hierzu auf der entsprechenden Seite.
http://www.zettabyte.eu/homeserver-esniper-esf/

APC USV Daemon: apcupsd

Nähere Infos hierzu auf der entsprechenden Seite.
http://www.zettabyte.eu/homeserver-apcupsd/

DC Crawler: MJ12Node

Genauere Informationen sind auf der entsprechenden Seite zu finden.
http://www.zettabyte.eu/homeserver-mj12/

Referenzen:

KategorienLinux Tags: , ,

Homeserver – MJ12

Einführung:

Also nun zum distributed Client Projekt Majestic-12 das dezentral Webseiten Indiziert um so in Zukunft eine Basis für eine Suchmaschienen zu sein.
Zunächst gehe ich von meiner Homeserverinstallation aus, Debian Squeeze 64bit.

ToDo:

Zuerst müssen wir die Software herunterladen, entpacken und dann zum laufen bekommen.

Installation:

Da wir eine 64Bit Installation haben müssen erst einmal die 32Bit Bibliotheken nachinstalliert werden. Da es dass von uns verwendete Bundle nur in 32Bit Version im Forum gibt.

aptitude install ia32-libs ia32-libs-gtk

Weiters ist der eigentliche Client für Windows und in .NET geschrieben, nun bräuchte man zunächst MONO um es zum laufen zu bekomme. Jedoch, zum Glück für uns, hat sich damit bereits jemand beschäftigt und ein Bundle für Linuxkisten zusammengestellt. Dieses ist im Forum zu finden.
Laut Linux FHS werde ich einen Unterordner in /usr/local/etc anlegen in dem das Programm gespeichert wird. Zusätzlich wird der Eigentümer auf einen NONROOT Benutzer umgelegt.

cd /usr/local/etc
wget http://refic.psimerion.org/CURRENTVERSION.tgz
tar -xf CURRENTVERSION.tgz
chmod -R UNPRIVUSER:UNPRIVGROUP MJ12node
rm CURRENTVERSION.tgz

Nun sollte es bereits möglich sein den Client mithilfe der mitgeliferten run.sh zu starten.

sudo -u UNPRIVUSER /usr/local/etc/MJ12node/run.sh

Falls dieser ohne Probleme startet, aktivieren wir den internen Webserver mit dem Shortcut S. Nun sollte der Node über einen Browser und die URL http://IP:1088/ erreichbar sein.

Edit:

Da es negative Erfahrungen mit dem Node auf einem USB-Stick gibt, habe ich beschlossen es auf mein Raid auszulagern. Damit es jedoch über den aktuellen Pfad erreichbar bleibt habe ich eine symbolische Verknüpfung erstellt.

mv /usr/local/etc/MJ12node /srv/
ln -s /srv/MJ12node /usr/local/etc/MJ12node

Konfiguration:

Wenn der Webserver der Software läuft können wir den Node Konfigurieren. Theoretisch kann man diesen auch ohne den Webserver einstellen, da dieser die Informationen in die lokal angelegte Datei config.xml schreibt.
Wichtige, zu bearbeitende, Punkte stehen in der Kategorie Personal. Darüber hinaus kann unter MISC-Web server das selbstständige aktivieren des Webservers eingeschalten werden.
Bei Änderungen nicht vergessen ganz nach unten zu scrollen und den Button Save Options zu klicken.

Memory Disk

Da ich als Rootpartition einen USB-Stick nutze und somit, wie bei allen EEPROM basierten Speichern(SSD’s), die Schreibzyklen begrenzt sind, werde ich mir den /tmp Ordner als Memory Disk mounten. Da es, gerade beim Archivieren zu erhöhten Schreib-/Lesenzyklen kommt und somit auf die Lebenszeit des Speichers, sowie die Geschwindigkeit des Nodes Einfluss nimmt.
Dies wird einfach per Eintrag in der /etc/fstab bewerkstelligt.

tmpfs /tmp tmpfs defaults,noexec,nosuid,nodev,size=512M,mode=01777 0 0

Damit nun der Client beim Archivieren auch wirklich diesen Ordner verwendet muss unter MISC-Archiving-Temporary files path: der Pfad /tmp/MJ12tmp eingetragen werden.
Nun noch ein Reboot damit der Ordner richtig gemountet wird und der Client verwendet die RAM Disk.

reboot

DNS Server

Aufgrund der Funktion des MJ Nodes gibt es viele DNS Abfragen was meinem Router/Modem etwas zu schaffen macht. Nun da ich nicht alle x Stunden diesen neustarten möchte setzte ich den DNS Server für den gesamten Server einfach auf einen Öffentlichen.

Dass geht bei Debian recht einfach, mit einem Texteditor die Datei /etc/resolv.conf öffnen und hier die IP des zu verwendenden Servers eintragen.

vi /etc/resolv.conf

Konkret muss am Ende der Zeile nameserver die IP eingesetzt werden.

nameserver 8.8.8.8

Wäre zum Beispiel der öffentlich DNS Server von Google.

Achtung!

Dies verändert aber den DNS Server vom gesamten Rechner also können zb. lokale Domains nicht mehr umgesetzt werden. Leider ist mir nicht klar wie ich nur den DNS Server für ein Programm setzten könnte ausser vielleicht einen Proxy einzurichten bei dem der DNS Server so gestzt ist und im MJ12Node den Proxy dann festlege.

Referenzen:

Majestic 12 Webseite
Majestic 12 Forum
RAM Disk How-to