Skip to content
18 janvier 11

Lister les paquets Debian installés en fonction de leur taille

par billux
Gros paquet, petits paquets

Comme ça doit bien arriver un jour ou l’autre, je me suis retrouvé avec un / quasi plein sur une Debian. Après les classiques aptitude clean, suppression des vieux noyaux, etc… il faut bien s’attaquer au répertoire qui prend la plupart de la place, c’est à dire /usr.

Comme j’ai l’habitude d’installer et peu de tout et de n’importe quoi pour découvrir, et de ne surtout rien désinstaller, je me retrouve vite avec une quantité de paquets inutiles. Pour m’aider à nettoyer tout ce bazar, j’ai fais un mini script qui affiche de manière triée la liste des paquets Debian avec leur taille.
Le voici :

1
2
3
4
5
6
#!/bin/bash
 
dpkg --get-selections |cut -f1 |while read package
do
	dpkg -p $package |perl -ne "print \"\$1: $package\n\" if /^Installed-Size: (.*)$/"
done |sort -rn

Et voici le résultat (la taille est en ko bien sûr) :

romain@heimdall:~$ bash package-size.sh |head
84496: mysql-server-5.0
78328: linux-image-2.6.26-2-amd64
33904: apcupsd-doc
31780: erlang-nox
22812: vim-runtime
21440: linux-headers-2.6.26-2-common
19364: mysql-client-5.0
18880: smbclient
18304: perl
15934: libgtk2.0-common

romain@heimdall:~$ bash package-size.sh |wc -l
1432

9 janvier 11

Utiliser AWStats sans CGI

par billux
Interdit CGI

AWStats est un générateur de statistiques, le plus souvent utilisé pour générer des stats sur des serveurs web (il peut aussi être utilisé pour des serveurs mail, ftp…). C’est une appli en Perl, qui peut donc être appelé par le serveur web via CGI pour générer les pages HTML.

Sur Apache ou Lighttpd ça marche sans problème, mais sur un serveur web qui ne supporte pas CGI (NginX par exemple, à moins de passer par des hacks assez tordus) ça ne marche plus.

La solution est donc de dire à AWStats de générer les page HTML automatiquement après chaque mise à jour de sa base de données. Voici la procédure :

  • Créez tout d’abord le répertoire qui contiendra les pages HTML, avec les bons droits :
    mkdir /var/www/awstats/
    chown www-data:www-data /var/www/awstats/
  • Modifiez ensuite le fichier /etc/cron.d/awstats pour appelez le script awstats_buildstaticpages.pl au lieu de awstats.pl :
    1
    2
    3
    4
    
    [ -x /usr/share/doc/awstats/examples/awstats_buildstaticpages.pl \
    -a -f /etc/awstats/awstats.yoursite.conf -a -r /var/log/nginx/yoursite.access.log ] \
    && perl /usr/share/doc/awstats/examples/awstats_buildstaticpages.pl -update \
    -config=yoursite -dir=/var/www/awstats -awstatsprog=/usr/lib/cgi-bin/awstats.pl >/dev/null

    À adapter bien sûr avec les bons noms de fichiers de conf et de log.

  • N’oubliez pas d’ajouter un alias dans la conf de votre serveur web pour les icônes. Sous NginX, ça donne ça :
    1
    2
    3
    
      location /awstats-icon/ {
            alias /usr/share/awstats/icon/;
        }
18 décembre 10

Utiliser la fonction PHP imagerotate() sous Debian

par billux
Élephan peluche PHP

imagerotate est une fonction PHP qui, comme son nom l’indique, permet de tourner une image selon un angle. Cependant elle n’est disponible que si PHP a été compilé avec la version embarqué de la bibliothèque GD.

Sous Debian ce n’est pas le cas, car cette version est difficilement maintenable au niveau sécurité (cf le bug report Debian)

Pour contourner le problème, en cherchant un peu sur le net (ici pa exemple), beaucoup de monde recompile PHP avec la version embarqué de GD. Ce n’est à mon avis pas la meilleure solution au niveau « maintenabilité ».

Voici donc 2 autres possibilités :

Utiliser les dépôts dotdeb

Les dépôts dotdeb contiennent des versions plus récentes et/ou modifiés de paquets Debian pour serveurs LAMP. Le paquet php5 présent dans dotdeb est justement compilé avec la version embarqué de la bibliothèque.

Réécrire la fonction imagerotate()

Si vous n’avez besoin que de cette fonction et que vous n’avez pas envi d’utiliser la version embarqué de GD, il est tout à fait envisageable de réécrire la fonction en question :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
if ( !function_exists( 'imagerotate' ) ) {
  function imagerotate( $source_image, $angle, $bgd_color ) {
      $angle = 360-$angle; // GD rotates CCW, imagick rotates CW
      $temp_src = '/tmp/temp_src_'. rand( 10000,99999 ) .'.jpg';
      $temp_dst = '/tmp/temp_dst_'. rand( 10000,99999 ) .'.jpg';
      if (!imagejpeg($source_image,$temp_src)){
       return false;
      }
      $imagick = new Imagick();
      $imagick->readImage($temp_src);
      $imagick->rotateImage(new ImagickPixel($bgd_color?$bgd_color:'black'), $angle);
      $imagick->writeImage($temp_dst);
      //trigger_error( 'imagerotate(): could not write to ' . $file1 . ', original image returned', E_USER_WARNING );
      $result = imagecreatefromjpeg($temp_dst);
      unlink($temp_dst);
      unlink($temp_src);
      return $result;
  }
}
?>
30 octobre 10

Bloguez vos articles WordPress depuis Vim

par billux
screenshot blogit vim

BlogIt est un plugin Vim écrit en python, qui permet, via le protocole xmlrpc, d’interagir avec votre WordPress. Les avantages sont bien sûr de pouvoir bénéficier de toutes les commandes Vim lors de l’écriture d’un article, avec la coloration html par exemple, mais aussi de pouvoir préparer son article hors-ligne et de le commiter plus tard.

Fonctionnalités

  • Création/édition/suppression/listage des articles et pages ;
  • Prévisualisation hors-ligne de l’article dans un navigateur ;
  • Publication/retrait d’un article ;
  • En-tête de l’article (un peu comme pour les mails) permettant de définir le titre, les tags et catégories…
  • Des hooks blogit_format et blogit_unformat, appelés respectivement juste avant un commit et juste après un edit, permettant de formater/déformater le texte avec des langages comme markdown, textile, reStructuredText… à l’aide de pandoc.

Installation

Je reprend un peu la procédure du wiki, mais traduite en français ici.

Tout d’abord, il vous faut un Vim compilé avec le support de python (rarement le cas par défaut) :

vim --version |grep python

Sous ArchLinux, il faut installer le paquet gvim, et sous Debian et dérivées, il s’agit du paquet vim-python (qui installera vim-gtk).

Vous pouvez ensuite récupérer l’archive et la décompresser dans votre ~/.vim/.

Il faut maintenant créer le fichier ~/.vim/passwords.vim qui contiendra les informations de connexion à votre blog :

1
2
3
let blogit_username='Your blog user name'
let blogit_password='Your blog password. Not the API-key.'
let blogit_url='https://example.com/xmlrpc.php'

Au passage, un chmod 600 sur ce fichier ne sera pas de trop…

Utilisation

Le script s’appelle via :Blogit. Un :Blogit help vous renverra la liste des commandes possibles :

Available commands:                                                                                                               
   :Blogit ls [blog]         list all posts
   :Blogit new [blog]        create a new post
   :Blogit this [blog]       make this a blog post
   :Blogit edit {id} [blog]  edit a post
   :Blogit page {id} [blog]  edit a page
   :Blogit commit            save article
   :Blogit push              publish article
   :Blogit unpush            unpublish article (save as draft)
   :Blogit rm {id}           remove a post
   :Blogit tags              update and list tags and categories
   :Blogit preview           preview article in browser
   :Blogit help              display this notice

Je ne détaille pas plus, les commandes sont assez explicite selon moi.

Bonus

Vous voudriez surement rajouter des options automatiquement lors de l’édition des articles
(par exemple set spell pour la correction orthographique). Dans ce cas, il faut les
définir dans la méthode python init_vim_buffer() de la classe BlogPost du
plugin (attention à le faire dans la bonne classe, il y en a plusieurs), comme ceci :

vim.command('setlocal spell tw=80')

De même, il peut être sympa d’affecter une touche à la commande :Blogit commit, à l’aide de map :

vim.command('map <f9> :Blogit commit <CR>')

screenshot blogit vim

Article fièrement écrit avec Vim :) .