:::: MENU ::::

Monthly Archives / March 2014

  • Mar 25 / 2014
  • 0
Linux

Download Flash Video Fragmented (F4F/F4M)Télécharger une vidéo Flash fragmentée (F4F/F4M)

Today, for network usage optimization purposes, a lot of videos are streamed and sent to the users as fragmented packets instead of one file. According to Adobe, F4F file is Flash MP4 Video Fragment created and used by Adobe Media Server for HTTP Dynamic streaming like CloudFront, Akamai, … If you want to download this video, you will have to download the script file KSV (download this script on Github) and execute it on a system with php enabled (install PHP on Windows).

Once you’re on the page where video is loading, you have to look for manifest file in source code or network exchanges. This file has F4M extension, correspondig to manifest, which is the file containing the inventory of all the video fragments. It will be necessary for the script execution.

Here is an example of how the command-line should look like (you can modify the quality parameter, and you have to specify the path for manifest file, and output file):

Here are the different options you can use to customize command-line:

All the original sources are available on GitHub : https://github.com/K-S-V/

Aujourd’hui, adin d’optimiser l’utilisation des ressources réseau, beaucoup de vidéos sont diffusées en streaming aux utilisateurs en tant que paquets fragmentés au lieu du chargement d’un fichier complet. Selon Adobe, les fichiers F4F sont des fichiers de format Flash MP4 Video Fragment créés et utilisés par Adobe Media Server pour les diffusions streaming en HTTP Dynamic comme Cloudfront, Akamai, … Si vous souhaitez télécharger cette vidéo, vous devrez récupérer le script KSV (disponible sur Github) et l’exécuter sur un environnement système permettant l’exécution de script PHP (installer PHP sur Windows).

Lorsque vous êtes sur la page où la vidéo est chargée, vous devrez rechercher dans le code source ou dans les échanges réseaux, la présence d’un fichier au format F4M qui correspond au fichier manifeste, recensant l’ensemble des fragments de la vidéo et qui sera nécessaire pour l’exécution du script.

Voici un exemple de ligne de commande que vous pouvez utiliser pour récupérer la vidéo (vous pouvez modifier la qualité, et vous devez indiquer le chemin vers le fichier manifeste, ainsi que le fichier de sortie) :

Voici les différentes options que vous pouvez utiliser pour personnaliser la ligne de commande :

Toutes les sources originales sont disponibles sur GitHub : https://github.com/K-S-V/

  • Mar 18 / 2014
  • 0
Linux

Install VMware Tools on ESXi for Ubuntu GuestInstaller VMware Tools sur un ESXi pour un système invité Ubuntu

If you want to install VMware Tools on ESXi for an Ubuntu Guest, there is two possibilities:

  1. Use the package provided on distribution (but can be not up-to-date and so not approved)
  2. Install directly from official sources provided in vSphere Client (will be automatically recognized)

Use the pre-package distribution

This solution is the easiest way to install tools. You just have to use apt on your guest to install it:

Use the official sources available in vSphere Client

This solution is not as simple as the previous one but is really sure and well-guided.

  1. Connect to your ESXi server using vSphere Client
  2. At this moment, ensure that you have a CDROM hardware available for your VM Guest (in Settings)
  3. Start your VM Guest running Ubuntu
  4. Check that you have already needed packages installed (most of time, they are not installed with a standard configuration):
    • gcc
    • build-essential
    • binutils

    You can use this command line to install them:

  5. You can now connect VMware Tools on your VM Guest using vSphere Client:
    • Right-click on your VM name
    • Select “Guest” > “Install/Upgrade VMware Tools”
    • Wait a few seconds

    This action will automatically (and transparently) mount the VMwre Tools CD into your VM Guest Ubuntu.

  6. Open a console on your VM Guest to mount the CDROM you just connected:

  7. Copy the VMwareTools-x.x.x-xxxxxxx.tar.gz file from the CDROM to a local folder (‘x’ values depend on version used):

  8. Unzip the VMware tools package you just copied:

  9. Go to the new folder created while unzipping file and run the installer script (perl script):

  10. From now, just follow the instructions displayed on the screen to install VMware tools.

Once all of this is done, you will see on vSphere, in VM details, that the vMware Tools are correctly installed.Si vous souhaitez installer les VMware Tools sur un ESXi pour un système invité Ubuntu, il y a deux possibilités :

  1. Utilisez le package fourni par la distribution (mais qui peut ne pas être à jour et donc non approuvé par vSphere)
  2. Installez directement depuis les sources officielles fournies dans vSphere Client (qui sera automatiquement reconnu

Utiliser la version pré-packagée de la distribution

Cette solution est le moyen le plus facile d’installer les VMwareTools. Vous avez juste à utiliser apt sur votre système invité pour les installer :

Utilisez les sources officielles disponibles dans vSphere Client

Cette solution n’est pas aussi simple que la précédente mais est vraiment sûre et bien guidée/détaillée.

  1. Connectez-vous à votre serveur ESXi en utilisant vSphere Client
  2. A ce moment, assurez vous que vous avez un lecteur CDROM disponible sur votre VM invitée (dans les Settings)
  3. Démarrez votre VM invitée sur Ubuntu
  4. Vérifiez que vous avez les packages nécessaires installés (la plupart du temps, ils ne sont pas installés avec une configuration standard) :
    • gcc
    • build-essential
    • binutils

    Vous pouvez utiliser cette ligne de commande pour les installer :

  5. Vous pouvez maintenant connecter VMware Tools à votre VM invitée en utilisant vSphere Client :
    • Faites un clic droit sur le nom de la VM
    • Sélectionnez “Guest” > “Install/Upgrade VMware Tools”
    • Attendez juste quelques secondes

    Cette action va automatiquement (et de manière transparente) monter le CD des VMware Tools sur le système invité.

  6. Ouvrez une console sur le système invité pour monter le CD que vous venez de connecter :

  7. Copiez le fichier VMwareTools-x.x.x-xxxxxxx.tar.gz du CDROM vers un répertoire local (les valeurs ‘x’ dépendent de la version utilisée) :

  8. Décompressez le package VMware tools que vous venez de copier :

  9. Allez dans le dossier créé durant la décompression du fichier et lancez le script d’installation (script perl) :

  10. A partir de là, vous n’avez plus qu’à suivre les instructions affichées à l’écran pour installer les VMware Tools.

Une fois que tout ceci est fait, vous constaterez sur vSphere, dans les détails de la VM, que les VMware Tools ont correctement été installés.

  • Mar 14 / 2014
  • 0
Python, web2py

Unserialize web2py requests and allow concurrent accessDésérialiser des requêtes web2py et permettre des accès concurrents

With a default configuration for your web2py application, you will notice that when you are launching an action, if this one is quite long to execute, you won’t be able to open a new tab to run another request on the same application. This can be explained because when you are launching an action, your browser is sending session informations to the server and your session file on server-side is so opened in writing mode for being updated. A lock is set on this file, blocking any other action to be executed for this session while the lock is not released.

This problem is effectively not existing if you are using a database for your session management instead of a file system. To use a database system, you just need to declare your database:

and initiate the connection to this database for sessions:

A table will so be automatically created, named web2py_session_appname and will contain following fields:

If you want to use the file system for your sessions, you will need to use the following command to allow the session file release:

You will notice that this command must only be called if the action you want to execute do not require to session informations. For example, if you are loading dynamically some contents via Ajax calls on several parts of the page, you can add this command for each call to allow the concurrential execution knowing that the connection informations are saved while main page is loading.

As testing, you can use following code:

If you’re calling previous code by deleting the session.forget() command call, you will get this as a result:

If you’re calling the same code with the session.forget() command call, you will get:

We can notice that between both cases, we have a concurrential execution thanks to the session.forget() function, and that we can hardly optimize the page loading time.

Please note that most of browsers won’t allow you to execute more than 6 requests at the same time, hence the result we are getting with the last test where we can see that the six first requests are executed together whereas the following ones are executed afterwards (on a second flow but concurrent also).Avec une configuration par défaut de votre application Web2py, vous pourrez noter que lorsque vous lancez une action, si celle-ci prend un peu de temps à s’exécuter, vous ne pouvez pas ouvrir un nouvel onglet de votre navigateur pour exécuter une autre requête sur la même application. Ceci est dû au fait que lorsque vous exécutez une action, votre navigateur transmet vos informations de session au serveur et votre fichier de session côté serveur est donc ouvert en écriture pour être mis à jour. Un verrou est donc mis en place sur le fichier, empêchant toute autre action de démarrer tant que le verrou n’est pas lâché.

Ce problème ne se présente donc effectivement pas si vous utilisez un système de gestion des sessions sur une base de données et non sur un système de fichiers. Pour utiliser un système de bases de données, il vous faut pour une base de données déclarée :

initier la connexion sur cette base pour les sessions :

Une table va alors être automatiquement créée, sera appelée web2py_session_appname et contiendra les champs suivants :

Si vous souhaitez utiliser le système de fichiers de session, il vous faudra alors utiliser la commande suivante pour permettre de libérer ce fichier de session :

Notez bien que cette commande ne doit être appelée que si l’action exécutée ne nécessite pas d’informations de session. Par exemple, si vous chargez du contenu dynamiquement via des appels Ajax à différents endroits de la page vous pouvez ajouter cette commande pour chaque appel afin de permettre leur exécution concurrentielle sachant que les informations de connexion sont enregistrées sur le chargement de la page principale.

Pour tester, vous pouvez utiliser le code suivant :

Si vous appelez le code précédent en enlevant la commande session.forget() vous obtiendrez le résultat suivant :

Si vous appelez le même code en laissant la commande session.forget() vous obtiendrez alors :

On constate donc bien qu’entre les deux cas, nous avons une exécution concurrentielle fonctionnelle grâce à la fonction session.forget() et que la durée d’exécution de la page peut, de fait, être fortement optimisée.

Notez bien que la plupart des navigateurs ne permettra pas d’exécuter plus de 6 requêtes en même temps, d’où le résultat du dernier test où l’on constate que les 6 premières requêtes sont exécutées ensemble alors que les suivantes sont exécutées ensuite (sur un deuxième flot mais également en concurrence).

  • Mar 07 / 2014
  • 0
Linux

Handling HTTP errors with Apache and Tomcat using mod_jkRécupérer les erreurs HTTP avec Apache et Tomcat en utilisant mod_jk

When you are working with web server in frontend (Apache in this example) and backend application servers (Tomcat here), you may wish to customize your error pages depending on the HTTP error code returned (either from the web server or application server).

Pre-requisites

For the following example, you will need as pre-requisites at least those versions:

  • Web Server Apache >= 2.2.x
  • Mod JK >= 1.2.27 (rule extensions are not available in earlier versions)

Apache configuration

If you want to handle any error coming from your web server or from your application servers, you will need to perform some changes in your configuration to allow the handling. First of all you will need to set up some parameters in your Apache configuration file (in apache2.conf file directly or in your VirtualHost definitions).

In my example, I am handling any HTTP error code between:

  • HTTP 400 and HTTP 405
  • HTTP 500 and 504

I am using an only file (written in PHP) allowing me to send back a simple HTML page to the user depending on the HTTP error code received.

Here is what I’ve configured in my apache2.conf file for handling any error listed above:

The errorhandler.php file could be like that (feel free to customize it as you want with a beautiful CSS theme, for the example I’ve used a basic configuration ;)):

mod_jk configuration

Once you’re done with the main configuration of Apache, you will have to specify to Apache that you want to handle any HTTP error coming from the application servers. For that, you will have to use the rule extension use_server_errors when mounting an access point to a worker through mod_jk.

By default, for a mounting point you are using:

But if you want to handle any HTTP 40x error coming from this worker, you will have to add the use_server_errors extension to your mounting point:

To handle any HTTP 50x error:

Or another option to handle both errors using just one command:

You are now handling any error received from your application server with your web server allowing you to customize it as you want.

Feel free to read more about this rule extension on the official website.

Lorsque vous travaillez avec un serveur web en frontal (Apache dans cet exemple) et des serveur d’application en backend (ici Tomcat), vous pouvez souhaitez customiser vos pages d’erreur en fonction du code d’erreur HTTP retourné (qu’il provienne du serveur web ou d’un serveur d’application).

Pré-requis

Pour l’exemple suivant, vous aurez besoin au minimum des versions suivantes:

  • Web Server Apache >= 2.2.x
  • Mod JK >= 1.2.27 (les “rule extensions” ne sont pas disponibles dans les versions précédentes)

Configuration Apache

Si vous souhaitez récupérer n’importe quelle erreur provenant de votre serveur web ou de vos serveurs d’application, vous aurez besoin d’effectuer quelques modification dans la configuration pour l’autoriser. Tout d’abord, vous aurez besoin d’éditer certains paramètres dans votre fichier de configuration Apache (dans le fichier apache2.conf directement ou dans vos définitions de VirtualHost).

Dans mon exemple, je récupère tout code d’erreur HTTP entre :

  • HTTP 400 et HTTP 405
  • HTTP 500 et 504

J’utilise uniquement un fichier pour récupérer ces erreurs (écrit en PHP) qui me permet de renvoyer une simple page HTML à l’utilisateur en fonction du code d’erreur reçu.

Ci-dessous, la configuration définie dans le fichier apache2.conf pour récupérer les erreurs listées précédemment :

Le fichier errorhandler.php peut ressembler à cela (mais libre à vous de le customiser selon vos souhaits avec un magnifique thème CSS, pour l’exemple j’ai utilisé une configuration très basique ;)) :

Configuration du mod_jk

Une fois que vous avez fini la configuration principale d’Apache, vous allez devoir spécifier à Apache que vous souhaitez récupérer toute erreur HTTP provenant de vos serveurs d’application. Pour cela, vous allez utiliser l’extension use_server_errors lorsque vous montez un point d’accès avec mod_jk.

Par défaut, pour un point de montage vous utilisez :

Mais si vous souhaitez récupérer toute erreur HTTP 40x provenant de ce worker, vous allez devoir ajouter la directive use_server_errors à votre commande de montage :

Pour récupérer toute erreur HTTP 50x :

Ou encore, si vous souhaitez récupérer l’ensemble de ces précédentes plages d’erreur, vous pouvez utiliser la commande :

Vous récupérez maintenant toute erreur reçue de vos serveurs d’application sur votre serveur web vous permettant leur personnalisation comme vous le souhaitez.

Si vous souhaitez en lire davantage sur ces extensions, n’hésitez pas à visiter le site officiel.

  • Mar 06 / 2014
  • 0
Linux

How to compile and install its own Linux kernelComment compiler et installer son propre noyau Linux

The Linux Kernel is the operating system kernel. It is the core of the system and provide an interface between the hardware and the software layers.

Most of Linux distributions are coming with a pre-compiled and ready-to-use kernel for most of standard usage. However, some functionalities are sometimes missing in the kernel to allow the execution of specific functions or the support of some hardware (cards, …). In these cases, you will need to use the source code of the needed kernel, recompile it and reinstall it to replace the existing one. All the official soruces of the different kernels are available for free on the website kernel.org.

I will show you here how to modify the source code, compile and install your own kernel for your system (command-lines provided are working under Debian/Ubuntu based system, you will probably need to adapt them depending on the system you are running).

Pre-requisites

In a first time, check that you got the different packages necessary for the operation:

Once these packages are correctly installed, you can go on the official website to retrieve the source and the configuration files for the kernel you want to use: http://www.kernel.org. In our example, we will use the kernel on version 3.13.5 (latest stable version available today).

Let’s move to the /usr/src directory and then download the kernel archive that we will uncompress immediately:

Kernel sources are now uncompressed in the /usr/src/linux-3.13.5 folder and we can go ahead with its configuration.

Configuration

Let’s move in the directory you just created and start with the use of command make menuconfig to launch the configuration tool:

At this time, you can activate any feature you want on the kernel. For example:

  • To activate the virtualization and its specific functions, move on Virtualization and then press the Space bar to get access to the different available functionalitiesuis  (that you can activate/deactivate as you want)
  • To activate the modules support, move on Enable loadable module support and choose the modules you want to enable by pressing the Space bar (activated items will be checked)

kernel_01

Once you’re done with this configuration, choose Exit and confirm the save of your configuration. This one will be saved in the current directory under the .config file (that you can manually edit with a simple text editor if necessary).

Compilation

Now that the kernel is configured, you will have to compile it so that it can be used on your system. For that, you will need to execute several commands for the different compilation steps:

  • Dependencies compilation (now useless with latest versions)
  • Kernel image compilation
  • Modules compilation
  • Modules installation

At this time, your kernel has been compiled and is ready to be set up on your system.

Installation

To install your own kernel, you just need to execute the command-line below:

This command will create the following files in the /boot start directory:

  • vmlinuz-3.13.5 : the current kernel
  • config-3.13.5 : the kernel configuration file
  • System.map-3.13.5 : the symbol table exported by the kernel
  • initrd.img-3.13.5 : the root file used temporarily during the boot process

This command should update automatically the Grub configuration file (grub.cfg). You won’t need to perform the update manually.

If it’s not done automatically, you can execute it manually with the command-line below:

Checking

In order to check that your kernel has correctly been loaded and is used, you need to reboot your system. Once restarted, you can check which kernel is used with the uname command:

You are now using your own kernel with the functionalities you wanted.Le noyau de Linux est le noyau du système d’exploitation, il est le coeur du système et permet de fournir une interface avec le matériel pour les couches logicielles.

Une grande majorité des distributions Linux est fournie avec un noyau pre-compilé et prêt à l’emploi pour la plupart des usages standards. Cependant, il manque parfois certaines fonctionnalités au noyau pour permettre l’exécution de certaines fonctions spécifiques ou encore pour le support de certains matériels. Il faut alors utiliser le code source du noyau voulu, le recompiler et le réinstaller pour remplacer celui qui est déjà installé. Toutes les sources officielles de noyau sont disponibles sur le site kernel.org.

Nous allons donc voir ici comment modifier les sources, compiler et installer son propre noyau sur son système (les lignes de commandes fournies sont pour un système basé Debian/Ubuntu, il vous faudra donc les adapter si vous utilisez un autre système).

Pré-requis

Dans un premier temps, il faut vérifier la présence des paquets nécessaires à l’opération :

Une fois ces paquets installés, vous pouvez aller sur le site officiel pour récupérer les sources et les fichiers de configuration du noyau que vous souhaitez utiliser : http://www.kernel.org. Pour notre exemple, nous allons utiliser le noyau en version 3.13.5 (dernière version stable disponible à ce jour).

Nous nous plaçons dans le répertoire /usr/src puis nous téléchargeons l’archive du noyau que nous décompressons immédiatement :

Les sources du noyau sont donc maintenant décompressées dans le dossier /usr/src/linux-3.13.5 et nous pouvons donc passer à sa configuration.

Configuration

On se déplace dans le dossier contenant les sources et nous utilisons la commande make menuconfig pour démarrer la configuration:

Vous pouvez alors à ce moment activer les fonctionnalités que vous souhaitez sur le noyau. Par exemple :

  • Pour activer la virtualisation et ses fonctions spécifiques, déplacez vous sur Virtualization puis appuyez sur la touche Espace pour avoir accès aux différentes possibilités (que vous pouvez activer/désactiver selon vos besoins)
  • Pour activer le support des modules, déplacez-vous sur Enable loadable module support et activez les modules souhaités en utilisant la touche Espace (les éléments activés seront cochés)

kernel_01

Une fois la configuration terminée, choisissez Exit et acceptez la sauvegarde de votre configuration. Celle-ci est enregistrée dans le répertoire courant sous le fichier .config (que vous pouvez éditer manuellement également si nécessaire avec un simple éditeur de texte).

Compilation

Maintenant que le noyau est configuré, il faut le compiler pour qu’il puisse être utilisé sur votre système. Pour cela, il vous faudra exécuter différentes commandes pour les différentes étapes de compilation :

  • Compilation des dépendances (désormais inutile sur les dernières versions)
  • Compilation de l’image du noyau
  • Compilation des modules
  • Installation des modules

A ce moment, votre noyau a été compilé et est prêt à être installé sur votre système.

Installation

Pour installer votre nouveau noyau, il vous suffit d’exécuter la commande suivante :

Cette commande va avoir pour effet de créer les fichiers suivants dans le répertoire de démarrage /boot :

  • vmlinuz-3.13.5 : le noyau actuel
  • config-3.13.5 : le fichier de configuration du noyau
  • System.map-3.13.5 : la table de symboles exportée par le noyau
  • initrd.img-3.13.5 : le fichier racine utilisée temporairement pendant le processus de démarrage

Cette commande doit également mettre à jour automatiquement le fichier de configuration de Grub (grub.cfg), vous n’avez donc pas à le mettre à jour manuellement.

Le cas échéant, vous pouvez exécuter cette mise à jour manuellement avec la commande suivante :

Vérification

Afin de vérifier que votre noyau a bien été chargé, et qu’il est utilisé, vous pouvez redémarrer votre système et effectuer la vérification grâce à la commande uname qui vous permettra de récupérer l’information :

Vous utilisez maintenant votre nouveau noyau avec les fonctionnalités souhaitées activées.

Question ? Contact