Un script pour surveiller des mises à jour

On m’a récemment demandé s’il existait un outil Debian pour vérifier qu’un ensemble de paquets dérivés de Debian intègrent bien les dernières mises à jour de sécurité. L’idée est d’avoir un fichier listant l’ensemble des paquets personnalisés avec les versions qui ont servi de base aux paquets personnalisés et d’avoir un outil qui va vérifier automatiquement security.debian.org pour voir si de nouvelles versions sont disponibles.

Ma première réponse était de regarder famke un petit script python écrit par James Troup pour les besoins de l’équipe DSA de Debian: il prévient par mail lorsque des mises à jour sont possibles et essaient de les rapprocher avec le fil RDF des mises à jour de sécurité.

J’ai donc repris le principe et réalisé un petit script python un peu plus souple dans la mesure où il ne vérifie pas si les paquets installés peuvent être mis à jour mais si les paquets listés dans un fichier (que j’ai appelé watchlist) peuvent être mis à jour à partir d’un ensemble de dépôts APT que l’on consigne dans un fichier sources.list personnel.

Il peut servir d’exemples à ceux qui cherchent à employer l’interface « python-apt ». Le script est disponible dans un dépôt Git.

Installation et usage par l’exemple :

$ git clone git://git.debian.org/~hertzog/hacks/checkupdate.git
$ cd checkupdate
$ vim checkupdate.conf
# On change les répertoires pour pointer vers `pwd`
$ vim watchlist
# On indique les paquets à surveiller et leur version courante
$ ./checkupdate checkupdate.conf
An update of the package 'rsync' is available: 2.6.9-2etch1
Origin: [component: 'main' archive: 'stable' origin: 'Debian'
label: 'Debian-Security' site 'security.debian.org' isTrusted: 'True']

Détecter la fermerture d'une socket sans lire les données en attente

J’ai récemment été confronté à la problématique de devoir détecter (dans une application C sous Linux) si une socket employée avait été fermée sans être obligé de lire les données en attente dans celle-ci.

Il n’existe (à ma connaissance) aucun moyen portable de réaliser cela. Mais Linux offre (via l’appel getsockopt) la possibilité de consulter la structure tcp_info du noyau (voir /usr/include/linux/tcp.h). Voici comment le test a été réalisé:

struct tcp_info info;
socklen_t len = sizeof(info);
if (getsockopt(remote_s, SOL_TCP, TCP_INFO, &info, &len) != -1) {
    if (info.tcpi_state == TCP_CLOSE ||
        info.tcpi_state == TCP_CLOSE_WAIT ||
        info.tcpi_state == TCP_CLOSING) {
                [... do what you want here ...]
    }
}

Intégrer un feed RSS dans WML

Je cherchais un moyen simple d’intégrer un feed RSS dans une page WML (comme Website Meta Language et non pas le langage du WAP) et je ne trouvais rien de prêt à l’emploi. Étant donné que WML emploie perl de manière importante, je me suis dit que je pourrai écrire les quelques lignes de Perl qui vont bien. J’emploie plusieurs modules dont XML::RSS, pensez donc à l’installer au préalable (paquet libxml-rss-perl dans Debian). Découvrez le code dans la suite !

[Lire plus…]

Réordonner les pages dans WordPress

Le thème par défaut de WordPress 1.5 a de nombreux défauts malgré sa belle apparence. Petit à petit j’apprends à les dépasser.

Le problème qui m’a occupé aujourd’hui est très simple. La liste de pages située sur la droite est triée par défaut selon le titre… or je voulais trier manuellement, j’ai donc changé le numéro d’ordre de chacune des pages dans l’interface d’administration. Puis j’ai cherché dans le thème comment ce bout de HTML est généré. On trouve ainsi une fonction wp_list_pages dans le fichier patron correspondant à la barre de côté (sidebar.php)… en lisant le code source de cette fonction (fichier wp-includes/template-functions-post.php) je me suis aperçu qu’il était possible de passer des paramètres supplémentaires et notamment un champ qui s’appelle sort_column (colonne de tri). Voici donc le petit bout de code à mettre pour trier selon numéro d’ordre croissant :

wp_list_pages('title_li=<h2>' . __('Pages') . '</h2>&sort_column=menu_order' );

Pour trier par ordre décroissant, il serait possible de rajouter un paramètre supplémentaire sort_order=DESC. Et voilà.