ZBOX CI320

Wie es begann

ZBOX-CI320NANO 12
Vier Jahre lang hatte die ZBOX ID40 klaglos ihren Dienst getan, schließlich aber doch mit Debian "Wheezy". Dann entschied ein Gewitter, dass ich mal was Neues bräuchte, und grillte die Netzwerkchips. WLAN war mir entschieden zu langsam, weswegen sich etwas tun musste.

Die Hausratversicherung erstattete mir 200,00€ und so konnte ich auf die Pirsch gehen. Mit Zotac war ich hinreichend zufrieden, warum also nicht wieder einen MIni aus diesem Hause.

Schließlich entschied ich mich für eine CI320 mit 8GB Ram und einer Quad Celeron CPU und OHNE geräuschvollen Lüfter für 205,00€.

Installation

Es war im Laufe der letzten 4 Jahre so viel an Konfigurationsarbeit zusammengekommen, dass ich mich gegen eine Neuinstallation entschied und einfach die Platte umbauen wollte. Hardwareseitig war das überhaupt kein Problem, die kleine Box ist kinderleicht zu öffnen, das Ram Modul baut man leicht mit den üblichen Vorsichtsmaßnahmen ein und die Platte (max. 9,5 mm Höhe machte auch keinerlei Schwierigkeiten.

Die kleine Maschine bootete sofort, wollte aber nicht in den Grafikmodus. Kein Wunder, dachte ich, es ist ein Intel ValleyView Gen7 Chipsatz verbaut und kein Nvidia ION. Nach einigem Fummeln wurde die Intel-Grafik erkannt ... aber das Ergebnis war überaus langsam. Und Sound kam auch keiner aus dem HDMI Kabel, erkannt wurde nur analog Audio.

Meine erste Vermutung bewahrheitete sich: Der Chipsatz ist zu neu für Debian "Wheezy" Debian ist halt mal "kreuzkonservativ" und das wirkte sich diesmal eben negativ aus. Also doch eine Neuinstallation? Ubuntu? Oder gar OpenSuSE (grusel)?

Trotz etlicher Bedenken entschloss ich mich es mit Debian "Jessie", also der noch nicht als "stable" bezeichneten "testing" Version zu versuchen. Das Update geht ganz einfach, indem man:

  1. Die Datei /etc/apt/sources.list editieren und überall "wheezy" durch "testing" ersetzen.
  2. sudo apt-get update   
  3. sudo apt-get dist-upgrade

Das war's! Daß ich einige Probleme dabei hatte, und ich den dist-upgrade Prozess mehrmals anschubsen musste, führe ich darauf zurück, das just während des Upgrades mein LTE Kontingent aufgebraucht war und ich den gesamten Prozess mit 384 Kbit/s durchlaufen musste ... Letztlich hat das funktioniert, wenn es auch 5 Stunden gebraucht hat :-)

Und das Tollste: Die Grafik lief auf Anhieb superschnell und ein satter Sound kam aus meinem 5.1 System!!!

Die erste Hürde war genommen:

Probleme

Nun begannen aber doch die Probleme, ich möchte sie eher als Nacharbeiten bezeichnen.

Apache 2.4

Der bisher benutzte Apache 2.2 wird in Jessie durch 2.4 ersetzt. Dabei ergaben sich zwei für mich wesentliche Änderungen.

1. Das Vereichnis /etc/apache2/conf.d gibt es nicht mehr, statt dessen gibt es die beiden Verzeichnisse /etc/apache2/conf-enabled und etc/apache2/conf-available. Eigentlich ist das eine folgerichtige Weiterentwicklung schließlisch wird das bei den Modulen und den Sites schon lange so gemacht. Ich habe meine conf-Dateien einfach umkopiert und die entsprechenden Links gesetzt.

2. Die Direktiven "order deny, allow" und "allow from all" wurden ersetzt durch "require all denied" bzw "require all allowed". Ich musste etwas googlen, bis ich dfas herausgefunden hatte. Das war schon mehr Arbeit (weil an vielen Stellen benutzt) aber eben nur Arbeit.

ntp

Der USB to Serial Stick wurde nicht erkannt ... warum nur???

Weitere Probleme werden sicherlich noch folgen und dann hier dokumentiert

Nagios/Icinga

Natürlich wird mein Homeserverchen von Icinga überwacht. Leider hat man bei Debian, beschlossen, dass nrpe mit Kommandozeilen-Parametern zu "unsicher" ist und deswegen den nrpe entsprechend kompiliert. Mir hätte der entsprechende Schalte in der nrpe.conf Datei auch gereicht (Don't blame nrpe=1". Deswegen musste ich den nrpe-Dienst neu kompilieren. Geht ganz einfach:

cd /usr/src

wget http://downloads.sourceforge.net/project/nagios/nrpe-2.x/nrpe-2.15/nrpe-2.15.tar.gz

tar -xzvf wget nrpe-2.15.tar.gz

cd nrpe-2.15

./configure --with-ssl=/usr/bin/openssl --with-ssl-lib=/usr/lib/x86_64-linux-gnu/ --enable-command-args

make all

 

cp ./src/nrpe /usr/sbin/

Das letzte cp habe ich nur gemacht, weil ich nicht eine ganz neue Installation wollte. Ich muss ja nur nrpe austauschen. Allerdings muss ich nur darauf achten, dass ich diese Prozedur wiederhole, falls Debian das nrpe Paket updatet.

lm-sensors

Sensors ist ein sehr hübsches Tool, mit dem man die gesundheitszustände eines Servers auslesen kann. Dazu installiert man apt-get install lm-sensors und schon kann man mit "sensors" eine hübsche Information aus dem ganzen ziehen:

root@zbox:/etc/sensors.d# sensors
acpitz-virtual-0
Adapter: Virtual device
temp1:        +59.0°C  (crit = +90.0°C)

coretemp-isa-0000
Adapter: ISA adapter
Core 0:       +64.0°C  (high = +105.0°C, crit = +105.0°C)
Core 1:       +64.0°C  (high = +105.0°C, crit = +105.0°C)
Core 2:       +63.0°C  (high = +105.0°C, crit = +105.0°C)
Core 3:       +64.0°C  (high = +105.0°C, crit = +105.0°C)

nct6776-isa-0a00
Adapter: ISA adapter
Vcore:        +0.81 V  (min =  +0.00 V, max =  +1.74 V)
in1:          +1.40 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
AVCC:         +3.33 V  (min =  +2.98 V, max =  +3.63 V)
+3.3V:        +3.31 V  (min =  +2.98 V, max =  +3.63 V)
in4:          +1.01 V  (min =  +0.00 V, max =  +0.00 V)  ALARM
in5:          +0.00 V  (min =  +0.00 V, max =  +0.00 V)
3VSB:         +3.30 V  (min =  +2.98 V, max =  +3.63 V)
Vbat:         +3.22 V  (min =  +2.70 V, max =  +3.63 V)
fan1:           0 RPM  (min =    0 RPM)  ALARM
fan2:           0 RPM  (min =    0 RPM)  ALARM
SYSTIN:       +38.0°C  (high =  +0.0°C, hyst =  +0.0°C)  ALARM  sensor = thermistor
CPUTIN:      +123.5°C  (high = +80.0°C, hyst = +75.0°C)  ALARM  sensor = thermistor
AUXTIN:      -128.0°C  (high = +80.0°C, hyst = +75.0°C)  sensor = thermistor
cpu0_vid:    +0.000 V
intrusion0:  ALARM
intrusion1:  ALARM

Mit Perl kann man sich ein kleines Check-Script schreiben, was man dann in Nagios/Icinga auswerten kann :-)

 

 

 

ZBOX ID40

Die Zotac ZBOX

 
 

Ausgangssituation:

Die diversen Home-Services liefen auf 3 „Servern“, einer Synology DS101j, einer Linksys NSLU2 und einem alten Notebook. Das hatte sich im Laufe der Zeit so entwickelt, führte aber letztlich dazu, dass die drei schwächlichen Büchsen zusammen auch nicht weniger Strom verbrauchen, als ein fetter Server.

Also bekam ich zu Weihnachten 2010 von mir ( :-) ) eine Zotac ZBOX ID-40 mit 4 GB Hauptspeicher und 500 GB Harddisk. Diese sollte nicht nur die Serverfunktionen der kleinen Büchslein übernehmen, sondern auch als Home-Theatre dienen.

Hier der Link zum Hersteller: Zotac Homepage

 

Hardwareinstallation

 
Laborbetrieb am Monitor (VGA)

Die war überaus einfach: Plug and go. Dem System liegt ein VGA-Adapter bei.

Betrieb am 42" Fernseher(HDMI)

Video funktionierte auch sofort, stürzte aber regelmäßig ab. Allerdings kam zunächst kein Sound durch das HDMI-Kabel (siehe Treiberinstallation)

Funk-Uhr Tobit Time:LAN

Siehe NTP

 

Softwareinstallation

 
Betriebsystem

Zunächst muss man das System booten. Ich hatte mich für OpenSUSE 11.3 entschieden. (Oh, wäre ich doch bei Debian geblieben, da fühle ich mich wohler.) Für den ersten Bootvorgang habe ich ein CDRom Laufwerk über ein USB2IDE-Kabel angeschlossen. Die dabei entstandenen Probleme waren darauf zurückzuführen, dass das zunächst benutzte Laufwerk defekt war.

Hernach war die Installation kein Problem. Bei der Partitionierung habe ich es mir einfach gemacht: eine 20 GB Partition für / und eine Partition für /Data. Wie sinnvoll das ist, wird sich zeigen.

OpenSUSE installiert eine schiere Unmenge von Kram, deshalb war die Netzinstallation ziemlich langwierig über meine langsame DSL-Leitung.

Grafiktreiber

Standardmäßig installiert OpenSUSE den „nouveau“-Treiber, der regelmäßig „abschmiert“. Nach einiger Suche fand ich bei Zotac den richtigen Treiber

Zotac Downloads

Die Installation war nicht so einfach, denn es ist nicht so einfach, den „nouveau“-Treiber wieder los zu werden, es handelt sich um ein Kernel-Modul, welches beim Start bereits geladen wird. Schließlich half folgendes Vorgehen.

  • Booten mit dem „nomodeset“ - Flag
  • Die folgenden zwei Zeilen in die Datei /etc/modprobe.d/50-blacklist.conf einfügen
blacklist nouveau
options nouveau modeset=0
  • Deinstalleren des Nouveau-Treibers
  • Installieren des Zotac-Treibers

Damit war es dann möglich, die Full-HD-Auflösung via HDMI zu erreichen. Die Schrift ist damit allerdings sehr klein und die Systemsteuerung der OpenSUSE kann das nur eingeschränkt anpassen.

Sound-Einstellung

Das nächste Problem war die Ausgabe von Sound via HDMI-Kabel. In der Sound Einstllung muss man dazu den richtigen Kanal einstellen: FIXME Screenshot

Um auch noch Filme schauen zu können muss man in der Sound-Einstellung von XINE folgendes eingeben „hw:1,8“ FIXME Screenshot

WLAN-Einstellung

OpenSUSE ist doof! Ich kannte den Network-Manager von Debian und war ganz zufrieden damit. Damit kann Suse's YAST nicht umgehen. Daran muss noch gearbeitet werden FIXME

 

Software

 
Apache

Der Apache Webserver ist im Lieferumfang von Opensuse enthalten, er funktioniert out of the Box. Um mod_perl zu aktivieren, dient die Datei /etc/apache2/conf.d/mod_perl.conf

<Directory "/Data/WEB/perl_bin">
    AllowOverride None
    Options None
    Order allow,deny
    allow from all
</Directory>

Alias /perl_bin/ /Data/WEB/perl_bin/
<Location /perl_bin/>
   # mod_perl mode
#   SetHandler perl-script
   AddHandler perl-script .pl
   PerlResponseHandler ModPerl::Registry
   PerlOptions +ParseHeaders
   Options +ExecCGI
</Location>

# mod_dbd configuration
DBDriver mysql
DBDParams "dbname=apache2 user=auth_user pass=avalos host=localhost"
DBDMin  4
DBDKeep 8
DBDMax  20
DBDExptime 300

<Directory /Data/WEB/perl_bin>
  # core authentication and mod_auth_basic configuration
  # for mod_authn_dbd
  AuthType Basic
  AuthName "My Server"
  AuthBasicProvider dbd

  # core authorization configuration
  Require valid-user

  # mod_authn_dbd SQL query to authenticate a user
  AuthDBDUserPWQuery \
    "SELECT passwd FROM clients WHERE username = %s"
</Directory>
PHP5

Damit meine Scripts laufen, müssen ein paar Änderungen in der Datei /etc/php5/apache2 vorgenommen werden:

short_open_tag = On
safe_mode = Off
register_globals = Off
post_max_size = 8M
file_uploads = On
upload_max_filesize = 100M
MySQL

Der MySQL-Datenbankserver ist im Lieferumfang von Opensuse enthalten, er funktioniert out of the Box. Probleme entstanden beim Umzug der Daten, weil ich, ohne es recht zu merken, von Latin1 auf UTF-8 ungestellt hatte. Nachdem die Umlaute repariert waren, läuft die Datenbank zuverlässig

Samba
 
Perl
 
Postfix

Die ZBox soll ein ordentlicher Mailserver werden, dazu benutzen wir Postfix. Das funktioniert auch ohne Probleme, aber ich musste feststellen, dass ich schon nach kurzer Zeit mit Spam zugemüllt wurde. Mit dem Paket PCRE und den Erklärungen auf dieser Seite http://chains.ch/docs/postfix-UCE-HOWTO-de.html konnte ich abhilfe Schaffen. Hie auszugsweise die entsprechenden Dateien.

1. /etc/postfix/main.cf

#################################################################################
#### Spam Einstellungen
## 1. Absender
#     - Verwirft die Sender Domain, wenn diese keinen DNS Rekord vom Typ A oder MX hat.
#     - Verwirft den Absender, wenn diese nicht in FQDN Form ist (Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!).   
#     - Verwirft die Anfrage, wenn der Sender einen DNS Rekord vom Typ A unter domain.tld hat.
smtpd_sender_restrictions = 
    warn_if_reject,
    reject_unknown_sender_domain,
    reject_non_fqdn_sender,
#    reject_rhsbl_sender domain.tld

## 2. Client Restrictions
#     - Verwirft die Anfrage, wenn der Hostname des SMTP Clients unbekannt ist (die IP Adresse
#       oder der Hostname des TCP/IP Clients) oder wenn Reverse und Forward Lookups nicht übereinstimmen.
#     - Verwirft die Anfrage, wenn der SMTP Client einen DNS Rekord vom Typ A unter domain.tld hat. 
#       Ein RHSBL ist eine Real-time Blacklist (Domain basiert). 
#     - Gewährt Zugriff, wenn der Client in $mynetworks zu finden ist.
smtpd_client_restrictions = 
    permit_mynetworks,
    reject_invalid_hostname,
    reject_unknown_hostname,
    reject_non_fqdn_hostname,

## 3. HELO Einstellungen
#     - Verwirft im HELO/EHLO angegebenen Hostname, falls dieser eine falsche Syntax hat. Wenn man in einem
#       Netzwerk ist und man will, dass die Maschinen, die auch im Netzwerk sind Emails über unseren MTA   
#       verschicken wollen, dann ist es sinnvoll, diese Beschränkung erst nach permit_mynetworks anzugeben 
#     - Verwirft den im HELO/EHLO angegebenen Hostnamen, welcher keinen DNS Rekord vom Typ A oder MX hat.  
#       Hier ist es auch sinnvoll permit_mynetworks zuerst anzugeben, wenn man ein Relay-MTA für das innere Netzwerk ist.
#     - Verwirft den im HELO/EHLO angegebenen Hostnamen, wenn dieser nicht in FQDN Form ist. 
#     - Sieht im HELO/EHLO angegebenen Hostnamen oder Parent Domain nach.
#     - Gewährt Zugriff, wenn der Client in der Liste von $mynetworks ist.
smtpd_helo_required = yes
smtpd_helo_restrictions =
    permit_mynetworks,   
    reject_invalid_hostname,
    reject_unknown_hostname,
    reject_non_fqdn_hostname
#    check_helo_access

strict_rfc821_envelopes = no
## 4. Recipient Einstellungen
#     - Verwirft die Anfrage, wenn im RCPT TO die Domain des Empfängers keinen DNS Rekord vom Typ A oder MX hat.
#     - Verwirft die Anfrage, wenn im RCPT TO die Domain des Empfängers nicht in FQDN Form ist.
#     - Verwirft die Anfrage, wenn der Empfänger einen DNS Rekord vom Typ A unter domain.tld hat.
#     - Verwirft das Absenden von Emails:
#     - + zu Zielmaschinen, die nicht unter $inet_interfaces, $mydestination, $virtual_alias_domains der $virtual_mailbox_domains zu finden si
#     - + zu Zielmaschinen, die nicht unter $relay_domains oder in deren Subdomains zu finden sind (ausser Sender-spezifisches Routing).
#     - Wandelt jedes REJECT einer direkt nachfolgenden Restriction in eine Warnung um.
#     - Löst die Empfänger-Adresse, Parent Domain oder localpart@ auf.
#     - Der MX Record der Empfängerdomain wird bestimmt und das Ergebnis wird zur Suche in maptype:mapname verwendet.
#     - Erlaubt das Absenden von Emails:
#     - - zu Zielmaschinen, die unter $inet_interfaces, $mydestination, $virtual_alias_domains der $virtual_mailbox_domains zu finden sind.
#     - - zu Zielmaschinen, die unter $relay_domains oder in deren Subdomains zu finden sind (ausser Sender-spezifisches Routing).
#     - Erlaubt das Empfangen von Emails für Seiten, die mich als MX Host auflisten.
#     - Gewährt Zugriff, wenn der Client in der Liste von $mynetworks ist.
smtpd_recipient_restrictions = 
    warn_if_reject,
    permit_mynetworks,
    reject_unauth_destination,
    reject_invalid_hostname,  
    reject_non_fqdn_sender,   
    reject_unknown_sender_domain,
    reject_non_fqdn_recipient,   
    reject_unknown_recipient_domain,
    reject_rbl_client relays.ordb.org,
    reject_rbl_client cbl.abuseat.org,


## 5. PCRE Checks


#     - Header und Body der Mail werden per Regex untersucht. Die Regeln dafür stehen in den folgenden Dateien
header_checks = pcre:/etc/postfix/header_checks.pcre
body_checks = pcre:/etc/postfix/body_checks.pcre

2. /etc/postfix/body_checks.pcre

/iagra/           DISCARD
/Angelina/        DISCARD
/pills/           DISCARD
/nlarge/          DISCARD
/Scam/            DISCARD
/herbal/          DISCARD
/increase/        DISCARD
/Chronomet/       REJECT Spam rejected
/usverkauf/       DISCARD
/rmbanduhr/       REJECT Spam rejected
/generic/         DISCARD
/ialis/           DISCARD
/rands/           DISCARD
/Penis/           DISCARD

3. /etc/postfix/header_checks.pcre

/^From:.*ample/             DISCARD
/^From:.*Anwalt/            DISCARD
/^From:.*Gewinn/            DISCARD
/^From:.*Games/             DISCARD
/^From:.*Hero/              DISCARD
/^From:.*Oprah/             DISCARD
/^From:.*Photos/            DISCARD
/^From:.*Promo/             DISCARD
/^From:.*rial/              DISCARD
/^From:.*Jennifer Aniston/  DISCARD
/^From:.*roduct/            DISCARD
/^From:.*Rolex/             DISCARD
/^From:.*Britney/           DISCARD
/^From:.*Clinical/          DISCARD
/^From:.*Tube/              DISCARD
/^Subject:.*Angelina/       DISCARD
/^Subject:.*Bett/           DISCARD
/^Subject:.*Brand/          DISCARD
/^Subject:.*areer/          DISCARD
/^Subject:.*Rolex/          DISCARD
/^Subject:.*sale/           DISCARD
/^Subject:.*Weight/         DISCARD
/^Subject:.*eduction/       DISCARD
/^Subject:.*market/         DISCARD
/^Subject:.*Oprah/          DISCARD
/^Subject:.*intimate/       DISCARD
/^Subject:.*Penny/          DISCARD
/^Subject:.*ussische/       DISCARD
/^Subject:.*Chronomet/      DISCARD
/^Subject:.*eitmesser/      DISCARD
/^Subject:.*eplica/         DISCARD
/^Subject:.*generic/        DISCARD
/^Subject:.*herbal/         DISCARD
/^Subject:.*iagra/          DISCARD
/^Subject:.*ialis/          DISCARD
/^Subject:.*inch/           DISCARD
/^Subject:.*increase/       DISCARD
/^Subject:.*iracle/         DISCARD
/^Subject:.*ize/            DISCARD
/^Subject:.*Mahnung/        DISCARD
/^Subject:.*nlarge/         DISCARD
/^Subject:.*pill/           DISCARD
/^Subject:.*roduct/         DISCARD
/^Subject:.*rands/          DISCARD
/^Subject:.*rmbanduhr/      DISCARD
/^Subject:.*Scam/           DISCARD
/^Subject:.*Sex/            DISCARD
/^Subject:.*SEX/            DISCARD
/^Subject:.*sex/            DISCARD
/^Subject:.*usverkauf/      DISCARD
/^Subject:.*zubehoer/       DISCARD
DHCP
 
NTP

OpenSuSE installiert einen NTP-Server, der auch funktioniert. Ich wollte aber meine Tobit DCF77 Uhr anschließen. Die ZBOX hat keinen seriellen Ausgang also kam ein simpler USB to Serial Adapter zum Einsatz. Zuerst muss ein Link von /dev/ttyUSB0 nach /dev/refclock-0 her.

Dann muss /etc/ntp.conf erweitert werden

logconfig =all   # das kann später wieder abgeschaltet werden
server 127.127.8.0 mode 16

Nach rcntp restart meldet das Log Permission denied. Das liegt an AppArmor (*grrr*) deshalb muss in /etc/apparmor.d/usr.sbin.ntpd eingefügt werden damit auf die Interfaces geschrieben werden kann.

  /dev/refclock-0 rw,
  /dev/ttyUSB0 rw,

Anschließend muss ein symbolischer link von ttyUSB0 nach refclock-0 gelegt werden, damit ntp die Uhr finden kann. Hier ist mein mangelndes Verständnis von UDEV im Weg, der Link verschwindet nach jedem Reboot, daher wird der Link nach jedem Boot neu erstellt FIXME

Sie läuft nun anstandslos mit folgender Konfiguration:

driftfile /var/lib/ntp/drift/ntp.drift
logfile /var/log/ntp
logconfig =all
server 127.127.8.0 mode 16

Nach nochmaligem rcntp restart: Voilà. Man muss allerdings etwas Geduld haben, bis die Uhr synchronisiert.