Add OpenStack instance meta-data info in your salt grains

During a work session on my salt-states for WebPlatform.org I wanted to shape be able to query the OpenStack cluster meta-data so that I can adjust more efficiently my salt configuration.

What are grains? Grains are structured data that describes what a minion has such as which version of GNU/Linux its running, what are the network adapters, etc.

The following is a Python script that adds data in Salt Stack’ internal database called grains.

I have to confess that I didn’t write the script but adapted it to work within an OpenStack cluster. More precisely on DreamHost’s DreamCompute cluster. The original script came from saltstack/salt-contrib and the original file was ec2_info.py to read data from EC2.

The original script wasn’t getting any data in the cluster. Most likely due to API changes and that EC2 API exposes dynamic meta-data that the DreamCompute/OpenStack cluster don’t.

In the end, I edited the file to make it work on DreamCompute and also truncated some data that the grains subsystem already has.

My original objective was to get a list of security-groups the VM was assigned. Unfortunately the API doesn’t give that information yet. Hopefully I’ll find a way to get that information some day.

Get OpenStack instance detail using Salt

Locally

salt-call grains.get dreamcompute:uuid
local:
    10a4f390-7c55-4dd3-0000-a00000000000

Or for another machine

salt app1 grains.get dreamcompute:uuid
app1:
    510f5f24-217b-4fd2-0000-f00000000000

What size did we create a particular VM?

salt app1 grains.get dreamcompute:instance_type
app1:
    lightspeed

What data you can get

Here is a sample of the grain data that will be added to every salt minion you manage.

You might notice that some data will be repeated such as the ‘hostname’, but the rest can be very useful if you want to use the data within your configuration management.

dreamcompute:
    ----------
    availability_zone:
        iad-1
    block_device_mapping:
        ----------
        ami:
            vda
        ebs0:
            /dev/vdb
        ebs1:
            vda
        root:
            /dev/vda
    hostname:
        salt.novalocal
    instance_action:
        none
    instance_id:
        i-00000000
    instance_type:
        lightspeed
    launch_index:
        0
    local_ipv4:
        10.10.10.11
    name:
        salt
    network_config:
        ----------
        content_path:
            /content/0000
        name:
            network_config
    placement:
        ----------
        availability_zone:
            iad-1
    public_ipv4:
        203.0.113.11
    public_keys:
        ----------
        someuser:
            ssh-rsa ...an rsa public key... [email protected]
    ramdisk_id:
        None
    reservation_id:
        r-33333333
    security-groups:
        None
    uuid:
        10a4f390-7c55-4dd3-0000-a00000000000

What does the script do?

The script basically scrapes OpenStack meta-data service and serializes into saltstack grains system the data it gets.

OpenStack’s meta-data service is similar to what you’d get from AWS, but doesn’t expose exactly the same data. This is why I had to adapt the original script.

To get data from an instance you simply (really!) need to make an HTTP call to an internal IP address that OpenStack nova answers.

For example, from an AWS/OpenStack VM, you can know the instance hostname by doing

curl http://169.254.169.254/latest/meta-data/hostname
salt.novalocal

To know what the script calls, you can add a line at _call_aws(url) method like so

diff --git a/_grains/dreamcompute.py b/_grains/dreamcompute.py
index 682235d..c3af659 100644
--- a/_grains/dreamcompute.py
+++ b/_grains/dreamcompute.py
@@ -25,6 +25,7 @@ def _call_aws(url):

     """
     conn = httplib.HTTPConnection("169.254.169.254", 80, timeout=1)
+    LOG.info('API call to ' + url )
     conn.request('GET', url)
     return conn.getresponse()

When you saltutil.sync_all (i.e. refresh grains and other data), the log will tell you which endpoints it queried.

In my case they were:

[INFO    ] API call to /openstack/2012-08-10/meta_data.json
[INFO    ] API call to /latest/meta-data/
[INFO    ] API call to /latest/meta-data/block-device-mapping/
[INFO    ] API call to /latest/meta-data/block-device-mapping/ami
[INFO    ] API call to /latest/meta-data/block-device-mapping/ebs0
[INFO    ] API call to /latest/meta-data/block-device-mapping/ebs1
[INFO    ] API call to /latest/meta-data/block-device-mapping/root
[INFO    ] API call to /latest/meta-data/hostname
[INFO    ] API call to /latest/meta-data/instance-action
[INFO    ] API call to /latest/meta-data/instance-id
[INFO    ] API call to /latest/meta-data/instance-type
[INFO    ] API call to /latest/meta-data/local-ipv4
[INFO    ] API call to /latest/meta-data/placement/
[INFO    ] API call to /latest/meta-data/placement/availability-zone
[INFO    ] API call to /latest/meta-data/public-ipv4
[INFO    ] API call to /latest/meta-data/ramdisk-id
[INFO    ] API call to /latest/meta-data/reservation-id
[INFO    ] API call to /latest/meta-data/security-groups
[INFO    ] API call to /openstack/2012-08-10/meta_data.json
[INFO    ] API call to /latest/meta-data/
[INFO    ] API call to /latest/meta-data/block-device-mapping/
[INFO    ] API call to /latest/meta-data/block-device-mapping/ami
[INFO    ] API call to /latest/meta-data/block-device-mapping/ebs0
[INFO    ] API call to /latest/meta-data/block-device-mapping/ebs1
[INFO    ] API call to /latest/meta-data/block-device-mapping/root
[INFO    ] API call to /latest/meta-data/hostname
[INFO    ] API call to /latest/meta-data/instance-action
[INFO    ] API call to /latest/meta-data/instance-id
[INFO    ] API call to /latest/meta-data/instance-type
[INFO    ] API call to /latest/meta-data/local-ipv4
[INFO    ] API call to /latest/meta-data/placement/
[INFO    ] API call to /latest/meta-data/placement/availability-zone
[INFO    ] API call to /latest/meta-data/public-ipv4
[INFO    ] API call to /latest/meta-data/ramdisk-id
[INFO    ] API call to /latest/meta-data/reservation-id
[INFO    ] API call to /latest/meta-data/security-groups

Its quite heavy.

Hopefully the script respects HTTP headers and don’t bypass 304 Not Modified responses. Otherwise it’ll add load to nova. Maybe I should check that (note-to-self).

Install

You can add this feature by adding a file in your salt states repository in the _grains/ folder. The file can have any name ending by .py.

You can grab the grain python code in this gist.

enjoy!

Processus de création d’une VM faisant partie d’un parc géré par Salt Stack

A mon emploi actuel je gère un parc de machines virtuelles (VMs) qui est automatisé par un système de gestion de configuration appelé Salt Stack.

Salt stack est un outil permettant de décrire quel est l’état désiré d’un serveur. Comme d’autres outils avec une utilité similaire, Salt Stack peut être utilisé dans des environnements hétérogènes sous GNU/Linux, Mac OS, et Windows, FreeBSD, etc.

L’environment que nous utilisons est un serveur avec des «blades». Chaque «blade» fournit les services créant un cluster OpenStack. Dans le futur, nous risquons d’avoir plus d’un fournisseur OpenStack. Pour automatiser comme nous l’aimons, nous utilisons grandement la ligne de commande avec le paquet python-novaclient.

Chaque machine virtuelle roule une version LTS («Long Term Support») de Ubuntu.

Absolument toutes les configurations sont appliqués via Salt Stack, la seule chose qui est fait manuellement en
ce moment est de créer la nouvelle instance, et de l’ajouter au «master» de Salt Stack.

Même là, ça risque de changer lorsque nous aurons déployé Salt Cloud.

Procédure

Mise à jour Mars 2015: Un nouvel article sur le même sujet a été écrit (en anglais) et illustre comment faire une nouvelle VM avec encore moins d’étapes

  1. Boot une nouvelle node avec Nova

    [email protected]:~$ nova boot --image lucid-minion-template --flavor wpdn.large --key-name renoirb app6
    
  2. Donner un nom en fonction du type de serveur a déployer avec un numéro à la fin. Exemple: app6

    NOTE Dans mon cas, j’ai notamment: app, db, memcached, etc.

  3. Ajoute l’adresse floating dans /srv/pillar/nodes/init.sls comme les autres

    nodes:
      master:
        public:  ####IP PUBLIQUE CACHÉE####
        private: 10.0.0.1
    
      app1:
        public:  ####IP PUBLIQUE CACHÉE####
        private: 10.0.0.7
    
      memcache2:
        public:  ####IP PUBLIQUE CACHÉE####
        private: 10.0.0.4
    
      app5:
        public:  ####IP PUBLIQUE CACHÉE####
        private: 10.0.0.3
    
  4. Prend le fichier /home/ubuntu/runme de n’importe quel autre serveur et colle le dans la nouvelle machine. Puis execute (sudo /bin/bash runme)

  5. Ajouter une ligne dans le nouveau serveir dans /etc/salt/minion.d/master.conf

    id: app6
    

    … Voir les autres nodes

  6. Restart salt-minion

    [email protected]:~$ sudo service salt-minion restart
    
  7. Ajoute la clée au master

    [email protected]:~$ sudo salt-key -a app6
    

    … Le ‘-a foo’ est optionnel et tu peux lister Les nodes.

  8. Run state.highstate

    [email protected]:~$ sudo salt app6 state.highstate
    
  9. Uploader le code via rsync dans la nouvelle app node, puis re-rouler state.highstate (certains scripts prennent pour aquis que le code est déjà déployé)

    [email protected]:~$ sudo salt app6 state.sls code.node_app
    [email protected]:~$ sudo salt app6 state.highstate
    

    Comme je disais, parfois, le premier state.highstate ne marche pas a cause du code pas déployé.

  10. Rafraichir les autorisations pour storage

    [email protected]:~$ sudo salt 'storage*' state.highstate
    [email protected]:~$ sudo salt 'monitor*' state.highstate
    
  11. Updater le hosts file de quelque nodes

    [email protected]:~$ sudo salt 'app*' state.sls hosts
    [email protected]:~$ sudo salt 'db*' state.sls hosts
    [email protected]:~$ sudo salt 'memcache*' state.sls hosts
    

Procedure to create a re-usable configuration export script to move a virtual machine configuration to a new one

The following procedure is about deprecating an old Linux server, and
move crucial configuration to a new fresh install that has the desired
configuration by cloning it, then applying the Old VM‘s configuration.

The steps will go as follows:

  1. Grab the original machine’s configuration
  2. Clone the New VM that will replace the Old
  3. Disable the Old VM web application

1. Grab the original machine’s configuration

The steps will create a tar file with the configurations.

  • Connect to the production vm (morpheus) through the cloud provider console (e.g. vSphere client, or VCloud director webapp or Open Stack console)
    • Connect through Putty, or your local development VM terminal the follwing lines (the console do not share the clipboard)
ssh [email protected]
  • Create this file
vi ~/make-migrate.sh
  • Enter in vim paste mode
:set paste
  • Paste this content
#!/bin/bash 
cd ~ 
mkdir -p ~/migrate/etc/network 
sudo cp /etc/network/interfaces ~/migrate/etc/network/ 
sudo cp /etc/hostname ~/migrate/etc/ 
sudo cp /etc/resolv.conf ~/migrate/etc/ 
mkdir -p ~/migrate/etc/ssh 
sudo cp /etc/ssh/ssh_host* ~/migrate/etc/ssh/ 
mkdir -p ~/migrate/home/username/.ssh 
cp ~/.ssh/* ~/migrate/home/username/.ssh/ 
mkdir -p ~/migrate/home/username/_prod/app/config 
cp ~/_prod/app/config/parameters.ini ~/migrate/home/username/_prod/app/config 
mkdir -p ~/migrate/etc/apache2/sites-available 
sudo cp /etc/apache2/sites-available/* ~/migrate/etc/apache2/sites-available/ 
sudo cp /etc/resolv.conf ~/migrate/etc/ 
sudo chown -R username:username ~/migrate 
tar cfz ~/migrate.tar.gz ~/migrate 
mv migrate.tar.gz _prod/web/
  • Execute it
/bin/bash ~/make-migrate.sh
  • The latter moves into the
  • Download https://morpheus.networkname.net/migrate.tar.gz

2. Clone the New VM that will replace the Old

This step is about cloning the functionnal VM.

Since it is specific to your cloud management system, I will not describe any way to do so.

Important points to consider while doing so, ensure that you:

  • disable or isolate networking
  • have access to an alternate console

Otherwise you might just create conflicts.

2. Render the production machine unavailable

You should have a copy of the original VM (e.g. morpheus-stg) with the config working the way you want.

This step is specific to the way you might commission or decomission your web app.

You may even not need to decomission it if you have multiple database servers not on the same host.

3. Prepare the New VM to use the Original VM

  • Start the cloned VM
  • Connect through the vCenter console
  • Download the file, sorry, no cut in paste in the cloud provider console :(
  • Assuming you are in /home/username
pwd
/home/username
wget --no-check-certificate https://morpheus.networkname.net/migrate.tar.gz
  • Get the migrate folder from the extracted archive (it will be in a ‘home’ folder after extracting)
tar xfz migrate.tar.gz
mv home/username/migrate .
rm -rf home
  • Disable the network configuration
  sudo /etc/init.d/networking stop
  • Run the following commands:
    • Echo the content of the files inside the migrate/ folder, into their original locations
    • See the file listing:
find migrate/ -type f
  • Create the migrate file original contents
cd migrate
find . -type f > prepare.sh
  • Warning, the following commands we will be using vim to prepare our import script, follow the keyboard types in that sequence:
vim prepare.sh
  • (in the top left corner, where it starts), do:
  • NOTE: FOLLOW BLINDLY THOSE VIM COMMANDS … they written in the form of {modifier key}+{letter}, such as: CTRL+v, SHIFT+A, means the key combination like you would on a Graphical user interface, the + in this list is only to mean together.
dd
CTRL+v
100j
$
y
SHIFT+A
  • Add a few spaces, to make the cursor go further than the longest line
ESC
p
  • The following commands, you have to be in ESC mode, and press ENTER when finished:
:%s/  \./ /
:%s/\./cp \./
  • All is done, write and quit
:wq
  • Check the file
cat prepare.sh
  • You will end up with a file similar to
cp ./home/username/_prod/app/config/parameters.ini    /home/username/_prod/app/config/parameters.ini  
cp ./home/username/.ssh/id_rsa                        /home/username/.ssh/id_rsa  
cp ./home/username/.ssh/geritt_dsa.pub                /home/username/.ssh/geritt_dsa.pub  
cp ./home/username/.ssh/geritt_dsa                    /home/username/.ssh/geritt_dsa  
cp ./home/username/.ssh/authorized_keys2              /home/username/.ssh/authorized_keys2  
cp ./home/username/.ssh/config                        /home/username/.ssh/config  
cp ./home/username/.ssh/known_hosts                   /home/username/.ssh/known_hosts 
cp ./home/username/.ssh/id_rsa.pub                    /home/username/.ssh/id_rsa.pub 
cp ./etc/ssh/ssh_host_rsa_key.pub                     /etc/ssh/ssh_host_rsa_key.pub  
cp ./etc/ssh/ssh_host_dsa_key                         /etc/ssh/ssh_host_dsa_key 
cp ./etc/ssh/ssh_host_dsa_key.pub                     /etc/ssh/ssh_host_dsa_key.pub  
cp ./etc/ssh/ssh_host_ecdsa_key.pub                   /etc/ssh/ssh_host_ecdsa_key.pub 
cp ./etc/ssh/ssh_host_rsa_key                         /etc/ssh/ssh_host_rsa_key  
cp ./etc/ssh/ssh_host_ecdsa_key                       /etc/ssh/ssh_host_ecdsa_key 
cp ./etc/hostname                                     /etc/hostname  
cp ./etc/resolv.conf                                  /etc/resolv.conf  
cp ./etc/network/interfaces                           /etc/network/interfaces
  • Execute that newly created script, first check you are in /home/username/migrate
pwd
/home/username/migrate
  • We’ll run as root
sudo -s
  • Echo a file or two, to test BEFORE->AFTER
cat /etc/network/interfaces
...
cat /etc/hostname
morpheus-stg
  • Now, run the file
/bin/bash ./prepare.sh
  • they should be different :)
cat /etc/network/interfaces
...
cat /etc/hostname
morpheus.networkname.net
  • Make sure the /etc/hosts file reflects, and points at 127.0.0.1
127.0.0.1   localhost morpheus.networkname.net morpheus
  • You can use vim regex like so:
sudo vim /etc/hosts
:%s/morpheus-stg/morpheus/
:wq
  • Use apache command tools to disable the old site and enable the prod ones:
sudo ll /etc/apache/sites-available
...
-rw-r--r-- 1 root root 1052 Feb 20 19:19 /etc/apache2/sites-available/default
-rw-r--r-- 1 root root 7469 Feb  6  2012 /etc/apache2/sites-available/default-ssl
-rw-r--r-- 1 root root 1917 Feb 20 15:48 /etc/apache2/sites-available/ssl
  • Enable only ssl, and default (NOT ‘default-ssl‘)
sudo a2dissite
10-project.local.conf
sudo a2ensite
default ssl
  • Restart the server
sudo service apache2 restart

3. Decomission the original, use the new VM as the new Production

This is, again, specific to the way you might commission or decomission your web app

Créer un tunnel SSH inverse pour pouvoir supporter à distance un ami utilisant Linux

Avez-vous déjà voulu accéder a votre ordinateur Unix/Linux/MacOS d’un ami, chez ou ailleurs, et que vous avez besoin de l’aider a distance?   En tant qu’utilisateur de Linux, si vous aider quelqu’un d’autre qui n’Est pas habitué, il peut vouloir votre aide. Cette procédure peut vous aider a l’aider, a distance.

Ça vient de m’arriver. Je vais vous montrer comment j’ai fait.

Ce que j’ai utilisé:

  1. Une machine avec OpenSSH que chaque personne à accès (une instance Amazon EC2?)
  2. Créer un nouvel utilisateur temporaire pour la personne a aider
  3. Ordinateur a réparer roulant Linux/Unix/MacOS/Cygwin (qui a OpenSSH serveur et client)

Ce que j’avait fait avec, en plus de cette procédure, c’est un script RC qui créait une connection permanente, avec une connection SSH qui ne requiert pas de mot de passe.

L’idée étaait que peu importe le lieu ou mon ami se trouve, dès qu’il/elle a un lien à Internet, j’ai accès a son ordinateur portable.

Ma procédure décrit comment créer un lien entre ces deux machines.

Continue reading “Créer un tunnel SSH inverse pour pouvoir supporter à distance un ami utilisant Linux”

Lancement de l’annee 2011 pour la conférence ConFoo

ConFoo.ca Web Techno Conférence

Depuis le debut de l’ete je me suis joint à l’organisation de la conférence ConFoo qui couvre les sujets technique comme les langages PHP, .Net, Python et les standards du web. Ce week-end aura lieu leur traditionnel BBQ de lancement d’année.

Detail de l’invitation officielle

Je duplique le contenu provenant de l’annonce offieielle de W3QC et de l’équipe d’organisation.

Le BBQ aura lieu le 11 septembre à partir de 13h.

Au menu: hot-dogs, chips, salades, boissons gazeuses, biscuits et beaucoup de plaisir. Dans ce même esprit, l’équipe de Montréal-Python apportera un keg de Charmeuse de Serpents. Une bière India Pale Ale spécialement brassée pour cet événement.

Afin de garantir le nombre adéquat de portions, veuillez confirmer votre présence en envoyant un email à [email protected] Noubliez pas de mentionner le nombre de personne qui vous accompagnera.

Notez le numéro 1-888-679-8466 option 0 au cas où vous ne trouverez pas le groupe sur les lieux.

Détails de l’évènement

  • Quand: 2010-09-11 à 13h
  • Où: parc Mont-Royal, près de la maison Smith (suivez les affiches)
  • Pour qui: les développeurs, les acteurs du Web et leurs familles
  • Tarif: gratuit!

Au plaisir de vous y voir.

L’équipe de ConFoo.

Traduction libre de l’article «Why the @&*# is Microsoft doing all this??»

Ceci est une traduction libre du billet originalement écrit en anglais, par Nik G. de Microsoft Canada sur le blogue Port25.ca et j’ai eu envie de le traduire pour la postérité.

Je le traduis car Microsoft tente de faire un changement radical vis a vis son approche avec la compétition et le Logiciel Libre et je pense que ça vaut la peine d’en parler.

Étant premièrement un francophone et que Microsoft ne traduit pas nécessairement tout ses billets, je désire traduire et vous afficher mon point de vue. Ce mouvement est si radical que je pense qu’ils pourraient profiter de mon opinion; le point de vue d’un partisan du Logiciel Libre. tout ceci dans le but qu’ils puissent, éventuellement, mieux nous comprendre.

Je n’ai tiré aucun bénéfice financier de la part de Microsoft pour faire cette traduction et de parler de leur stratégie.

Cette intervention fait suite au Make Web Not War ma rencontre avec une équipe passionnée et a l’écoute qui semble déterminée a comprendre notre différence et pouvoir appliquer chez Microsoft. Seul l’histoire nous dira s’ils réussiront leur tentative.

A propos de la traduction

J’aimerai rappeler que je ne suis pas un traducteur professionnel; d’où la mention de “traduction libre”. Je me suis donné comme mission sur mon blogue de contribuer qu’en Français pour faire profiter mes pairs francophones qui ne comprennent pas l’anglais. Si j’y ai fait des fautes, vous pouvez me le faire savoir dans les commentaires, j’ajusterai ;)

Article traduit

Microsoft qui contribue a des projets de Logiciels Libres? Distribuer des applications PHP avec sa propre plateforme? Supporter PHP sous Windows? Permettre de déployer WordPress sur Azure? Organiser Make Web Not War et à la la semaine du Logiciel Libre MonDev?

Est-ce que l’«empire» s’adoucit? Est-ce un plan diabolique de conquérir le monde.

Alors C’est quoi le vrai objectif de Microsoft de faire tout ceci.

Quelques uns disent que c’est pour l’amour de la technologie, pour aider les programmeurs et les designers web (N.D.L.T: parlant de BizSpark). D’autres pensent que Microsoft est désespéré, et qu’ils sont forcé sur le chemin du Logiciel Libre. D’autres comme les gens de la communauté des Logiciels Libre comme ceux avec qui Microsoft Canada contribue: PHP Quebec, Impress CMS, TikiWiki, Vanilla Forums, Status.net, PHUG et plusieurs autres, disent que c’est bon pour leur projets et leur permet un nouveau spectre d’exposition. Particulièrement dans les boîtes pro-Microsoft.

Tout ceci fait que du bon sens d’un point de vue Affaires. On ne peut contredire son bienfait.

La réalité d’aujourd’hui avec les environnements informatique hétérogènes et les consommateurs qui désirent avoir la meilleure expérience possible. Les gens veulent pouvoir trouver, déployer et gérer leur logiciels a leur façon, rapidement et facilement. Les Logiciels Libres prônent principalement le partage, la collaboration, et le travail d’équipe en regard du bénéfice de l’usager final. C’est pour cela que Microsoft désire participer en collaborant sur les projets comme d’autres organisations et compagnies le font déjà. Ça ajoute simplement de la valeur à la plateforme, rend les consommateurs heureux, et crée de liens avec des partenaires intéressants. Tout le monde gagne.

C’est aussi pour ça que Microsoft a libéré certains de ses produits sour la bannière BizSpark. Pour aider a faire grandir les communautés de développement et permettre de pouvoir faire plus d’affaires pour les développeurs qui gagnent leur vie avec le développement et l’usage de logiciels libres. (N.D.L.R: dire, personnellement, que j’utiliserait tout leur produits pour développer serait pousser loin. Mais j’aime qu’ils en fassent l’effort).

C’est pour toutes ces raisons que Microsoft Canada a formé une petite équipe mais “Agile” qui travaille à construire des relations avec les développeurs de Logiciels Libres et leur communautée. L’idée est d’apprendre et de compléter l’offre de chacun. Tout ceci dans le but d’améliorer l’expérience utilisateur et de permettre l’Inter-opérabilité entre les plateformes.

“Ouvert” signifie aussi d’être ouverts aux commentaires provenant de la communauté et Microsoft s’engage a être honnête et franc avec leur réponse.

(…) (N.D.L.T: Le reste de l’article est ciblé aux gens qui étaient présents durant le Make Web Not War pour discuter en personne avec eux et sur Twitter. J’ai moi même discuté avec eux et apprécié les échanges.)

Mon commentaire sur leur blogue

J’ai répondu a leur demande de commentaire sur leur blogue public de la façon qui suit:

Publié sur port25.ca le 27 Mai 2010, par moi même.

Soyons franc dès le départ. J’utilise Linux dans ma vie de tout les jours depuis 2003. Pour moi, mes machines sous Windows (virtuelles ou physiques) ont majoritairement été fermés et non utilisés (mis a part pour les tests de navigateurs). J’ai fait ce choixcar j’aime que mon ordinateur agisse (assume) que je suis intelligent, par défaut.

Mis à part de cela, j’ai fait une quantité considérable de sites web et j’ai eu beaucoup de difficulté et perdu beaucoup de temps a faire des conditions spécifiques pour les navigateurs Microsoft. Tout ceci pour des raisons historiques et déplorables.

Je ne suis pas le seul qui a passé a travers cet enfer.

Je pense que ça illustre la relation sentimentale que j’ai envers les produits Microsoft.

Je pense que Microsoft fait, enfin (!), cette initiative pour nous écouter, nous, ces gens qui savent comment utiliser les ordinateurs. Mes expériences du passé et mon opinion (comme celle de plusieurs autres partisans du logiciel libre) pourrait faire grandement bénéficier Microsoft.

Parceque le logiciel libre c’est justement a propos du partage.

Les industries et les grands noms ont avantage d’écouter la communauté parceque c’est elle qui permet de créer les standards pour pousser l’innovation et faire fonctionner toutes sortes de choses ensemble.

Sans ça…

Les trains n’auraient pas pu traverser les pays.

Le web n’aurait pas existé sous cette forme… Si il aurait été propriétaire, la communauté en aurait développé un équivalent libre de toute façon (!).

… Je crois que vous comprenez mon idée.

Nous nous devons de “Faire marcher les choses ensemble” pour atteindre un plus grand objectif qui dépasse le bénéfice d’une seule entitée. Ça permet un accès harmonisé des données, crée une compétition qui pousse a l’amélioration, et ainsi de suite.

Alors, je pense que l’initiative de Port25 et Make Web not War de Microsoft est d’atteindre tout ceci. (Enfin, je l’espère)

Alors, santé! et faison la paix ;)

Procédure pour créer un serveur FTP sécurisé SSL forcé avec usager virtuels sous Ubuntu Linux avec vsFTPd

Je ne sais pas si vous êtes comme moi mais je n’aime pas laisser non crypté l’accès a un service qui me demande un mot de passe. Je devait monter un serveur cette semaine qui doit avoir les accès FTP.

J’ai pris l’initiative de sécuriser la machine avec du SSL car je crois qu’aujourd’hui c’est notre devoir de faire ce genre de chose. Ce n’est pas la première fois que je configure un serveur FTP over SSL mais je n’avait jamais pris de notes vraiment à ce jour. Je l’ai fait cette fois-ci!

Ce que cette procédure fait…

  1. Pouvoir créer des comptes FTP sans avoir a créer un utilisateur local (donc pas accès shell (SSH)).
  2. Permet les connections FTP over SSL de façon EXPLICITE sur un port non standard  (cet exemple utilisera le port 6123)
  3. Ne permet pas d’utilisateur ni de connexions anonymes
  4. Bannit les hôtes qui tentent de se connecter (LOGIN FAILED) via fail2ban
  5. Utilise le system PAM interne pour l’authentification
  6. Ne requiert pas d’usager local (pas de risque de tentative de connection SSH, usager séparés)
  7. Le serveur FTP roule sur son propre usager

Continue reading “Procédure pour créer un serveur FTP sécurisé SSL forcé avec usager virtuels sous Ubuntu Linux avec vsFTPd”

La semaine Des logiciels libres à Montréal «MonDev»

MonDev
Montreal Open Source Week - La semaine des Logiciels Libres de Montréal MonDev

Durant la semaine du 24 au 28 Mai 2010 aura lieu la semaine des logiciels libres MonDev. Pour cette semaine particulière nous allons vous guider sur les activités geek de la semaine.

Au menu: Rencontrer les membres de la communauté des logiciels libres à Montréal, notamment: les gens de PHPQuébec, et de TikiWiki.

Le but principal de levenement est de créer un podium pour les logiciels libres durant. Nous avons décide de faire l’événement durant la semaine du Webcom Montréal 2010 parceque beaucoup de gens viendront de loin pour voir le Webcom et le Make Web Not War et on sent qu’on pourrait faire d’autres événements qui pourraient nous intéresser autant que nos visiteurs.

Continue reading “La semaine Des logiciels libres à Montréal «MonDev»”

Comment automatiser une tâche avec CRON en utilisant Vim

Vi - Vi.... Improved (amélioré)
Logo Vim, qui signifie vi-improved (amélioré)

Deux tâches vraiment essentielles qu’on fait en administrant une machine sous Linux sont très souvent de modifier/créer un fichier et de planifier des tâches de maintenance.

Pour utiliser «cron» il faut savoir utiliser «vi», les commandes sont très souvent les mêmes. Je dois spécifier que j’ai basé mon tutoriel sur CRON fourni par Ubuntu Linux qui est (de mémoire) le même paquet que celui fourni dans Red Hat LinuxDebian Linux ou Ubuntu Linux.

Le but de ce billet est en fait de vous montrer sommairement comment automatiser une tâche (une commande) avec cron.

Je publierai plus tard un billet sur les différences entre les distributions de cron.

Continue reading “Comment automatiser une tâche avec CRON en utilisant Vim”

Script bash pour transférer une base de donnée MySQL d’un serveur à l’autre

Il m’est arrivé récemment de devoir transférer plusieurs dizaines de sites web d’un serveur à l’autre manuellement.

Dans ce billet j’expliquerai le processus que j’ai utilisé pour en finir par produire un script bash qui pourrait vous être utile.

à propos du projet

Considérant que certains sites avaient plus d’une base de données il était hors de question de faire a bras les lignes mysqldump, ssh (en fait le transfert se fait en compressant le fichier et le copiant via une redirection gzip avec cat), mysql pour, en ordre, dumper la base de données, la transférer, et la restaurer…. sans oublier les CREATE users pour chaque.

Je me suis dit: faisons-en un script!

 

Continue reading “Script bash pour transférer une base de donnée MySQL d’un serveur à l’autre”

Le Manifeste “Open Cloud” pour standardiser l’informatique «dans les nuages»

Un nouveau manifeste voit le jour, il s’agit du Open Cloud Manifesto. Le manifeste propose entre autres 4 objectifs que devraient viser les fournisseurs de services «dans les nuages» afin de minimiser la dépendance envers une technologie particulière et maximiser l’interopérabilité.

De plus, le manifeste propose 6 principes a respecter pour offrir aux clients la liberté de choisir parmi des services ouverts permettant autant de flexibilité et d’agilité que possible.

Le but avoue du Open Cloud Manifesto est d’abord de susciter la réflexion et la discussion sur le concept. Il ne s’agit pas d’une definition finale en soi ou d’une définition d’un quelconque standard d’architecture du «cloud computing».

Fait intéressant, on ne connait pas encore l’identite des personnes ayant initie ce mouvement. Cependant, parmi les signataires, on retrouve entre autres Akamai, Cisco, IBM, Red Hat, SAP, Sun et The Open Group. Parmi les absents actuels, on note Google, Microsoft et Salesforce.com.

Objectifs proposés pour un «Nuage» qui suit les concepts du «Open Cloud» :

  • Choix
  • Flexibilité
  • Vitesse d’exécution et Agilité
  • Capacité

Principes pour un «Open Cloud» :

Je n’ai pas traduit le texte, vous pouvez me le demander et je le traduirai

  1. providers must work together to ensure that the challenges to cloud adoption (security, integration, portability, interoperability, governance/management, metering/monitoring) are addressed through open collaboration and the appropriate use of standards.
  2. Cloud providers must not use their market position to lock customers into their particular platforms and limit their choice of providers.
  3. Cloud providers must use and adopt existing standards wherever appropriate. The IT industry has invested heavily in existing standards and standards organizations; there is no need to duplicate or reinvent them.
  4. When new standards (or adjustments to existing standards) are needed, we must be judicious and pragmatic to avoid creating too many standards. We must ensure that standards promote innovation and do not inhibit it.
  5. Any community effort around the open cloud should be driven by customer needs, not merely the technical needs of cloud providers, and should be tested or verified against real customer requirements.
  6. Cloud computing standards organizations, advocacy groups, and communities should work together and stay coordinated, making sure that fforts do not conflict or overlap.

Plus de details sur le site du Open Cloud Manifesto.

Une VM Linux qui sert au développement PHP 5.3 avec Eclipse – partie III

Ce billet est le troisième d’une série d’articles décrivant la fabrication d’une Machine Virtuelle (VM) de développement pour une équipe de dévelopeurs.

Cette partie couvrira l’installation de Apache et de PHP 5.3 (la dernière version depuis Juin 2009) qui offre beaucoup d’avancées. Je pense que c’est devenu le juste minimum a cause de ces nouvelles fonctionnalités. Voir articles faits par IBM developerworksWhat’s new in PHP 5.3 (part 1, part 2, part 3, and part 4)“.

Continue reading “Une VM Linux qui sert au développement PHP 5.3 avec Eclipse – partie III”

Une VM Linux qui sert au développement PHP 5.3 avec Eclipse – partie II

Ce billet est le deuxième d’une série d’articles décrivant la fabrication d’une Machine Virtuelle (VM) de développement pour une équipe de dévelopeurs.

Ce billet expliquera comment j’installe un système Linux que je considère de base pour une infrastructure d’hébergement applicatif. Je ne couvrirai pas les configurations plus avancés pour améliorer la sécurité. Je risque de le faire plus tard.
Continue reading “Une VM Linux qui sert au développement PHP 5.3 avec Eclipse – partie II”