dimanche 31 août 2014

Pepper flash (suite)

Dans l'article précédent, dont celui-ci constitue la suite, après quelques généralités sur le plugin 'pepper flash' et son emploi avec chromium, nous avons traité uniquement du cas de ubuntu 14.04. Nous allons cette fois nous intéresser à d'autres distributions à commencer par Fedora (20).
Déjà l'installation de chromium n’est pas évidente car celui-ci ne fait pas partie de l'offre logicielle par défaut.
Pour en disposer, il faut avant de procéder à cette installation, configurer le dépôt churchyard-chromium-russianfedora:
 
[root@rigel ~]# cd /etc/yum.repos.d && wget -O churchyard-chromium-russianfedora.repo http://copr.fedoraproject.org/coprs/churchyard/chromium-russianfedora/repo/fedora-20-x86_64/
[root@rigel yum.repos.d]# yum install chromium

Cependant ce dépôt fournit très peu de paquets et aucun qui ait un lien avec le plugin pepper flash:


Pour pouvoir disposer du paquet qui installe le plugin, à savoir chromium-pepper-flash, il faut en plus configurer le dépôt russianfedora-nonfree. Cependant l’ajout de ce dépôt nécessite le dépôt russianfedora-free que nous pouvons cependant désactiver par la suite (par exemple avec la commande sed):

[root@rigel ~]# yum install http://mirror.yandex.ru/fedora/russianfedora/russianfedora/free/fedora/releases/20/Everything/x86_64/os/russianfedora-free-release-20-1.R.noarch.rpm
[root@rigel ~]# yum install http://mirror.yandex.ru/fedora/russianfedora/russianfedora/nonfree/fedora/releases/20/Everything/x86_64/os/russianfedora-nonfree-release-20-1.R.noarch.rpm
[root@rigel ~]# sed -i 's/enabled=1/enabled=0/' /etc/yum.repos.d/russianfedora-free.repo
[root@rigel ~]# sed -i 's/enabled=1/enabled=0/' /etc/yum.repos.d/russianfedora-free-updates.repo
[root@rigel ~]# yum install chromium-pepper-flash

Dans chromium, au niveau de l'URL chrome://plugins, en affichant + de détails, il est possible de désactiver l'ancien plugin, si celui-ci a été installé:

Dans le cas de la distribution Manjaro (ou Archlinux), pour disposer du plugin, il suffit d'installer le paquet chromium-pepper-flash à partir du dépôt AUR:

[toto@rigel ~]$ yaourt -S chromium-pepper-flash 

Le paquet est construit sur place après téléchargement du rpm google-chrome et extraction du plugin:



Dans d'autres distributions comme par exemple Chakra, le plugin est fourni avec le paquet qui contient le navigateur (chromium):


C'est la solution la plus simple mais qui ne convient pas à tout le monde.
Dans tous les cas évoqués ci-dessous, la mise à jour du plugin, une fois celui-ci installé, s'effectue automatiquement avec les autres mise à jour (contrairement à ce qui se passe pour Ubuntu 14.04)

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