Aller au contenu | Aller au menu | Aller à la recherche

Blog de Thomas Martin

samedi 23 avril 2011

Djangocong 2011


Djangocong

J'ai participé le week-end dernier à la première journée du Djangocong 2011, la seconde édition du rendez-vous annuel de la communauté Django française. Celle-ci se déroulait à Marseille, dans les locaux de l'Ecole Centrale, soit tout près de chez moi !

Briévement, la matinée était constituée de courtes présentations, sur des thèmes variés tels que l'intégration continue avec Jenkins (anciennement Hudson), l'utilisation de Django pour le site liberation.fr, du moteur de recherche SeSQL, et autres sujets intéressants.

Quant à l'après-midi, elle a donné lieu à divers barcamps sur des thèmes très variés. En tant qu'administrateur système, je me suis principalement intéressé à des sujets tels que les architectures Saas, les technos de déploiement et d'hébergement d'applications Django (virtualenv, gunicorn, fabric,...) et les bonnes pratiques pour l'hébergement de sites à fortes fréquentations.

La journée s'est ensuite terminée par une soirée à la Boate, où l'on a pu échanger et déguster une bonne paëla et de nombreuses bières !

Merci à tous les organisateurs, participants et sponsors pour cette excellente journée, dont Evolix, sponsor de l'événement, et qui a pris en charge ma participation à l'événement.

lundi 21 février 2011

NetAPP FAS2020, Samba 3.5, et mot de passe machine


Il y a quelques semaines de cela, j'ai rencontré quelques difficultés pour intégrer un filer NetAPP FAS2020 sur un contrôleur de domaine Samba. La solution au problème ayant été quelques peu hasardeuse, je la partage ici dans l'espoir que cela puisse épargner quelques heures à certains...

En effet, l'intégration d'un client Windows sur un contrôleur de domaine Samba nécessite généralement la création préalable d'un compte machine. Celui-ci est généralement créé sans définir de mot de passe (champ sambaNTPassword lorsqu'on utilise un backend LDAP), et lors de l'intégration au domaine, le client Windows se charge de le définir.

Or, avec ce filer NetAPP, voici les logs résultant :

[2010/12/16 15:16:58.713732,  2] passdb/pdb_ldap.c:572(init_sam_from_ldap) init_sam_from_ldap: Entry found for user: NETAPP$
[2010/12/16 15:16:58.716788,  0] rpc_server/srv_netlog_nt.c:526(get_md4pw) get_md4pw: Workstation NETAPP$: account does not have a password

Si le compte machine est créé avec un mot de passe aléatoire :

[2010/12/16 15:24:59.641552,  2] ../libcli/auth/credentials.c:307(netlogon_creds_server_check_internal) credentials check failed
[2010/12/16 15:24:59.641572,  0] rpc_server/srv_netlog_nt.c:714(_netr_ServerAuthenticate3) _netr_ServerAuthenticate2: netlogon_creds_server_check failed. Rejecting auth request from client NETAPP machine account NETAPP$

Si le compte machine n'est pas créé :

[2010/12/16 15:16:33.181347,  0] rpc_server/srv_netlog_nt.c:475(get_md4pw) get_md4pw: Workstation NETAPP$: no account in domain
[2010/12/16 15:16:33.181388,  0] rpc_server/srv_netlog_nt.c:692(_netr_ServerAuthenticate3) _netr_ServerAuthenticate2: failed to get machine password for account NETAPP$: NT_STATUS_ACCESS_DENIED

Finalement, au détour d'un forum, j'ai trouvé la solution suivante : le mot de passe doit être initialisé avec une valeur identique au nom de la machine, sans le $ final, et sans majuscule. Dans cet exemple, le mot de passe sera donc netapp. On constate alors :

[2010/12/16 15:28:38.139866,  3] rpc_server/srv_netlog_nt.c:947(_netr_ServerPasswordSet) _netr_ServerPasswordSet: Server Password Set by remote machine:[NETAPP] on account [NETAPP]

samedi 29 janvier 2011

Serveur ldapd sous OpenBSD 4.8

Voici le compte-rendu très bref d'un test de ldapd, le serveur LDAP désormais intégré dans le système de base d'OpenBSD, depuis la version 4.8. Je me suis pour l'instant contenté d'une configuration minimale permettant d'écrire puis lire une entrée LDAP.

Dans le fichier de configuration /etc/ldapd.conf, autoriser les connexions non sécurisées avec un mot de passe en clair, le temps des tests :

listen on lo0 secure

Et créer un namespace, avec un DN ayant les permissions pour le modifier :

namespace "dc=example,dc=com" {
        rootdn          "cn=admin,dc=example,dc=com"
        rootpw          "secret"
}

Lancer le daemon avec la simple commande suivante :

# ldapd

Créer l'object racine de notre namespace, avec ldapadd :

cat <<EOT | ldapadd -x -W -D cn=admin,dc=example,dc=com
dn: dc=example,dc=com
objectClass: top
objectClass: dcObject
objectClass: organization
o: Example
dc: example
EOT

Lire l'entrée nouvellement créée :

ldapsearch -x -b dc=example,dc=com

Voilà, pour en savoir plus, comme il s'agit d'un projet tout jeune, la source d'information principale est la page de man ldapd(8).

dimanche 9 janvier 2011

RRDtool et architecture matérielle

Les utilisateurs de RRDtool peuvent un jour être confrontés à l'erreur suivante lors d'une migration d'un serveur à un autre : This RRD was created on another architecture. La raison est que le format RRD est dépendant de l'architecture matérielle : Un RRD créé sur une machine 32 bits ne pourra pas être lu sur une machine 64 bits.

Cependant, il est possible d'extraire le contenu d'un RRD vers un format XML. Cela se fait via la commande suivante à exécuter sur une architecture identique à celle ayant créé le fichier :

rrdtool dump example.rrd >example.xml

On obtient alors un fichier commençant ainsi :

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE rrd SYSTEM "http://oss.oetiker.ch/rrdtool/rrdtool.dtd">
<!-- Round Robin Database Dump --><rrd> <version> 0003 </version>
        <step> 300 </step> <!-- Seconds -->
        <lastupdate> 1234211704 </lastupdate> <!-- 2009-02-09 21:35:04 CET -->

Pour le réimporter sur la machine cible :

rrdtool restore example.xml example.rrd

vendredi 31 décembre 2010

Partager une AMI Amazon EC2

Logo Amazon WSEn tant qu'utilisateur du service EC2 d'Amazon, on peut être amené à vouloir partager ses AMI (Amazon Machine Image) avec d'autres utilisateurs (amis, clients, etc) qui utilisent donc un autre compte Amazon. La procédure pour cela est très simple, et directement intégré à l'interface web :

  • En premier lieu, il est nécessaire de connaître le Account Number du compte qui aura accès à notre AMI (il ne s'agit pas de l'email utilisé pour s'identifier). On trouvera cela dans Your account > Personal Information, en haut à droite de la page.
  • Ensuite, il suffit de faire un clic droit sur notre AMI dans la vue correspondante, de sélectionner Edit permissions et d'ajouter un ou plusieurs Account Number dans les champs prévus à cet effet.
  • Sur l'autre compte, l'AMI sera alors accessible dans la catégorie Private images.

Voilà, sur ce bon réveillon, et bon début d'année 2011 à tous !

dimanche 12 décembre 2010

Upgrade OpenBSD : attention à l'umask


Vous déclarez peut-être un umask restrictif dans le fichier de configuration de votre shell (.bashrc, .cshrc, etc), 077 par exemple.
Si c'est le cas, attention lorsque vous effectuez une mise-à-jour de votre système OpenBSD (ou potentiellement d'un autre système BSD). En effet, si vous utilisez une commande tel que sudo -s pour passer root, afin d'effectuer la copie des nouveaux fichiers de configuration du système de base, ou avant d'exécuter pkg_add -ui pour mettre les packages à jour, votre umask sera pris en compte. La conséquence est que des fichiers qui sont normalement accessibles à tous les utilisateurs, par exemple /etc/mutt/Muttrc ou /etc/screenrc, seront affectés par cet umask, et se retrouveront avec des permissions à priori incorrectes, qui empêcheront leur lecture par un simple utilisateur.

Conclusion : dans ces cas là, utilisez plutôt su(1), sudo -i, ou sudo su, et vérifiez l'umask avant de commencer la procédure d'upgrade. Ou alors attendez-vous à recevoir quelques plaintes de vos utilisateurs, et à devoir effectuer quelques chmod(1) !

lundi 29 novembre 2010

Debian, useradd, bash et compgen

J'ai rencontré un problème étrange sur un serveur ce jour-ci : sur un compte nouvellement créé, la complétion bash échouait avec une erreur :

-sh: <( compgen -d -- '' ): No such file or directory
-sh: <( compgen -f -X  -- '' ): No such file or directory

Après quelques recherches et l'aide de serverfault, voilà la cause du problème :

  • J'ai utilisé la commande useradd(8) pour créer le compte. C'est une vieille habitude que je devrais éliminer sous Debian, car la page de man de useradd(8) stipule que : On Debian, administrators should usually use adduser(8) instead.
  • useradd(8) consulte le fichier /etc/logins.def pour identifier le shell par défaut à positionner, et il s'agit de /bin/sh. Avec adduser(8), cela aurait été /bin/bash, d'après /etc/adduser.conf.
  • /bin/sh est un lien vers bash, mais bash change de comportement lorsqu'il est invoqué avec le nom sh. D'après la page de man  : If  bash is invoked with the name sh, it tries to mimic the startup behavior of historical versions of sh as closely as possible.
  • Dans ce mode, la complétion fonctionne mal, et provoque le problème en question !
Conclusion : changer le shell de l'utilisateur par /bin/bash, et le problème est résolu !

samedi 27 novembre 2010

Initiation au pilotage d'un hélicoptère

Comme c'est le week-end, je vais traiter pour une fois d'un autre sujet que l'informatique...

Il y a de cela quelques semaines, j'ai été initié au pilotage d'un hélicoptère, un Cabri G2 de Guimbal (société basée à l'aérodrome des Milles, pour ceux qui connaissent).

Cela s'est déroulé sur l'aérodrome de Gap Tallard, haut lien des activités aériennes : parachutisme, aviation, montgolfière, etc

Après un court briefing, j'ai donc pris place dans l'appareil du côté pilote, c'est à dire du côté droit de l'hélico, tandis que mon accompagnateur a pris place du côté passager. Après un bref aperçu des différentes commandes (manche, palonnier, etc), le contact a été mis, et nous nous sommes placés en vol stationnaire à environ un mètre du sol. C'est là qu'on se rend compte du potentiel de l'appareil : on peut lâcher les commandes, et rester ainsi immobile suspendu dans les airs.

Hélico 1

Après le décollage (qui comme avec un avion se fait en suivant la piste), nous avons effectué un circuit jusqu'au lac de Serre-Ponçon, durant lequel j'ai pu prendre en main le manche. Première impression : la sensibilité est très importante ! Tout se joue sur la taille d'une pièce de 5 francs comme l'a dit le chef-pilote. A vrai dire, la première chose à maîtriser est d'arriver simplement à maintenir l'appareil en ligne droite, en donnant régulièrement d'infimes corrections pour lutter contre le vent qui déstabilise l'appareil. La marge d'erreur est beaucoup moins importante que sur un avion.

Une fois sur le lac, j'ai eu droit à un rase-motte au dessus de l'eau, mais sans exagération, car il est difficile d'apprécier son altitude sur une eau très peu agitée. Au retour, j'ai pu de nouveau travailler le pilotage en ligne droite, accompagné de quelques légers virages. L'atterrissage, tout comme le décollage, s'est fait en douceur.

Pour donner des chiffres, la vitesse de croisière de cet engin est de 180 km/h, avec une autonomie comprise entre 3 et 4 heures. On peut donc faire à l'aise un aller/retour Gap / Marseille en un temps record ! Le point négatif est bien sûr le coût du véhicule : environ 300 000€ ! Ainsi que la nécessaire obtention du brevet de pilote privé d'hélicoptère, qui nécessite au moins 45 heures de vol d'apprentissage. Un jour peut-être :-)

samedi 20 novembre 2010

Changement de moteur de blog


Dotclear logoJ'ai utilisé pendant 2 bonnes années le logiciel Chronicle pour générer ce blog. A l'époque, je l'avais sélectionné pour sa capacité à générer des fichiers statiques HTML à partir de fichiers plats, que je pouvais stocker dans mon dépôt SVN personnel. Cela était intéressant, mais les désavantages se sont fait sentir avec le temps : gestion des commentaires (très) complexe, au point que j'avais rapidement fait le choix de les désactiver, difficultés dès qu'il s'agissait de mettre en place une nouvelle fonctionnalité ou un changement graphique, etc

J'ai donc opté pour une bascule vers le bien connu Dotclear, que j'ai apprivoisé les semaines précédentes, avant de le passer en production aujourd'hui. La fonctionnalité d'import par flux RSS est vraiment très efficace, et il m'a suffit de valider rapidement chaque article importé. Quelques redirections HTTP avec Apache pour conserver la validité des URL de l'ancien blog, et le tour est joué ! J'ai également sélectionné un thème parmi ceux proposés par Dotaddict, qui me parait pas mal pour commencer, mais qui devrait être amené à évoluer d'ici quelques temps...

Quant aux commentaires, ils sont réouverts, donc n'hésitez pas !

lundi 30 août 2010

Ignorer l'activité de certains channels IRC avec irssi

Irssi logo

Si comme moi, vous utilisez le client IRC irssi pour suivre des channels à fort traffic, vous pouvez trouver dérangeant d'être notifié de la présence de messages dans ceux-ci, cela se traduisant par une suite interminable de chiffres présents en permanence dans la barre de statut. Cela limite la visibilité des notifications d'activité de channels moins fréquentés, mais plus importants...

Pour éliminer ce bruit, il existe le paramètre activity_hide_targets, qui permet de spécifier une liste de channels pour lesquelles on ne veut pas de notifications d'activité. Exemple :

/SET activity_hide_targets #channel1 #channel2 ...

Bien penser ensuite à sauvegarder en dur sa configuration :

/SAVE

- page 1 de 3