Christophe Nowicki

June 16, 2014

Déploiement “en masse” de noyau Linux personnalisé et durci à l’aide de Puppet

200px-Pax_tux

Comme tout barbu qui se respecte, j’aime avoir un noyau Linux, dont la configuration correspond parfaitement au matériel et à l’utilisation d’une machine.

Pour cela j’ai développé un module Puppet qui permet de déployer des noyaux Linux personnalisés et durcis.

Problématique

Compiler et personnaliser la configuration du noyau d’une seule machine est une tâche qui nécessite :

  • une bonne connaissance des options du noyau ;
  • connaissance du matériel et des drivers correspondants ;
  • du temps ;

Il y a de cela une dizaines d’année il était fréquent de compiler une version personnalisée du noyau Linux, mais aujourd’hui le noyau fourni par une distribution GNU/Linux, contient une grande quantité de pilotes et couvre la plupart des besoins.

Il n’y a pas de différence de performance entre un pilote de périphériques compiler en “dur” dans le noyau et charger en modules.

Les seules raisons de compiler un noyau personnalisé sont :

  • la vitesse de démarrage ;
  • et la sécurité.

C’est ce dernier point qui m’a poussé à mettre en place un système de compilation de noyau Linux automatisé.

Module Puppet

Le module Puppet dispose des fonctionnalités suivantes :

  • installation et décompression des sources du noyau dans /usr/src ;
  • application du patch grsecurity ;
  • écriture d’un fichier de configuration personnalisé ;
  • re-compilation du noyau et création d’un paquet pour la distribution Debian GNU/Linux ;
  • compilation en cas de changement de la configuration ;
  • TODO : installation du paquet et reboot sur le nouveau noyau à l’aide de kexec ;

Gestion de la configuration du noyau

D’après le LKDDb (Linux Kernel Driver DataBase), il y a plus de 19 000 options différentes dans un noyau Linux.

L’approche classique pour la gestion d’un tel nombre d’options est l’utilisation d’un tableur Excel ;-)

Mais la plupart des utilisateurs conservent les fichiers de configuration directement sur le système de fichier ou dans un logiciel de gestion de version.

Mais cette approche ne me satisfait pas, j’ai donc opté pour l’utilisation d’une base de données hiérarchique : Hiera

Structure hiérarchique

La structure adoptée est la suivante :

# /etc/puppet/hiera.yaml
---
:backends:
  - yaml
:yaml:
  :datadir: /etc/puppet/hiera/
:logger: puppet
:hierarchy:
  - "fqdn/%{::fqdn}"
  - "boardproductname/%{::boardproductname}"
  - "hardwaremodel/%{::hardwaremodel}"
  - common

common.yaml

Contient la configuration commune à toutes les machines et la “négation” des options, ce qui évite à make-kdpkg de choisir une option par défaut :

# /etc/puppet/hiera/common.yaml
---
linux-grsec::kernel::config:
    CONFIG_CGROUP_DEBUG: n
    CONFIG_CGROUP_FREEZER: n
    CONFIG_CGROUP_DEVICE: n
    CONFIG_CPUSETS: n
    CONFIG_PROC_PID_CPUSET: n
    CONFIG_CGROUP_CPUACCT: n
    CONFIG_RESOURCE_COUNTERS: n
    CONFIG_MEMCG: n
    CONFIG_CGROUP_HUGETLB: n
    CONFIG_CGROUP_PERF: n
    CONFIG_CGROUP_SCHED: n
    CONFIG_FAIR_GROUP_SCHED: n
    CONFIG_CFS_BANDWIDTH: n
    CONFIG_RT_GROUP_SCHED: n
    CONFIG_BLK_CGROUP: n
    CONFIG_CHECKPOINT_RESTORE: n    
    CONFIG_GRKERNSEC: y
    CONFIG_GRKERNSEC_CONFIG_AUTO: n
    CONFIG_GRKERNSEC_CONFIG_CUSTOM: y
    CONFIG_PAX: y
...

Répertoires hardwaremodel et boardproductname

Le répertoire hardwaremodel contiens la définition d’un architecture :

/etc/puppet/hiera/hardwaremodel/
├── i586.yaml
├── i686.yaml
└── x86_64.yaml

Comme par exemple l’architecture x86_64:

# /etc/puppet/hiera/hardwaremodel/x86_64.yaml
---
linux-grsec::kernel::config: 
    CONFIG_64BIT: y
    CONFIG_X86_64: y
    CONFIG_OUTPUT_FORMAT: '"elf64-x86-64"'
    CONFIG_ARCH_DEFCONFIG: '"arch/x86/configs/x86_64_defconfig"'

Le répertoire boardproductname contient la définition des pilote de périphériques pour une machine :

/etc/puppet/hiera/boardproductname/
├── beagleboneblack.yaml
├── C7Q67.yaml
├── D33217GKE.yaml
├── DN2800MT.yaml
├── net5501.yaml
├── net6501.yaml
├── raspberrypi.yaml
├── wandboard.yaml
├── X7SPA-HF.yaml
├── X9SCL.yaml
└── Z68MA-D2H-B3.yaml

Par exemple, pour un net5501 de Soekris Inc. :

# /etc/puppet/hiera/boardproductname/net5501.yaml
---
linux-grsec::kernel::config:
    CONFIG_SMP: n
    CONFIG_X86_64_SMP: n
    CONFIG_X86_32_SMP: n
    CONFIG_RCU_FANOUT: 32
    CONFIG_MGEODE_LX: y
    CONFIG_X86_GENERIC: n
    CONFIG_GENERIC_CPU: n
    CONFIG_NET_VENDOR_VIA: y
    CONFIG_VIA_RHINE: y
    CONFIG_VIA_RHINE_MMIO: y
    CONFIG_HW_RANDOM_GEODE: y
    CONFIG_FB_GEODE: y
    CONFIG_CRYPTO_DEV_GEODE: y
    CONFIG_CRC_T10DIF: y
    CONFIG_ATA_GENERIC: y
    CONFIG_PATA_CS5536: y
    CONFIG_CS5535_MFGPT: y
    CONFIG_SENSORS_PC87360: y
    CONFIG_I2C: y
    CONFIG_SCx200_ACB: y
    CONFIG_LEDS_NET5501: y

Répertoire fqdn

Le répertoire fqdn contient les options spécifique à une machine et à ses fonctionnalités (ici une gateway VPN avec StrongSwan et l’IPS Suricata ) :

# /etc/puppet/hiera/fqdn/foo.bar.yaml
---
linux-grsec::kernel::config:
# StrongSwan
    CONFIG_XFRM_USER: y
    CONFIG_NET_KEY: y
    CONFIG_NET_KEY_MIGRATE: n
    CONFIG_IP_ADVANCED_ROUTER: y
    CONFIG_IP_MULTIPLE_TABLES: y
    CONFIG_INET_AH: y
    CONFIG_INET_ESP: y
    CONFIG_INET_IPCOMP: y
    CONFIG_INET_XFRM_MODE_TRANSPORT: y
    CONFIG_INET_XFRM_MODE_TUNNEL: y
    CONFIG_INET_XFRM_MODE_BEET: y
    CONFIG_NET_IPVTI: n
    CONFIG_IPV6: y
    CONFIG_INET6_AH: y
    CONFIG_INET6_ESP: y
    CONFIG_INET6_IPCOMP: y
    CONFIG_INET6_XFRM_MODE_TRANSPORT: y
    CONFIG_INET6_XFRM_MODE_TUNNEL: y
    CONFIG_INET6_XFRM_MODE_BEET: y
    CONFIG_IPV6_MULTIPLE_TABLES: y
    CONFIG_IPV6_SUBTREES: n
    CONFIG_NETFILTER: y
    CONFIG_NETFILTER_XTABLES: y
    CONFIG_NETFILTER_XT_MATCH_POLICY: y
# Suricata
    CONFIG_NETFILTER_ADVANCED: y
    CONFIG_BRIDGE_NETFILTER: n
    CONFIG_NETFILTER_NETLINK_QUEUE: y
    CONFIG_NETFILTER_NETLINK_ACCT: y
    CONFIG_NETFILTER_XT_TARGET_NFQUEUE: y
...

Configuration finale

$ hiera -h  linux-grsec::kernel::config ::hardwaremodel i586 ::boardproductname net5501 ::fqdn foo.bar
{"CONFIG_NETFILTER_XT_MATCH_STATISTIC"=>"n",
 "CONFIG_BLK_DEV_RSXX"=>"n",
 "CONFIG_USB_CATC"=>"n",
 "CONFIG_MMU"=>"y",
 "CONFIG_GPIO_BCM_KONA"=>"n",
 "CONFIG_CHELSIO_T4VF"=>"n",
 "CONFIG_SERIAL_CORE"=>"y",
 "CONFIG_DM_MIRROR"=>"y",
 "CONFIG_IO_DELAY_TYPE_NONE"=>3,
 "CONFIG_MMC_TEST"=>"n",
...

Exemple d’utilisation

# puppet agent -t
...
info: Applying configuration version '1402952642'
notice: /Stage[main]/Linux-grsec::Kernel/File[/usr/src/foo.config]/ensure: created
info: /Stage[main]/Linux-grsec::Kernel/File[/usr/src/foo.config]: Scheduling refresh of Exec[make-kpkg]
notice: /Stage[main]/Linux-grsec::Install/File[/usr/src/linux-3.14.4.tar.xz]/ensure: defined content as '{md5}c7c565d14833550faa39ef8279272182'
notice: /Stage[main]/Linux-grsec::Install/File[/usr/src/grsecurity-3.0-3.14.4-201405141623.patch]/ensure: defined content as '{md5}e88a81b0c222d14e228dc29dd76a875a'
notice: /Stage[main]/Linux-grsec::Install/File[/usr/src/grsecurity-3.0-3.14.4-201405141623.patch.sig]/ensure: defined content as '{md5}737b22b6e8cae0d4398ba3f68acaf1e1'
notice: /Stage[main]/Linux-grsec::Install/Exec[/usr/src/linux-3.14.4/grsecurity]/returns: executed successfully
info: /Stage[main]/Linux-grsec::Install/Exec[/usr/src/linux-3.14.4/grsecurity]: Scheduling refresh of Exec[make-kpkg]
notice: /Stage[main]/Linux-grsec::Install/Exec[/usr/src/linux-3.14.4]/returns: executed successfully
notice: /Stage[main]/Linux-grsec::Install/File[/usr/src/linux-3.14.4/.config]/ensure: created
notice: /Stage[main]/Linux-grsec::Install/Exec[make-kpkg]/returns: exec make kpkg_version=12.036+nmu3 -f /usr/share/kernel-package/ruleset/minimal.mk debian APPEND_TO_VERSION=-foo  INITRD=YES 
...
notice: /Stage[main]/Linux-grsec::Install/Exec[make-kpkg]/returns: cp -pf debian/control.dist          debian/control
notice: /Stage[main]/Linux-grsec::Install/Exec[make-kpkg]/returns: make[2]: Leaving directory `/usr/src/linux-3.14.4'
notice: /Stage[main]/Linux-grsec::Install/Exec[make-kpkg]/returns: make[1]: Leaving directory `/usr/src/linux-3.14.4'
notice: /Stage[main]/Linux-grsec::Install/Exec[make-kpkg]: Triggered 'refresh' from 2 events
notice: Finished catalog run in 179.65 seconds
..
# dpkg -i linux-*.deb

Conclusion

Ce système me permet de déployer des noyaux GRSec sur la petite dizaine de machines de mon réseau local.

Cette méthode ne convient pas au domaine de l’embarqué, (rasberrypi, beaglebone black, wandboard, etc… ) car l’espace disque et la puissance de calcul nécessaire ne sont pas disponible sur ce type de machine.

Références

Filed under: Debian — Tags:, , , , , , , — cscm @ 22:33

July 29, 2010

Domotique et économie d’énergie

Dans ce billet, je vais essayer d’expliquer le rôle que pourrait jouer les technologies domotique dans l’économie d’énergie.

Je vais décrire mes expérimentations et quelques ressources intéressantes sur le sujet.

Le suivi de la consommation en temps réel

C’est l’étape la plus simple à mettre en oeuvre, elle consiste à mettre en place un système de suivi de la consommation qui affiche l’information en temps réel.

Il existe de nombreuses techniques pour mesurer :

Le rôle de la mesure

J’ai tout d’abord été très septique sur l’utilité de ces techniques et à part faire de jolis graphiques et des calculs sur ces données, cela ne me semblait pas être vraiment utile.

Pourtant, le fait d’afficher la consommation en temps réel aux utilisateurs permet d’influencer son comportement.

En effet, le fait qu’un appareil consomme de l’énergie n’est pas perceptible par un humain et il est donc nécessaire de mettre en place des outils de mesure.

L’affichage en temps réel permet de notifier les utilisateurs sur la quantité d’énergie consommée et le coût de celle-ci;
ce qui influence directement leur comportement et permet de réaliser des économies tangibles et chiffrables.

D’après une étude de l’université d’Oxford , l’affichage en temps réel de la consommation permet de la faire baisser de 7 à 15%. Pour un investissement de départ faible. ( voir la liste des solutions de Mesure de consommation électrique )

Pour ma part, le Current cost m’a permis de réduire ma facture d’électricité de 10% sur un an.

Optimisations possibles

Dans un second temps, il faut s’attaquer aux pertes d’énergie et optimiser au maximum son usage.

Électricité

Dans une maison, comme chez vous, il y a de nombreux appareils inutiles qui consomment de l’énergie électrique sans être utilisés : les veilles, les transformateurs, etc…

La plupart des veilles sans trompeuses.En effet, certains appareils électriques mal concus consomment presque autant d’énergie en veille qu’en fonctionnement normal.
Comme par exemple, les “Box Internet”.

Il est donc nécessaire d’éteindre complètement ces appareils lorsque vous ne les utilisez pas.

Pour ce faire, les moyens les plus simple sont les multiprises de type maître-esclave qui fonctionnent à l’aide du port USB, d’un système de seuil de consommation ou bien à l’aide d’un interrupteur.

Pour les autres appareils, il est aussi possible d’utiliser des relais (X10, Plugwise, PLCBUS, EasyDAQ, 1-wire, etc… ) pour couper à distance un appareil, durant les périodes ou ils ne doivent pas être utilisés.

L’idée est de coupler ces systèmes avec un ordonnanceur de tâches (tel que Job scheduler, fcron, cron… ) pour prendre en charge l’effacement des différents appareils de manière cohérente.

Vous pouvez ensuite optimiser votre consommation en fonction de facteurs extérieurs tels que :

  • le type d’abonnement du fournisseur d’énergie (EDF Tempo, Heure Creuses, etc… ) ;
  • le nombre de personnes présent dans habitat (RFID is your friend) ;
  • les demandes de votre fournisseur d’énergie ( SmartGrid : Peak curtailment/levelling ) ;
  • les prévisions météo ;
  • votre propre production d’énergie ;

Eau et Gaz

Pour les liquides, il existe des solutions de vannes équipées de Servomoteur, permettant de couper l’eau ou le gaz en cas de fuite.

Domotique = Informatique

Comme la domotique consiste à utiliser l’informatique au sein de habitat, il est donc nécessaire de mettre en place des services qui fonctionnent en permanence sans trop consommer d’énergie.

Les choix les plus importants dans ce domaine sont la plate-forme matériel et logiciel.
Pour ceux qui ont opté pour une solution basée sur GNU/Linux, il existe de très nombreuses solutions embarquées qui allient puissance de calcul et faible consommation.

Pour les autres, le serveur Microsoft Windows, peut toujours servir de radiateur ;-)
Et le Mac de lampe de chevet ;-)

Futur

Comme vous pouvez le constater, il existe de nombreuses solutions pour réduire sa consommation d’énergie à l’aide de la domotique.

La plupart sont faciles à mettre en place et nécessite un faible investissement.

Il est clair que les solutions de compteurs intelligents vont se démocratiser et ouvrir la voix au réseau électrique intelligent.

Ces réseaux doivent normalement rester à la porte de votre appartement, car ils présentent un risque important pour la vie privé.

En effet, le marché du suivi de l’énergie intéresse beaucoup de monde car la simple observation de votre consommation permet de déterminer vos habitudes et la marque de votre frigidaire.

Références

Filed under: Home automation — Tags:, , , , , — cscm @ 20:18

April 30, 2009

Configuration de l’USB-UIRT (Universal Infrared Receiver Transmitter) sous Debian GNU/Linux

L’USB-UIRT est un petit module qui se branche sur le port USB et qui permet d’envoyer et recevoir des ondes infrarouges.
Je l’utilise pour controler les différents éléments de mon installation home-cinéma (Amplificateur Audio/Vidéo, Freebox, Lecteur de DVD, etc…) à partir de ma machine Multimédia fonctionnant sous Debian GNU/Linux “Lenny”.
J’ai acheté mon module chez Domadoo en France : USB-UIRT (Universal Infrared Receiver/Transmitter).
L’objet de ce billet est l’installation du module sous Debian GNU/Linux.

Installation du matériel

Lorsque vous branchez le module sur le port USB, vous devez le voir via la commande lsusb :

$ lsusb
Bus 001 Device 025: ID 0403:f850 Future Technology Devices International, Ltd

Il faut ensuite charger le module ftdi_sio, le mettre dans le fichier /etc/modules, lors du chargement du module vous devez avoir les informations suivantes dans le fichier /var/log/messages :

[ 23.114110] ftdi_sio 4-1.1.1.1.1:1.0: FTDI USB Serial Device converter detected
[ 23.114110] ftdi_sio: Detected FT232RL
[ 23.114110] usb 4-1.1.1.1.1: FTDI USB Serial Device converter now attached to ttyUSB2

Installation du logiciel

Il suffit d’installer lirc via apt :

# apt-get install lirc

Le module ne nécessite pas de drivers spécifiques dans le noyau.
Il suffit de lancer lircd :

lircd -n -H usb_uirt_raw -d /dev/ttyUSB2
lircd-0.8.3[10254]: config file contains no valid remote control definition
lircd-0.8.3[10254]: lircd(userspace) ready

Puis irw dans une autre console pour lire les signaux IR :

lircd-0.8.3[10254]: uirt2_raw: checksum error
lircd-0.8.3[10254]: uirt2_raw: UIRT version 0905 ok

Et la, c’est le drame :)
Mais pas de panique, le message d’erreur checksum error, n’est pas important!
Il y a bien un bug dans le noyau depuis la version 2.6.20 : USB UIRT: uirt2_raw: checksum error.
Mais cela fonctionne avec le 2.6.26 disponible dans lenny, par contre si vous avez le message d’erreur suivant : uirt2_raw: could not set DTR, alors il faut upgrade votre version du noyau ou modifier le code source du module.

Configuration des télécommandes

De très nombreuses configurations de télécommandes sont disponibles sur le serveur du projet LIRC : ici.

Il suffit de télécharger le fichier de configuration de votre télécommande et de le mettre dans le fichier lircd.conf :

# cd /etc/lirc/
# wget http://lirc.sourceforge.net/remotes/logitech/Z-5500D
# cat Z-5500D >> lircd.conf

Nous allons ensuite configurer le fichier /etc/lirc/hardware.conf du deamon lirc pour le lancer:

# /etc/lirc/hardware.conf
#
# Arguments which will be used when launching lircd
LIRCD_ARGS=""

#Don't start lircmd even if there seems to be a good config file
#START_LIRCMD=false

#Don't start irexec, even if a good config file seems to exist.
#START_IREXEC=false

#Try to load appropriate kernel modules
LOAD_MODULES=false

# Run "lircd --driver=help" for a list of supported drivers.
DRIVER="usb_uirt_raw"
# If DEVICE is set to /dev/lirc and udev is in use /dev/lirc0 will be
# automatically used instead
DEVICE="/dev/ttyUSB2"
MODULES=""

# Default configuration files for your hardware if any
LIRCD_CONF=""
LIRCMD_CONF=""

Nous pouvons alors lancer lircd :

# /etc/init.d/lirc start
Starting lirc daemon: lircd.

Recevoir les ordres infrarouges

Pour recevoir les ordres, il faut utiliser la commande irw :

$ irw
0000000010ef58a7 00 vol+ logitech_z5500
0000000010ef58a7 01 vol+ logitech_z5500
0000000010ef708f 00 vol- logitech_z5500
0000000010ef708f 00 vol- logitech_z5500
0000000010ef58a7 00 vol+ logitech_z5500
0000000010ef58a7 01 vol+ logitech_z5500
0000000010efd02f 00 optical logitech_z5500
0000000010efd02f 01 optical logitech_z5500

Envoyer des ordres infrarouges

Pour envoyer des ordres, il faut utiliser la commande irsend :

$ irsend SEND_ONCE logitech_z5500 power

Conclusion

Pour toutes les autres fonctionnalités et la configuration de vos applications (mplayer, freevo, etc…) , je vous conseille de lire la documentation du projet LIRC.
Il existe d’autres modules que l’USB-UIRT, comme par exemple USB IR Transceiver de IguanaWorks.

Filed under: Debian,Home automation — Tags:, , — cscm @ 18:00

January 2, 2009

Les différents usages d’un serveur PXE sur une réseau local

Vous n’avez pas encore installer un serveur PXE sur votre réseau local?

Si ce n’est pas le cas, je vais essayer de vous décrire dans cet article les diffèrents outils que j’ai mis en place sur mon réseau.

Menu de démarrage

Voici les différentes options qui sont proposées sur mon réseau en cas de démarrage d’une machine en PXE :


- Boot Menu -
=============

etch_i386_install
etch_i386_linux
etch_i386_expert
etch_i386_rescue
fai_sysinfo
fai_install_desktop
fai_install_server_base
fai_install_server_vserver
fai_install_server_xen
gparted
clonezilla
dban

Je vais vous décrire chaque option et ses usages.

Mise en place d’un serveur PXE

Pour la mise en place d’un serveur PXE, je vous invite à lire cette article de Debian Administration : Setting up a server for PXE network booting

La procèdure d’installation est très simple, vous avez besoin d’un serveur DHCP et TFTP sur une des machines de votre réseau.

Installateur Debian GNU/Linux

Les quatres premières options concernent l’installateur Debian. En effet, il est possible d’installé une distribution Debian GNU/Linux en réseau.

La mise en place de ce système est décrite dans le manuel de la distribution : 4.6. Préparer les fichiers pour amorcer depuis le réseau avec TFTP.

Grâce à ce serveur, il n’est plus nécessaire d’apprendre à jongler avec les diffèrents CD/DVD de la distribution.

L’installateur propose aussi un mode “rescue”, très pratique en cas de perte d’un mot de passe root, ou bien lorsque la machine refuse de démarrer.

Fully Automatic Installation

Après l’installation de la machine, il y a de nombreuses manipulations à
faire, qui ne sont pas prise en charge par l’installateur standard et
qui sont spécifiques au réseau sur lequel se trouve la machine :
configuration du système de backup, certificats SSL, l’emplacement des
diffèrents services (LDAP, Messagerie, Monitoring, Stockage, etc…)

Généralement ces tâches sont faites manuellement ou bien à l’aide d’une
“procédure”.

Mais dans la plus part des cas cette procédure n’existe pas ou bien elle n’est pas à jour ;)

Donc la meilleur chose à faire est donc de centraliser sur le serveur d’installation ces informations.

Pour cela, j’ai mis en place plusieurs modèles de machine à l’aide du logiciel FAI – Fully Automatic Installation.

GParted

Le logiciel GParted est une interface graphique en GTK+ pour parted.

Celui-ci permet de créer, supprimer, redimensionner, déplacer, vérifier et copier les partitions d’un disque dur, comme Partition Magic.

Le logiciel dispose d’un mode “live”, qu’il est possible de démarrer en réseau : GParted Live on PXE server.

Clonezilla

Clonezilla est un logiciel permettant de faire des copies d’un disque dur ou d’une partition comme Norton Ghost.

Il dispose d’un mode “live”, qui fonctionne de la même manière que GParted : Clonezilla Live – Single machine clone system without installation.

Darik’s Boot And Nuke

Darik’s Boot And Nuke (DBAN) est un logiciel permettant d’effacer de manière sécurisée le contenu de tous les disques dur d’une machine.

Je DBAN utilise lors de l’achat d’un nouveau disque dur ou bien la revente d’un disque dur d’occassion.

En effet, lors du premier temps d’utilisation d’un disque dur, vous avez de forte chance de tomber sur un modèle défectueux.

Il est donc conseiller de lui faire subir un teste de stress avant de mettre des données importantes dessus.

Pour la revente, c’est plus un probleme de confidentialité : To keep those secrets safe, beat your computer’s brains out with a hammer.

L’installation de DBAN sur le serveur PXE, n’est pas décrite sur le site du logiciel.

Je vais décrire la procèdure d’installation dans un autre article.

Conclusion

Les possiblités offertes par un serveur PXE sur un réseau local sont nombreuses.

L’installation et la mise en place des outils décrits dans cette article est assez simple (sauf pour FAI )
et vous permettera de simplifier l’administration de vos machines et donc gagnier du temps.

Filed under: Debian — Tags:, — cscm @ 15:19

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 <

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 https://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,Robotics — Tags:, , , — cscm @ 23:50

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 — Tags: — cscm @ 08:56

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 — Tags: — cscm @ 22:34

February 1, 2006

Support Linux pour le chipset de Webcam Ali M5603C

Schèma classique :
1 – constructeur de matériel qui ne fourni pas de driver Linux
2 – la puce se retrouve dans la pluspart des ordinateurs portables du marché
3 – il va faloir faire pression pour obtenir les spécifications sans signer de NDA

Le constructeur en question est le Taiwanais Ali, qui produit le contrôleur pour Webcam M5603C.
Cette puce est utilisée par la plupart des constructeurs de portable.

Pour réaliser un driver Linux, un site web et un forum ont été mis en place : The Ali M560x Linux Driver Project.

Mais visiblement le constructeur ne répond pas aux mails de solicitation envoyés par les développeurs.

Je propose de faire comprendre au constructeur qu’il doit fournir les spécifications du matériel, en lui envoyant des demandes via l’interface de contacte client : Customer Support.

Voici un email type :

Hi,

I have bought an notebook, with a built-in web camera, using the Ali M5603C Video Camera Controller.
Now, the software that came bundled with the computer for using this camera is useless to me, since it requiers me to install and boot into Microsoft Windows, which is an operating system that I do not have.

I therefore use GNU/Linux, which is well supported by my notebook, except that there’s no driver for the M5603C controller.

When I searched the Internet for a driver, I came upon several developers for the Video4Linux system, that were interested in making such a driver, but without the datasheet for the controller, it would not be possible for them. They say they have already contacted Ali and asked for the datasheets, but none has so far got a reply to the request, as I know of.

I can assure you that, if you provide th the datasheet for the M5603C, there will very soon be a well functioning driver for this controller included with the Linux kernel.

ALi will then not have to worry about any other support for Linux users of the M5603C, since there are well established support forums for all Video4Linux drivers and applications.

To sign a NDA would be a big problem for the development of the Linux driver, since all drivers to be included with the Linux kernel has to have a licence compatible with the General Public Licence (GPL).

Therefore the source code of the driver has to be open, so all the information needed for the driver to work, will be available for anyone who understands C programming langage.

Another advantage of the existense of an open source driver, is that Linux users generally have a very positive attitude towards companies known to cooperate with the open source community, and usually prefere to buy products from such companies rather from companies known not to cooperate.

I personally buy only well supported hardware and I am ready to give more money for Linux support.

I want to thank you for your patience, and I hope we can come to a positive agreement for both ALi and the Linux users who have purchased your products.

Best Regards,

Ce genre de pratique a déja porté ses fruits.

Filed under: Hardware — Tags:, — cscm @ 20:46

December 30, 2005

Faire fonctionner une souris Bluetooth sous Debian GNU/Linux

C’est vraiment un jeu d’enfant !

Je suis l’heureux posssseur d’une souris “Bluetooh Optica Mini Mouse MI-5300p” de la marque Trust achetée chez Pixmania pour moins de 30 euros.

Voici la procédure pour configurer cette souris en moins de 2 min ;0)

  • Installer le paquet bluez-utils
  • Remplacer la variable HIDD_ENABLED=0 par HIDD_ENABLED=1 dans le fichier /etc/default/bluez-utils
  • Relancer les daemons bluetooth /etc/init.d/bluez-utils restart
  • Connectez-vous à la souris à l’aide du deamon hidd, n’oubliez pas de maintenir le bouton connect enfoncer lors de la recherche du periphèrique : hidd –search
  • Ajouter les lignes suivantes dans le fichier de configuration du serveur X (/etc/X11/xorg.conf) :

    Section "InputDevice"
    Identifier "Bluetooth Mouse"
    Driver "mouse"
    Option "SendCoreEvents"
    Option "Device" "/dev/input/mouse1"
    Option "Protocol" "ExplorerPS/2"
    Option "Emulate3Buttons" "false"
    Option "ZAxisMapping" "4 5"
    EndSection

    Section "ServerLayout"
    ...
    InputDevice "Bluetooth Mouse"
    EndSection

  • Relancer votre serveur X

Et Voilà !

Cette souris est vraiment sympa et pas chère, c’est le compagnon idéal pour un ordinateur portable.

Mon seul regret!?
C’est que j’ai vraiment de grosses paluches ;0)

Filed under: Hardware — Tags:, , , — cscm @ 09:49

November 14, 2005

Installation d’un serveur Kerberos dans un vserver

Cela faisais longtemps que je voulais essayer d’installer un serveur Kerberos sur mon réseau.

Le protocole Kerberos est une solution de SSO permettant de ne saisir sont mot de passe qu’une seul fois.
Armé de l’article du journale MISC décrivant l’installation de ce service, je me lance dans l’installation d’un serveur maitre dans un vserver.

Tout se passe bien, jusqu’au lancement du daemon krb5kdc, celui-ci refusse de binder les ports qui lui sont attribuées en UDP.
Visiblement celui-ci essaye de se binder sur TOUTES les interfaces réseau disponbile sur la machine.
Ce qui n’est pas possible à l’interieur d’un vserver.

Effectivement bien que toutes les intefaces de la machine physique soitent visible de l’interieur du vserveur,
il n’est possible de se binder que sur l’interface attribué au vserveur courant. Ce qui explique le mesage d’erreur suivant:

Nov 11 19:39:08 kdc krb5kdc[13311]: setting up network…
Nov 11 19:39:08 kdc krb5kdc[13311]: skipping unrecognized local address family 17
Nov 11 19:39:08 kdc krb5kdc[13311]: Cannot assign requested address – Cannot bind server socket to port 88 address 192.168.42.1
Nov 11 19:39:08 kdc krb5kdc[13311]: set up 0 sockets
Nov 11 19:39:08 kdc krb5kdc[13311]: no sockets set up?

Pour faire marcher se service à l’interieur d’un vserveur les solutions suivantes se posent à moi :

  • Cacher les interfaces de la machine physique
  • Modifier le code, pour changer ce comportement

Après une recherche rapident sur le net, je n’ai pas trouver de solution pour cacher les interfaces.
En ce qui est du code, je n’ai pas eu le temps de modifier le comportement du serveur.

Je suis pour l’instant bloquer, j’ai donc soumit un rapport de bug :
[krbdev.mit.edu #3237] Kerberos does not work inside Linux vservers

Filed under: Debian — Tags:, , — cscm @ 13:27

Powered by WordPress