Popeye

Popeye est le serveur NAS / multimedia / infrastructure de la maison. Il est volontairement compact mais très costaud en fonctionnalité, d'où le nom Popeye en référence au personnage de dessin animé svelte et costaud.
Popeye

V1

10/2007 : Première carte mère mini itx achetée sur un site d'enchère en ligne auprès d'un revendeur anglais. Elle provient d'une machine industrielle qui scannait des objets. Le bundle était composé d'un boitier métallique sur lequel était vissé la CM, une alimentation de 70 W, un écran LCD 2×20 grand caractère et un scanner de code barre.

Caractéristiques :

  • Carte mère : VIA EPIA 500
  • Processeur : VIA C3@500 MHz
  • Ram : 128 Mo
  • Disque : 320 Go IDE
  • LAN : 100 Mbit/s
  • Distribution : Debian GNU/Linux i386

Le boitier est construit à partir d'une boite métallique achetée en magasin d'électronique : la boite de l'alimentation a été adaptée et vissée à l'aide d'une équerre, le connecteur 220 V déporté sur la façade arrière du boitier.

Façade avant

 

Façade arrière

Pour gagner de la place dans le boitier, j'ai réduit la longueur de la nappe IDE. J'ai déplacé le connecteur femelle afin qu'elle soit la plus courte possible : 4 cm. En remontant la nappe, j'ai, par erreur, installé l'un des connecteurs à l'envers et ne l'ai constaté qu'après avoir branché le disque sur la CM : il n'était pas reconnu par le bios. Par chance, ni le port IDE, ni le disque n'ont subit de dégâts suite à cette bourde. En re-démontant le connecteur et en le mettant dans le bon sens, tout fonctionnait comme attendu. :whew:

 Nappe IDE raccourcie

J'ai fixé le disque dur à l'aide de très gros élastique afin d'absorber les vibrations. Les supports de ces élastiques étaient constitués d'une tige filetée pliée en U à l'aide d'un brûleur à gaz de camping. Ce système de fixation n'est pas facile d'utilisation mais permet d'exploiter au maximum la place du boitier tout en limitant le bruit.

Suspension du disque

Pour rendre l'ensemble plus discret et améliorer mon WAF, j'ai fabriqué un support métallique aux dimensions du boitier pour le suspendre sous le bureau.

Support sous le bureau

06/2008 : j'ai superposé à l'aide de plaques métallique mon nouveau disque dur (1 To en SATA) avec l'actuel (320 Go IDE) afin d'optimiser l'espace disponible. J'ai conservé le système de suspension avec les élastiques.

Aperçu des tiges filetées

 

Ensemble monté

06/2008 : les températures élevées :hot: à l'intérieur du boitier m'ont conduit à ouvrir la façade avant avec une grille et un ventilateur Noctua de 80 mm. Le boitier de l'alimentation a également été percé pour améliorer la circulation de l'air 8-).

Essai d'un ventilateur supplémentaire de refroidissement

 

Vue du dessus avec la façade remplacée

 

Aperçu de la grille de remplacement

08/2008 : la carte Ethernet d'origine étant une 100 Mbit/s, pour m'amuser un peu avec de la configuration réseau, j'ai ajouté une carte réseau Gbit au format PCI : une D-Link DGE-528T.

Carte réseau D-Link DGE-528T

J'ai dû adapter le système de fixation et le boitier car celui est loin d'être standard ;) : j'ai fait une ouverture à la dremel dans la face arrière et percé un trou dans le bracket de la carte réseau pour visser l'ensemble (à droite sur la photo ci dessous).

Vue de derrière avec la nouvelle carte Gb

2e monture

11/2009 : je profite d'un changement de carte mère de Mimosa pour récupérer la carte mère Via EPIA SP130000 et le boitier.

J'ai repris la carte Gb et l'ai installée sur un riser PCI gauche : celle ci est maintenant parallèle à la CM et me permet de gagner de la place verticalement afin de pouvoir installer les disques dur suspendus au dessus.

Riser PCI gauche  

Montage de la carte Gb horizontalement

Pour fixer le tout, j'ai ajouté un cadre métallique pour suspendre les disques durs via des élastiques et remplacer la façade avant par une grille afin d'améliorer la circulation d'air.

Suspension des disques

L'ensemble monté est très compact, il n'y a pas beaucoup d'espace pour la circulation d'air…

Vue de devant sans la grille

 

Vue de derrière

03/2010 : j'ai installé un dongle USB Pinnacle PCTV 2000e. Celui ci est un double tuner TNT permettant d'enregistrer du DVB-T. Le service mythbackend qui tournait sur Olive a également été déplacé sur Popeye afin qu'il prenne une place centrale dans mon infrastructure.

Dongle USB Pinnacle PCTV 2000e double tuner dvb-t

Voici les logs du noyau :

[   11.669176] dvb-usb: found a 'Pinnacle PCTV 2000e' in cold state, will try to load a firmware
[   11.750393] usb 1-1: firmware: direct-loading firmware dvb-usb-dib0700-1.20.fw
[   12.323901] dvb-usb: found a 'Pinnacle PCTV 2000e' in warm state.
[   12.324161] dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.
[   12.324425] DVB: registering new adapter (Pinnacle PCTV 2000e)
[   12.642151] usb 1-1: DVB: registering adapter 0 frontend 0 (DiBcom 7000PC)...
[   12.851189] dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.
[   12.851493] DVB: registering new adapter (Pinnacle PCTV 2000e)
[   13.046972] usb 1-1: DVB: registering adapter 1 frontend 0 (DiBcom 7000PC)...
[   13.260600] input: IR-receiver inside an USB DVB receiver as /devices/pci0000:00/0000:00:14.0/usb1/1-1/rc/rc0/input15
[   13.261157] rc rc0: IR-receiver inside an USB DVB receiver as /devices/pci0000:00/0000:00:14.0/usb1/1-1/rc/rc0
[   13.261437] dvb-usb: schedule remote query interval to 50 msecs.
[   13.261460] dvb-usb: Pinnacle PCTV 2000e successfully initialized and connected.
[   13.262131] usbcore: registered new interface driver dvb_usb_dib0700

Grâce aux tuners virtuel de mythtv, j'ai configuré 3 tuners virtuels par tuner physique. Ainsi, l'enregistrement de 2 émissions sur des chaines différentes mais sur le même transpondeur n'utilise qu'un seul tuner physique.

03/2010 : j'ai installé le LCD initialement destiné au NSLU2 sur la façade avant. Un bargraphe représentant l'évolution du load ainsi qu'un bandeau déroulant avec l'uptime sont affichés via LCDd.

Ajout du lcd en façade

 

En marche

07/2010 : malheureusement, le boitier est trop petit et l'ensemble chauffe beaucoup :hot:? Les disques durs sont à 50°C. J'ai dû installer un ventilateur supplémentaire suspendu au dessus de l'ensemble en attendant de trouver mieux.

Il fait chaud !

Nouveau boitier, Smart Teck EZ Plug, le système de rack pour les disques dur est très pratique. Côté flux d'air, il est équipé d'un ventilateur de 80 mm en façade en aspiration et de 2 petits de 60 mm à l'arrière en extraction.

Face avant ouverte avec les racks de disque

 

Vue de côté

 

3 ventillos : 1x80mm + 2x60mm

Malgré les ventillateurs, les températures restents trop élevées et les 2 ventillateurs de 60 mm bruyant. En effet, les racks de disques durs ne permettent pas une bonne circulation de l'air et ces derniers restent à une température de 50°C environ.

Je ne suis pas satisfait et renvoi le boitier. Retour à la case départ…

07/2010 : nouvel essai avec un Silverstone - Sugo SG05B. Ce boitier est plus simple que le précédent : il ne dispose pas de rack, l'alimentation est au plus grosse en volume, par contre, il est équipé que d'un ventilateur en aspiration de 120 mm en façade, l'alim en possède également un en aspiration monté sur sa face inférieure.

Façade avant

  Vue arrière

J'ai enlevé le berceau intérieur destiné à supporter un lecteur DVD et un dd 2.5“ et l'ai remplacé par une fixation des disques durs via des plaques de métal afin de les empiler verticalement. Le tout est suspendu avec de la ficelle à rôti et gros élastique.

Boitier avec suspension des disques

 

Gros plan

Pour diminuer le bruit de souffle du ventilateur de 120 mm, j'ai installé un adaptateur entre la prise d'alimentation du ventilateur et la carte mère sur lequel se trouve une résistance sur le câble rouge (+5V) permettant de diminuer la tension d'alimentation, ainsi il tourne moins vite. L'avantage des grands ventilateurs est que même à vitesse réduite, ils restent efficaces. A contrario, les petits doivent tourner vite pour la même efficacité et, plus ils tournent vite, plus ils sont bruyants.

Résistance sur l'alimentation du ventilateur

Le tout est désormais silencieux et les disques sont revenus à 35°C environ.

12/2010 : les récepteurs IR et télécommande de la première Xbox ne sont pas cher et peuvent être adaptés pour fonctionner sur le port USB d'un PC. Récepteur IR d'Xbox + télécommande

Le connecteur du dongle USB est une version modifiée de l'USB avec les 4 fils traditionnels (VCC, GND, D+ et D-) auxquels s'ajoutent une fil pour piloter le retour de force des manettes de jeu. Il est possible de souder un câble USB “normal” directement sur le circuit imprimé en ne connectant que les 4 fils habituels.

Schéma de câblage du récepteur

Assignation des broches :

  1. Rouge = +5V
  2. Blanc = Data -
  3. Vert = Data +
  4. Jaune = Retour de force ⇒ Inutilisé
  5. Noir = Masse, 0V DC

J'ai également dessoudé le récepteur infrarouge et l'ai installé au bout de plusieurs centimètres de fils afin de le déporter et le rendre plus discret. Une fois terminé, le récepteur est reconnu par le noyau avec le module lirc_atiusb. En configurant lirc, je pilote mpd via irexec et mpc (client en ligne de commande pour mpd) pour jouer de la musique pour le garage. :music:

Fichier de mapping des touches :

/etc/lirc/lircd.conf
begin remote
 
  name  Xbox_Remote
  bits            8
  eps            30
  aeps          100
 
  one             0     0
  zero            0     0
  gap          163983
  toggle_bit_mask 0x0
 
      begin codes
          left                     0xA9
          up                       0xA6
          right                    0xA8
          down                     0xA7
          enter                    0x0B
          1                        0xCE
          2                        0xCD
          3                        0xCC
          4                        0xCB
          5                        0xCA
          6                        0xC9
          7                        0xC8
          8                        0xC7
          9                        0xC6
          0                        0xCF
          menu                     0xF7
          display                  0xD5
          rewind                   0xE2
          ffwd                     0xE3
          play                     0xEA
          pause                    0xE6
          stop                     0xE0
          skip-                    0xDD
          skip+                    0xDF
          title                    0xE5
          info                     0xC3
          back                     0xD8
      end codes
 
end remote

Configuration d' irexec :

~/.lircrc
# play button
begin
prog = irexec
button = play
delay = 2
config = mpc toggle
end
 
# right button
begin
prog = irexec
button = right
delay = 2
config = mpc next
end
 
# skip+ button
begin
prog = irexec
button = skip+
delay = 2
config = mpc next
end
 
# skip- button
begin
prog = irexec
button = slip-
delay = 2
config = mpc prev
end
 
# rewind button
begin
prog = irexec
button = rewind
delay = 2
config = mpc prev
end
 
[...]
 
# up button
begin
prog = irexec
button = up
delay = 2
config = mpc volume +7
end
 
# down button
begin
prog = irexec
button = down
delay = 2
config = mpc volume -7
end

06/2011 : uptime de 320 jours !

Uptime 320 jours

Il est temps de faire des mises à jours logicielles et matérielles.

Upgrade CM + DD

06/2011 : changement de la CM et des disques.

Caractéristiques :

  • Processeur : Intel Atom 330@1.6 GHz
  • Ram : 2×1 Go
  • Disques :
    • Samsung - Spinpoint F3 : 1 To, 7200 t/min, 32 Mo, Serial ATA 2.0
    • Western digital - Caviar Black : 1 To, 7200 t/min, 32 Mo, Serial ATA 2.0
    • Western digital - Caviar Black : 1 To, 7200 t/min, 64 Mo, Serial ATA 3.0
  • LAN :
    • 100 Mbit/s intégré à la CM
    • 1 Gbit/s avec une carte PCI D-Link DGE-528T
  • Distribution : Debian GNU/Linux i386

Le serveur tourne toujours sous Debian, les disques sont montés en raid5 avec du lvm et formaté en XFS pour la partition de donnée et ext3 pour le reste.

Côté boitier, j'ai dû revoir le système de fixation : sur les pattes métallique de fixations des disques, j'ai percé des nouveaux des trous pour le 3e disque. Le poids des 3 disques durs est devenu alors trop important pour être supporté par les élastiques et ils touchent désormais la CM. Après plusieurs essais, j'ai alors remplacé les élastiques par des profilés en forme de cornière métalliques posés sur le châssis du boitier sur lesquels sont fixés les disques avec des vis + écrous papillon. Ainsi il n'y a plus d'abaissement de l'ensemble. Par contre, le montage / démontage est devenu plus complexe : il n'y a pas de place pour passer les doigts, l'ensemble est plutôt lourd et ne doit surtout pas reposer sur la CM…

J'ai également ajouté des patins de feutres aux points de contacts entre les profiles et le boitier pour réduire le bruit de résonnance émis par la rotation des disques.

Système de fixation 100% métal

 

Vue du dessus

L'ensemble monté est encore plus compact qu'avec les 2 disques. Le ventilateur de 120 mm en façade force bien un flux d'air qui permet de maintenir une température raisonnable autour de 35°C.

Vue gauche   Vue droite

Voici un graphe des températures des 3 disques durs au cours de l'année 2016. On constate que la température est plutôt constante autour de 32°C et 37°C (dépendant du modèle de disque). Le saut en avril correspond à un passage d'aspirateur ;).

Evolution de la température des disques durs au cours de l'année 2016

08/2013 : j'ai ajouté un dongle usb Wifi TP-link afin d'en faire Access Point Wifi.

Le démon hostapd permet de gérer l'interface réseau et de configurer aisément la sécurité en WPA2 et et un filtrage sur adresse mac.

Clé USB Wifi TP-Link

Installation

Brancher la clé USB et consulter les logs du noyau pour vérifier sa reconnaissance :

sudo dmesg
...
[ 4532.631263] usb 1-5.4.2: new high-speed USB device number 5 using xhci_hcd
[ 4532.754387] usb 1-5.4.2: New USB device found, idVendor=0cf3, idProduct=9271
[ 4532.754403] usb 1-5.4.2: New USB device strings: Mfr=16, Product=32, SerialNumber=48
[ 4532.754413] usb 1-5.4.2: Product: USB2.0 WLAN
[ 4532.754421] usb 1-5.4.2: Manufacturer: ATHEROS
[ 4532.754429] usb 1-5.4.2: SerialNumber: 12345
[ 4532.963060] usb 1-5.4.2: ath9k_htc: Firmware ath9k_htc/htc_9271-1.4.0.fw requested
[ 4532.963114] usb 1-5.4.2: firmware: failed to load ath9k_htc/htc_9271-1.4.0.fw (-2)
[ 4532.963201] usb 1-5.4.2: Direct firmware load for ath9k_htc/htc_9271-1.4.0.fw failed with error -2
[ 4532.963206] usb 1-5.4.2: ath9k_htc: Firmware htc_9271.fw requested
[ 4532.963230] usb 1-5.4.2: firmware: failed to load htc_9271.fw (-2)
[ 4532.963292] usb 1-5.4.2: Direct firmware load for htc_9271.fw failed with error -2
[ 4532.963295] usb 1-5.4.2: no suitable firmware found!
[ 4532.963529] usb 1-5.4.2: ath9k_htc: USB layer deinitialized
[ 4532.963602] usbcore: registered new interface driver ath9k_htc

Ici, le firmware n'est pas installé car il est non-free. Pour l'installer :

sudo apt install firmware-atheros

Débrancher et rebrancher la carte :

sudo dmesg
...
[ 4784.790658] usb 1-5.4.2: new high-speed USB device number 7 using xhci_hcd
[ 4784.913336] usb 1-5.4.2: New USB device found, idVendor=0cf3, idProduct=9271
[ 4784.913352] usb 1-5.4.2: New USB device strings: Mfr=16, Product=32, SerialNumber=48
[ 4784.913362] usb 1-5.4.2: Product: USB2.0 WLAN
[ 4784.913370] usb 1-5.4.2: Manufacturer: ATHEROS
[ 4784.913378] usb 1-5.4.2: SerialNumber: 12345
[ 4784.917554] usb 1-5.4.2: ath9k_htc: Firmware ath9k_htc/htc_9271-1.4.0.fw requested
[ 4784.918922] usb 1-5.4.2: firmware: direct-loading firmware ath9k_htc/htc_9271-1.4.0.fw
[ 4785.214673] usb 1-5.4.2: ath9k_htc: Transferred FW: ath9k_htc/htc_9271-1.4.0.fw, size: 51008
[ 4785.471483] ath9k_htc 1-5.4.2:1.0: ath9k_htc: HTC initialized with 33 credits
[ 4785.799849] ath9k_htc 1-5.4.2:1.0: ath9k_htc: FW Version: 1.4
[ 4785.799854] ath9k_htc 1-5.4.2:1.0: FW RMW support: On
[ 4785.799857] ath: EEPROM regdomain: 0x809c
[ 4785.799859] ath: EEPROM indicates we should expect a country code
[ 4785.799861] ath: doing EEPROM country->regdmn map search
[ 4785.799863] ath: country maps to regdmn code: 0x52
[ 4785.799865] ath: Country alpha2 being used: CN
[ 4785.799867] ath: Regpair used: 0x52
[ 4785.822811] ieee80211 phy0: Atheros AR9271 Rev:1
[ 4785.828926] ath9k_htc 1-5.4.2:1.0 wlxf81a671b0c56: renamed from wlan0

Liste des services :

06/2016 : depuis plusieurs mois, les logs se remplissent d'erreurs sur la communication SATA, j'ai changé les nappes, intervertit les connecteurs, essayé différentes options de noyau pour abaisser la vitesse du bus mais rien à faire :'(

[83368.466693] ata3.00: exception Emask 0x10 SAct 0x0 SErr 0x400000 action 0x6 frozen
[83368.466739] ata3.00: irq_stat 0x08000000, interface fatal error
[83368.466765] ata3: SError: { Handshk }
[83368.466789] ata3.00: failed command: WRITE DMA EXT
[83368.466820] ata3.00: cmd 35/00:e8:ff:5a:4c/00:01:1f:00:00/e0 tag 4 dma 249856 out
[83368.466823]          res 50/00:00:fe:5a:4c/00:00:1f:00:00/e0 Emask 0x10 (ATA bus error)
[83368.466889] ata3.00: status: { DRDY }
[83368.466917] ata3: hard resetting link
[83368.784115] ata3: SATA link up 1.5 Gbps (SStatus 113 SControl 310)
[83368.785584] ata3.00: configured for UDMA/100
[83368.785609] ata3: EH complete

L'USB est également devenu instable, de nombreuses erreurs noyaux sont loguées et finissent pas bloquer Popeye :

[508921.204450] pin.pl          D f3ff8f74     0  1807   1790 0x00000000
[508921.204460]  f3ff8d50 00200082 c102e5dc f3ff8f74 00000000 00000000 c102d2b9 c1484ac0
[508921.204475]  f3ff8f00 c1484ac0 f3ff8d50 c12c4721 b9cb27bb 0001ce3e 0001ce3e f4274470
[508921.204490]  0001ce3e c1484ac0 f3ff8f04 c1484ac0 00000000 002744a4 f79c0ac0 f79c0ac0
[508921.204505] Call Trace:
[508921.204513]  [<c102e5dc>] ? pick_next_task_fair+0xa5/0xad
[508921.204522]  [<c102d2b9>] ? finish_task_switch+0x6d/0x94
[508921.204530]  [<c12c4721>] ? __schedule+0x594/0x5a4
[508921.204538]  [<c102adde>] ? test_tsk_need_resched+0xa/0x13
[508921.204547]  [<c12c4eab>] ? __mutex_lock_common.isra.5+0xdd/0x12d
[508921.204555]  [<c12c4dc2>] ? mutex_lock+0x15/0x21
[508921.204565]  [<f89265c0>] ? acm_write_bulk+0x5a/0x5a [cdc_acm]
[508921.204574]  [<c11d5af2>] ? tty_port_close_start+0xec/0x149
[508921.204584]  [<f892773c>] ? acm_tty_close+0x2a/0x7b [cdc_acm]
[508921.204592]  [<c11d030a>] ? tty_release+0x169/0x3f7a
[508921.204600]  [<c102d2b9>] ? finish_task_switch+0x6d/0x94
[508921.204608]  [<c12c4721>] ? __schedule+0x594/0x5a4
[508921.204615]  [<c12c8674>] ? do_page_fault+0x32f/0x35e
[508921.204625]  [<c10ced03>] ? fput+0xd5/0x160
[508921.204634]  [<c10ccb18>] ? filp_close+0x52/0x58
[508921.204641]  [<c10ccb74>] ? sys_close+0x56/0x89
[508921.204649]  [<c12c9fdf>] ? sysenter_do_call+0x12/0x12

Cela se traduit par un blocage des processus utilisant l'USB, une augmentation du load et finalement une pénurie de ressources. J'ai atteint un load de 35 en 24h avec une charge CPU à ~0 et impossible de se connecter en ssh :dead:

Augmentation du load à cause du blocage de l'USB

CM double Lan

06/2016 : j'ai trouvé une nouvelle carte mère avec 2 cartes réseaux intégrées à un prix raisonnable =).

Caractéristiques :

  • Carte mère : Gigabyte GA-N3150N-D3V
  • Processeur : Intel Celeron N3150@1.6 GHz
  • Carte graphique : Intel HD Graphics
  • Connecteurs disques : 4×SATA 3.0
  • Ram : 2×2 Go
  • Disques :
    • Samsung - Spinpoint F3 : 1 To, 7200 t/min, 32 Mo, Serial ATA 2.0
    • Western digital - Caviar Black : 1 To, 7200 t/min, 32 Mo, Serial ATA 2.0
    • Western digital - Caviar Black : 1 To, 7200 t/min, 64 Mo, Serial ATA 3.0
  • LAN :
    • 2×1 Gbit/s intégrés à la CM
  • Distribution : Debian GNU/Linux i386

J'ai opté pour une CM avec 2 cartes réseaux intégrées pour libérer le port PCI précédemment occupé par la carte réseau Gb afin d'y mettre un jour une autre carte (peut être une carte DVB-S ?).

Banc d'essai :

Test de la Gigabyte GA-N3150N-D3V

Quelques photos du serveur remonté. J'ai mis un repère de couleur (rouge / jaune) sur les cartes réseaux ainsi que sur les câbles correspondant pour ne pas les mélanger :

  • jaune vers la freebox pour le réseau en 100 Mbits
  • rouge vers la tour en Gbit
Vue arrière de la Gigabyte GA-N3150N-D3V

Le processeur est censé pouvoir fonctionner en 64bit, il faut que je me motive à reinstaller ma Debian complétement pour le prendre en compte.

07/2017 : j'ai enfin pris le temps de ré-installer Popeye : je suis passé sur une Debian 9 Stretch en adm64.

Voici mes différentes notes vis à vis de la configuration du NFS pour être compatible OS X ou les optimisations mise en oeuvre (RAID, Réseau, scaling de fréquence, affinité d'IRQ…)