Comme un lundi…pas comme les autres

Ce matin dans ma boite mail je tombe là dessus :

Date: Mon, 8 Dec 2008 00:42:29 +0000 (GMT)
From: H..... G..... <........@yahoo.fr>
Subject: freebsd
To: hugues@lepesant.com

Bonjour,

En faisant quelques recherches sur freebsd, je suis tombé sur votre blog.
Je suis en formation de technicien supérieur en réseau et télécommunication
d'entreprise et pendant mon stage en entreprise, il m'a été demandé d'installer
un FreeBSD et mettre en place une plate-forme mail. Mon tuteur de stage m'a
fourni le linux magasine n° 100 dans lequel il y a un tutoriel concernant
la mise en oeuvre d'une plate-forme mail avec FreeBSD et Exim4.

Le problème c'est que j'ai fait très peu de linux et FreeBSD n'étant pas du
linux,j'ai de grosses lacunes...
J'ai installé FreeBSD et en m'attaquant à la plate-forme mail je rencontre de
nombreuses impasses, ce n'est pas un tutoriel pas à pas donc il m'est très
difficile d'avancer...

Auriez-vous des adresses de site sur lesquelles je pourrai trouver des
tutoriels concernant l'installation d'une plate-forme mail, ou
auriez-vous des documentations qui pourraient m'aider ?

Je vous remercie d'avance de toute l'aide que vous pourriez m'apporter.

Cordialement

G..... H.....

Et ça fait plaisir de voir des petits gars qui s’essayent à FreeBSD.
Et surtout des tuteurs qui conseillent cet OS de la vie.
Plein de courage à toi…tu verras les poils poussent vite.

Enfin c’est l’occasion rêvée de l’envoyer chez mes amis les fous

Publié dans Humeur | Commentaires fermés sur Comme un lundi…pas comme les autres

Still runnin’ on Mars

Vous vous souvenez du robot Opportunity, balancée sur Mars, il y a 4 ans pour analyser cette planète.
Il ne devait foncionner que 90 jours….Et ben après 4 ans, il « roule » toujours .
C’est bizarre ces robots dont les ingénieurs ont un mal fou à calculer l’espérance de vie ?
Ca me rappelle un truc.

Publié dans Humeur | Laisser un commentaire

AppleCare ne sert à rien !!!

Il y a quelques mois, ma société a fait l’acquisition d’un Mac Mini Intel.
Comme il m’était destiné, et que j’y connaissais vraiment rien en hard Apple j’ai conseillé l’option AppleCare (199€ en plus).
Je me suis dit comme ça je suis peinard pendant 3 ans. Si le truc tombe en panne je les appelle, et Steve Jobs en personne vient réparer la pomme.

Pendant les derniers moi je transforme le truc en vrai station de travail, avec tout ce dont j’ai besoin.
Et comble de confiance je sauvegarde mes données dessus..(des fois je suis d’une connerie, enfin bref…)

Il y a quelques jours, je reviens de vacances.
J’allume le truc, et j’ai un bel écran gris, avec un dossier au milieu d’un gris plus foncé, et un point d’interrogation qui clignote.
Ouille……j’allume le laptop, vais faire un tour sur le site de support d’Apple.
Je foue le CD de MacOXS 10.4 dans le mange disque, je boote sur le CD.
Lance les utilitaires disques…ah il est là.
Mais impossible de restaurer le disque … problème de noeud.

Re Site Apple Support : « Réinstaller », réinstallons….
Commence la procédure d’installation….impossible de trouver le disque.
Et donc impossible de réinstaller le système.

Re Site Apple Support : « Formater », formatons….
Et tout le disque rempli de 0, adieu données (sniff!!)
Re-commence la procédure d’installation….impossible de trouver le disque.
Impossible de réinstaller le système.

Ensuite je deviens fou.
Je lance l’utilitaire de disque et je crée 2 partitions.
Je lance la procédure d’installation….Elle détecte bien le disque mais ne trouve qu’une seule partition…la deuxième 🙁

Et là je me dis que bon le disque est foutu, mais j’ai l’AppleCare, je suis sauvé Steve Jobs va venir me changer mon disque.

11/08/2008 16:11:46
J’appelle à AppleCare. Une charmante demoiselle me demande de refaire tout ce que je viens de faire…
Boot, utilitaire disque, formatage…..elle aussi elle va sur Site Apple Support.
Au bout de quelques minutes d’attente elle m’annonce que Steve est un peu occupé, mais que la société qui assure le support va me contacter dans les 48 heures pour me changer mon disque.

12/08/2008 11:32:43
Appel d’un technicien de la société Maintronic IDF pour me demander la taille de mon disque.
Ah….vous n’avez pas le n° de série du MacMini et donc toutes ses caractéristiques ?
J’ai failli tenter 250Go, mais je suis honnête et donne la vraie taille : 120Go.

13/08/2008 14:57:38
Autre appel de Maintronic. »Nous avons votre disque, on passe lundi à 14h »
Super !!!

18/08/2008 17:52:15
Toujours pas de nouvelle du tech de Maintronic.
Je les appelle. J’explique que quelqu’un devait venir à 14h, et que j’ai vu personne.
Réponse de mon interlocutrice : « je vais contacté le technicien, mais à 18h02 je pense pas qu’il décroche, Je vous rappelle ».
(??!!!???)

19/08/2008 13:46:39
Pas de nouvelle de Maintronic.
J’appelle AppleCare, j’explique la situation.
Réponse de mon interlocuteur (qui n’est toujours pas Steve Jobs) « A partir du moment où on a transférer votre dossier à notre sous-traitant il faut voir avec lui! »
Ouaip, mais non. Les 199€ de l’AppleCare c’est toi qui les a pris. Mon seul contact c’est toi. Si ton sous-traitant merde c’est de ta faute pas la mienne.
Enfin dans ma boite c’est comme ça que ça se passe.
Je leur demande de mettre un peu de pression sur Maintronic (même s’il m’avoue ne pas pouvoir).
J’ose demander à quoi sert l’AppleCare dans ces conditions…et puis passer moi Steve il faut que je lui parle.
Mais rien n’y fait.

19/08/2008 16:50:45
Appel de Maintronic sur ma boite vocale.
« Bonjour Monsieur. Pour notre visite de lundi le tech qui devait passer s’est rendu compte que la pièce commandée ne correspondait pas à la pièce défectueuse (250Go???) et donc il est pas venu (peux prévenir, non?). Nous avons relancer une commande auprès d’Apple, dés qu’on a la bonne pièce on vous rappelle ».
Je résume… le message est .

22/08/2008 10:43:30
Toujours pas de nouvelle de Maintronic.
J’appelle donc AppleCare qui est mon seul interlocuteur (celui qui a encaissé les 199€).
La voix est cette fois-ci masculine…mais c’est toujours pas Steve :-(.
J’explique au monsieur. Il lit le dossier et m’annonce qu’il va contacter le niveau 2.
Quelques minutes d’attente plus tard, il me dit que le niveau 2 est en train d’appeler Maintronic. Il me demande de rester en ligne pour me tenir au courant.
Musique d’attente….
La pièce devrait arrivée chez Maintronic aujourd’hui. Maintronic devrait m’appeler aujourd’hui ou demain (samedi !?!) pour convenir d’un rendez-vous pour venir changer le disque.
En attendant je demande s’il ne peut pas faire autre chose.
La personne prend mon numéro pour me rappeler avec le service des relations clientèles.
J’espère donc un geste commercial. Ca tombe bien j’ai un vieux PowerBook G4 15 » donc l’écran est cassé.

22/08/2008 11:07:29
Appel du service « Relation Clientèle ». Le monsieur est désolé (en plus il ne se prénome pas Steve !!).
Il va rappeler Maintronic pour faire le point avec eux.
Il me rappelle en début d’après-midi pour faire le point avec moi.

22/08/2008 12:42:41
Nouvel appel de mon nouvel « ami » (on va l’appeler GO) du service « Relation Clientèle d’Apple ». Le monsieur semble assez embarrassé. Il a contacté Maintronic, et est tombé sur un répondeur lui disant qu’ils sont fermés. J’ai un gros doute sur la réception de la pièce (le disque) aujourd’hui s’ils sont fermés.
J’en fait part à GO….lui aussi de pose (maintenant) la question.
Il recommence tout lundi, tout en me disant que cela n’excluait pas le fait que Maintronic pouvait m’appeler demain samedi.
Je reste sans voix devant autant d’optimisme….

25/08/2008 18:06:??
Appel sur mon portable (un iPhone 1ère génération) de GO. Il n’est toujours pas arrivé à joindre le centre de support (aka Maintronic).
Mais par contre le service logistique de AppleCare lui confirme que la pièce a bien été réceptionnée le 22 Aout par Maintronic.
Et que donc je devrais être contacté par Maintronic prochainement pour convenir d’un rendez-vous afin de changer le disque.
Je luis fais par de mes doutes, et qu’on verra bien, je suis d’une patience d’ange (mais là je trouve qu’il pousse un peu).
Je suis sure que Steve Jobs aurais fait plus vite, même de Cupertino en Californie !!!
Il me rappelle jeudi pour faire le point….

28/08/2008 15:18:57
Youpi !!!!!!!
Je viens juste de revoir un appel de Maintronic. J’ai donc un nouvel ami (on va l’appeler AM).
A me demande si un de ses amis (BM?) peut passer lundi.
Je suis tout en joie, mais j’ai comme l’impression d’avoir déjà vécu cette situation ??!!??!!
On verra lundi, pour le moment j’attends l’appel de GO pour lui communiquer la bonne nouvelle.
Il devrait m’appeler, il l’a promis 😉

01/09/2008 10:51:18
Houra !!!
Je viens de recevoir un appel du technicien de Maintronic, mais si vous savez la boite que Apple(Care) utilise comme prestataire pour les réparation sur site.
Normalement il passe dans 1 heure.
Par contre mon ami GO ne m’a pas donner signe de vie….je m’inquiète.
Je vous tiens au courant 🙂

01/09/2008 vers 12h
Le tech de Maintronic est passé.
Il a démonté le MacMini avec une spatule de vitrier !!!
J’ai retrouvé la photo de l’outil c’est ici.
Enfin le disque a été changé, et je suis de nouveau sous Mac 🙂

02/09/2008 : Epilogue ??
Toujours pas de nouvelle de GO !!!!

J’ai eu des précisions sur cette histoire de pièce commandée les premiers jours et non conforme.

Apple a livré le 13/08/08 une barrette de RAM dans un carton de disque dur. Il y a donc un premier cafouillage chez Apple.

Mais c’est pas tout. Maintronic n’a fait une réclamation auprès de Apple que le 19/08/08. Même avec le 15 août au milieu ça fait beaucoup de temps. Cafouillage n°2.

Puis le disque a été réceptionner le 25/08/08 (ce qui correspond à ce que m’a dit GO), soit 6 jours après la réclamation. Cafouillage n°3.

Enfin il a fallu 3 jours ( 28/08/08) pour que Maintronic m’appelle pour convenir d’un rendez-vous.

Et dire que si Apple n’avait pas « cafouillé » dans la livraison de la pièce le 13/08/08 tout aurait été réglé en une semaine, et pas trois.

Ca donne une idée de la logistique chez Apple, et de la qualité de ces prestations et prestataire.

Pour finir je pense que je ne prendrais pas d’assurance Apple Care lors de l’achat de mon prochain Mac.
Par contre je trouverais une spatule 🙂

Un cadeau de remerciement de la part de Apple
Comme j’étais sans nouvelle de mon ami GO, j’ai appelé encore une fois AppleCare, le 03/09/2008 à 18:10:41.
Je suis tombée sur une charmante demoiselle, GO est en vacance !!! 😉
Après qu’elle est relu le dossier, elle m’a fait parvenir un e-Coupon d’une valeur de 100€.
Et vous savez ce que j’ai fait avec ?
Je viens de m’acheter un autre MacMini….mais sans AppleCare cette fois-ci 🙂

Publié dans Humeur | Laisser un commentaire

Intel PRO/Wireless 3945ABG wpi wpa tkip

J’ai passé mon laptop « professionel » sous OpenBSD 4.3.
Curieuse idée me direz-vous ? Pas tant que ça.

  1. Ca faisait longtemps que ca me travaillait.
  2. L’upgrade de l’Ubuntu 7.10 et 8.04 a été très néfaste pour la partie Wireless

Alors pourquoi pas FreeBSD ou NetBSD ?
Je connais bien FreeBSD, et ça ne devait pas me poser de problème.
Quant à NetBSD, cet OS m’est encore trop inconnu mais j’y viendrais.

Ma grande inconnue était le support de la carte Wifi.
Mon laptop est un Dell Latitude D620 avec donc avec une Intel PRO/Wireless 3945ABG.

Ce qui m’a finallement décidé pour OpenBSD était ici

Installation
Pas de souci selon la doc de OpenBSD
Mais les modifications de damien@ ne sont pas dans la release.
Il faut passer en current (avec une connexion câble pour le moment…)

Upgrade

Récupération des sources -current
Choisir un mirroir CVS parmi la liste ici

# cd /usr
# rm -rf src
# export CVSROOT=anoncvs@<mon mirroir>:/cvs
# cvs -d $CVSROOT checkout -P src

Ca peut prendre du temps….selon le mirror choisi.

Compilation du noyau

# cd /usr/src/sys/arch/i386/conf
# config GENERIC
# cd ../compile/GENERIC
# make clean && make depend && make
# make install
# reboot

Compilation du userland

# rm -rf /usr/obj/*
# cd /usr/src
# make obj
# cd /usr/src/etc && env DESTDIR=/ make distrib-dirs
# cd /usr/src
# make build

Ensuite on suit les instructions

Enfin on suit les instructions du « man (4) wpi », on installe le firware de la carte (#@ »@!! Intel).


pkg_add -v http://damien.bergamini.free.fr/packages/openbsd/wpi-firmware-2 achat de viagra internet.14.1.5.tgz

Et « reboot »
Vous pouvez débrancher le cable.

Configuration de la carte Wifi
Rien de plus simple :

WEP (devait passer en -stable) :

ifconfig wpi0 nwid <ssid> nwkey 0x<clef WEP HEXADECIMAL>

WPA/TKIP (-current obligatoire) :

# ifconfig wpi0 nwid <ssid> wpa wpapsk `wpa-psk <ssid> <passphrase>`

Puis

# ifconfig wpi0 up
# dhclient wpi0

Et là on dit : « Merci Monsieur Damien Bergamini ».

Publié dans OpenBSD | Commentaires fermés sur Intel PRO/Wireless 3945ABG wpi wpa tkip

Appel SOAP sur un Cisco Call Manager (AXLAPI et WebdialerAPI)

Dans la large gamme des produits Cisco, on retrouve le Cisco CallManager.
C’est un IPBX, on parle donc de voix sur IP (VoIP), et ici de la version 4.2(3).

Je ne discuterais pas de l’interface un rien complexe de l’interface d’administration (/ccmadmin/) ou de l’interface utilisateur (/ccmuser/).

Parmis tous les services qui tournent sur le serveur, deux m’ont particulièrement attiré.

  1. Cisco Web Dialer API Reference Guide for Cisco Unified CallManager 4.2(3)
  2. Cisco AXL Programming Guide for Cisco Unified CallManager 4.2(3)

Le premier présente l’application WebDialer qui permet de piloter son poste téléphonique en initiant des appels à partir de son navigateur préféré. Mais détaille aussi le moyen de passer des ordres SOAP pour faire comme l’application Webdialer mais sans ouvrir une popup du navigateur…

Le deuxième permet de passer des ordres SOAP au Cisco CallManager, et donc aux plus courageux de développer une interface d’administration du serveur.

Je me suis donc amusé à coder un WebService en PHP pour initier des appels sur un CallManager.
Ce Webservice étant par la suite utilisé par un Yahoo! Widget dévelloper par mes soins pour un client.

Paramètres
Pour les exemples ci-dessous nous considèrerons que :

  • Hostname du CallManager : mon.callmanager.com
  • Utilisateur SOAP : soapuser
  • Mot de passe SOAP : secret
  • $userid : userid de l’utilisateur connecté sur le poste téléphonique IP.
  • $codepin : le code PIN de l’utilisateur
  • $destination : le numéro a appeler
  • $deviceName : le profile associé au poste téléphonique IP.

Webdialer SOAP API

Pour initier un appel

<?php
/*
plus rapide qu’il soit en local que sur le CallManager
Distant : http://mon.callmanager.com/webdialer/wsdl/WebdialerSoap.wsdl
*/
$wsdl = ‘/path/to/cisco/WebdialerSoap.wsdl’;
$location = ‘http://mon.callmanager.com/wdsoap/servlet/rpcrouter’;

$options = array(
‘uri’ => ‘urn:WebdialerSoap’,
‘location’ => $location,
‘connection_timeout’ => 10,
‘soap_version’ => SOAP_1_1,
);

$client = new SoapClient( $wsdl, $options);

$params = array(
‘Credential’ => array(
‘userID’ => $userid,
‘password’ => $codepin,
),
‘dest’ => $destination,
‘UserProfile’ => array(
‘user’ => $userid,
‘deviceName’ => $deviceName,
‘lineNumber’ => $codepin,
‘supportEM’ => true,
‘locale’ => ‘FR’
),
);

$response = $client->__soapCall(‘makeCallSoap’, $params);
/* ou */
/*
$response = $client->makeCallSoap($params);
*/
?>

Et pour raccrocher :


<?php
$wsdl = '/path/to/cisco/WebdialerSoap.wsdl';
$location = 'http://mon.callmanager.com/wdsoap/servlet/rpcrouter';

$options = array(
‘uri’ => ‘urn:WebdialerSoap’,
‘location’ => $location,
‘connection_timeout’ => 10,
‘soap_version’ => SOAP_1_1,
);

$client = new SoapClient( $wsdl, $options);

$params = array(
‘Credential’ => array(
‘userID’ => $userid,
‘password’ => $codepin,
),
‘UserProfile’ => array(
‘user’ => $userid,
‘deviceName’ => $deviceName,
‘lineNumber’ => $codepin,
‘supportEM’ => true,
‘locale’ => ‘FR’
),
);

$response = $client->__soapCall(‘endCallSoap’, $params);
/* ou */
/*
$response = $client->endCallSoap($params);
*/
?>

Les informations relatives au $deviceName sont récupérés par un appel similaire à la méthode SOAP « getProfileSoap ».

Exemple :

<?php
$wsdl = '/path/to/cisco/WebdialerSoap.wsdl';
$location = 'http://mon.callmanager.com/wdsoap/servlet/rpcrouter';

$options = array(
‘uri’ => ‘urn:WebdialerSoap’,
‘location’ => $location,
‘connection_timeout’ => 10,
‘soap_version’ => SOAP_1_1,
);

$client = new SoapClient( $wsdl, $options);

$params = array(
‘Credential’ => array(
‘userID’ => $userid,
‘password’ => $codepin,
),
‘userid’ => $userid,
);

$response = $client->__soapCall(‘getProfileSoap’, $params);
/* ou */
/**/
$response = $client->getProfileSoap($params);

if (is_soap_fault($response)) {
trigger_error(« SOAP Fault: (faultcode: {$result->faultcode}, faultstring: {$result->faultstring}) », E_USER_ERROR);
}

var_dump( $response );
?>

Le problème c’est que la méthode « getProfileSoap » n’est pas utilisable dans un environement « Extension mobility ».

Et donc il faut faire appel à AXLAPI.

AXL API
La on va taper dans la base de données du CallManager grace à une méthode SOAP : executeSQLQuery.


<?php
$wsdl = '/path/to/cisco/AXLAPI.wsdl';
$location = 'http://mon.callmanager.com/CCMApi/AXL/V1/AXLAPI.wsdl';

$options = array(
‘login’ => ‘soapuser’,
‘password’ => ‘secret’,
‘location’ => $location,
‘connection_timeout’ => 10,
‘soap_version’ => SOAP_1_1,
);

$client = new SoapClient( $wsdl, $options);

$params = array(
‘sql’ => sprintf(« SELECT TOP 1 Name FROM Device WHERE LoginUserid = ‘%s’ AND Name LIKE ‘SEP%%’; », $userid)
);

$response = $client->executeSQLQuery($params);

if (is_soap_fault($response)) {
trigger_error(« SOAP Fault: (faultcode: {$result->faultcode}, faultstring: {$result->faultstring}) », E_USER_ERROR);
}

var_dump( $response );
?>

Noter comme l’authentification entre la WebdialerAPI et la AXLAPI sont différents.
Les paramètres Credential sont implémentés de manières différentes.

have fun
hug

Publié dans Mes docs | Commentaires fermés sur Appel SOAP sur un Cisco Call Manager (AXLAPI et WebdialerAPI)

Initialisation d’un repository SVN pour un projet Symfony dedans

Objectif :

Créer un repository SVN pour un projet Symfony.
Rapatrier le projet sur un serveur de dévelopement.
Travailler sur le projet à distance du serveur SVN via SSH.

Serveur SVN : caztor.tite-cabane.org
Serveur de dev : localhost, c’est mon laptop ?
Projet : phu.veepee.dev
Utilisateur : moi, aka hugues

1. Sur le serveur SVN
1.1. Définition de quelques variables d’environement

$ export SVNREP_DIR=/home/hugues/svn
$ export SVN_EDITOR=vim

1.2 Créer un repository pour le nouveau projet
Je pars du principe que le répertoire svn est dans la home de l’utisateur

$ cd
$ mkdir svn
$ svnadmin create --fs-type fsfs $SVNREP_DIR/phu.veepee.dev
$ svn ls file://$SVNREP_DIR/phu.veepee.dev
$ svn mkdir -m "layout creation" file:///$SVNREP_DIR/phu.veepee.dev/trunk \
     file:///$SVNREP_DIR/phu.veepee.dev/tags \
     file:///$SVNREP_DIR/phu.veepee.dev/branches

2. Sur le serveur de développement

2.1. Rapatriement du projet en local

$ cd /opt/WebSites
$ svn checkout svn+ssh://caztor.tite-cabane.org/home/hugues/svn/phu.veepee.dev

2.2. Création de l’arborescence de base

$ cd phu.veepee.dev
$ mkdir trunk/data trunk/lib
$ svn add trunk/data trunk/lib
$ svn ci -m "data et lib"
$ cd trunk

Le reste du boulot s fait dans trunk.

2.4. Definition des repository externe pour Symfony

2.4.1. data

$ svn pe svn:externals data

pour symfony 1.0, copier la ligne suivante en haut du fichier :

symfony http://svn.symfony-project.com/branches/1.0/data/

pour symfony 1.1, copier la ligne suivante en haut du fichier :

symfony http://svn.symfony-project.com/branches/1.1/data/

2.4.2. lib

$ svn pe svn:externals lib

pour symfony 1 le viagra en ligne.0, copier la ligne suivante en haut du fichier :

symfony http://svn.symfony-project.com/branches/1.0/lib/

pour symfony 1.1, copier la ligne suivante en haut du fichier :

symfony http://svn.symfony-project.com/branches/1.1/lib/

2.5. Commit

$ svn ci -m "Symfony dependancies"

2.6. Update
Permet de rapatrier les sources de Symfony

$ svn update

2.7. Fichier de config
Au même niveau que data/ et lib/

$ mkdir config
$ vim config/config.php

Et copier les lignes ci-dessous :

< ?php
// symfony directories
$sf_symfony_lib_dir = realpath(dirname(__FILE__).'/../lib/symfony');
$sf_symfony_data_dir = realpath(dirname(__FILE__).'/../data/symfony');

2.8. Vérification de la version de Symfony

$ ./data/symfony/bin/symfony -V
symfony version 1.1.0-DEV

3. Génération du projet Symfony

$ ./data/symfony/bin/symfony generate:project phu.veepee.dev

pour Symfony 1.1
ou

$ ./data/symfony/bin/symfony init-project phu.veepee.dev

pour Symfony 1.0.

4. Tips pour 1.1

4.1. Author

./symfony configure:author "Hugues Lepesant hugues@lepesant.com"

4.2. Database

./symfony configure:database pgsql://devuser:devpass@localhost/phudb

Et voilà.
Vous pouvez coder…

Hug

Publié dans Symfony | Commentaires fermés sur Initialisation d’un repository SVN pour un projet Symfony dedans

J’ai rencontré un nom

Aujourd’hui, j’ai eu la chance d’assister à une présentation commercial d’une appliance DNS, DHCP, TFTP, RADIUS, IPAM, … de chez Infoblox.

Je dis que j’ai eu de la chance car parmi les intervenants il y avait M. Cricket Liu, mais si l’auteur de « Dns & Bind » chez O’Reilly.

Et c’est tout ému, et armé d’un stylo que je lui ai demandé de me dédicacer mon exemplaire de « Dns et Bind » 4ème édition (en français je sais). Ce qu’il a fait avec la plus grande sympathie, merci M. Liu ?

Et voici les photos du bouquin :

Voilà donc ce soir j’ai encore 12 ans ?

N.B:
Ca me rappelle une vie [professionnelle] antérieure où j’ai approché Nat Makarévitch ?

Publié dans Rencontres | Laisser un commentaire

OpenXchange 5 SOAP Admin PHP scripts

The commercial edition of OpenXchange 5
comes with some tools to manage users, groups, resource or group of resource.

This tools must be used in commande line and are located in :


/opt/openexchange/ox_admin_tools/openexchange-daemons/sbin/

There is no way to give a minimalist administration interface of their users,
groups, resources and group of resource with the OxAdmin interface.

So I made this few PHP scripts to act as a SOAP server.
This PHP script run each OXAdmin command line tools in a SOAP call.
They are the base of any web interface to manage the open-xchange server.
They use nusoap with PHP4.

Download now !

To execute this scripts you must :
– install some RPMs to have php4
– configure sudo to make the user running apache able to run the oxadmin tools
– untar the archive file in /var/www/html/
– restart apache

This scripts are under GPL.
Use, modify, send feedback, re-distribute.

Have fun,
Hug

Publié dans Mes Projets | Commentaires fermés sur OpenXchange 5 SOAP Admin PHP scripts

Installation Debian/Woody sur un Cobalt RaqX via réseau

Objectif:
Installer un serveur Cobalt Raq 3/3i/4/550 sans avoir besoin de démonter le disque dur, et donc via le réseau.

Moyens:
Les RaqX sont équipés de carte réseau PXE.
C’est à dire que le serveur peut booter à travers le réseau, et charger un mini système en mémoire.
A partir de là il est possible de préparer le disque du Raq en y installant un système de base.
Pour cet exercice nous allons utiliser une Debian.

NB:
Ce document reprend une partie des informations citées par Zone38 ici.
Pour les raq3/3i/4 il sera nécessaire de flasher la ROM du Raq, PAS LES 550.

Etapes:
Dans un premier temps nous allons configurer notre serveur debootstrap : bootp, dhcp, tftp.
Puis nous configurons un environement minimal sur ce serveur.
Enfin nous ferons booter le Raq à travers le réseau sur ce système minimal, ce qui nous permettra de le préparer pour un boot autonome.

1. Préparation du serveur debootstrap

Installation des packages nécessaires :


# apt-get install dhcp3-server syslinux tftpd-hpa

dhcp3-server :
Ce service nous permettra d’attribuer une IP à notre Raq, et d’indiquer le serveur bootp.

syslinux :
Ceci est un boot loader permettant l’installation de Linux sur des systèmes distants ayant des partitions MS-DOS/Windows FAT.
Il est concu pour simplifier l’instalalation de Linux, et la création de disquette de rescue, ou d’autre disque de boot.
Il peut notament être utilisé comme bootloader PXE pour des boot à travers le réseau.

tftpd-hpa :
Service TFTP dérivé de OpenBSD. Très utile dans le cas d’installation via PXE.
Ce service sera pris en charge par inetd.

1.1. Configuration du tftp et du PXE.

Copier /usr/lib/syslinux/pxelinux.0 dans /var/lib/tftpboot :


# cp /usr/lib/syslinux/pxelinux.0 /var/lib/tftpboot/

Ensuite créer le dossier pxelinux.cfg dans /var/lib/tftpboot :


cd /var/lib/tftpboot
mkdir pxelinux.cfg

Puis créer le fichier /var/lib/tftpboot/pxelinux.cfg/default qui va contenir :


vim pxelinux.cfg/default

avec les lignes suivantes :

PROMPT 0
DEFAULT pxe
LABEL pxe
KERNEL vmlinuz
APPEND initrd=initrd.img root=/dev/nfs nfsroot=192.168.107.77:/nfsroot-x86
IPAPPEND 1

Explications :
On défini en fait le kernel, et les parametres à passer au noyau :

– KERNEL vmlinuz : donc il va chager le kernel nommé vmlinuz dans /var/lib/tftpboot.
– APPEND : listes des paramètres à passer au kernel :
. initrd=initrd.img : chargera initrd.img à partir de /var/lib/tftpboot
. root=/dev/nfs : le root sera sur un disque NFS
. nfsroot=192.168.107.77:/nfsroot-x86 : chemin d’accès au partage.

A noter qu’ici l’IP 192.168.107.77 correspond à celle de votre serveur debootstrap.

1.2. Installation et configuration du NFS.

Une fois que notre Raq aura booté, il cherchera à monter une partition NFS à travers le réseau.
Il faut donc installer un serveur NFS, et le configurer de manière à ce que le Raq y trouve un système complet.

1.2.1 Installation du serveur NFS.

Pour plus de simplicité on choisirat la version userland du NFS de la debian.


# aptitude install nfs-user-server

1.2.2. Configuration du NFS.


# mkdir /nfsroot-x86

Edition du fichier /etc/exports :


# vim /etc/exports

Ajouter la ligne suivante :

/nfsroot-x86 192.168.107.78 (rw,no_root_squash)

– /nfsroot-x86 : correspond au partage.
– 192.168.107.78 : l’ip du Raq après requète DHCP.
– rw : Read Write (c’est mieux de pouvoir ecrire)
– no_root_squash : parce que sinon toute action en root est transformé en nobody…

Relancer le service NFS :


# /etc/init.d/nfs-user-server restart

1.2.3. Installation du système minimal dans ls NFS.

Pour cela on utilise debootstrap, ce qui permet de faire une install de base Debian.


# apt-get install debootstrap
# debootstrap sarge /nfsroot-x86 http://archive.debian.org/debian/

debootstrap va alors télécharger, puis vérifier un ensemble de package, et enfin les installer.

I: Retrieving debootstrap.invalid_dists_sarge_Release
I: Validating debootstrap.invalid_dists_sarge_Release
I: Retrieving debootstrap.invalid_dists_sarge_main_binary-i386_Packages
I: Validating debootstrap.invalid_dists_sarge_main_binary-i386_Packages
I: Checking adduser...
I: Checking apt...
I: Checking apt-utils...
I: Checking aptitude...
I: Checking at...
I: Checking base-config...
I: Checking base-files...
I: Checking base-passwd...
I: Checking bash...
I: Checking bsdmainutils...
I: Checking bsdutils...
....
Setting up base-config (2.53.10) ...

I: Base system installed successfully.
umount: /nfsroot-x86/dev/pts: not mounted
umount: /nfsroot-x86/dev/shm: not mounted
umount: /nfsroot-x86/proc/bus/usb: not mounted

Puis nous modifions le /etc/fstab afin de luis rajouter une ligne pour


# vim /etc/fstab

proc            /nfsroot-x86/proc proc  defaults        0       0

Enfin nous monter /nfsroot-x86/proc :


# mount proc /nfsroot-x86/proc -t proc

Notre « boot-système » est presque prêt.
Nous allons apporter quelques mofication spécifique au Raq.

1.2.4 Quelques fichiers utiles

S’assurer que le fichier /nfsroot-x86/etc/resolv.conf existe et qu’il est semblable au votre, sinon le copier à partir de /etc/resolv.conf


# cp /etc/resolv.conf /nfsroot-x86/etc/resolv.conf

Copier votre fichier sources.list pour apt :


# cp /etc/apt/sources.list /nfsroot-x86/etc/apt/

Modifier le fichier /etc/inittab :


# vim /etc/inittab

...
# Example how to put a getty on a serial line (for a terminal)
#
T0:23:respawn:/sbin/getty -L ttyS0 115200 vt102
T1:23:respawn:/sbin/getty -L ttyS1 115200 vt102
...

Cela permettra d’accèder au Raq via un cable console, pour la suite de l’installation.

1.2.5. Installation de quelqueq paquets utiles :


{chroot}# aptitude install vim sudo
{chroot}# visudo

Si RAID soft :

{chroot}# aptitude install mdadm

Il y a la possibilité d’installer ssh, dans ce cas je vous conseille alors de modififer le fichier /etc/ssh/sshd_config pour qu’il écoute sur l’IP de votre


{chroo}# apt-get install ssh
{chroo}# vi /etc/ssh/sshd_config

- #ListenAddress 0.0.0.0
+ ListenAddress 192.168.107.78

Entrer dans /nfsroot-x86 avec chroot :


# chroot /nfsroot-x86 /bin/bash

Là vous pouvez lancer base-config pour finaliser l’installation du deboostrap.


{chroot}# base-config

1.3. Configuration du serveur DHCP

Nous allons récupérer l’adresse MAC du Raq.
Pour cela raccorder un cable série en 15200 n 8.

Puis lancer minicom avec les bons paramètres, et allumer le Raq.
Dans la séquence de boot du Raq vous devez voir ceci (exemple tiré d’un Raq550):

...
Initializing ethernet: 2 controller(s) found
  National Semiconductor DP83815 Found at port 0xfe00, MAC: 00:10:e0:05:ef:03
  National Semiconductor DP83815 Found at port 0xfd00, MAC: 00:10:e0:05:ef:c6
...

C’est la première ligne qui nous intéresse.

Editer le fichier de configuration de votre serveur DHCP :


# vim /etc/dhcp3/dhcpd.conf

Et ajouter les lignes suivantes :

host cobalt_pxe {
        hardware ethernet 00:10:e0:05:ef:03;
        filename "/pxelinux.0";
        server-name "backup";
        next-server 192.168.107.77;
        fixed-address 192.168.107.78;
}

Retirer les « \ » c’est WordPress qui les rajoute 🙁

Et relancer votre service dhcpd


# /etc/init.d/dhcp3-server restart

2. Configuration du Cobalt

Le processus de boot du Cobalt est le suivant :

  1. booter sur la ROM et charger en RAM un mini noyau Linux
  2. Selon l’option de boot (Net,Disk,etc ..) le Raq va alos chercher un faire un deuxième boot sur un kernel vmlinuz

Il est possible de configurer le Raq pour booter sur le réseau.
Pour cela, via minicom, dans la séquence de boot du Raq vous devez voir ceci :

IDE: stabilizing spinup: 100%
Checking Memory: done

Press spacebar to enter ROM mode

Taper sur la barre d’espace, et voilà vous êtes dans la ROM.

Maintenant nous allons dire au Raq qu’au prochain reboot il devra booter sur le réseau et sur l’IP de notre serveur :

Cobalt:Main Menu> boot

Cobalt:Boot Menu> read_boot_type
From disk

Cobalt:Boot Menu> read_boot_dev
md1

Cobalt:Main Menu> lowlevel

{si pas de dhcp}
Cobalt:Lowlevel Hardware Menu> cmos

Cobalt:CMOS Menu> btoip 192 168 107 77
{/fi}

Cobalt:CMOS Menu> main

Cobalt:Main Menu> bfn

Vérifier dans les logs de votre serveur bootstrap que le NFS est bien pris en compte :


# tail -f /var/log/syslog

May 11 13:59:21 localhost mountd[10989]: NFS mount of /nfsroot-x86 attempted from 192.168.107.78
May 11 13:59:21 localhost mountd[10989]: /nfsroot-x86 has been mounted by 192.168.107.78

Voilà, dans le minicom vous devez voir apparaitre un prompt Debian.

3. Installation du Cobalt

Nous allons préparer le disque du Raq pour accueillir une Debian.

3.1 Partitionner et formater le disque


{serial}# fdisk /dev/hda

Exemple :

   Device Boot         Start         End      Blocks   Id  System
   /dev/hda1               1       19842    10000336+  83  Linux                 /
   /dev/hda2           19843       21827     1000440   82  Linux swap / Solaris  swap
   /dev/hda3           21828       41669    10000368   82  Linux                 /var
   /dev/hda4           41670       77545    18081504   82  Linux                 /opt

Dans le cas d’une configuration de raid logiciel :

# fdisk /dev/hda

Command (m for help): p

Disk /dev/hda: 40.0 GB, 40020664320 bytes
16 heads, 63 sectors/track, 77545 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hda1               1        7938     4000720+  fd  Linux raid autodetect
/dev/hda2            7939        9923     1000440   fd  Linux raid autodetect
/dev/hda3            9924       17841     3990672   fd  Linux raid autodetect
/dev/hda4           17842       77545    30090816   fd  Linux raid autodetect
# fdisk /dev/hdc

Command (m for help): p

Disk /dev/hdc: 40.0 GB, 40020664320 bytes
16 heads, 63 sectors/track, 77545 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/hdc1               1        7938     4000720+  fd  Linux raid autodetect
/dev/hdc2            7939        9923     1000440   fd  Linux raid autodetect
/dev/hdc3            9924       17841     3990672   fd  Linux raid autodetect
/dev/hdc4           17842       77545    30090816   fd  Linux raid autodetect

Puis formater les partitions :


{serial}# mke2fs -r 0 -O none /dev/hda1
{serial}# mke2fs /dev/hda3
{serial}# mke2fs /dev/hda4
{serial}# mkswap /dev/hda2
{serial}# swapon /dev/hda2

Ensuite on les monte dans /mnt :


{serial}# mount /dev/hda1 /mnt
{serial}# mkdir /mnt/var
{serial}# mount /dev/hda3 /mnt/var
{serial}# mkdir /mnt/opt
{serial}# mount /dev/hda4 /mnt/opt

Dans le cas d’un RAID 1 soft :

a. Création du raid

{serial}# mdadm --create /dev/md1 --level 1 --raid-devices=2 /dev/hda1 /dev/hdc1
{serial}# mdadm --create /dev/md2 --level 1 --raid-devices=2 /dev/hda2 /dev/hdc2
{serial}# mdadm --create /dev/md3 --level 1 --raid-devices=2 /dev/hda3 /dev/hdc3
{serial}# mdadm --create /dev/md4 --level 1 --raid-devices=2 /dev/hda4 /dev/hdc4

b. Vérification de la synchronisation

{serial}# cat /proc/mdstat

c. Configuration du RAID

{serial}# mdadm --detail --scan
{serial}# mdadm --detail --scan > /etc/mdadm.conf

d. Formatage des partitions et montage

{serial}# mke2fs -r 0 -O none /dev/md1
{serial}# mke2fs /dev/md3
{serial}# mke2fs /dev/md4
{serial}# mkswap /dev/md2
{serial}# swapon /dev/md2
{serial}# mount /dev/md1 /mnt/
{serial}# mkdir /mnt/var
{serial}# mount /dev/md3 /mnt/var
{serial}# mkdir /mnt/opt
{serial}# mount /dev/md4 /mnt/opt

3.2. Installation d’un système de base.

Maintenant nous allons lancer un debootstrap pour construire un system dans /mnt


{serial}# debootstrap sarge /mnt http://archive.debian.org/debian/

Nous allons copier quelques fichiers , i.e. les même qu’à l’étape 1.2.4.

Dans le cas d’un RAID soft, copier le fichier mdadm.conf


{serial}# cp /etc/mdadm.conf /mnt/etc/mdadm.conf

Il faut aussi penser à monter /mnt/proc :


{serial}# mount proc /mnt/proc -t proc

Puis nous entrons dans le nouveau système avec chroot :


{seria}# chroot /mnt /bin/bash

3.3. Configuration du système

Une fois dans le chroot je lance quelques commandes :


{serial-chroot}# base-config
{serial-chroot}# apt-get update
{serial-chroot}# apt-get dist-upgrade


{serial-chroot}# apt-get install vim sudo
{serial-chroot}# visudo

Si RAID soft :

{serial-chroot}# apt-get install mdadm

3.4. Compilation d’un kernel (selon la doc)

3.4.1. Récupération du kernel

{serial-chroot}# apt-get install vim libncurses5-dev kernel-package gcc make ncftp
{serial-chroot}# cd /usr/src
{serial-chroot}# ncftp ftp.free.fr

{serial-chroot}> cd pub/linux/kernel
{serial-chroot}> cd v2.4
{serial-chroot}> get linux-2.4.32.tar.gz
{serial-chroot}> quit

3.4.2. Décompression du kernel

{serial-chroot}# tar xfz linux-2.4.32.tar.gz

3.4.3. Récupération du patch et du fichier de configuration du kernel

{serial-chroot}# sync
{serial-chroot}# wget http://hugues.lepesant.com/stuff/cobalt/cobalt-2.4.32.patch
{serial-chroot}# wget http://hugues.lepesant.com/stuff/cobalt/conf_cobalt-RaqXXX_2432

XXX = 34 pour les Raq3, Raq3i, et Raq4
XXX = 550 pour le Raq550

3.4.4. Configuration et compilation du kernel

{serial-chroot}# ln -s linux-2.4.32 linux
{serial-chroot}# patch -p 0 < cobalt-2.4.32.patch
{serial-chroot}# cp conf_cobalt-RaqXXX_2432 linux/.config
{serial-chroot}# cd linux
{serial-chroot}# make menuconfig
{serial-chroot}# vim /etc/kernel-pkg.conf

Modifier les lignes maintainer et email.

{serial-chroot}# make-kpkg clean
{serial-chroot}# make-kpkg --revision=cobalt.1.0 kernel_image
{serial-chroot}# make-kpkg modules_image

3.4.5. Préparation du Cobalt

{serial-chroot}# vi /etc/kernel-img.conf

Ce fichier doit contenir les lignes suivantes:

do_symlinks = No
do_boot_enable = No
do_initrd = No
postinst_hook = /etc/cobalt/kernel_cobalt_install.sh
prerm_hook = /etc/cobalt/kernel_cobalt_remove.sh


{serial-chroot}# mkdir /etc/cobalt
{serial-chroot}# vi /etc/cobalt/kernel_cobalt_install.sh
{serial-chroot}# vi /etc/cobalt/kernel_cobalt_remove.sh
{serial-chroot}# chmod u+x /etc/cobalt/kernel_cobalt*.sh

3.4.5.1 /etc/cobalt/kernel_cobalt_install.sh

#!/bin/sh
ln -sf $2 /boot/vmlinux.gz

3.4.5.2 /etc/cobalt/kernel_cobalt_remove.sh

#!/bin/sh
rm -f /boot/vmlinux.gz

3.4.6. Installation du kernel

{serial-chroot}# cd /usr/src
{serial-chroot}# dpkg -i kernel-image-2.4.32_cobalt.1.0_i386.deb
{serial-chroot}# cd /boot
{serial-chroot}# ln -sf System.map-2.4.32 System.map

3.4.7. Configuration du Cobalt

{serial-chroot}# vim /etc/network/interface
{serial-chroot}# vim /etc/hosts
{serial-chroot}# vim /etc/inittab
{serial-chroot}# vim /etc/default/rcS
{serial-chroot}# exit

3.4.8. Reboot

{serial}# reboot

Et voilà, vous pouvez suivre le boot de votre Cobalt via le cable console et minicom.

Publié dans Cobalt, linux, Mes docs | Commentaires fermés sur Installation Debian/Woody sur un Cobalt RaqX via réseau

Cobalt LCD use under Debian

Cette doc vous permettra de ne plus avoir l’effet K2000 sur le LCD de votre Cobalt fraichement Debianisé.

Récupérer les panels-utils / Get the panels-utils

wget http://cobalt.nexband.com/upgrade/panel-utils-4.0-7.i386.rpm

ou si cobalt.nexband.com est injoignable 🙁
or if cobalt.nexband.com is down 🙁

wget http://hugues.lepesant.com/stuff/cobalt/panel-utils-4.0-7.i386.rpm

Installer rpm / Install rpm
apt-get install rpm

Dépacter les panels-utils / Unpack the panels-utils
cd /
rpm2cpio /home/hug/panel-utils-4.0-7.i386.rpm | cpio -ivd

(will do the mknod /dev/lcd c 10 156 not done by the kernel)

Jouer avec les scripts / Play with the scripts

Publié dans Mes docs | Commentaires fermés sur Cobalt LCD use under Debian