Christophe Nowicki

June 12, 2008

Build NXC programs under Debian GNU/Linux

This document explain how to build and load an Not eXactly C program for the Lego Mindstoms NXT Robot under Debian GNU/Linux.

Introduction

Lego does not provide tools for building programs for the NXT under Linux.
I don’t like Bricxcc, because :

  • It looks like Visual Studio ;
  • runs only on Microsoft Windows ;
  • I’m more familiar with VIM, make and GCC ;0)

Install the compiler

Ths NXC compiler can be downloaded on the Bricxcc web site. The compiler is writen in Pascal.

You need to install the FreePascal Compiler and build the compiler :


$ wget http://downloads.sourceforge.net/bricxcc/nbc-1.0.1.b34.src.tgz
# apt-get install fp-compiler fp-units-fcl fp-units-base
$ mkdir nbc
$ tar xzf nbc-1.0.1.b34.src.tgz -C nbc
$ cd nbc/nxt
$ make -f nbclinux.mak
$ ./nbc
Next Byte Codes Compiler version 1.0.1.b34 (1.0.1.34, built Thu Jun 12 21:21:22 CEST 2008)
Copyright (c) 2006, John Hansen
Use "nbc -help" for more information.
# mv nbc /usr/local/bin/

Hello world

Let’s try to build and send a simple hello world program to the robot :


$ cat > hello.nxc < task main() {
TextOut(0, 0, "Hello world!");
Wait(1000);
}
EOF
$ nbc hello.nxc -O=hello.rxe

USB Transfert

In order to send the program to the robot, you need the Talk 2 NXT program : T2N.

Warning: on amd64, you need to patch the source code.


# apt-get install g++ libusb-dev
$ wget http://www-verimag.imag.fr/~raymond/edu/lego/t2n/t2n-0.2.src.tgz
$ wget http://www.csquad.org/wp-content/t2n_amd64.diff
$ cd t2n-0.2.src
$ patch -p1 < ../t2n_amd64.diff
patching file src/usbmisc.cc
patching file src/usbmisc.h
$ make
# mv obj/t2n /usr/local/bin/

Now you can plug, turn on your NXT and send the program via the USB port.


$t2n -i
#### NXT INFOS ###############
protocol version=1.124 firmware version=1.1
NXT Name: NXT
Blutooth address: 16:53:06:37:ffffffbc:00
Blutooth signal: 0
Free user flash: 44416
$t2n -v -put hello.rxe
nxt brick found, usb initialized
testing for existing file "hello.rxe"
deleting for existing file "hello.rxe"
upload hello.rxe (376 bytes) from /goinfre
that's all folks...

That’s all folks…

Filed under: Debian, NXT, NXC — cscm @ 11:50 pm

February 16, 2008

Mise en place d’un système de vidéo surveillance avec ZoneMinder

ZoneMinder

Au cours de l’année dernière, j’ai mis en place un système de vidéo-surveillance à mon domicile, ce système se base sur un serveur sous Debian GNU/Linux et le logiciel libre Zone Minder.

Au cours de cette mise en place, j’ai acquis une expèrience sur les technologies de vidéo surveillance.

Suite à de nombreuses demandes de collèges et amis, je tiens à partager cette expèrience :

Mise en place d’un système de vidéo surveillance avec ZoneMinder

Filed under: Debian, Hardware, ZoneMinder — cscm @ 10:58 pm

May 10, 2006

Configuration automatique des interfaces réseaux sous Debian GNU/Linux.

Le Saint Graal de l’informaticien en déplacement consiste en une solution technique pour configurer automatiquement l’ensemble des interfaces réseaux (Ethernet + Wifi) sous Debian GNU/Linux.

Problèmatique

laptop Je dispose d’un portable évoluant parmis plusieurs réseaux informatiques :

  • le travail
  • la maison
  • etc.

La configuration réseau de ses environnements est diffèrente ( type de liaison, routeur par défaut, netmask, etc…) et demande la reconfiguration des interfaces à chaque déplacement.

Il s’agit d’une tâche pénible et laborieuse, c’est pour cela que je me interessé au problème afin de trouver une solution simple, ne nécessitant aucune intervention de ma part.

Celle-ci ne se base pas sur le logiciel NetworkManager, car ce dernier ne permet pas encore de détecter automatiquement sur quel réseau se trouve la machine.

Solution

Ma solution se base sur plusieurs logiciels diffèrents ayant chacun un rôle bien définit :

  • wpasupplicant : daemon prennant en charge le réseau Wifi (détection, configuration, authentification et roaming)
  • ifplugd : système de détection des interfaces réseaux, permettant de détecter le branchement d’un cable rj45 ou l’apparition d’un point d’accés Wifi.
  • guessnet : système de détection réseau basé sur l’utilisation de trames ARP
  • resolvconf : système de gestion des serveurs de noms
  • ifupdown : scripts de configuration réseau de la distribution Debian

Interfaces réseau

Mon portable dispose de deux interfaces réseaux :

  • eth0 : interface ethernet prise en charge par le driver r8169.
  • eth1 : interface wifi prise en charge par le driver ipw2200.

Il vaut mieux disposer de drivers libres (exit ndiswrapper et co … ;0)

Installation

L’installation des pâquets nécessaires est extrêment simple à l’aide de apt-get ou d’aptitude :

#aptitude install wpasupplicant ifplugd guessnet resolvconf

Emplacement des fichiers de configuration

L’ensemble de la configuration réseau se trouve dans deux fichiers :

  • /etc/network/inerfaces : configuration des toutes les interfaces
  • /etc/wpa_supplicant.conf : spécificitées liées aux réseaux sans fils

Configuration

Il faut tout d’abord configurer wpasupplicant afin que celui-ci soit lancé au démarrage de votre machine, la procédure est diffèrente en fonction de la version de votre distribution :

  • Sarge (version 0.3.8)
    Editez le fichier /etc/default/wpasupplicant de la manière suivante :

    # /etc/default/wpasupplicant

    # WARNING! Make sure you have a configuration file!

    ENABLED=1

    # Useful flags:
    # -D Wireless Driver
    # -i Interface (required, unless specified in config)
    # -c Configuration file
    # -d Debugging (-dd for more)
    # -w Wait for interface to come up

    OPTIONS=”-w -i eth1 -D ipw -c /etc/wpa_supplicant.conf”

    Activez le daemon, indiquez le nom de votre interface réseau et le nom du driver (wpa_supplicant -h pour obtenir la liste des drivers disponibles).
    Il faut ensuite configurer les spécificités de vos réseaux Wifi à l’aide du fichier /etc/wpa_supplicant/wpa_supplicant.conf en vous basant sur l’exemple fourni par le paquet Debian:

    # gunzip -c /usr/share/doc/wpasupplicant/examples/wpa_supplicant.conf.gz > /etc/wpa_supplicant.conf

    Une fois la configuration des réseaux Wifi déclarée, il suffit de lancer le programme à partir du script fourni dans /etc/init.d.

  • Autres (version 0.4.8)
    TODO

Nous allons ensuite passer à la configuration de toutes les interfaces dans le fichier /etc/network/interfaces.

Il faut indiquer à ifplugd de prendre en charge les deux interfaces de la manière suivante :

# ifplugd
allow-hotplug eth0 eth1

Puis décrire le mapping des interfaces réseaux avec le script guessnet-ifupdown.

# Interface Mapping
mapping eth0 eth1
        script guessnet-ifupdown
        map default: unknown

Ensuite indiquer les spécificités de chaque réseau :

iface home inet static
        address 192.168.42.42
        netmask 255.255.255.0
        gateway 192.168.42.254
	
        dns-search csquad.lan
        dns-nameservers 192.168.42.3 192.168.17
	
        test1 peer address 192.168.42.253 00:12:17:07:C2:C9
	
iface work inet static
        address 10.0.0.101
        netmask 255.255.255.0
        gateway 10.0.0.1
	
        dns-search easter-eggs.fr
        dns-nameservers 10.0.0.2 10.0.0.20
	
        test1 peer address 10.0.0.1 00:50:22:8b:9c:d2
	
# DHCP par défaut
iface unknown inet dhcp

Les directives intéressantes sont :

  • dns-* : la configuration des serveurs DNS via resolvconf.
  • test* : les conditions permettant à guessnet d’identifier le réseau. La plupart du temps, il s’agit de l’adresse MAC du routeur par défaut.

Test de fonctionnement

Après la configuration, il ne vous reste plus qu’a tester l’ensemble en :

  • Branchant/Débranchant le câble réseau.
  • Activant/Désactivant le point d’accès Wifi.

Si tout se passe bien, vos interfaces réseaux seront configurées automatiquement. Dans le cas contraire, vous trouverez de nombreuses informations dans syslog, vous permettant d’identifier le problème.

Filed under: Debian — cscm @ 9:21 pm

April 8, 2006

scripts/mod/modpost: No such file or directory

Si vous avez ce message d’ erreur lors de la compilation d’un module Kernel (nvidia, pwc, etc…) avec un noyau Debian “Sid” dont la version est supèrieur à 2.6.14 :

/bin/sh: scripts/mod/modpost: No such file or directory

Il faut compiler les sources de votre noyau à l’aide de make-kpkg et de l’option build make-kpkg build et non plus comme avant avec l’option configure

Ce thread sur la mailing liste de fglrx explique ce problème.

Filed under: Debian — cscm @ 8:56 am

April 3, 2006

Publication de sites web avec mod_dnssd et Apache2

Je suis actuellement en train de travailler avec le support du protocole Rendez-vous (alias Zeroconf) sous GNU/Linux pour pouvoir configurer de manière automatique l’ensemble des services qui sont à ma disposition. Ce protocole serait pour moi la meilleure solution pour ne pas à avoir à reconfigurer mon portable lorsque je suis en déplacement.
L’objectif de ce billet est d’expliquer comment publier un site web à l’aide du protocole Zeroconf.

Zeroconf

Zeroconf est le nom d’un ensemble de technologies permettant à plusieurs ordinateurs de communiquer sans configuration.
Le but est d’obtenir un réseau IP fonctionnel sans dépendance d’une infrastructure (serveur DHCP, serveur DNS, etc.) ou d’une expertise réseau. L’ensemble des ces technologies sont implémantées sous Linux par le projet Avahi.

mod_dnssd

Le module mod_dnssd permet d’intégrer le support de Zeroconf dans Apache2 et de publier par l’intèrmédiaire d’Avahi l’ensemble des sites disponibles sur le serveur.

Installation du module

Tout d’abord vous avez besoin d’Avahi :

# aptitude install avahi

Des biblithèques de developpement d’Apache2 :

# aptitude install apache2-dev

Télécharger les sources du modules sur le site web de l’auteur :

$ wget http://0pointer.de/lennart/projects/mod_dnssd/mod_dnssd-0.4.tar.gz

Compiler et installer le module :

$ tar xzf mod_dnssd-0.4.tar.gz
$ cd mod_dnssd-0.4
$ ./configure && make
# make install

Le module se retrouve dans le répertoire : /usr/lib/apache2/modules/

Configuration d’Apache

Pour publier, un site web il faut activer la publication dans le fichier de configuration d’Apache :

DNSSDEnable On

Pour publier une URL, il suffit d’indiquer son nom à l’aide de la directive DNSSDServiceName :

<location /foobar>
DNSSDServiceName “Documentation”
</location>

Vous pouvez aussi publier des flux RSS en précisant le type de services :

<Location /blog.cgi?rss>
DNSSDServiceName “The blog”
DNSSDServiceTypes _rss._tcp
</Location>

Exploitation

Vous pouvez vérifier que les sites ont bien été publié à l’aide d’utilitaire avahi-discover.
Filed under: Debian — cscm @ 10:00 pm

March 4, 2006

Munin, une alternative simple à Cacti?

Cela fait près d’un an et demi que j’utilise le logiciel Cacti pour monitorer l’activité réseau. Aussi bien dans le cadre de mon activité professionnelle que pour mon usage personnel. Mais j’ai récement découvert une alternative sérieuse : Munin. Celui-ci présente de nombreux avantages par rapport à Cacti et mérite d’être plus connue.

Les faiblesses de Cacti

A première vue, Cacti semble être le logiciel de monitoring réseau parfait, le rendu graphique est vendeur, l’installation et la prise en main est simple. Mes principales reproches concernnent la configuration des graphiques personnalisers, que je trouve beaucoup trop complexe. Effectiffment après avoir configuré les graphiques basiques ( utilisation processeur, mémoire, disque etc… ), il est très difficile d’ajouter ses propres graphiques. Cette partie du logiciel est bien trop complexe, les nombres d’extensions disponibles est trop faible et il faut par conséquent passer beaucoup de temps sur la personnalisation des graphiques. C’est pour cela qu’après avoir installer Munin, je regrette de ne pas l’avoir découvert plutôt, cela m’aurait économisé quelques heures de sommeil précieuses ;0)

Présentation de Munin

munin@home Fonctionnalités:

  • Simplicité
  • Interface web de consutation
  • Architecture client/serveur
  • Support de RRDTool, pour la génération de graphiques
  • Très nombreux plugins disponible
  • Envoi d’alertes vers Nagios
  • Support du protocole SNMP
  • Détection automatique des services présents sur la machine.

Une démonstration des fonctionnalité du logiciel est disponible à l’adresse suivante : http://munin.ping.uio.no/

Installation du serveur

Le serveur est décomposé en deux paquets dans Debian :

  • munin : le serveur de monitoring
  • munin-node : l’agent de monitoring et les diffèrents plugins

Pour l’installation d’un serveur minimal vous avez besoin d’installé le paquet munin (l’installation du paquet munin-node sera nécessaire dans le cas où vous voulez monitorer une machine à l’aide du protocole SNMP).

#aptitude install munin munin-node

L’ensemble des fichiers de configuration se trouve dans le répertoire /etc/munin:

  • munin.conf : configuration du serveur
  • munin-node.conf : configuration de l’agent
  • plugin-conf.d : répertoire des fichiers de configuration des plugins
  • plugins : répertoire des plugins activé ( la liste des plugins disponible se trouve dans /usr/share/munin/plugins)
  • templates : modèles des pages web pour l’interface web

Le processus de récupèration des données est réalisé par la commande munin-cron toutes les 5 minutes :

*/5 * * * * munin if [ -x /usr/bin/munin-cron ]; then /usr/bin/munin-cron; fi

Pour monitorer une machine, il suffit d’ajouter une entrée dans le fichier de configuration du serveur ( munin.conf ) :

[host.domain.name]
address 192.168.42.42 # l’adresse IP ou le nom DNS de la machine

Pour activer l’accés à l’interface web pour visionner les statistiques, il faut rendre le répertoire /var/www/munin accessible à l’aide du serveur Web Apache :

munin:/etc/apache/conf.d# cat munin.conf
<virtualhost munin>
ServerName munin.csquad.lan
ServerAlias munin.csquad.lan

ErrorLog /var/log/apache/munin/error.log
CustomLog /var/log/apache/munin/access.log common

DocumentRoot /var/www/munin
</virtualhost>

Installation des clients

Sur chaque client, il suffit d’installer le paquet munin-node :

#aptitude install munin-node

Modifier les régles d’accès dans le fichier de configuration /etc/munin/munin-node.conf :

allow ^192\.168\.42\.21$ #adresse du serveur

L’ensemble des services disponibles sur la machine sont détectés par la commande munin-node-configure :

# munin-node-configure –suggest | grep yes
cpu | no | yes
df | no | yes
df_inode | no | yes
entropy | no | yes
exim_mailqueue | no | yes
exim_mailstats | no | yes
forks | no | yes
if_ | no | yes +eth0 +eth1
if_err_ | no | yes +eth0 +eth1
interrupts | no | yes

Le paquet debian, active les plugins pour les services détectés en créant les liens dans le répertoire /etc/munin/plugins :

$ ls -l /etc/munin/plugins
lrwxrwxrwx 1 root root 28 Feb 20 18:14 cpu -> /usr/share/munin/plugins/cpu
lrwxrwxrwx 1 root root 27 Feb 20 18:14 df -> /usr/share/munin/plugins/df

Vous pouvez désactiver un plugin en supprimant son lien symbolique et l’activer en créant un lien symbolique :

# ln -s /usr/share/munin/plugins/apache_volume /etc/munin/plugins/

Simple, non?

Filed under: Debian, Perl — cscm @ 9:04 pm

February 7, 2006

Jpegoptim, un petit programme sympa pour optimiser la taille de vos photos numériques

J’aimerais vous faire découvrir ce petit programme qui comme son nom l’indique, permet d’optimiser la taille des images au format Jpeg.
Jpegoptim est un utilitaire permettant de réduire la taille des fichiers jpeg et donc de gagnier de la place sur votre disque dur.
Le principe du programme est d’optimiser l’encodage des fichiers sans modifier la qualité de l’image, il n’y a donc pas de perte de qualité.
Il est possible de gagnier entre 0 et 15% sur la taille de l’image, ce qui n’est pas négligable.

Voici la commande pour optimiser toutes les images qui se trouvent dans un répertoire :

find répertoire -name ‘*.jpg’ -exec jpegoptim ‘{}’ \;

Parcontre, il est domage qu’il n’y est pas de paquet debian pour ce programme, il faut donc le compiler (./configure; make; make install) à partir des sources.

Filed under: Debian — cscm @ 10:34 pm

January 30, 2006

Ouaf ouaf va chercher … Beagle !

logo beagle Enfin une application utile écrite à l’aide du framwork Mono !
Et pas des moindres!

Dans la famille des moteurs de recherche bureau (“Desktop Search Engines”), après Spotlight et Google Desktop voici Beagle.

Qu’est-ce que Beagle?

Il s’agit d’un programme qui indexe les données personnelles qui se trouvent sur le disque dur de votre ordinateur : vos documents, e-mails, images, mp3 etc…
Il vous propose ensuite de faire des recherches dans ces données.
Vous pouvez voir des démonstratons en Flash du fonctionnement de l’nterface graphique du programme.

Le fonctionnement du programme repose sur :

  • beagled - le serveur d’indexation des données.
  • beagle-search - l’interface graphique utilisateur.

Pour obtenir de bonnes performances, les composants externes suivants sont recommandés :

  • INOTIFY - patch pour le noyau linux, permettant d’informer un programme d’une modifcation sur le système de fichiers. Pour bénéficier de cette fonctionnalité vous avez besoin d’un noyau 2.6.14.
  • Attributs étendus - est une fonctionnalité du système de fichiers permettant de stocker des méta données sur le contenu des fichiers. Pour activer cette fonctionnalité, il faut que celle-ci soit compiler dans le noyau et que le système de fichiers soit monter avec les bonnes options, comme indquer ici.

Installation

La procédure d’installation est décrite sur le Wiki du projet : Getting_Started.
Pour la distribution debian, un paquet est disponible pour la version 0.1.3 du programme.
Mais la version 2.0 est sortie le 20 janvier 2006 et elle apporte pas mal de nouveautés au niveau de l’interface graphique (dont le remplacement du l’ancienne interface graphique : best).
Je vous conseil donc de construire le programme à partir des sources en suivant la procédure de compilation.

A noter que la version debian, ne respecte pas correctement la policy debian et cherche à créer des fichiers dans le répertoire /usr/var/cache/beagle. Je vous conseil donc de lancer beagled avec les options de debug la première fois, pour verfer que le daemon fonctionne correctement :

beagled --fg --debug

Utilisation

Il faut lancer le daemon beagled au démarrage de votre session. (à l’aide du fichier .xsession, kde, gnome, etc. ).
Pour configurer le programme, il suffit de lancer la commande beagle-settings.
Pour effectuer des rechercher à l’aide d’une interface graphique, il faut lancer la commande best (avec l’option –show-window pour afficher directement la fenêtre de recherche) ou bien beagle-search pour la version 0.2.

Conclusion

Le programme est vraiment pas mal, mais le framwork Mono donne vraiment l’impression qu’il fonctionne “au ralenti” comme pour un programme écrit en Java. Mais ce n’est qu’une impresson qui se resent qu’au lancement du programme.

Filed under: Debian — cscm @ 9:08 pm

January 29, 2006

Mon nouveau window manager : E17

Desktop E17

Après prés de 5ans de vie commune avec PWM, c’est la séparation!

J’ai craqué pour le nouvelle monture d’Enlightenment, à savoir le tant attendu E17.

Voici une copie d’écran de mon nouveau bureau.

Filed under: Debian — cscm @ 10:51 am

December 2, 2005

Support LDAP pour Autofs

Comme son nom l’indique autofs est un système permettant de “monter” automatiquement des partitions sous Unix.
Dans la plupart des cas, dans une entreprise les fichiers sont centralisés sur un ou plusieurs serveurs de stockage ;
il faut donc configurer les stations de travail une par une pour accèder aux données.

Pour simplifier cette tâche, j’ai voulu tester le programme autofs-ldap qui permet
de stocker les données sur les serveurs de stockage dans un annuaire LDAP.

La procédure suivante permet de centraliser dans un annuaire LDAP l’accès à un répertoire NFS.
Elle a été testée sous Debian GNU/Linux “Sarge”.

Sur le serveur :

Télécharger le schèma LDAP automount.schema et installer le dans le répertoire /etc/ldap/schema.

Editer le fichier de configuration de slapd : /etc/ldap/slapd.conf

include /etc/ldap/schema/automount.schema

Recharger le daemon slapd.

/etc/init.d/slapd reload

Ajouter la liste de vos partages dans l’annuaire :

dn:ou=autofs,dc=domaine
ou: autofs
objectClass: top
objectClass: organizationalUnit

dn:cn=fichiers,ou=autofs,dc=domaine
automountInformation: server:/nom_du_repertoire_partager
cn: fichier
objectClass: automount
objectClass: top

Sur le client:

Il faut installer le paquet autofs-ldap:

#aptitude install autofs-ldap

Editer le fichier de configuration /etc/auto.master

/repertoire ldap://ldap.mondomaine/ou=autofs,dc=mondomaine

Il ne vous reste plus qu’à relancer le daemon autofs:

#/etc/init.d/autofs

Les serveurs de fichiers sont accessible dans le répertoire /repertoire:

#cd /repertoire/fichiers

Voilà

Filed under: Debian — cscm @ 9:55 pm
Next Page »

Powered by WordPress