dimanche 24 août 2014

Pepper flash

Le plugin flash livré par adobe pour certains navigateurs (dont firefox) est resté bloqué sur la version 11. Certes des mises à jour de sécurité sont encore fournies mais sans plus. De ce fait certaines animations ne fonctionnent plus correctement.
Cependant une version plus récente de ce plugin est intégrée dans google chrome. Cette version utilise l'API pepper (PPAPI) également disponible dans le navigateur chromium (mais pas dans firefox).
Il doit donc être possible d'utiliser cette version du plugin avec chromium.
Sous ubuntu 14.04 il suffit d'installer le paquet  pepperflashplugin-nonfree.
Mais attention: la version du plugin qui a été installée est figée: il n'y a pas de mise à jour, même si le système a lui été mis à jour et même si une nouvelle version du plugin existe.
Nous verrons en fin de billet comment procéder pour mettre à jour le plugin.
Essayons tout d'abord de comprendre pourquoi il faut procéder de la façon qui sera indiquée.
Téléchargeons le paquet afin de pouvoir l'analyser.

toto@rigel:~$ mkdir -p linux/pepper
toto@rigel:~$ cd linux/pepper
toto@:~/linux/pepper$ apt-get download pepperflashplugin-nonfree

Le fichier téléchargé est (dans notre cas) le paquet  pepperflashplugin-nonfree_1.3ubuntu1_amd64.deb
Il s'agit d'une archive 'ar' que nous allons décompresser:

toto@rigel:~/linux/pepper$ ar -xv pepperflashplugin-nonfree_1.3ubuntu1_amd64.deb 
x - debian-binary
x - control.tar.gz
x - data.tar.xz

Ce qui nous intéresse est le fichier control.tar.gz et plus précisément le script de post-installation (postinst) qu'il contient.
Afin de travailler proprement créons le dossier work/DEBIAN dans lequel nous allons décompresser control.tar.gz. On peut aussi décompresser data.tar.xz dans (dans work):

toto@rigel:~/linux/pepper$ mkdir -p work/DEBIAN
toto@rigel:~/linux/pepper$ tar -C work/DEBIAN -xzvf control.tar.gz 
./
./control
./prerm
./postrm
./postinst
./md5sums
toto@rigel:~/linux/pepper$ tar -C work -x --lzma -f data.tar.xz 

Il est possible d'arriver plus facilement au même résultat en utilisant l'outil dpkg-deb.
Une seule commande suffit après le téléchargement du fichier:

toto@rigel:~/linux/pepper$ dpkg-deb -R pepperflashplugin-nonfree_1.3ubuntu1_amd64.deb work

Le répertoire work est créé automatiquement.
Nous pouvons aussi, avec le même outil, extraire uniquement le contenu de control.tar.gz, mais alors nous devrons créer explicitement le fichier work (pour travailler dans la même arborescence):

toto@rigel:~/linux/pepper$ dpkg -e pepperflashplugin-nonfree_1.3ubuntu1_amd64.deb work/DEBIAN
dpkg-deb (sous-processus) : impossible de créer le répertoire: Aucun fichier ou dossier de ce type
dpkg-deb : erreur : le sous-processus tar a retourné une erreur de sortie d'état 2
toto@rigel:~/linux/pepper$ mkdir work
toto@rigel:~/linux/pepper$ dpkg -e pepperflashplugin-nonfree_1.3ubuntu1_amd64.deb work/DEBIAN

La commande suivante:

toto@rigel:~/linux/pepper$ head -7 work/DEBIAN/postinst 
#!/bin/sh

set -e

case "$1" in
    configure)
update-pepperflashplugin-nonfree --install --fast || true

montre que l'installation du plugin s'effectue au niveau du script de post-installation du paquet (qui s'exécute lors de l'installation du paquet).

L'installation du plugin consiste en fait à télécharger le paquet contenant google-chrome, à ne pas installer ce paquet mais à le décompresser et à mettre le plugin à disposition pour chromium.
Voici l'extrait du script qui correspond à ces deux dernières actions:

toto@rigel:~/linux/pepper$ awk '/dpkg-deb/,/mv/' work/usr/sbin/update-pepperflashplugin-nonfree 
dpkg-deb -x $debfile unpackchrome

sofile=unpackchrome/opt/google/chrome/PepperFlash/libpepflashplayer.so
[ -e $sofile ] || sofile=unpackchrome/opt/google/chrome-unstable/PepperFlash/libpepflashplayer.so
[ -e $sofile ] || sofile=unpackchrome/opt/google/chrome/PepperFlash/libpepflashplayer.so

mv -f $sofile /usr/lib/pepperflashplugin-nonfree

(Quelques explications sur le fonctionnement de awk se trouvent ici.)

L'utilisation du script update-pepperflashplugin-nonfree avec l'option status nous permet de vérifier si une nouvelle version du plugin est disponible, comme le montre cette copie d'écran effectuée juste après une mise à jour du système.


Pour installer la nouvelle version, il reste à exécuter la commande:

root@rigel:~# /update-pepperflashplugin-nonfree --install

En guise de vérification des assertions précédentes (la mise à jour s'effectue lors de l'exécution du script postinst), on peut aussi procéder comme suit:

root@rigel:~# dpkg-reconfigure pepperflashplugin-nonfree