Archive for the ‘FreeBSD’ Category

msk0: watchdog timeout – Une solution simple et crade

Friday, January 29th, 2010

Je me suis rendu compte il y a quelques semaines que mon interface réseau (msk0) cessait de fonctionner après un certain temps (jours, parfois des semaines) sous une charge modérée ou importante, tout en inondant le journal système de « msk0: watchdog timeout ». Ce qui est plûtot gênant pour un serveur… Je n’ai malheureusement pas réussi à corriger le problème en désactivant le MSI via l’outil sysctl(8)

Le problème viendrait de :

  1. Une carte de mauvaise qualité (Marvell 88E8053)
  2. Un driver msk(4) peu testé et donc rempli de bugs potentiels

La seule façon de rétablir la connexion est de redémarrer la machine. Ce qui pose problème quand on a accès à la machine en question uniquement par SSH la majorité du temps…  J’ai donc réalisé un petit script (vraiment fait à la vite), faisant office de solution de secours, qui fait automatiquement redémarrer la machine si un watchdog timeout a été détécté. Cela permet de ne pas complètement bloquer l’accès via SSH.

Il suffit donc de lancer ce script en cronjob (effectué par root, bien sûr) :

#!/bin/sh

LOGFILE="/var/log/check_msk0"
DATE=`date`

CLEAN=`echo | grep zero`
LOGDATE=`date "+%b %d"`
TIMEOUTS=`cat /var/log/messages | grep "msk0: watchdog timeout" | tail | grep "$LOGDATE"`

if [ "$TIMEOUTS" = "$CLEAN" ]
then
 echo "$DATE OK, no timeouts." >> $LOGFILE
 echo OK.
else
 echo "$DATE WATCHDOG TIMEOUT, initiating reboot..." >> $LOGFILE
 echo Rebooting in 15 seconds. Press ^C to abort.
 sleep 15
 cp /var/log/messages /var/log/messages.timeout
 echo > /var/log/messages
 /sbin/reboot
fi

Inutile de préciser que j’ai commandé une nouvelle carte réseau, plus adaptée pour un serveur, et que cette solution est vraiment temporaire…

Related Posts:

Petit DT et mises à jour

Friday, December 25th, 2009

Hello there,

Désolé pour la petite indisponibilité d’environ une semaine, la faute à un bloc d’alim qui a rendu l’âme…

Bon, j’en ai en attendant profité pour mettre à jour le système, avec :

  • Une nouvelle alim, et un onduleur, pour ne pas avoir des soucis de FS corrompu
  • Quatre disques de 1.5 TB en RAID10, grâce à ZFS. Ce système de fichiers est réellement génial.
  • FreeBSD 8.0 avec Apache qui tourne dans une jail :-)

Related Posts:

Compiler GoatTracker sous FreeBSD

Saturday, February 28th, 2009

GoatTracker est un tracker produisant de la musique pour le Commodore 64. Il est disponible sous license GNU et est multiplate-forme.

Cependant, il n’a pas été porté sous FreeBSD, bien qu’il fonctionne bien sous Linux. Heureusement, grâce à quelques hacks simples, il est possible d’utiliser GoatTracker sous FreeBSD.

Avant tout, vérifiez que vous avez les ports/packages SDL d’installés, ainsi que GNU Make (“gmake”) différent du BSD Make par défaut (“make”). Il y a quelques différences dans la structure des Makefiles donc il faut utiliser l’un ou l’autre en fonction de ce qu’on compile.

Ensuite, procurez vous GoatTracker à cette adresse : http://covertbitops.c64.org/ (rubrique “Tools”).

Unzippez les sources dans un répertoire spécial crée à cette occasion, et placez vous dedans.

Avant de compiler GoatTracker, il faut compiler 2 outils qui seront nécessaires : datafile et dat2inc.

Placez vous donc dans le répertoire src/bme. Avant de lancer gmake, il faut modifier le Makefile car il est adapté à une machine Linux. Or, les machines Linux n’utilisent quasiment pas le préfixe /usr/local pour les includes. Le Makefile va donc chercher SDL_types.h dans /usr/include, alors qu’il est situé dans /usr/local/include. Pour corriger cela, il suffit d’ajouter ceci aux CFLAGS : -I/usr/local/include. Le makefile étant ici extrêmement simple, rajoutez cela aux deux appels à gcc.

Vous pouvez ensuite lancer la compilation avec gmake. Une fois que c’est terminé, vous devez copier ces deux exécutables produits dans votre $PATH, donc en gros vous devez copier les fichiers datafile et dat2inc dans /usr/local/bin.

Ensuite, placez vous dans le répertoire src. Cette fois, le Makefile est un peu plus complexe, vous devez rajouter -I/usr/local/include à la fin de la ligne CFLAGS= dans le fichier makefile.common. La compilation se passe ensuite sans problèmes.

Vous pouvez enfin jouer avec GoatTracker, l’exécutable étant situé dans le sous dossier linux/ et commencant par gt2. Enfin, voici une preuve que ça fonctionne :

GoatTracker

Related Posts: