Compiler un logiciel pour OpenWrt sur NSLU2

Ce billet montre par l’exemple comment compiler un logiciel et créer un paquetage Optware pour le firmware OpenWrt sur NSLU2.

Nous nous intéressons ici au NSLU2 de Linksys et au firmware OpenWrt Kamikaze 7.09. Le projet nslu2-linux propose des paquetages Optware pour différentes plateformes matérielles et systèmes.

Le NSLU2 est basé sur une puce Intel XScale-IXP42x, compatible ARMv5. La compilation d’un logiciel pour cette architecture peut se faire de deux façons:

  • Compilation sur une machine ARMv5
  • Compilation croisée sur un machine hôte disposant d’une autre architecture

Nous retenons la seconde solution, ne souhaitant pas installer un environnement de développement sur le NSLU2.

Pour la compilation croisée, nous utilisons un système 64 bits. Il est donc nécessaire de télécharger le SDK OpenWrt adéquat.

Préparation de l’environnement de travail et téléchargement du SDK
$ mkdir -p $NSLU2/{archives,releases}
$ cd $NSLU2/archives
$ wget http://downloads.openwrt.org/kamikaze/7.09/ixp4xx-2.6/\
OpenWrt-SDK-ixp4xx-2.6-for-Linux-x86_64.tar.bz2
$ cd $NSLU2/releases
$ tar xvjf $NSLU2/archives/OpenWrt-SDK-ixp4xx-2.6-for-Linux-x86_64.tar.bz2
$ ln -s OpenWrt-SDK-ixp4xx-2.6-for-Linux-x86_64 openwrt-kamikaze_7.09
$ cd $NSLU2
$ svn co http://svn.nslu2-linux.org/svnroot/optware/trunk optware
$ cd optware
$ make openwrt-ixp4xx-target
$ cd openwrt-ixp4xx
$ make directories ipkg-utils
$ make pcre-ipk openssl-ipk libstdc++-ipk zlib-ipk
$ make pcre-check openssl-check libstdc++-check zlib-check
$ make nginx-ipk
$ make nginx-check

Reste à copier les paquets ipk sur le NSLU2 et à les installer.

$ ipkg install /opt/packages/nginx_1.0.14-1_armeb.ipk

Module d'authentification phpBB3 pour Dotclear

Afin d’unifier l’authentification entre le forum phpBB3 et le blog Dotclear du forum neolan, nous avons développé un module qui étend la classe dcAuth.

Ce module autorise ou non l’authentification d’un utilisateur du forum selon son appartenance au groupe des rédacteurs. Lors de la première authentification sur Dotclear, le compte de l’utilisateur est créé dans la base des utilisateurs.

Le fichier se nomme phpbb3dc.auth.php et doit se trouver dans $BLOG_PATH/inc/.

Fichier phpbb3dc.auth.php
<?php
class phpbb3DcAuth extends dcAuth
{
 # Pas de changement de mot de passe par l'utilisateur
 protected $allow_pass_change = false;

# Verification du compte et du mot de passe
public function checkUser($user_id, $pwd=null, $user_key=null) { # Pas de mot de passe, on appelle la methode parente if ($pwd == '') { return parent::checkUser($user_id,null,$user_key); }

# Si mot de passe, verification dans base phpBB3
try
 {
 
# Demarrage de la transaction et ouverture # d'un curseur sur la table utilisateur de # Dotclear pour creer ou modifier l'utilisateur $this->con->begin(); $cur = $this->con->openCursor($this->user_table);
# Appel de la methode de verification de
# mot de passe. # $login = login_db($user_id,$pwd); $info = $this->_checkLogin($user_id,$pwd); if ( ! $info ) { return false; }

# Definition du mot de passe
 
$cur->user_pwd = $pwd;

 
# Si l'utilisateur existe, mise a jour du mot
 
# de passe dans la table utilisateur de Dotclear
 
if ($this->core->userExists($user_id))
 
{
 
$this->sudo(array($this->core,'updUser'),$user_id,$cur); $this->con->commit(); } else { # Si l'utilisateur n'existe pas, nous le creons $cur->user_id = $user_id; $cur->user_email = $info['mail']; $cur->user_name = $user_id; # $cur->user_firstname = $info['firstname']; $cur->user_lang = 'fr'; $cur->user_tz = 'Europe/Paris'; $cur->user_default_blog = 'blog'; $this->sudo(array($this->core,'addUser'),$cur); $this->sudo(array($this->core,'setUserBlogPermissions'),
$user_id,'blog',array('usage'=>true));
$this->con->commit(); } return parent::checkUser($user_id,$pwd); } catch (Exception $e) { # En cas d'erreur on annule la transaction et on renvoie "false" $this->con->rollback(); #print_r($e); return false; } }

 
# Verification des informations d'authentification # Il faut en plus controler que l'utilisateur est membre du # groupe "redacteurs" private function _checkLogin($username,$password) { global $phpbb_root_path, $phpEx, $user, $db, $config, $cache, $template; define('IN_PHPBB',true); $phpbb_root_path = '../../forum/'; $phpEx = substr(strrchr(__FILE__, '.'), 1); include($phpbb_root_path . 'common.' . $phpEx); include($phpbb_root_path . '/includes/functions_user.' . $phpEx); $user->session_begin(); $result = $auth->login($username, $password, false, false, 0); if ( $result['status'] != LOGIN_SUCCESS ) { #die("Login error"); $info = false; } else { $info['mail'] = $user->data['user_email']; # L'utilisateur doit appartenir au groupe 6962 (Wiki) if(!group_memberships(6962,$result['user_row']['user_id'],true)) { die("Vous n'avez pas le niveau d'acces necessaire."); } } return $info; } } ?>

Il faut également modifier le fichier config.php pour spécifier la nouvelle classe d’authentification.

<?php
// Plugin d'authentification phpBB
$__autoload['phpbb3DcAuth'] = dirname(__FILE__).'/phpbb3dc.auth.php';
define('DC_AUTH_CLASS','phpbb3DcAuth');
?>

Supprimer un fichier grâce au numéro d'inode

Pour supprimer un fichier qui contient des caractères spéciaux, il est possible d’utiliser son numéro d’inode.

Obtention du numéro d’inode
bash$ ls -i /tmp/Supprimer*
306103 /tmp/Supprimer un fichier grâce à son numéro d'inode
306102 /tmp/Supprimer un fichier grâce à son numéro d'inode

Pour supprimer le fichier, nous exécutons la commande rm sur le résultat de la commande find.

Suppression du fichier
bash$ find /tmp -inum 306102 -exec rm {} \;

Analyser l'activité du système

Grâce à l’outil sar, il est possible d’analyser l’activité de son système pour une période donnée.

Par exemple, pour analyser l’activité mémoire entre 1h30 et 4h30 du matin, on peut utiliser la commande suivante:

$ sar -r -s 01:30:00 -e 04:30:00

Pour analyser l’activité des processeurs, il faut passer le paramètre -u.

La collecte d’informations est effectuée via un démon, lancé au démarrage par le script /etc/init.d/sysstat.

La commande sar fait partie des outils sysstat téléchargeables sur le site officiel du projet.

Les distributions RHEL et Debian disposent de paquets officiels inclus dans les médias d’installation.

Identification SSH sans mot de passe

SSH, ou Secure SHell, est un protocole de communication permettant d'établir une connexion sécurisée entre deux hôtes grâce à des clefs de chiffrement. Dans le monde Unix, il est d’usage d’ouvrir des sessions distantes à travers ce protocole afin de chiffrer les échanges entre le client et le système hôte.

Afin de sécuriser le processus d’identification, il convient d’utiliser une paire de clefs privée/publique permettant à un client de s’authentifier sur le serveur sans avoir à saisir le moindre mot de passe.

Pour notre exemple, nous avons besoin d’un compte utilisateur, d’un serveur SSH et d’un client.

Nous souhaitons utiliser le compte bruno sur la machine distante. Le serveur utilisé est sshd sur la machine procyon.projet747.org. Le client est ssh sur la machine actarus.projet747.org.

Tout d’abord, nous générons la paire de clefs sur la machine cliente. L’argument -t permet de spécifier le niveau de cryptage des clefs, nous optons ici pour DSA.

bruno@actarus:~$ ssh-keygen -t dsa
Generating public/private dsa key pair.
Enter file in which to save the key (/home/bruno/.ssh/id_dsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/bruno/.ssh/id_dsa.
Your public key has been saved in /home/bruno/.ssh/id_dsa.pub.
The key fingerprint is:
2c:dc:8f:4d:05:00:86:d2:7b:09:f0:2b:6f:4b:b9:70 bruno@actarus

La clef privée est générée par défaut dans le fichier $HOME/.ssh/id_dsa, et la clef publique dans le fichier $HOME/.ssh/id_dsa.pub. Nous n’avons pas saisi de passphrase.

Nous devons maintenant copier notre clef publique sur le serveur procyon.projet747.org. Évidemment, comme notre clef publique n’est pas encore installée, nous devons saisir le mot de passe du compte bruno sur la machine procyon.projet747.org.

bruno@actarus:~$ scp .ssh/id_dsa.pub \r
bruno@procyon.projet747.org:.ssh/temp_dsa.pub
Password:
id_dsa.pub                 100%  602     0.6KB/s   00:00
bruno@actarus:~$ ssh bruno@procyon.projet747.org
Password:
bruno@procyon:~$ cat .ssh/temp_dsa.pub >> .ssh/authorized_keys
bruno@procyon:~$ rm .ssh/temp_dsa.pub

La version courte se trouve ci-dessous :

bruno@actarus:~$ cat .ssh/id_dsa.pub | ssh bruno@procyon.projet747.org  \r
"cat - >> .ssh/authorized_keys"

Lors de la prochaine connexion à l’hôte procyon.projet747.org, aucun mot de passe ne sera demandé.

Sony Vaio VGN-N31Z

Mon ancien ordinateur portable ayant rendu l'âme au mois de Mai dernier, j’ai décidé de me porter acquéreur d’un remplaçant. Après quelques recherches, je suis tombé sous le charme du VAIO VGN-N31Z de chez Sony.

VGN-N11-03.jpg

Caractéristiques

  • Processeur : Intel Core 2 Duo T5500 cadencé à 1,66 Ghz,
  • Disque dur : 120Go S-ATA 5400 tr/min,
  • Mémoire : 2Go (2 x 1024Mo DDR2-667-SDRAM),
  • Ecran : 15,4" LCD X-black WXGA (1 280 x 800),
  • Carte graphique : Intel® Graphics Media Accelerator 950,
  • Lecteur de disque : DVD±RW/±R DL/RAM,
  • Réseau Sans-fil : Wireless LAN IEEE 802.11b/g,
  • USB : 2 x USB 2.0 (faible/haut/très haut débit),
  • Lecteurs de cartes : Express Card Slot (34 mm); Memory Stick™ Slot (MS Pro and Duo compatible); SD card slot,
  • Interfaces : Connecteur de VGA pour l' écran; 4 pin i.LINK™ (IEEE1394), 400 Mbps; RJ-11 DIRE; RJ-45 direct port Ethernet 10 BASE-T/100 BASE-TX; Headphone Jack; Microphone Jack.

Premier contact

Le clavier est agréable à utiliser et l'écran est tout simplement superbe :)

Le système d’exploitation pré-installé est Windows Vista Familial Premium. Le disque physique fait 111Go, répartis en deux partitions; la première, cachée, contient les données de restauration et fait 9Go. La seconde est le disque système de Windows Vista (C:\). Encore une fois, nous avons un portable pré-installé qui mélange système et données sur une seule partition… Ne plantez pas votre système !

Après lecture de la documentation fournie, j’apprends que la première étape, avant toute autre utilisation, consiste à créer les disques de restauration. Une application fournie par Sony et pré-installée sur Windows Vista va lire les données de la partition cachée et créer un ou deux DVD de sauvegardes (1 x 8Go / 2 x 4,7 Go). Une fois les galettes bien au chaud, il est possible de supprimer cette partition cachée. Pour le moment, je n’y touche pas.

Dans cette même documentation, je découvre que Windows Vista permet la modification de partition "à chaud", c’est à dire que je peux modifier la taille de la partition C:\ directement sous Windows Vista ! C’est un net progrès ! Par contre, cette modification connaît des limites. En effet, sur 102Go, le système pré-installé avec les applications annexes doit prendre seulement une vingtaine de Go, or je ne peux pas faire une partition plus petite que 70go… Cela permet de libérer 32Go pour une autre partition, ce qui suffira amplement pour installer Debian GNU/Linux, mais c’est tout de même dommage.

Au niveau de l’utilisation, je découvre l’interface Aero de Windows Vista : c’est sympa, eye-candy, mais rien de révolutionnaire. Je ne vois toujours pas d’option multi-bureaux, dommage. Au niveau des effets, le seul que j’ai trouvé vraiment sympa, c’est le survol des fenêtres réduites en barre des tâches : une miniature animée de la fenêtre apparaît, un peu comme le survol d’onglet dans le navigateur web Opéra. Reste à voir comment Microsoft fournira de nouveaux effets graphiques…

Bref, ce portable est joli et agréable à utiliser. On peut seulement regretter deux choses : que Sony n’ait pas fourni les DVD de restauration dans la boîte - à 999€, c’est un minimum ! - et que la vente liée de l’OS avec la machine soit toujours d’actualité - malgré le fait que la Loi française l’interdise (article L122-1 du Code de la Consommation) !

Dans un prochain journal, j’aborderai l’installation du système d’exploitation Debian GNU/Linux Etch sur la partition de 32go fraichement créée :)

MSDE - Assigner un mot de passe au compte 'sa

La procédure pour changer le mot de passe du compte sa (super-admin) dans MSDE est la suivante :

C:\>osql -E
1> sp_password @old = null,@new = 'nouveaumotdepasse', @loginname = 'sa'
2> go
Mot de passe changé.
1> quit

Vous pouvez ensuite tester ce mot de passe avec la commande suivante :

C:\>osql -U sa -S <hostname>

Installer Subversion sur Ubuntu GNU/Linux

Subversion, également connu sous le nom de SVN, est un gestionnaire de version Open Source distribué sous une licence de type Apache/BSD.

Cet article est avant tout destiné aux développeurs qui ont besoin de suivre l'évolution de leurs développements en équipe. Subversion stocke toutes les modifications de versions apportées au fichiers sous forme de révisions.

Nous nous intéresserons ici à l’utilisation de Subversion pour un projet de développement informatique. Cependant, il est possible d’utiliser Subversion pour tout type de gestion de contenu, comme une gestion de documentation. Nous allons voir comment créer rapidement un dépôt Subversion et comment y accéder à travers Apache2.

Distribution : Ubuntu GNU/Linux 6.10 (Edgy Eft)
Version de SVN : 1.3.2

Subversion fonctionne sur une architecture client/serveur. Les différentes informations sont stockées dans un dépôt qui fait office de serveur. Les clients SVN peuvent ensuite accéder au dépôt selon différents moyens. Dans cet article, l’accès au dépôt SVN se fera via le protocole WebDAV/DeltaV, une extension de HTTP 1.1.

Le client SVN récupère une "copie de travail" depuis le dépôt. Il est ensuite possible de travailler localement sur les fichiers, puis de soumettre (commit) les modifications au dépôt. Le serveur SVN se charge alors de comparer la version (revision) que vous lui envoyez avec la dernière version qu’il a en mémoire. Si le fichier n’a pas été modifié entre temps, il est enregistré et le numéro de révision est incrémenté. Sinon, le serveur SVN vous répond que le fichier a été modifié et vous présente les différences entre la dernière version du dépôt et la vôtre.

Le paquet subversion contient à la fois les outils pour administrer le serveur et le client. Pour accéder à un dépôt SVN via WebDAV, il faut utiliser les modules mod_dav_svn et mod_authz_svn du serveur HTTP Apache2. Ces modules sont contenus dans le paquet libapache2-svn.

Important
Il n’est pas possible d’utiliser ce module avec Apache 1.x.

En premier lieu, passer root sur la station. Sous Ubuntu, il n’y a pas de mot de passe super-utilisateur par défaut, nous utilisons donc sudo. Nous pouvons ensuite installer les paquets nécessaires.

$ sudo su
Password:
# apt-get install subversion libapache2-svn

Une fois les paquets installés, nous créons notre dépôt SVN à l’aide de la commande svnadmin. Nous avons choisi ici de nommer ce dépôt "nouveauprojet" et de l’installer dans /usr/local/svn

# mkdir /usr/local/svn
# svnadmin create /usr/local/svn/nouveauprojet
# ls -la /usr/local/svn/nouveauprojet
total 36
drwxr-sr-x 7 root staff 4096 2007-01-29 12:09 .
drwxr-sr-x 5 root staff 4096 2007-01-29 12:09 ..
drwxr-sr-x 2 root staff 4096 2007-01-29 12:09 conf
drwxr-sr-x 2 root staff 4096 2007-01-29 12:09 dav
drwxr-sr-x 5 root staff 4096 2007-01-29 12:09 db
-r--r--r-- 1 root staff    2 2007-01-29 12:09 format
drwxr-sr-x 2 root staff 4096 2007-01-29 12:09 hooks
drwxr-sr-x 2 root staff 4096 2007-01-29 12:09 locks
-rw-r--r-- 1 root staff  229 2007-01-29 12:09 README.txt

Le dépôt est créé !

Important
Vous pouvez remarquer que des fichiers sont présents dans le répertoire du dépôt. Vous ne devez pas travailler dans le répertoire que nous venons de créer. En effet, c’est Subversion qui gère les modifications à apporter au dépôt. Gardez à l’esprit que vous devez travailler sur une copie locale.

Pour information, il est possible d’importer un projet déjà existant à l’aide de la commande svn import. Il est également possible d’importer des projets auparavant gérés par CVS, l’ancêtre de Subversion. Pour cela, vous aurez besoin du paquet cvs2svn.

Nous passons maintenant à la configuration d’Apache2 qui va nous permettre d’accéder au dépôt SVN.

En premier lieu, nous pouvons vérifier que les modules mod_dav_svn et mod_authz_svn sont chargés.

# ls /etc/apache2/mods-enabled/ |grep dav_svn
dav_svn.conf
dav_svn.load

Le fichier dav_svn.load contient les directives qui permettent de charger les deux modules au démarrage d’Apache2. Le fichier dav_svn.conf contient un exemple de configuration du dépôt SVN.

Nous allons modifier ce fichier afin qu’il réponde à nos besoins.

Ajouts au fichier /etc/apache2/mods-available/dav_svn.conf
  # On indique ici le répertoire à utiliser dans l'URL pour accéder au dépôt
  <Location /nouveauprojet>
  DAV svn

  # On renseigne le chemin du dépôt
  SVNPath /usr/local/svn/nouveauprojet

  # Nous souhaitons donner un accès limité au dépôt. Les utilisateurs anonymes
  # pourront avoir un accès en lecture seule.  Les membres de l'équipe de
  # développement devront s'identifier pour pouvoir soumettre leur
  # modifications.
  AuthType Basic
  AuthName "Projet747.org Subversion Server :)"

  # Le fichier .htpasswd contient les comptes et mots de passe de l'équipe de
  # développement
  AuthUserFile /usr/local/svn/.htpasswd
  Satisfy Any
  Require valid-user

  # Le fichier authz contient les droits d'accès attribués aux utilisateurs
  AuthzSVNAccessFile /usr/local/svn/authz

  # Dans mon cas, Apache2 utilise l'encodage de caractères ISO-8859-1 par
  # défaut. Si votre projet utilise UTF-8, vous pouvez soit modifier votre
  # configuration, soit indiquer ici l'encodage à utiliser
  AddDefaultCharset utf-8
  </Location>

Comme vous pouvez le constater, le fichier de configuration fait appel à deux autres fichiers : .htpasswd qui contient les comptes et mots de passe et authz qui contient les autorisations d’accès.

Le paquet Apache2 fournit une commande qui permet de générer des couples compte/mot de passe. Cette commande est htpasswd :

# htpasswd -cs /usr/local/svn/.htpasswd bruno
New password:
Re-type new password:
Adding password for user bruno

Le paramètre -c indique que nous créons un nouveau fichier htpasswd. Lorsque vous ajouterez de nouveaux comptes, il ne faudra pas indiquer ce paramètre. Le paramètre -s force le cryptage SHA1 du mot de passe. Nous pouvons maintenant créer le fichier authz qui contient les accès aux différentes ressources du dépôt.

  # En premier lieu, nous pouvons créer des groupes
  [groups]
  neolan-devel = bruno,alx,arkadius
  neolan-testeurs = @neolan-devel,psychoben

  # Nous donnons ici les droits en lecture/écriture (rw) au groupe neolan-devel
  # Les autres utilisateurs n'auront qu'un accès en lecture seule (r) Le chemin
  # / indique que nous définissons les droits pour la racine du dépôt
  [/]
  @neolan-devel = rw
  * = r
  # Nous définissons ici un répertoire privé. Nous ne souhaitons pas autoriser
  # les utilisateurs anonymes à accéder au contenu de ce répertoire. Par contre,
  # le groupe des testeurs a besoin de cet accès.
  [/private]
  @neolan-testeurs = r
  * =

Nous avons donc créé différents groupes avec plusieurs utilisateurs. Nous pouvons créer ces comptes utilisateurs dans le fichier .htpasswd.

# htpasswd -s /usr/local/svn/.htpasswd alx

Nous devons également donner les droits d'écriture à l’utilisateur www-data sur le dépôt, sans quoi il nous sera impossible de soumettre les modifications.

# chown -Rf www-data /usr/local/svn/nouveauprojet

Maintenant que notre dépôt est configuré, nous pouvons créer la copie de travail locale.

$ pwd
/home/user
$ mkdir projets ; cd projets
$ svn checkout http://hostname.domain.tld/nouveauprojet
Révision 0 extraite.

Ce résultat est normal puisque nous travaillons sur un nouveau projet. Nous allons maintenant créer un nouveau fichier et l’ajouter à la copie de travail.

$ pwd
/home/user/projets/nouveauprojet/
$ cat <<EOF >> index.php
<?php
echo 'Hello World!';
?>
EOF
$ svn add index.php
A index.php

Nous pouvons maintenant soumettre notre fichier au dépôt SVN :

$ svn commit index.php -m "Affichage d'un message de bienvenue"
Ajout          index.php
Transmission des données .
Révision 1 propagée.

Le paramètre -m permet de commenter la mise à jour du fichier. Il existe différents clients SVN autres que la console ! Il est ainsi possible de configurer l’EDI (Environnement de Développement Intégré) Eclipse pour qu’il accède à un dépôt SVN à l’aide de l’extension Subclipse.

Pour les utilisateurs de Windows, il existe TortoiseSVN qui s’intègre directement à Explorer. Pour l’utiliser quotidiennement en milieu professionnel, je ne peux que vous le conseiller.

Cet article ne présente qu’une configuration simplissime de Subversion et est loin de couvrir toutes les possibilités qu’offre ce gestionnaire de version (ainsi que les aspects de sécurité !). Comme indiqué au début de cet article, je vous conseille la lecture du livre SVN en ligne sur http://svnbook.red-bean.com/.