Faire fonctionner PHP mail() sous Debian et dérivés

Peut-être avez-vous remarqué que l’envoi de mail en PHP ne fonctionne pas après une installation standard de Debian ou de Ubuntu. Pourtant, Debian fournie le serveur de mail exim qui fait partie de la base du système.

Le problème est que la configuration initiale d’exim l’empêche d’envoyer des mails vers l’extérieur. Le remère est des plus simple :

  1. Tapez connecté en tant que root dpkg-reconfigure exim4-config (sudo dpkg-reconfigure exim4-config sous Ubuntu).
  2. Choisissez comme type de configuration Envoi via relais (« smarthost ») - réception SMTP ou fetchmail
  3. Entrez l’adresse du serveur SMTP de votre fournisseur d’accès à internet pour Nom réseau ou adresse IP du sysème « smarthost »

Vous pouvez sélectionner les paramètres par défaut proposé pour les autres options.

Cela suffira pour activer l’envoi de mail avec PHP sans se soucier de la configuration complète d’un MTA. Les emails envoyés avec la fonction mail() arriveront même sur les boîtes Hotmail (qui nécessite une configuration particulière du serveur) car notre serveur local transmettra juste la demande d’envoi au serveur de notre FAI.

Si vous souhaitez installer un véritable serveur de mail sur votre serveur je vous conseil de jetter un oeil à Postfix.

hosting.py: Debian/Ubuntu webserver administration tool

hosting.py allows to easily create and manage accounts on shared servers running Debian GNU/Linux (and derivatives, such as Ubuntu Linux). It includes support for Apache virtual hosts, UNIX accounts, MySQL databases and privileges. hosting.py is a command line tool wrote in Python by Kévin Dunglas.

Philosophy

The philosophy behind this tools is “keep it simple”. hosting.py is designed for small web hosting services. hosting.py will not have advanced features like virtual mail or FTP account creation. It creates the base configuration and settings for a web hosting account. Mail, FTP or whatever must be handled by the configuration of the system to use the UNIX account.

Status

hosting.py doesn’t currently support MySQL user and database creation. This will be committed soon.

Install

hosting.py need Debian etch or Ubuntu and Python 2.5 to work. Get the source via SVN : svn checkout http://debian-hosting.googlecode.com/svn/trunk/ debian-hosting-read-only

It’s done ! Type python hosting.py --help to get started.

Optionally you can adjust the configuration by editing the variables in the head of the hosting.py file.

hosting.py: un gestionnaire de serveur web pour Debian/Ubuntu

hosting.py, c’est un petit script d’administration de serveurs Debian et ses dérivés (testé sous lenny et Ubuntu).

C’est un outils très simple destiné à gérer les utlisateurs d’un serveur Web (Linux Apache PHP MySQL). Il permet la création, la modification et la suppression d’utilisateurs UNIX et d’hôtes virtuels Apache. Le support des comptes MySQL n’est pas encore publié, mais il le sera bientôt !

La philosophie derrière ce petit programme écrit en Python est d’utiliser au maximum le compte UNIX plutôt que des utilisateurs virtuels pour chaque services. Configurez vos serveurs FTP, Mail et compagnie pour utiliser l’authentification UNIX.

Petit bonus, la gestion des utilisateurs pour le webmail RoundCube est fournie dans les commentaires.

Pour tester : svn checkout http://debian-hosting.googlecode.com/svn/trunk/ debian-hosting-read-only

Pour l’aide : ./hosting.py --help

hosting.py fonctionne en root (sudo ./hosting.py sur Ubuntu).

Mes projets à nouveau en téléchargement

Après avoir été séquestrés pas mal de temp dans ma cave numérique, mes projet peuvent à nouveau regagner l’air libre !

Retrouvez certains de mes projets sous licence libre en téléchargement ! On y trouve essentiellement des logiciels pour le web et pour Ubuntu Linux, jettez-y un oeil.

Les archives de Bienvenue chez moi enfin en ligne

Chose promise chose due !

Les archives de Bienvenue chez moi, mon ancien blog, sont désormais disponibles. Tous les commentaires et articles ont étaient restaurés. Vous y trouverez un grand nombre de tutoriels pour Ubuntu et Linux en général ainsi que les anciennes version de Easy Ubuntu, des modules pour PunBB, et des billets traitant de programmation (PHP, Python, DokuWiki, …).

Bienvenue chez moi c’est plus de 100 billets et de 15 000 commentaires, c’est quelques premières pages de Digg, et ce fut une partie de moi pendant un certain temps !

Des benchmarks sur les toutes nouvelles Dedibox

Iliad à vient d’annoncer une nouvelle mouture de son offre de serveurs dédiés à bas prix. Les Dedibox v2 ne sont plus basé sur des processeurs VIA mais sur des Intel Celeron. Elles se voient dotées de 1 Go de mémoire vive, d’un disque dur de 160 Go et d’une bande passante de 100 Mbits/s. Une nouvelle gamme baptisée Dedibox XL propulsée par des Core2Duo, 3 Go de mémoire, 500 Go d’espace disque et connexion 100 Mbits/s est également disponible.

C’est bien beau les annonces, mais vous préférez sûrement les chiffres. Ca tombe bien, Pierre, plus réactif que jamais, vient de publier un benchmark comparant ces nouvellles Dedibox avec les anciennes ainsi qu’avec les offres similaires chez OVH et Gandi. Un autre benchmark, publié par Dediadmin, est également disponible.

Que devient Easy Ubuntu ?

Vous vous en souvenez certainement, il y a quelques années maintenant j’avais publié un petit logiciel qui eu un grand succès : Easy Ubuntu.

Easy Ubuntu servait à configurer automatiquement Ubuntu et à y installer les logiciels nécessaires à son utilisation courante (Flash, Java, codecs audio et vidéo, …). Il a participé à la démocratisation de cette distribution et a permis à un grand nombre de personnes de franchir le pas vers GNU/Linux.

Aujourd’hui, Ubuntu a évolué et Easy Ubuntu n’a plus aucune raison d’être. La distribution inclus désormais des utilitaires très “user friendly” qui permettent de récupérer et d’installer les modules propriétaires mais utiles par elle même.

Pourtant, de nombreuses requêtes arrivent toujours sur ce blog en provenances de recherches telles que “télécharger Easy Ubuntu”.

La première version, écrite en Bash et utilisant Zenity pour l’interface est toujours disponible dans les archives de mon ancien blog. (On y trouve aussi des scripts PHP et quelques mods pour PunBB et XOOPS sur lesquels je reviendrais peut-être ultérieurement.) Elle ne fonctionne que sur les veilles version d’Ubuntu (Warty, Breezy).

Capture d'écran d'Easy Ubuntu

J’avais ensuite ré-écrit entièrement le logiciel en Python / Glade pour qu’il soit plus stable et performant puis m’étais retiré du projet par manque de temps. Il avait été repris par une équipe de passionnés. À l’époque, nous avions créé un site internet pour Easy Ubuntu. Les archives de la version Python sont toujours disponible sur celui-ci.

Ce fût la fin de mon aventure avec Easy Ubuntu, mais pas celle avec Ubuntu. J’ai ensuite conçu Conceal, un gestionnaire de dossiers chiffrés pour GNU/Linux en général et Ubuntu en particulier, lors du Summer of Code 2007. J’ai du le mettre en demeure au cours de cette année suite à un emploi du temps chargé mais je reprend son développement. Une nouvelle version sortira très prochainement !

Un lecteur de flux RSS pour Android : la base de données intégrée

Après avoir réalisé notre tout premier programme avec Google Android, nous allons nous lancer dans la réalisation d’un projet un peu plus complexe : un lecteur de flux RSS.

Capture d’écran du lecteur de flux RSS

Ce sommaire lecteur de flux permettra juste de s’abonner, se désabonner et d’afficher des flux RSS. Vous pouvez récupérer l’archive incluant sources et binaires si vous souhaitez tester tout de suite le programme.

Présentation de SQLite

La plate-forme Android intègre le système de base de données relationnelle embarquée SQLite. SQLite est un mini SGBD ne nécessitant que peu de ressources, qui offre la possiblité de gérer facilement des bases de données de taille restreinte.

Comme son nom l’indique, SQLite s’utilise par le biais de requêtes SQL. Il est très bien intégré à Android, ce dernier propose un grand nombre de routines qui nous permettront d’interagir très simplement avec les données (par exemple, pour les afficher à l’écran). Nous l’utiliserons dans notre programme pour gérer la liste des flux RSS auxquels l’on est abonné.

Shéma de la base de donnée

Nous utiliserons un shéma assez simple pour notre base de donnée. Elle ne se constituera que deux trois colonnes :

_id url visit

Le champ _id est un nombre entier qui représente l’identifiant de chaque lien, il sera la clef primaire de notre table. Attention son nom est une convention Android / SQLite, veillez toujours à avoir une clef primaire nommée ainsi dans vos tables. Dans le cas contraire vous ne pourrez pas utiliser simplement les curseurs plus tard ! Ce champ est complètement géré par SQLite. Il s’occupera de l’incrémenter automatiquement et de veiller à sa cohérence.

Le champ url de type text contiendra l’adresse du flux RSS.

Le champ visit, qui n’a aucune utilisé dans l’état actuel du programme, pourrait servir à compter le nombre de chargement des flux RSS afin de les classer par ordre d’assiduité par la suite.

La classe Database

Nous allons placer tout ce qui a trait à la base de données dans une classe nommée Database. Après avoir créer un nouveau projet dans Eclipse, créez donc cette classe. Nous utiliserons deux variables qui portent sur tout la classe :

private SQLiteDatabase db;
  private RSSreader rss;

db permet d’agir sur la base de donnée tandis que rss représente le contexte, notre classe principale (nommée RSSreader). La variable rss nous permet d’utiliser les fonctions openDatabase et createDatabase fournies par la plate-forme.

Le constructeur ce contente d’instancier la variable rss et de lancer la procédure d’ouverture de la base de données.

public Database (RSSreader rss) {
 	this.rss = rss;
        open ();
 }

Cette procédure appelle la méthode fournie par Android openDatabase qui nous permettra d’interagir avec la base de donnée depuis la variable db. Si la base de données n’existe pas, on appelle la procédure qui la créera.

private void open () {
 	try {
    	    	db = rss.openDatabase ("rssreader", null);
    	 }
     	catch (FileNotFoundException e) {
    	 // Create the database
    	 createDb ();
     	open ();
     }
}

La procédure de création de la base de donnée :

private void createDb () {
    	String sql;
    /* Command to view the DB : sqlite3 data/data/net.lapinblanc.android.rssreader/databases/rssreader */
    try {
    	// Create the database
    	db = rss.createDatabase ("rssreader", 1, rss.MODE_PRIVATE, null);
    	sql = "CREATE TABLE IF NOT EXISTS feed(_id INTEGER PRIMARY KEY, url TEXT, visit INTEGER);";
    	db.execSQL (sql);
    	// Insert un example
    	    	add ("http://lapin-blanc.net/feed/");
    	}
    	 catch (FileNotFoundException e) {
    	    	// TODO Auto-generated catch block
    	    	e.printStackTrace();
    	}
}

La base de donnée est ici privée (MODE_PRIVATE), c’est à dire que seul notre programme pourra y accèder. La création en elle-même revient à envoyer une requête SQL classique de création de table. Nous créons donc notre base de donnée nommée rssreader puis nous insérons un flux d’exemple (celui de ce blog) en appelant la procédure add.

La base de donnée correspond en fait à un fichier texte rangé dans le répertoire /data/data/votre.package/databases/. Pour vous y connecter lancez la commande adb shell dans un terminal. Vous voici avec un shell au sein du système Android (celui de l’émulateur dans notre cas). Il s’agit en fait de BusyBox tournant au-dessus d’un noyau Linux. Pour utilisez la base de donnée en mode shell lancez sqlite3 /data/data/net.lapinblanc.android.rssreader/databases/rssreader. N’oubliez pas les points virgules terminaux à vos requêtes vous les exécuter !

La procédure add prend en paramètre une url et l’ajoute à la base de donnée :

public void add (String url) {
    	/* Insert feed into the database */
       SQLiteStatement st = db.compileStatement("INSERT INTO feed(url, visit) VALUES ('?, 0)");
       st.bindString(1, url);
       st.execute();
    }

Ici aussi, le code est limpide, il s’agit de simples requêtes SQL comme si l’on agissait sur serveur de base de données classique.

Voyons maintenant comment supprimer un flux de la base de donnée :

public void delete (String url) {
    	db.execSQL("DELETE FROM feed WHERE url='" + url + "';");
    	SQLiteStatement st = db.compileStatement("DELETE FROM feed WHERE url='?';"));
    	st.bindString(1, url);
    	st.execute();
}

Dernière méthode, certainement la plus intéressante, celle qui renvoi la liste des flux dans la base de données :

public Cursor list () {
    	/* Return a Cursor on a list of stored RSS feeds */
       String [] selectionArgs = {};
       String [] columns = {"_id", "url", "visit"};
       return db.query (true, "feed", columns, null, selectionArgs, null, null, null);
}

Elle retourne un curseur, c’est ce curseur qui nous permettra plus tard de placer les flux dans une liste déroulante. Le tableau de chaines de caractères selectionArgs, ici vide, permet de spécifier des critères de sélection, formatés à la manière d’une clause WHERE dans une requête SQL. Le tableau columns permet d’indiquer quels colonnes nous souhaitons sélectionner, à la manière d’un SELECT en SQL. N’oubliez de sélectionner la colonne _id quelque soit votre requête. Sans elle l’utilisation ultérieur des curseurs sera beaucoup plus difficile.

Nous avons maintenant une base de donnée fonctionnelle et très légère sous Android. Dans le prochain article nous verrons comment créer une interface graphique pour gérer ces données.

Note : Merci à Infernal Quark d’avoir corrigé l’affreuse faille par injection SQL que j’avais laissé trainé…

Développement pour Android sur Mac OS X

Cet article est le premier d’une série consacrée au développement d’applications sur la nouvelle plate-forme pour téléphones mobiles crée par Google : Android.

Google Android

Les deux premiers billets seront très accessibles, voir simplistes. Celui-ci détaillera la procédure d’installation de l’environnement de développement (sur Mac OS X mais elle est très similaire sur Linux et Windows). Dans le prochain nous réaliserons le traditionnel “Hello Word” et nous présenterons les bases de la conception d’interface graphiques avec Android.

Nous passerons ensuite aux choses sérieuses avec la réalisation d’un lecteur de flux RSS en deux articles. D’abord l’utilisation de la base de donnée intégrée à Android (SQLite) puis la réalisation de l’interface graphique et la gestion des évènements (incluant formulaires, liste déroulantes et visualisation de pages internet).

Capture d’écran du lecteur de flux RSS

Présentation

Android est une plate-forme libre (principalement sous licence GPL v2 et Apache) qui contient un système d’exploitation basé sur Linux, une interface graphique, quelques applications et un kit de développement (SDK). Elle est promu par l’Open Handset Alliance, un consortium de compagnies du secteur du téléphone mobile dont sont membres LG, Motorola, Samsung, T-Mobile, Telefónica, Intel ou encore Texas Instruments. Les avantages mis-en-avant de la prochaine plate-forme maîtresse du secteurs sont:

Android utilise Java comme langage pour ses applications. Il utilise la machine virtuelle Dalvik, elle exécute des fichiers d’extension .DEX et permet une séparation entre les processus. Chaque application Android à son propre processus, il est donc possible de terminer une application sans devoir relancer le système entier.

L’installation du kit de développement sous Mac OS X

Pas de panique, Google à bien fait les choses. Nous aurons besoin de deux éléments pour être opérationnels, le SDK en lui même et un plugin pour Eclipse.

Le SDK

Récupérez le SDK version Mac OS X sur la page dédiée du site d’Android. Décompressez le ensuite dans le répertoire de votre choix (pour ma part ça sera dans ~/). Le plus gros est fait ! Nous allons juste ajouter le dossier tools/ du SDK à notre PATH afin de pouvoir lancer facilement les utilitaires de la plate-forme depuis un terminal. Ouvrez ou créez le fichier ~/.bash_profile et ajoutez-y :
export PATH=${PATH}:<répertoire_de_votre_sdk>/tools
Vous remplacerez <répertoire_de_votre_sdk> par par le chemin du dossier que vous avez extrait.

Accueil de l’émulateur

Vous pouvez désormais lancer l’émulateur en double-cliquant sur emulator dans le répertoire tools/ ou simplement en tapant emulator dans le terminal (Applications -> Utilitaires -> Terminal).

Le plugin Eclipse

Plugin Android pour Eclipse

Android est conçu pour qu’on y développe des applications avec l’IDE Eclipse d’IBM. Si ce n’est pas encore fait, téléchargez et installez-le. La version intitulée Eclipse IDE for Java Developers convient parfaitement.
Installons maintenant le plugin Android :

Lancez Eclipse et sélectionnez Help -> Software Updates -> Find and Install….
Dans la boîte de dialogue qui apparaît choisissez Search for new features to install puis appuyez sur Next.
Choisissez New Remote Site.
Dans la boîte qui s’affiche entrez Android Plugin comme nom et comme URL:
https://dl-ssl.google.com/android/eclipse/
Cliquez sur OK.
Le plugin doit apparaitre dans la liste, cliquez sur Finish.
Dans la boîte qui apparait cochez Android Plugin -> Developer Tools.

Cliquez sur Next.
Après avoir lu la license cliquez sur Accept puis sur Next, Finish et Install All.
Relancez maintenant Eclipse.

Il faut désormais configurer les préférences.Choisissez Eclipse -> Preferences puis Android.
Cliquez sur Browse… dans l’écran principal et indiquez le chemin de votre SDK.
Cliquez sur Apply puis sur OK.

Vous voici paré pour développer des applications Android depuis Mac OS X. La suite au prochaine épisode !

Note : Article librement inspiré et en parti du tutoriel officiel.

Windows Media Player transforme le Punk en musique nazie

Nyark Nyark

Oh surprise ! En insérant le CD distribué avec l’excellent Nyark Nyark de Arno Rudeboy, Windows Media Player ne détecte pas correctement le nom des pistes… En lieu et place des titres phares du punk et du rock alternatif français on se retrouve avec des nom de pistes RAC (dérivé nazi de la Oi! popularisé par le groupe anglais Skrewdriver) issues de Romper Stomper ! Combe de l’ironie, National Trouble, la chanson anti-raciste des Babylon Fighters se voit renommée Mein Kampf !

Nyark Nyark dans Windows Media Player

En revanche, aucun problème sous iTunes ni sous les lecteurs libres. Ce bug ne semble affecter que WMP. C’est les Bérurier Noir qui doivent être contents…

Merci à Kad pour l’info et la capture !

← Previous Page