Installation Linux par clé USB

La clé USB étant devenue la disquette des temps modernes, il est naturel de s’en servir comme support pour accueillir les ISO des cd/dvd d’installation de Linux. Depuis l’OS propriétaire il existe plusieurs outils pour réaliser cette tâche préliminaire avant de pouvoir booter sur la clé.

Ainsi il y a très longtemps j’avais utilisé  Unetbootin mais ce n’est pas le bon outil si la distribution est un peu personnalisée avec des scripts d’installation spécifiques. Un autre outil USB Universal Installer ne fait pas mieux outrepassant une installation depuis des dépôts spécifiques pour aller chercher les paquets sur internet.

J’ai trouvé le salut avec Rufus qui ne change pas le menu d’installation de l’ISO et conserve bien les scripts d’installation. Un petit écueil que mérite bien un passage de mon poste de travail professionnel sous Linux.

Le libre dans le dessin vectoriel et l’animation

Je n’ai jamais utilisé autre chose que GIMP pour faire des dessins libres. Les fonctions de bases répondaient parfaitement à mes besoins: redimensionner, ajouter du texte etc. Par ailleurs je voyais souvent des gens utiliser des logiciels plus sophistiqués mais privateurs de libertés pour faire du dessin vectoriel ou de l’animation. Ces gens prétendaient que Linux (sic) ne proposait pas une alternative à leur besoin. Comme ces gens étaient ni plus ni moins que des utilisateurs occasionnels de ces  logiciels (i.e. n’utilisant que 10% des fonctions), je mettais en doute leur parole:

“Le libre propose une alternative dans la dessin vectoriel et l’animation”

Comme toujours je fais l’effort d’apprendre à utiliser un logiciel que si c’est nécessaire. Il se trouve que pour les besoins de mon hobby j’avais besoin de faire des schémas, des animations et des vidéos. Voilà une bonne raison de tester les logiciels libres destinés à cet usage.

Inkscape

Le logiciel de dessin vectoriel Inkscape est facile d’accès et permet de dessiner des objets vectoriels que l’on pourra cloner, changer de forme et de tailles perdre en qualité. Ce logiciel est très pratique pour réaliser des schémas ou faire des affiches. Le format de fichier consacré est SVG. Utilisez ce format au lieu des formats propriétaires ! Pour l’export utilisez le format PNG.

360 paire
Exemple de schéma réalisé avec Inkscape

Blender

Le logiciel Blender permet de faire de la modélisation et de l’animation en 3D. Il peut paraître compliqué (et il l’est !) mais pas plus que les solutions propriétaires. De plus sa puissance est stupéfiante:

Cinelerra

Pour le montage vidéo à proprement parler, la solution que je préfère est Cinelerra qui propose une interface similaire à Blender et des fonctions avancées (fusion d’image, nombre de pistes illimités, effet vidéos etc). Cinelerra travaille sans détruire les sources. Il crée un vrai description du montage dont un aperçu du rendu est affiché pendant l’édition. Un mode rendu en tâche de fond existe et permet de réaliser le véritable rendu en tâche de fond afin que l’aperçu soit une version réaliste du rendu final. Exemple de vidéo montée avec Cinelerra:

Les exemples de réalisation n’ont pas vocation à montrer l’état de l’art de ce que l’on peut obtenir avec ces logiciels mais montrent que sans expérience préalable, ni talent artistique particulier on peut réaliser des documents (dessin, animation, vidéos) de qualité acceptable en utilisant uniquement du Logiciel Libre.

Compression de log Tomcat 6 avec log4j 1.2

Le sujet est largement débattu mais il n’est pas trivial de trouver la solution de bout en bout. Diversité des cas, obsolescence de Tomcat 6 ou de log4j 1.2 ? En tout cas voici comment on peut mettre en place la compression de log de Tomcat 6 à l’aide de log4j 1.2.15 !

D’abord pourquoi mettre en place de la compression de log ? La log de Tomcat (ex catalina.out) ne devrait contenir que peu de messages et seulement de rare erreurs, non ? La diversité des programmeurs peut amener ces log à grossir et les framework qui génèrent des URL mal formées existent (caractère illégal). La rotation des fichiers de log si elle limite la taille ne permet pas de garder un historique c’est pourquoi je lui préfère la compression.

La documentation de Tomcat 6 permet de mettre en place rapidement log4j 1.2.17 et de disposer de la log de  Tomcat configurée par un fichier log4j.properties. L’activation de la compression des log se fait par l’utilisation de l’appender RollingFileAppender mais il ne s’agit pas de celui du paquet log4j mais plutôt du sous-paquet rolling (en gras dans l’exemple suivant). Ensuite il faut choisir la politique de rotation basée sur le temp TimeBasedRollingPolicy et enfin en spécifiant un motif de nom de fichier avec extension gz ou zip, le fichier sera compressé. Pour tester immédiatement la compression des log catalina.out, vous pouvez utiliser le fichier de configuration suivant où le niveau de log est passé à DEBUG et génère un fichier compressé par seconde.

log4j.rootLogger=DEBUG, CATALINA

# Define all the appenders
log4j.appender.CATALINA=org.apache.log4j.rolling.RollingFileAppender
log4j.appender.CATALINA.File=${catalina.base}/logs/catalina.
log4j.appender.CATALINA.RollingPolicy=org.apache.log4j.rolling.TimeBasedRollingPolicy
log4j.appender.CATALINA.RollingPolicy.ActiveFileName =${catalina.base}/logs/catalina.log
log4j.appender.CATALINA.RollingPolicy.FileNamePattern=${catalina.base}/logs/catalina.%d{yyyyMMdd.HHmmss}.gz
log4j.appender.CATALINA.Append=true
log4j.appender.CATALINA.Encoding=UTF-8
log4j.appender.CATALINA.layout = org.apache.log4j.PatternLayout
log4j.appender.CATALINA.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.LOCALHOST=org.apache.log4j.DailyRollingFileAppender
log4j.appender.LOCALHOST.File=${catalina.base}/logs/localhost.
log4j.appender.LOCALHOST.Append=true
log4j.appender.LOCALHOST.Encoding=UTF-8
log4j.appender.LOCALHOST.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.LOCALHOST.layout = org.apache.log4j.PatternLayout
log4j.appender.LOCALHOST.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.MANAGER=org.apache.log4j.DailyRollingFileAppender
log4j.appender.MANAGER.File=${catalina.base}/logs/manager.
log4j.appender.MANAGER.Append=true
log4j.appender.MANAGER.Encoding=UTF-8
log4j.appender.MANAGER.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.MANAGER.layout = org.apache.log4j.PatternLayout
log4j.appender.MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.HOST-MANAGER=org.apache.log4j.DailyRollingFileAppender
log4j.appender.HOST-MANAGER.File=${catalina.base}/logs/host-manager.
log4j.appender.HOST-MANAGER.Append=true
log4j.appender.HOST-MANAGER.Encoding=UTF-8
log4j.appender.HOST-MANAGER.DatePattern='.'yyyy-MM-dd'.log'
log4j.appender.HOST-MANAGER.layout = org.apache.log4j.PatternLayout
log4j.appender.HOST-MANAGER.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Encoding=UTF-8
log4j.appender.CONSOLE.layout = org.apache.log4j.PatternLayout
log4j.appender.CONSOLE.layout.ConversionPattern = %d [%t] %-5p %c- %m%n

# Configure which loggers log to which appenders
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost]=INFO, LOCALHOST
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/manager]=\
  INFO, MANAGER
log4j.logger.org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/host-manager]=\
  INFO, HOST-MANAGER

Cette configuration fonctionne avec log4j 1.2.17 mais pas seulement. En remplaçant le jar log4j.jar par celui de la version 1.2.16, cela fonctionne aussi. En rétrogradant en version 1.2.15 il faudra utiliser un fichier de configuration au format XML (car le support du fichier dde conf en propriété a été introduit dans la version suivante 1.2.16). Voici un exemple de fifichier de configuration au format XML:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE log4j:configuration SYSTEM "log4j.dtd">

<log4j:configuration xmlns:log4j="//jakarta.apache.org/log4j/">
  <appender name="console"> 
      <param name="file" value="${catalina.base}/logs/catalina."/>        
       <rollingPolicy>
      <param name="FileNamePattern" value="${catalina.base}/logs/catalina.%d{yyyyMMdd.HHmmss}.gz"/>
      <param name="ActiveFileName" value="${catalina.base}/logs/catalina.log" />
    </rollingPolicy>
    <layout> 
      <param name="ConversionPattern" value="%-5p %c{1} - %m%n"/> 
    </layout> 
  </appender> 

  <root> 
    <priority value ="debug" /> 
    <appender-ref ref="console" /> 
  </root>
  
</log4j:configuration>

Cinelerra et shmmax

Cinelerra est un logiciel de montage vidéo un peu austère mais très puissant. Il permet de faire travailler sans destruction des média originaux, de faire de rendu en tâche de fond afin d’avoir un aperçu en cours d’édition plus fluide et surtout il permet de faire du rendu distribué. Tout cela à un coût processeur et mémoire. Pour la mémoire il faudra non seulement des Go mais aussi paramétrer la mémoire partagée interprocessus. C’est rassurant car ça montre que Cinelerra fait grand usage du parallélisme.

Ce paramétrage étant global au système il faudra veiller à le définir en fonction des différentes applications selon le principe du qui peut le plus peut le moins. Sous débian 7 il faut jouter dans le fichier /etc/sysctld.d/local.conf

#cinelerra
kernel.shmmax=2147483647

Puis de faire un

sysctl -f

Analyse dump mémoire JVM sur AIX (ibm)

La JVM d’IBM sur AIX produit un dump mémoire au format non standard. La JVM de Sun (pardon Oracle….) crée un fichier HPROF tandis que la JVM d’IBM crée un fichier PHD (Portable Heap Dump). C’est un peu déconcertant car JVisualVM ne sait pas lire le PHD. La solution est alors d’utiliser Eclipse MAT dont l’ascendance génétique n’est pas étrangère à IBM.

Après avoir téléchargé la dernière version de MAT sur le site //www.eclipse.org/mat/ il faudra tout de même encore ajouter une extension pour qu’il puisse lire les PHD. Dans le menu “install new Software” on devra ajouter le site

//public.dhe.ibm.com/software/websphere/runtimes/tools/dtfj/

On peut également ajouter MAT (Memory Analyzer Tool) en temps que plugin dans un Eclipse standard. Pour cela il faudra ajouter le site suivant dans le menu “install new software”:

//download.eclipse.org/mat/1.4/update-site/

Ensuite pour pouvoir ouvrir des dump de JVM ibm il faut ajouter l’extension vue en premier.

Passons à TLS

Bien que SSL soit supplanté par son successeur TLS, il reste quand même encore utilisable car bien des serveurs le garde comme protocole au cas où un client ne supporterait pas TLS. L’enfer est pavé de bonnes intentions…. si SSLv2 est aujourd’hui considéré comme défaillant, ce n’est pas le cas de SSLv3 qui reste encore dans les bonnes grâces de la configuration de apache2 sous Debian 7. En effet dans le fichier /etc/apache2/mods-enabled/ssl.conf on trouve:

SSLProtocol all -SSLv2

Ce qui indique l’utilisation possible de  TLS et de SSLv3. Malheureusement une information parue sur le site américain NVD qui recense les vulnérabilités des logiciels, SSL est intrinsèquement vulnérable (y compris SSLv3) à l’attaque de l’homme du milieu. Cela veut dire qu’il faut absolument ne plus utiliser SSL mais son successeur TLS.

La mise en place du banissement de SSL dans nos serveurs web consiste à le supprimer de la liste des protocoles utilisables par apache. Dans le fichier ssl.conf il suffit de mettre:

SSLProtocol all -SSLv2 -SSLv3

On pourra également en profiter pour hausser si n’est déjà fait le niveau de cryptage (algorithmes utilisés) que le serveur accepte de faire. Le monde libre (et donc gratuit) ne laisse aucune excuse au client qui n’utilise pas un logiciel récent et supportant les algorithmes de chiffrement les plus sûrs. Toujours dans le fichier ssl.conf il suffit de mettre:

SSLCipherSuite HIGH:!ADH:!MD5

Chainsaw sous Debian 7

Debian 7 Wheezy propose open-jdk 6 comme JVM par défaut. Malheureusement cela pose un problème avec la fenêtre de popup au démarrage de Chainsaw qui propose d’ajouter un récepteur de log. Cette fenêtre reste vide sans aucun moyen de la fermer. Un open-jdk 7 ne change rien  à l’affaire et il faudra ce résoudre à utiliser la JVM Oracle.

Eclipse Luna sous Debian 7 ne démarre pas

En train de tester en parallèle les IDE Netbeans et Eclipse sous Debian 7 Wheezy, on constate rapidement que les versions dans le dépôt ne sont pas les plus récentes. En effet Debian 7 est livré avec java 6. Netbeans et Eclipse sont respectivement disponibles en version 7 et 3.8.

Un petit passage par le gestionnaire de paquet aptitude permet de récupérer java 7 en version openjdk comme la 6 installée par défaut. D’autres jvm sont présentes, il suffit d’aller voir en faisant:

ls -l /usr/lib/jvm

Afin de bénéficier de java 8 il faudra télécharger la JVM chez Oracle. On pourra installer les JDK Oracles n’importe où et ajouter des liens symboliques dans le répertoire /usr/lib/jvm

La dernière version de Netbeans, 8.0.1 est obtenu sous la forme d’un installeur sh qui trouve immédiatement le dernier JDK (sans doute en scannant le répertoire cité précédemment). L’installation du dernier Eclipse, nom de code Luna, version 4.4.1 est un peu plus brute: c’est une simple archive.

Arrive le moment du lancement: Netbeans démarre sans souci, à l’aide du raccourci ajouté sur le bureau. Malheureusement je ne peux pas en dire autant d’Eclipse qui plante au bout d’une dizaine de seconde sur le “splash screen”.  La JVM par défaut sous Debian 7 est l’open-jdk 6, j’ai eu donc l’idée de tester Eclipse avec les autres JVM disponibles sous mon système: java 6 en version oracle, java 7 en open-jdk, en oracle, java 8 de oracle. Pour cela il faut utiliser le fichier eclipse.ini en ajoutant l’option -vm comme par exemple

-vm
/usr/lib/jvm/jdk1.8.0/bin/java

Rien à faire, Eclipse plante toujours. La pile d’erreur indique un problème avec GTK et finalement c’est le prix à payer quand on ne fait pas du pure Java. Ah ! Eclipse que tous les développeurs ont adoptés parce que SWT, le boîte à outils graphique, faisait du natif là où Swing écrit les widget avec du code Java donc plus lent. Voilà ce qui arrive quand on vend son âme au diable, fini le WORA. C’est un comble pour un développeur Java de devoir modifier son IDE pour lui dire d’utiliser GTK2, solution pour faire fonctionner Eclipse sous Debian 7. Dans le fichier eclipse.ini il faut mettre juste après l’option startup :

--launcher.GTK_version
2

 

Exploitabilité des log

Les mécanismes de log en Java, tel que log4J, sont bien matures et font partie de l’état de l’art des développement informatiques. Les développeurs ont l’habitude de s’en servir en vue de mettre au point les programmes et de corriger les bugs après avoir pu les reproduire en local. En production, les log sont généralement moins verbeuses et ont pour objectif de ne signaler que les problèmes sérieux  qui nécessitent un action de l’exploitant voire une remontés rapide aux équipes de développement pour fourniture d’une correction.

Un aspect de la gestion des log est néanmoins peu adressé. Il s’agit de l’exploitabilité des log quand il s’agit de connaître le comportement de l’application en production. La production, environnement sécurisé n’est pas accessible aux développeurs qui doivent souvent demander les log à l’exploitant de production voire ensuite demander d’augmenter le niveau de log en production pour cibler le problème.

De plus, dans le contexte actuel, d’applications communiquantes, où une fonction est assurée par la collaboration de plusieurs applications, la compréhension des problêmes en production passent par une vue globale des log. La log du logiciel est multi-applicative.

Nous prenons comme exemple l’API de log Lg4J devenu le standard defacto de la log en java avant que Sun n’ajoute un mécanisme de log dans le JDK même. Quels sont les outils à la disposition ? Log4j, Chainsaw et Flume méritent-ils que l’on s’y intéressent de plus près ?

Vive la ligne de commande pour lire les vidéos sur internet

L’essor de la vidéo en streaming est une cause d’engorgement du réseau. La mauvaise solution apportée par les opérateurs d’internet est d’instaurer un péage: qui peut payer pourra voir son traffic vidéo privilégié. Cela est à combattre car allant à l’encontre de la libre circulation des données: internet doit rester agnostique du contenu des paquets qui transitent. Cette libre circulation permet à n’importe qui d’avoir l’audience qu’il merite puisque plus son contenu est intéressant, plus il pourra être consulté sans préjuger de sa capacité financière.

L’engordement du réseau à cause de la vidéo reste néanmoins un problème entier et comme souvent nous avons des oeillères qui nous empêchent de voir la solution. Dans de nombreux cas, le streaming n’est pas une contrainte: le poste client est-il réellement limité en espace de stockage ? Le téléchargement de la vidéo est alors un mode de visualisation qui répond au besoin et évite l’engorgement du réseau en cas de visionnage répété de la même vidéo… Il existe des plugins pour Firefox afin de télécharger les vidéos des sites qui les proposent en streaming pour mieux garder l’utilisateur captif de leur portail. Hier soir pourtant ces plugin montrèrent une faille: impossible de télécharger la vidéo convoitée. Je n’en connais pas la cause mais en passant par le script youtube-dl la vidéo était sur mon disque dur en deux temps trois mouvements via la petite commande suivante:

youtube-dl //www.youtube.com/watch?v=v4yOa3tBrB8

Ce programme mérite à être connu car il permet de s’affranchir de la mise à jour forcée vers les nouvelles versions de flash et d’éviter de cautionner l’usage de javascript propriétaire dans nos navigateurs. La ligne de commande c’est bien !