Construction d'un HTPC + NAS + serveur mail,web maison

Buts :

  • être silencieux (le plus possible)
  • avoir du raid 1 (1To utilisable), des volumes de tailles variables, avec snapshots
  • Remplacer :
    • le vieux macmini PPC qui sert de serveur web et mail depuis 5 ans (solution en FreeBSD ou Debian GNU/Linux)
    • le lecteur CD/DVD de salon
    • l'AppleTV v1 pour la partie HTPC
    • la borne Wifi WRT54G en openwrt
  • La partie HTPC doit pouvoir :
    • être connectée à une TV HD, envoyer son et image à travers un câble HDMI
    • être pilotée par une télécommande simple
    • diffuser de la musique et des vidéos depuis un iphone (airplay)
    • diffuser de la musique depuis un iTunes distant (RAOP)
    • partager la musique pour des clients iTunes (mt-daapd)
    • partager les fichiers de données (fuse+ssh ou samba)

Le matériel

Le matériel suivant a été utilisé :

  1. Boîtier Thermaltake Element Q
  2. Zotac IONITX-F-E (Atom 330 + ION)
  3. 2x Corsair Twin2X 2 Go DDRII PC6400 CAS 5
  4. 2x Samsung Spinpoint F3 S-ATA - 1000 Go - 32 Mo
  5. Lecteur CD/DVD Samsung SH-D163C - OEM, noir
  6. B&A-Souris/télécommande de contrôle à distance sans fil pour PC-Compatible Logitech- Récepteur infrarouge usb / Longue portée-jusqu'à 18 mètres.

Total : environ 350€

baban2.jpgbaban3.jpg

Le montage

L'alimentation du boîtier est puissante mais peu silencieuse. Il n'y a pas tant de place que ça à l'intérieur : un disque se trouve sous le lecteur optique, l'autre est sur le côté : il bouche les aérations latérales. http://bellot.net/cyril/pics/baban/b_IMG_1243.JPG

Première configuration de montage

baban1.jpg

  • Pas de ventilateur de CPU (il est optionnel)
  • Boîtier fermé

Bilan :

  • température de CPU : 40°C
  • température des HD : 35°C
  • C'est bien mais c'est trop bruyant : le ventilateur d'alimentation en est la cause.
  • Les vibrations des disques ne sont pas assez absorbées

Deuxième configuration : Modification de la ventilation

Pour améliorer ces problèmes plusieurs configurations ont été essayées :

  • Un Tshirt plié sous le boîtier : presque plus de vibrations transmises
  • Avec les ventilateurs :

Bilan :

  • température de CPU : 40°C
  • température des HD : 45°C
  • Boîtier assez silencieux : on entend surtout le grattement des HD 3.53 (un peu inévitable)

Troisième configuration : suite à une panne d'un ventilateur

Le ventilateur de PC n'étant pas de très bonne qualité, il est rapidement devenu bruyant.

Solution temporaire :

  • Suppression du ventilateur de CPU
  • Remise en place du ventilateur d'alimentation à sa place dans l'alimentation (mais toujours en vitesse lente)
  • Ouverture du boîtier (l'été arrive c'est aussi bien comme ça)

Bilan :

  • température de CPU : 52°C
  • température des HD : 40°C
  • c'est silencieux et stable

Solution logicielle

Séparation du système et des parties applicatives

Pour le choix du logiciel HTPC, XBMC s'est imposé grâce à l'expérience favorable sur un AppleTV v1. La version 11 supporte parfaitement tout le matériel.

La “machine virtuelle” utilisée pour l'intranet web/mail/etc est une Debian qui reprend mes configurations et données de l'ancien serveur (avec une petite migration PPC → amd64). Debian 5, pour ne pas faire de migration applicative tout de suite.

Le système hôte est une debian 6, la plus minimale possible.

Pour séparer la partie serveur mail et web de la partie HTPC j'ai opté pour lxc qui ne nécessite rien de particulier sur une debian 6.

Pour séparer XBMC c'est un peu plus délicat étant donné qu'il lui faut des accès directs aux périphériques audio et vidéo. Après quelques essais, l'isolation lxc a fonctionné mais apportait beaucoup de difficultés pour certaines parties comme le daemon de télécommandes (LIRC). J'ai donc opté pour le lancement en simple chroot, ce qui permet bien de garder la configuration de l'hôte comme minimale.

Hôte (debian 6)
 |
 +----- XBMC (chroot)
 |
 +----- Intranet (lxc)

Installation du système hôte : Boot raid MD + LVM2

Le raid de la carte Zotac est un pseudo raid matériel. Les drivers Linux sont généralement pauvres en commandes. J'ai opté pour du raid logiciel Linux de base → MDADM

Il me faut des volumes de tailles différentes, avec snapshots → LVM2

L'installation debian en mode expert permet de tout faire en ligne de commande à sa convenance : création du raid, construction des volumes, puis suite de l'installation.

Pour les LVM et les snapshots j'utilise un script personnel qui conserve pour chaque volume des snapshots quotidiens et/ou hebdomadaires et/ou monthly. Par exemple pour le volume data/mail, 2 quotidiens, 2 par heure, 1 par semaine.

# snapstats 
VG   LV                   LSize   Snap% 
data docs                  50.00g       
data docs-snapd01-Mon     200.00m   0.01
data docs-snapw01-w28     200.00m   0.01
data intranet               5.00g       
data intranet-snapd01-Mon 500.00m  14.98
data intranet-snaph01-23h 300.00m   0.40
data intranet-snapw01-w28 800.00m  19.44
data mail                  10.00g       
data mail-snapd01-Mon     200.00m   0.01
data mail-snapd02-Sun     200.00m   0.01
data mail-snaph01-23h     100.00m   0.01
data mail-snaph02-22h     100.00m   0.01
data mail-snapw01-w28     200.00m   0.01
data media                300.00g       
data media-snapd01-Mon      5.00g  13.76
data media-snapw01-w28      5.00g  13.76
data www                   20.00g       
data www-snapd01-Mon      200.00m   0.01
data www-snapd02-Sun      200.00m   0.02
data www-snaph01-23h      100.00m   0.01
data www-snaph02-22h      100.00m   0.01
data www-snapw01-w28      500.00m   0.01
sys1 root                  10.00g       
sys1 root-snapd01-Mon     800.00m  33.77
sys1 root-snaph01-23h     500.00m   2.88
sys1 root-snapw01-w28     900.00m  39.32

Les scripts

BUG INITRAMFS & MD+LVM2

A la longue un vilain bug s'est présenté avec le nombre croissant de volumes LVM2 (volumes et snapshots des volumes) : http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=568838 : en gros les scripts d'init (dans l'initram) n'attendent pas assez après la découverte du volume RAID l'apparition des volumes LVM2. Le boot s'arrête dans le prompt initramfs. En attendant que les disques ne soient plus en activité (l'activation en tâche de fond des LVM2) si on tape “exit”, ça démarre normalement.

La solution est un gros hack moche du script /usr/share/initramfs-tools/scripts/local de l'initramfs qui provient de là : http://lists.debian.org/debian-kernel/2011/10/msg00259.html

--- local.org	2012-05-06 08:32:50.633434109 +0000
+++ local	2012-05-05 09:58:05.601299617 +0000
@@ -8,6 +8,12 @@
 
 	wait_for_udev 10
 
+	# HACK CB
+	/sbin/mdadm --assemble --scan
+	/sbin/lvm vgscan --ignorelockingfailure
+	/sbin/lvm vgchange --ignorelockingfailure -a y
+	# /HACK CB
+
 	# Load ubi with the correct MTD partition and return since fstype
 	# doesn't work with a char device like ubi.
 	if [ -n "$UBIMTD" ]; then

Pour appliquer la modification :

dpkg-reconfigure initramfs-tools

Installation de XBMC

Pour séparer un minimum la partie XBMC

  • Création d'un mini système (avec deboostrap)
  • utilisation des backports squeeze :

deb http://backports.debian.org/debian-backports squeeze-backports main non-free contrib

  • utilisation des dépots multimedia squeeze :

deb http://www.deb-multimedia.org squeeze main

deb http://www.deb-multimedia.org squeeze-backports main
* Installation des drivers Nvidia propriétaires
* Installation de xbmc (via les dépots multimedia)
    

Sur le système hôte, j'ai installé les drivers Nvidia du Noyau, uniquement.

Pour le lancement, j'utilise un script /etc/init.d/xbmc, lancé depuis le système hôte qui utilise chroot :

#!/bin/sh
 
### BEGIN INIT INFO
# Provides:          xbmc
# Required-Start:    $all
# Required-Stop:     $all
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: starts instance of XBMC
# Description:       starts instance of XBMC using start-stop-daemon and xinit
### END INIT INFO
 
############### EDIT ME ##################
 
# script name
NAME=xbmc
 
# app name
DESC=XBMC
 
# user
RUN_AS=xbmc
 
# Path of the PID file
PID_FILE=/var/run/xbmc.pid
 
############### END EDIT ME ##################
 
set -e
 
case "$1" in
  start)
        echo "Starting $DESC"
        ( chroot /data/xbmc/ su - xbmc -c "xinit" ) >/dev/null 2>&1 &
	touch /data/xbmc/var/run/xbmc-restart
        ;;
  stop)
        echo "Stopping $DESC"
	rm -f /data/xbmc/var/run/xbmc-restart
        pkill xbmc.bin >/dev/nul 2>&1
        ;;
 
  restart|force-reload)
        echo "Restarting $DESC"
	rm -f /data/xbmc/var/run/xbmc-restart
        pkill xbmc.bin >/dev/nul 2>&1
        pkill xbmc >/dev/nul 2>&1
        pkill -9 xbmc.bin >/dev/nul 2>&1
        pkill -9 xbmc >/dev/nul 2>&1
        ( chroot /data/xbmc/ su - xbmc -c "xinit" ) >/dev/null 2>&1 &
	touch /data/xbmc/var/run/xbmc-restart
        ;;
  *)
        N=/etc/init.d/$NAME
        echo "Usage: $N {start|stop|restart|force-reload}" >&2
        exit 1
        ;;
esac
 
exit 0

J'utilise le theme Transparency : http://xbmc.org/skins/transparency/ baban4.jpg

J'utilise le plugin :

  • xbmc-subtitles pour récupérer facilement les sous-titres de séries.
  • wmtouch : pour utiliser l'appli équivalente sur iphone

Télécommande

La télécommande de PC vue nativement comme un clavier permet de naviguer dans les menus et les commandes de manière assez simple. Le seul problème est quand on active (de manière invisible) le clavier “lettres” en lieu et place des flèches de navigation.

La portée annoncée de 18m est loin d'être effective : pas plus de 2m… Il a fallu que je retire la petite plaque fumée protégeant la LED infrarouge à l'avant. Sans la plaque la portée est au moins de 6m.

Configuration ajoutée : /home/xbmc/.xbmc/userdata/keymaps/keyboard.xml

<keymap>
  <global>
    <keyboard>
      <a mod="ctrl,alt">XBMC.ActivateWindow(MyMusic)</a>
      <b mod="ctrl,alt">XBMC.ActivateWindow(MyVideos)</b>
      <c mod="ctrl,alt">XBMC.ActivateWindow(MyPictures)</c>
      <d mod="ctrl,alt">XBMC.ActivateWindow(MyWeather)</d>
      <!--<f4 mod="alt">XBMC.ActivateWindow(screensaver)</f4>-->
      <tab mod="alt">ContextMenu</tab>
    </keyboard>
  </global>
</keymap>

Lecteur CD / DVD trop bruyant

Le lecteur est très bruyant vu qu'il tourne à vitesse maximum. Ce n'est évidemment pas nécessaire du tout et il suffit de la réduire :

hdparm -E4 /dev/sr0

Et pour éviter les blocages :

sysctl dev.cdrom.lock=0

à mettre par exemple dans /etc/rc.local

Autres liens

Un autre exemple d'HTPC avec le même boîtier et la même carte mère : http://www.silentpcreview.com/forums/viewtopic.php?f=14&t=57944

Updates

Remplacement du boîtier par un MaxInPower Gimli BM1633CMCA

Remplacement des volumes LVM par du ZFS (on linux)

 
contribs/htpc.txt · Dernière modification: 2016/04/25 14:50 par cbellot