PROJET AUTOBLOG


Planet-Libre

source: Planet-Libre

⇐ retour index

Marthym : Hello OSGi World, Part 3, Configuration du runner

samedi 9 septembre 2017 à 02:00

On a parlé la dernière fois de l’un des points de complexité d’OSGi que sont les bundles et le fait que toutes les dépendances du projet doivent impérativement être des bundles aussi, sans quoi il ne sera pas possible au runner de les charger.

Le run des applications OSGi est un autre de ces points noir.

Le principe

Pour démarrer une application OSGi, le principe est simple sur le papier. On lance l’implémentation choisie (pour nous felix) pour on lui fait charger les bundles de notre application. C’est très vite fastidieux et inhumain de le faire à la main.

Donc pour s’épargner ça, on va utiliser le bundle fileinstall. Ce dernier va automatiquement charger tous les bundles contenu dans un dossier.

Tel qu’on l’a inclus pour l’instant un import felix nu sans rien d’autre. On va ajouter gogo.shell qui va nous permettre d’avoir un peu de visibilité sur ce que l’on fait.

Mise à jour des poms

Pom parent du projet

On y ajoute les versions des dépendances felix dont on a parlé précédemment :

    
        ...
        3.6.0
        1.0.0
    

    ...

    
        
            ...

            
            
                org.apache.felix
                org.apache.felix.fileinstall
                ${fileinstall.version}
            
            
                org.apache.felix
                org.apache.felix.gogo.shell
                ${gogo.version}
            
            
                org.apache.felix
                org.apache.felix.gogo.command
                ${gogo.version}
                
                    
                        org.easymock
                        easymock
                    
                
            

            ...
        
    

L’exclusion de easymock permet d’éviter de l’avoir dans les jars de l’application, il ne sert à rien, je pense que c’est juste une erreur de dépendances qui aurait dû se trouver en scope test.

Module Assembly

Maintenant que les versions sont correctes on ajoute les dépendances dans l’assembly puisqu’il n’y a que lui qui en aura besoin, c’est des dépendances runtime.

    
        ...
        
            org.apache.felix
            org.apache.felix.fileinstall
        
        
            org.apache.felix
            org.apache.felix.gogo.shell
        
        
            org.apache.felix
            org.apache.felix.gogo.command
        

    
    ...

Ensuite pour démarrer, felix à besoin d’un fichier de configuration. À mettre dans how-assembly/src/main/resources/conf/config.properties. Vous pourrez en trouver un exemplaire dans les sources et la doc des différentes propriétés est consultable ici.

Maven assembly plugin

Le plugin assembly de maven va permettre de générer un tar.gz contenant la structure finale du projet. La structure que souhaité est la suivante:

/
├── application
│   ├── how-rest-1.0-SNAPSHOT.jar
│   ├── log4j-api-2.8.2.jar
│   ├── log4j-core-2.8.2.jar
│   ├── log4j-slf4j-impl-2.8.2.jar
│   └── slf4j-api-1.7.25.jar
├── archive-tmp
├── bundle
│   ├── org.apache.felix.bundlerepository-1.6.0.jar
│   ├── org.apache.felix.fileinstall-3.6.0.jar
│   ├── org.apache.felix.gogo.command-1.0.0.jar
│   ├── org.apache.felix.gogo.runtime-1.0.0.jar
│   ├── org.apache.felix.gogo.shell-1.0.0.jar
│   ├── org.osgi.compendium-4.3.1.jar
│   └── org.osgi.core-6.0.0.jar
├── conf
│   └── config.properties
└── org.apache.felix.main-5.6.6.jar

Dans how-assembly/src/main/assembly/bundle.xml permet de paramétrer l’assemblage. Il va contenir 3 dependencySet pour les trois niveaux de hiérarchie (./, application et bundle) ainsi qu’un fileSet pour la configuration. Le fichier complet est visible dans les sources.

Premier démarrage

Une fois l’assemblage au point, on peut aller lancer la machine de guerre !

mvn clean package
cd how-assembly/target
tar jxvf how-1.0-SNAPSHOT.tar.bz2
java -Dfelix.fileinstall.dir=application -jar org.apache.felix.main-5.6.6.jar

Et si tout se passe bien :

____________________________
Welcome to Apache Felix Gogo

g! HOW is now Activated !

Le message de notre activateur s’affiche !

Gogo Shell

C’est le moment de comprendre un peu mien à quoi servent les “Goodies” que l’on a ajouté dans l’assembly. Faite Entrer pour obtenir l’invite g! puis tapez la commande lb pour List Bundles vous devriez avoir quelque chose comme ça :

g! lb
START LEVEL 1
   ID|State      |Level|Name
    0|Active     |    0|System Bundle (5.6.6)|5.6.6
    1|Active     |    1|Apache Felix Bundle Repository (1.6.0)|1.6.0
    2|Active     |    1|Apache Felix File Install (3.6.0)|3.6.0
    3|Active     |    1|Apache Felix Gogo Command (1.0.0)|1.0.0
    4|Active     |    1|Apache Felix Gogo Runtime (1.0.0)|1.0.0
    5|Active     |    1|Apache Felix Gogo Shell (1.0.0)|1.0.0
    6|Active     |    1|osgi.cmpn (4.3.1.201210102024)|4.3.1.201210102024
    7|Active     |    1|osgi.core (6.0.0.201403061837)|6.0.0.201403061837
    8|Active     |    1|how-rest (1.0.0.SNAPSHOT)|1.0.0.SNAPSHOT
    9|Installed  |    1|slf4j-api (1.7.25)|1.7.25

Il s’agit de la liste des bundles installé et démarré dans le framework felix. Vous remarquez le bundle 8 how-rest marqué comme actif.

Mise à jour à chaud

C’est là l’un des gros points fort de OSGi, la mise à jour des bundles à chaud. C’est-à-dire que sans arrêter et relancer l’application, il est possible de mettre à jour les jars qui la compose. Par exemple, lancé l’application puis, depuis le répertoire du dossier, essayez la commande suivante :

cp how-rest/target/how-rest-1.0-SNAPSHOT.jar how-assembly/target/application/

Dans la console de l’application, vous allez voir apparaître

____________________________
Welcome to Apache Felix Gogo

g! HOW is now Activated !
HOW is now Stopped !
HOW is now Activated !

Le log de l’activateur apparaît à nouveau. En effet, fileinstall a détecté la modification d’un fichier dans application et grâce à la gestion de dépendances à chaud d’OSGi, il a peu désactiver le bundle how-rest installer la nouvelle version et ré-activer la nouvelle version. D’où le message qui ré-apparaît. Bon après j’avoue faut en avoir l’usage, mais OSGi peut le faire …

Next

On a vu comment packager et lancer une application OSGi basique, comment palier certaines lourdeurs et rapidement comment lister les bundles en cours. La prochaine fois on verra l’injection de dépendances avec Declarative Service et SCR.

Code source: Part 3, Configuration du runner

Hello OSGi World, Part 3, Configuration du runner écrit à l'origine par Marthym pour J'ai acheté un PC neuf cassé ... le September 09, 2017.

Gravatar de Marthym
Original post of Marthym.Votez pour ce billet sur Planet Libre.

Cenwen : GSOC au secours des Gamers Linuxiens avec Piper

vendredi 8 septembre 2017 à 21:00

Il existe encore de nos jours des domaines où  à la fois, les grands éditeurs de logiciels propriétaires boudent Linux et il n’y a pas ou peu d’applications Open Source, de qualités. Alors que Linux et le monde Open Source est partout, bien que la majorité des gens ne le savent pas. La configuration des souris des gamers en est un parfait exemple. C’est normal, après tout, on n’est que des geeks pas des gamers et le marché des jeux et accessoires pour Linuxiens est ridicule comme part de marché. Comme si on n’avait pas de souris…………

Mais Google est dans ce cas notre ami depuis longtemps (par exemple avec Google Linux pendant des années…), et pour ce qui nous interresse, c’est le GSOC qui vient à notre rescousse. Quoi le GSOC ? Vous ne connaissez pas ?

Le Google Summer Of Code est un projet annuel de Google qui vise à promouvoir le logiciel libre. Vous ne le savez peut-être pas mais les développeurs Open Source ne font pas fortune dans le libre cependant l’argent est le nerf de la guerre même la. Ne serait-ce que pour payer le site web, un dépôt, le temps passé au développement, obtenir de l’aide, etc… D’abord, il y a une sélection des projets candidats par Google, ensuite Google sélectionne des étudiants qui seront rémunéré pendant trois mois sur un projet, le tout chapeauté par un tuteur. Et c’est ainsi depuis 2005. Par exemple, cette année, l’étudiant Ilia Valiakhmetov a travaillé sur l’optimisation des instructions AVX2 de FFmpeg avec une amélioration des performances d’environ 45%. Mais revenons à nos moutons. En ce qui nous concerne, il s’agit de Jente Hidskes avec pour tuteur Peter Hutterer, un développeur Linux fort connu. Il est le créateur en autre de la librairie libratbag et de ratbag (son démon système) et créateur du projet Piper. Ne pouvant tout faire et n’étant pas un gamer, il lui fallait de l’aide et c’est Jente Hidsked qui a été sélectionné pour cette tache. Avec l’aide de son tuteur, d’une communauté de gamers qui participé à la modification des mockups initiales, Jente a propulsé le projet Piper dans le monde réel.

Développé en Python (3) et en Gtk3, Piper permet de gérer principalement le leader de ce marché : Logitech et comble un grand vide pour ce constructeur. Basé sur la librairie Libratbag et son démon système Ratbag (les 2 fusionneront bientôt pour ne former qu’un seul projet), l’approche de Jentes est assez originale. En effet, au lieu de configurer chaque bouton à la « mano », on se sert du hardware cad on clique sur un bouton et il est surligné dans la souris. Et on y applique le paramètre voulu. Jentes a d’ailleurs été obligé de créer pour l’occasion un widget GTK : MouseMap

Vous pouvez gérer :

Voici une liste des périphériques reconnus par libratbag mais sachez qu’il s’agit principalement de souris logitech (G5/7/9 T65, M325/705, G 300/303/403/500/502/602/700/900). Toutefois, Roccat avec la Kone XTD et G.Skill avec la MX 780 ne sont pas oubliés.

Comment l’installer ?

Pour l’instant, il n’y a rien dans les dépôts de Manjaro, ni sur AUR. Rien non plus pour Ubuntu. Il faudra d’abord compiler Libratbag, puis Ratbag et installer Piper.

Mais cela ne saurait tarder, il fallait juste qu’ils soient au courant. C’est chose faite……

Comme tout projet libre, n’hésiter pas à participer en l’utilisant, reportant des bogues, demandant de nouvelles fonctionnalités, gérer la liste des périphérique connus,….. Tout aide est la bien venue.

 


Classé dans:Découverte, framework, Hardware, Jeux, Logiciels, News, Planet-Libre, Programmation, Python, Technologie Tagged: G.Skill, Hardware, Jeux, Linux, Logitech, News Logiciels, Roccat

Gravatar de Cenwen
Original post of Cenwen.Votez pour ce billet sur Planet Libre.

Articles similaires

Cenwen : Sortie d’ Openshot QT 2.4.0

vendredi 8 septembre 2017 à 18:02

L’objectif de cette version est la stabilité, l’amélioration de l’historique pour les fonction annuler/restaurer, un nouveau menu pour le zoom, maj des traduction, correction de bogues en pagaille . Depuis de nombreux mois, Jonathan, avec l’aide de Peter et de Craig, s’est attaché à résoudre un bogue récurent et très difficile à résoudre présent dans le code d’Openshot depuis le passage à la version Qt. Le plus dur a été d’isoler le bogue en question et d’être capable de le reproduire dans leurs environnements de développement. C’est maintenant chose faite. Et la chose n’a pas été aisée. Libopenshot a été mis à jour par la même occasion et passe à la version  0.18 nécessaire pour cette version. Et en prime voici la vidéo faite par la fille de Jonathan avec Openshot-qt version 2.3. (que je n’avais pas pu afficher lors de la rédaction de l’article annonçant cette version; comme quoi il suffit que je m’y mette ….(et surtout y penser !!!)).

Pour ceux qui sont intéressé par ce bogue de corruption de mémoire, voici l’explication technique de Jonathan, en anglais :

For those who want more technical details on the crash, please keep reading. The crash was a race condition and memory corruption bug, caused by a few different things. We process video and audio data in a thread pool, and sometimes things happen in a very unpredictable order. In a very rare condition, memory was being cleared while it was still being accessed. Also, we switched from an older tr1::shared_ptr to std::shared_ptr, and changed the way we initialize our shared_ptr instances, reducing the amount of memory being requested. Also, there were a few spots that needed to be protected between threads, and required locks. So, in summary, a handful of small changes, and a few months of debugging, and we can no longer crash libopenshot during video processing or video encoding! I’m very excited about solving this one if you can’t tell!

Voici la liste des améliorations  :

Openshot-qt (Editeur Vidéo)

Libopenshot (Librarie Vidéo)

Voici la liste des changements en détails en anglais ici

Un gros effort a été réalisé depuis quelques versions afin d’améliorer la stabilité du logiciel et de sa librairie. Il reste à attendre les retours des utilisateurs afin de rendre ce logiciel au niveau de la version Gtk et même plus, puisque que c’est et cela a toujours été un des objectifs majeurs du projet. Bon tests.


Classé dans:Edition Vidéo, framework, Logiciels, Multimédia, News, OpenShot, Planet-Libre Tagged: C++, Libopenshot, Logiciels, Multimédia, News, OpenShot

Gravatar de Cenwen
Original post of Cenwen.Votez pour ce billet sur Planet Libre.

Articles similaires

System Linux : Commande iperf pour tests réseau

vendredi 8 septembre 2017 à 17:00

iperf.jpg

Petite découverte du jour...

Par exemple tester l'ouverture d'un flux entre deux serveurs :

Sur le serveurA :

# iperf -s -p 5046
------------------------------------------------------------
Server listening on TCP port 5046
TCP window size: 85.3 KByte (default)
------------------------------------------------------------

Sur le serveurB :

# telnet serveurA 5046

Surl le serveurA :

------------------------------------------------------------
Server listening on TCP port 5046
TCP window size: 85.3 KByte (default)
------------------------------------------------------------
[  4] local 172.23.15.3 port 5046 connected with 172.23.15.1 port 5177

Flux ouvert !

Simplet comme exemple mais il est possible de faire des trucs assez sexy avec cette commande, des tests réseaux poussés. Un petit man vous en dira plus.

Gravatar de System Linux
Original post of System Linux.Votez pour ce billet sur Planet Libre.

Articles similaires

Mathias : RTPBleed et Asterisk : les appels d’Asterisk sous écoute

vendredi 8 septembre 2017 à 10:51

Asterisk souffre d’un problème assez grave permettant à un attaquant d’écouter simplement vos conversations. Une attaque de l’homme du milieu (man-in-the-middle), sans être vraiment au milieu d’ailleurs, permet de rediriger les flux RTP assez facilement.

L’annonce a été faite il y a quelques jours (31/08/2017). Il s’agit en fait d’un vieux bug datant de 2011 qui a été réintroduit au premier trimestre 2013. Le premier report annonçant la régression date de mai dernier ainsi que le patch (fournit pour test). L’annonce officielle a été faite le 31 août dernier.

Quelles sont les versions vulnérables ?

Toutes les versions d’Asterisk entre la 11.4.0 à la 14.6.1 sont malheureusement touchées.

Dans quel cas le serveur Asterisk est vulnérable ?

Quand le serveur Asterisk fonctionne avec des postes derrière un routeur NAT, il est nécessaire de mettre en oeuvre des actions afin de router correctement les paquets voix. Le protocole SIP s’appuie sur le protocole RTP afin de transporter la voix et le protocole SDP afin que les user-agents (UA) puissent négocier entre eux des éléments comme les codecs, adresses et ports. Ces éléments sont échangés en clair sur le réseau.
Pour permettre ces négociations, le serveur Asterisk est configuré (fichier sip.conf) avec les options nat=yes et strictrtp=yes. De plus, ces options sont configurées ainsi par défaut !

Comment exploiter la faille ?

Un attaquant doit envoyer des paquets RTP au serveur Asterisk sur un port alloué pour recevoir un flux RTP. Si le serveur est vulnérable, alors le serveur Asterisk répond à l’assaillant en relayant les paquets RTP du destinataire véritable. Il est ensuite aisé avec des outils comme Wireshark de décoder le flux audio.

Quelles sont les actions de mitigation envisageable ?

Par ailleurs, si vos postes IP et vos fournisseurs de trunk SIP utilisent des adresses IP fixes et connues, la mise en oeuvre d’une règle sur votre firewall bloquant l’accès aux ports UDP 10000 à 20000 (ports RTP utilisés par défaut par un serveur Aterisk) uniquement à partir de ces adresses apporte une protection suffisante.

Comment vérifier si mon serveur Asterisk est vulnérable ?

L’outil rtpnatscan permet de tester votre serveur Asterisk.

Références :

Autres articles à lire:

Cet article RTPBleed et Asterisk : les appels d’Asterisk sous écoute est apparu en premier sur Blog des télécoms - Par Mathias, expert et formateur rédigé par Mathias.

Gravatar de Mathias
Original post of Mathias.Votez pour ce billet sur Planet Libre.