01 mai 2012

Mettre un site en maintenance en urgence

Dans le métier de l’infogérance serveur, il arrive de devoir gérer un incident en urgence qui rende indisponible un site Internet. Pendant cet incident, surtout si il est matériel ou réseau, les visiteurs sont alors confrontés à des erreurs peu esthétiques (« Unable to connect », « Timeout », erreurs 5xx, etc.) sans compter les Google bot qui peuvent passer juste à ce moment là. Bien sûr, nous préconisons la mise en d’un PRA voire d’un PCA mais lorsque ce n’est pas fait, il est pratique d’avoir une solution toute prête… car il y a souvent l’incident lui-même à gérer. Notre technique : baisser le TTL du nom de domaine et rediriger les enregistrements DNS vers l’IP 95.142.166.53 ; cela a pour effet de renvoyer avec une redirection HTTP 302 n’importe quelle page du site concerné vers une page de maintenance simple tout en conservant le domaine : http://95.142.166.53/maintenance.html

par evolix le 01 mai 2012 à 14:11

21 février 2012

PHP 5.3, back to PHP 5.2

Comme vu dans l’article PHP 5.2 goto PHP 5.3, le passage de PHP 5.2 à PHP 5.3 lors d’un upgrade de Lenny à Squeeze peut poser des problèmes de compatibilité.

Il est possible de downgrader PHP 5.3 et de repasser (temporairement) à PHP 5.2 sur Squeeze en utilisant directement les paquets Lenny:

  •  rajouter dans /etc/apt/sources.list :

deb http://ftp.fr.debian.org/debian/ lenny main contrib non-free

  • modifier le fichier /etc/apt/preferences (ou /etc/apt/preferences.d/fichier) :

Package: libapache2-mod-php5 php5 php5-common php5-cli php5-mysql (…)
Pin: release a=oldstable
Pin-Priority: 1001

  • désinstaller les packages PHP 5.3 :

aptitude update
aptitude remove `dpkg -l | grep php| awk '{print $2}' |tr "\n" " "`

  • installer les packages PHP 5.2 en spécifiant la target lenny (oldstable) :

aptitude install -t oldstable `dpkg -l | grep php| awk '{print $2}' |tr "\n" " "`

On vérifie que les versions sont correctes et on peut redémarrer Apache.

par evolix le 21 février 2012 à 08:56

15 février 2012

La commande date

Commande plutôt simple et de base sur un système Unix, date a pas mal de petites options sympa.
Un petit exemple quand on construit une politique de sauvegarde sur un serveur Linux (réflexe de base à avoir quand on administre un serveur) avec par exemple l’idée de garder une archive par mois sur les deux derniers mois du répertoire de sauvegarde (nommé save).
L’idée étant en crontab par exemple d’avoir des commandes du style :

cp -al /home/save/ /home/archive/save`/bin/date +\%Y\%m\%d`
rm -rf /home/archive/save`/bin/date --date='2 months ago' +\%Y\%m\%d`

On note le date --date='2 months ago' bien pratique !

par evolix le 15 février 2012 à 16:00

14 février 2012

PHP 5.2 goto PHP 5.3

Passage de Debian Lenny à Debian Squeeze oblige pour tout serveur correctement infogéré, beaucoup de développeurs sont en train de valider leurs codes pour passer de PHP 5.2 à PHP 5.3.
Si vous rencontrez dans vos journaux d’erreur quelque chose comme :

PHP Parse error: syntax error, unexpected T_GOTO, expecting T_STRING or ‘(‘ in /arborescence/fichier.php on line 43

C’est que votre code PHP a été écrit avec une fonction prénommée goto ….
Or goto est un mot réservé en PHP >= 5.3.0 (car nouvelle méthode)
À vos grep/sed :)

par evolix le 14 février 2012 à 13:45

02 février 2012

C2DM – Notifications Android – Push

C2DM est un service de Google qui permet d'envoyer des données (<1Ko) à un appareil Android, il est plus particulièrement utiliser pour envoyer des notifications.

Le but de cet article est d'expliquer le fonctionnement de base de ce système.
Comme on dit, « une image vaut mille mots », alors voici un petit schéma expliquant le processus de C2DM.

Cliquez sur l'image pour l’agrandir.
  1. L'application demande un « Registration ID ». C'est un ID sur les serveurs de Google qui permet d'identifier l'appareil. Celui-ci change de temps en temps, dans ce cas, Google annoncera le nouvel ID à l'application. Elle devra le re-signaler à l'API via l'étape 3 ;
  2. Les serveurs de Google renvoient le fameux « Registration ID » ;
  3. L'application Android envoi cet ID à son API. Cela n'est fait qu'une seule fois, ou lors du changement de RegistrationID ;
  4. L'API s'authentifie sur les serveurs de Google, cette étape n'est pas faite tout le temps, il faudra stocker le jeton d'authentification obtenu en 5 ;
  5. Google renvoi le jeton d'authentification ;
  6. L'API peut maintenant envoyer sa notification aux serveurs de Google, contenant le RegistrationID, le jeton d'authentification et le message ;
  7. Google se chargera de l'envoyer sur l'appareil, l'application décidera quoi faire avec.

Toutes ces opérations s'effectuent en REST. Libre à vous d'implémenter ces étapes avec votre langage et vos outils favoris. En guise d'exemple, voici un code en PHP utilisant la librairie curl, disponible sur Github. Pour la partie applicative sur Android, consulter la documentation.

La documentation de l'API Google est par ailleurs très bien fournie, il est donc conseillé de la lire en entier, ça se lit très facilement ;-)

par Benpro le 02 février 2012 à 21:25

26 janvier 2012

Passer root sans terminal

Dans certains rares cas, on peut vouloir exécuter des commandes en tant que root sans avoir la possibilité d’allouer un terminal sur la machine en question.

Pour ceux qui aiment bien lire la fin en premier, je mets la fin au début :-)  :

echo "mypassword" |sudo -S id

Pour illustrer le problème, prenons un cas concret qui m’est arrivé.
Un serveur s’est soudainement mis dans un état bizarre, à savoir que tout marchait, les processus déjà en cours continuaient de s’exécuter, d’autres processus pouvaient se créer, mais certaines choses ne marchaient pas, notamment l’allocation de pseudo-terminaux (les /dev/pts/*) ; si je tente une connexion SSH au serveur, le serveur répond bien, l’authentification se fait, et au moment d’avoir mon prompt, la connexion se freeze.
Après divers tests, je m’aperçois qu’en passant directement une commande à ssh, ça marche :

ssh serveur-foireux dmesg

La différence vient du fait que dans le deuxième cas, ssh n’ouvre pas de pseudo-terminal sur le serveur distant, puisqu’il se contente de récupérer directement stderr et stdout.
On peut faire en sorte de se connecter sans allouer de terminal sur le serveur avec l’option -T de la commande ssh :

     -T      Disable pseudo-tty allocation.

On a ainsi un shell qui s’exécute sur la machine, et on récupère la sortie brute de stderr et stdout (pas de prompt, d’édition de la commande en cours, etc…). Pareil pour stdin, ce qui fait que les commandes sudo ou su retournent une erreur, étant donné qu’elles font une manipulation spécifique sur stdin (pas d’echo pour la saisie du mot de passe). De ce fait, on est un peu coincé pour passer root.

Il existe une solution (que j’ai bien sûr trouvé après avoir brutalement redémarrer le serveur), une simple option à sudo qui permet de lire le mot de passe depuis stdin. Et là, pas besoin d’exécuter la commande dans un terminal donc !

echo "mypassword" |sudo -S id
[sudo] password for rdessort: uid=0(root) gid=0(root) groupes=0(root)

Et comme cela affiche votre mot de passe en clair sur l’écran, voici un petit script pour améliorer la chose :

1
2
3
4
5
6
#!/bin/bash
 
echo -n "Enter password: "
read -s passwd
 
ssh serveur-foireux "echo $passwd |sudo -S id"

Une autre application probablement beaucoup plus courante pourrait être de pouvoir scripter des commandes nécessitant d’être root sur le serveur. Notamment exécuter la même commande sur plusieurs dizaines de serveurs d’affilée.

par billux le 26 janvier 2012 à 00:05

23 janvier 2012

crossdomain.xml pour du crossdomain en Flash

Le principe d’une animation Flash est de s’exécuter sur le navigateur du client et non pas sur votre serveur web (qui a une infogérance Evolix bien sûr ;-) ). Des restrictions sont donc en place sur les players Flash récents lorsque l’animation tente de charger des éléments extérieurs : par défaut, cela n’autorise que le chargement des images. En effet, une animation Flash malicieuse pourrait charger des éléments secrets sans ces restrictions de sécurité (par exemple, révéler le contenu d’un intranet sur un réseau interne d’entreprise) ! Néanmoins, on peut autoriser des éléments à être chargés par une animation Flash en créant un fichier crossdomain.xml du type :

<?xml version="1.0"?>
<cross-domain-policy>
        <allow-access-from domain="*"/>
</cross-domain-policy>

…que l’on placera à la racine du serveur avec les éléments à charger (et non pas sur le serveur web servant l’animation).

Prenons un exemple d’un site http://www.example.com/ contenant une animation foo.swf qui charge un fichier http://static.example.com/flux.rss : il faudra donc positionner un fichier http://static.example.com/crossdomain.xml

Pour plus de détails, voir sur http://kb2.adobe.com/cps/142/tn_14213.html

par evolix le 23 janvier 2012 à 22:52

04 janvier 2012

Voeux 2012 Evolix

Et voilà la maquette du premier semestre 2012 pour le troisième opus du Calendrier Evolix, bientôt sur votre bureau !

Voeux 2012 Evolix

par sdubois le 04 janvier 2012 à 15:42

05 décembre 2011

Ajouter un disque dans un volume RAID5 hardware

Prenons un serveur DELL avec un controlleur RAID et un volume RAID5 configuré. Vous l’utilisez (sous Linux bien sûr) et un jour vous avez besoin d’ajouter un disque pour avoir plus de place. Est-ce possible ?

Ça dépend du controlleur RAID !

La capacité d’étendre un volume RAID5 en recalculant l’ensemble du volume (la parité étant répartie sur tous les disques) dépend d’un controlleur RAID à un autre. Difficile de donner des proportions, mais forcément plus un controlleur sera cher plus il aura de chance de le supporter. Revenons à notre exemple d’un serveur DELL, équipé d’une classique carte RAID PERC 5/i. Après avoir rajouté un disque, si l’on va dans le BIOS de la carte RAID : aucune trace de la possibilité d’étendre un volume ! On peut le supprimer, modifier ses options, mais absolument pas rajouter un nouveau disque. En fait, cette fonctionnalité n’est pas accessible depuis le BIOS… mais elle est possible via un outil en ligne de commande ! Voici une ligne de commande permettant d’ajouter un disque dans un volume RAID5 existant :

# omconfig storage vdisk action=reconfigure controller=0 vdisk=0 raid=r5 \
 pdisk=0:0:0,0:0:1,0:0:2,0:0:3,1:0:5
Command successful!

Et au niveau système, ça se passe comment ?

Une fois cette commande lancée, on peut constater dans le BIOS que le volume RAID5 est en cours de reconstruction. On le voit aussi au niveau système (avec l’outil MegaCli) :

Reconstruction           : Completed 17%, Taken 99 min.

Cela va durer plusieurs heures où les accès au volume RAID sera très lent…

Tant que ce n’est pas terminé, le système verra toujours le volume avec son « ancienne » taille :

sd 0:2:0:0: [sda] 1754529792 512-byte logical blocks: (898 GB/836 GiB)

Une fois terminé, le système verra après un reboot la nouvelle taille :

sd 4:2:0:0: [sda] 2339373056 512-byte logical blocks: (1.19 TB/1.08 TiB)

On verra donc sans rien faire de plus la nouvelle taille via les outils fdisk/cfdisk/etc. et donc un espace supplémentaire en Free Space.

Il reste ensuite à gérer cela au niveau partitions et filesystem. Voici un exemple où l’on rajoute une partition LVM et l’on étend d’un LV existant :

# cfdisk /dev/sda
# partprobe
# pvcreate /dev/sda10
  Physical volume "/dev/sda10" successfully created
# vgextend group1 /dev/sda10
  Volume group "group1" successfully extended
# lvextend -L+250G /dev/mygroup/srv
  Extending logical volume srv to 550.00 GiB
  Logical volume srv successfully resized
# umount /srv
# resize2fs -p /dev/mygroup/srv
resize2fs 1.41.12 (17-May-2010)
Please run 'e2fsck -f /dev/mygroup/srv' first.
# e2fsck -f /dev/mygroup/srv
e2fsck 1.41.12 (17-May-2010)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/mygroup/srv: 16/19660800 files (0.0% non-contiguous), 46720716/78643200 blocks
# resize2fs -p /dev/mygroup/srv
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/mygroup/srv to 144179200 (4k) blocks.
Begin pass 1 (max = 2000)
Extending the inode table     XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
The filesystem on /dev/group1/srv is now 144179200 blocks long.
# mount /srv
# df -h /srv
Filesystem            Size  Used Avail Use% Mounted on
/dev/mapper/group1-srv
                      542G  174G  341G  34% /srv

Et voilà, c’est donc possible dans certains cas.

par evolix le 05 décembre 2011 à 01:00

18 novembre 2011

mysql -o

Si vous avez une sauvegarde de base de données MySQL réalisée avec la commande mysqldump –all-databases il est souvent fastidieux de découper le fichier pour récupérer une base de données particulière. Une option de la commande mysql est faite pour cela : mysql -o

Vous pouvez donc restaurer une base de données ainsi :

mysql> create database foo
$ mysql -o foo  all-databases.sql

Note : la base de données foo doit déjà exister.

par evolix le 18 novembre 2011 à 22:42

17 novembre 2011

Canon CanoScan LiDE200 on Debian Squeeze (stable)

D’après : http://www.sane-project.org/sane-mfgs.html, il est pleinement supporté. (avec sane-genesys)

Sauf qu’en creusant, il faut une version de libsane > 1.0.21-9 (version de Squeeze)
La version de Wheezy est 1.0.22-6 et est fonctionnelle.

L’idée “propre” est de se servir des squeeze-backports pour avoir une version de libsane fonctionnelle.

Ajouter dans votre /etc/apt/sources.list :
deb http://backports.debian.org/debian-backports squeeze-backports main

On en profite pour indiquer qu’on ne veut utiliser ce repository que pour libsane (sinon vous pouvez le forcer explicitement avec “aptitude -t squeeze-backports”), dans /etc/apt/preferences
8 -----------------------8
Package: *
Pin: release o=Debian, n=squeeze-backports
Pin-Priority: 50

Package: libsane
Pin: release o=Debian, n=squeeze-backports
Pin-Priority: 600
8 -----------------------8
et ensuite tout simplement il suffit de faire :
# aptitude update
# aptitude install libsane
Les NOUVEAUX paquets suivants vont être installés :
acl{a}
Les paquets suivants seront mis à jour :
libsane libsane-extras sane-utils
3 paquets mis à jour, 1 nouvellement installés, 0 à enlever et 6 non mis à jour.
Il est nécessaire de télécharger 4 769 ko d’archives. Après dépaquetage, 864 ko seront utilisés.
Voulez-vous continuer ? [Y/n/?]

Et voilà
# xsane
fonctionne désormais

Tips : si vous avez une webcam, xsane risque de le detecter comme scanner.
Pour éviter ça, il vous suffit de commenter dans /etc/sane.d/dll.conf la ligne v4l (pilote webcam) … voire ne laisser que genesys si vous avez suivi ;)

par sdubois le 17 novembre 2011 à 14:14

11 novembre 2011

Reverse Engineering d'un réseau local de résidence. Service type portail captif.

Dans la résidence où je me trouve, il y a un service (dont je tairais le nom pour m'éviter les ennuis) qui propose une connexion à Internet Haut-Débit (ou pas) pour 17,99€ par mois. Le gros truc qui pue, c'est un portail captif, que y'a des tonnes d'usagers, et que derrière ce sont des simples box ADSL, mais bref...

Je me suis donc amusé à imaginer le réseau, en faisant du reverse engineering, c'est à dire, comprendre son fonctionnement juste en analysant ce qui se passe.
Pour cela un seul outil : Wireshark, et un filtre un peu long pour virer ses propre trames, et des infos du protocole 802.11 inutiles :
((((((((!(wlan.fc.type_subtype == 0x1d)) && !(wlan.fc.type_subtype == 0x08)) && !(wlan.sa == 00:17:c4:5c:xx:xx)) && !(wlan.da == 00:17:c4:5c:xx:xx)) && !(wlan.da == 01:80:c2:00:00:00)) && !(wlan.fc.type_subtype == 0x24)) && !(wlan.fc.type_subtype == 0x05)) && !(wlan.fc.type_subtype == 0x04)) && !(wlan.fc.type_subtype == 0x1c)

Lorsque l'on se connecte à la borne WiFi du coin, on chope une adresse IP, une adresse de passerelle (normal) et un serveur DNS. Les gens (ingénieurs ?) qui ont imaginé la solution ont décidé d'isoler chaque client dans un VLAN (ce qui est bien).

En résumé, voici un exemple de paramètres qu'on peut avoir sur 2 postes :
  • Poste X
    • Adresse IP : 172.16.xx.253/24
    • Gateway : 172.16.XX.254/24
    • DNS : 192.168.aa.bb/cc
  • Poste Y
    • Adresse IP : 172.16.yy.253/24
    • Gateway : 172.16.yy.254/24
    • DNS : 192.168.aa.bb/cc

Chaque poste est isolé dans son réseau en /24 et c'est en fait un VLAN qui sera routé par ce qu'on (je ?) appelle un routeur Inter-VLAN.
Jusque que là, c'est très bien car la machine X ne peut pas communiquer avec Y et vice-versa. SAUF que c'est du WiFi, on se met en mode « promiscuous » et on peut écouter tout ce qui ce qui circule, tel ces bon vieux HUB ...

Les grosses failles exploitables :


  • Il suffit de spoofer l'adresse MAC de quelqu'un, de le déconnecter de la borne avec mdk3 ou aircrack, de se connecter à la borne WiFi, et le reste sera fait automatiquement, vous avez le Web o/
  • Comme le réseau Wifi est OPN, vous pouvez voir tout ce qui circule en clair. Tiens mais qu'est-ce que ce protocole MSN et ses adresses @hotmail. Tiens GET /balbla?login=toto&pass=PasSecret
  • Vous pouvez rejoindre le réseau d'un poste et vous amuser. Vous ne serez pas connecter à Internet, mais vous pourrez vous amuser à scanner tous les postes de la résidence.
  • Le portail captif est en ... HTTP, à vous les mots de passe des usagers, mais qu'importe il suffit de spoofer l'adresse MAC d'un autre poste, c'est encore mieux ;-)


L'idéal pour sécuriser et proposer ce genre de service ?


Une borne ouverte qui propose une page d'authentification, en HTTPS, qui lorsque l'on s'authentifie nous donne le nom d'un BSSID caché, et une passphrase WPA2 généré aléatoirement. On se connectera ensuite ici.

Faire écouter une borne sur de multiples BSSID c'est facile, générer un BSSID associé à une passphrase c'est aussi facile, et ce genre de solution serait beaucoup plus sécurisé, car il serait impossible d'espionner les conversations des autres postes ET de spoofer un accès, auquel cas il vous faudra faire du cracking WPA.

Schéma


Je me suis amusé à faire un schéma de l'infrastructure actuelle, tel que j'ai l'ai analysé.
schéma

Le mot de la fin


Passez par des VPN ou tunnels socks SSH quand vous vous connectez sur ce genre de passoire !

par Benpro le 11 novembre 2011 à 15:00

Connexion VPN PPTP sous Linux

Bien que le PPTP (Point-to-Point Tunneling Protocol) soit une technologie de VPN plutôt implantée dans le monde Microsoft, cela reste assez accessible sous Linux. Voici un résumé rapide de sa mise en place sous Debian :

# aptitude install ppp pptp-linux

Créer le fichier /etc/ppp/peers/<TUNNEL> :

name <LOGIN>
remotename PPTP
require-mppe-128
file /etc/ppp/options.pptp
ipparam <TUNNEL>

Ajouter la ligne suivante dans le fichier /etc/ppp/chap-secrets :

<LOGIN> PPTP <PASSWORD> *

Et, enfin, lancer le VPN ainsi :

# pppd call <TUNNEL>
# route add -net <RESEAU> dev ppp0

Nov 11 14:47:51 pppd[5648]: pppd 2.4.5 started by root, uid 0
Nov 11 14:47:51 pppd[5648]: Using interface ppp0
Nov 11 14:47:51 pppd[5648]: Connect: ppp0 <–> /dev/pts/9
Nov 11 14:47:51 pptp[5649]: anon log[main:pptp.c:314]: The synchronous pptp option is NOT activated
Nov 11 14:47:51 pptp[5656]: anon log[ctrlp_rep:pptp_ctrl.c:251]: Sent control packet type is 1 ‘Start-Control-Connection-Request’
Nov 11 14:47:51 pptp[5656]: anon log[ctrlp_disp:pptp_ctrl.c:739]: Received Start Control Connection Reply
Nov 11 14:47:51 pptp[5656]: anon log[ctrlp_disp:pptp_ctrl.c:773]: Client connection established.
Nov 11 14:47:52 pptp[5656]: anon log[ctrlp_rep:pptp_ctrl.c:251]: Sent control packet type is 7 ‘Outgoing-Call-Request’
Nov 11 14:47:52 pptp[5656]: anon log[ctrlp_disp:pptp_ctrl.c:858]: Received Outgoing Call Reply.
Nov 11 14:47:52 pptp[5656]: anon log[ctrlp_disp:pptp_ctrl.c:897]: Outgoing call established (call ID 0, peer’s call ID 30866).
Nov 11 14:47:53 pppd[5648]: CHAP authentication succeeded
Nov 11 14:47:53 kernel: [16889.850222] PPP MPPE Compression module registered
Nov 11 14:47:53 pppd[5648]: MPPE 128-bit stateless compression enabled
Nov 11 14:47:56 pppd[5648]: local  IP address <IP1>
Nov 11 14:47:56 pppd[5648]: remote IP address <IP2>

Pour plus de détails, voir http://gcolpart.evolix.net/blog21/pptp-vpn-gateway-with-debian/ Et si vous voulez avoir un vrai serveur VPN, adressez-vous à Evolix

par evolix le 11 novembre 2011 à 13:53

10 novembre 2011

Compte rendu de la soirée du Palmarès 2011 du #Deloitte technologie fast 50 Méditerranée

Evolix était nominée une nouvelle fois cette année avec une croissance côté CA de 224% entre 2006/2010 (5 dernières années).

Parmi les 70 sociétés régionales nominées, Evolix s’est placée à la 24ème place sur le classement des 50 premières. (FAST 50)

Petit résumé de cette soirée qui avait lieu hier 10 novembre à la Station Alexandre (Marseille)

Petit OVNI de la soirée fortement intéressant, l’écologue Emmanuel Delannoy, de Institut Inspire, auteur de “l’économie expliquée aux humains” a pu nous peindre ce qu’était la biodiversité et prendre du recul sur notre relation à la nature/planète.
Les grandes idées et leçons transmises :

1/ Sur cette photo recomposée, on voit en jaune les lumières nocturnes qui donnent une bonne indication de la richesse d’un pays et son PIB. En rouge ce sont les zones d’exploitation des ressources premières vitales comme le gaz et le pétrole. Le violet ce sont les zones où on brûle de la forêt primaire pour faire de la monoculture. On voit que les lieux de consommation et de production sont bien différents et une forte inégalité. Une vision mondiale est donc nécessaire pour optimiser les flux.
2/ Nous vivons sur les acquis de notre passé et nous les avons épuisés ou presque en peu de siècles (il reste 69 années de fer, 12 ans de terres rares, peu d’années de pétrole). C’est le travail de micro-organismes primaires il y a des millions d’années qui ont permis l’existence des matières premières comme les hydrocarbures ou le calcaire. Nous devons aujourd’hui aussi produire pour que l’homme de demain puisse avoir quelque chose à utiliser.
3/ Outre le charbon – exception écologique de déchet “final” de la nature constitué à une époque où il n’y avait pas d’organismes le dégradant – la nature ne produit pas de déchet.
4/ Il y a une inversion ces derniers siècles entre la profusion de matière premières et notre capacité à innover (niveau de formation moyen, etc.)
5/ L’évolution ne laisse que peu de place aux espéces trop spécialisées. L’homme est différencié (alimentation, etc.) mais vit sur une économie très spécialisée. Il lui faut la repenser sous peine d’implosion de cette dernière et s’inspirer de la Nature est idéal.
6/ Il y a de nombreux cas de mimétisme de la nature déjà (profil du métro japonnais vis à vis du pinson (capable de plonger son bec dans l’eau sans perturbutions)), il faut maintenant copier également les “workflows” et mécanismes de cette dernière pour avoir des écosystèmes positifs énergétiquement.
7/ Dans la biodiversité, il existe différents types de relations (coopération{+,+}, prédateur {+,-}, coexistance {0,0},compétition{-,-}) où seule la compétition a pour effet un {-,-} (outre l’émulsion inhérente).
8/ Il va falloir pour faire changer les choses, que l’homme soit moins individualiste et court terme car il y aura un coût initial fort de mise en place de ces nouveaux écosystèmes qu’il faudra supporter pour permettre leur expansion.

Un livre à faire lire à nos politiques :

Les lauréats de la soirée :

1er Prix : Aquafadas (croissance 3231% en 5 ans, 1,8M€ CA)
2ème Prix : CBM (croissance 1521% en 5 ans, 1,2M€ CA)
Un grand bravo tout particulier pour Xavier et ce second prix ! Le nombre de salarié ne fait pas la valeur de la boîte :)


3ème prix : Urbasolar (croissance 1276% en 5 ans, 37M€ CA)

Prix Nyse Euronext : Naturex (croissance 242% en 5 ans, 226M€ CA, 1000 salariés)
Prix Coup de Cœur Jury : Inside Secure (croissance 318% en 5 ans, 120M€ CA, 500 brevets)
Prix Viveris (Croissance rentable) : Synchrone technologies (croissance 398% en 5 ans, 37M€)
Prix Oseo (Innovation) : Néotys (croissance 900% en 5 ans, 4,5M€ CA)

À l’année prochaine :) !

par sdubois le 10 novembre 2011 à 15:05

06 novembre 2011

Augmenter le max open files

Un processus lancé sous Linux a une limite maximum de fichiers ouverts : en général c’est 1024. Parfois, certains processus manipulent beaucoup de fichiers et il est donc nécessaire d’augmenter cette limite.

Tout d’abord, voyons comment vérifier cette limite.

Dans un shell, on peut vérifier ce nombre :

$ ulimit -n
1024

Plus intéressant, on peut vérifier la limite d’un processus en fonctionnement :

# grep '^Max open files'  /proc/<pid>/limits
Max open files            2048                 2048                 files

Alors, comment modifier cette limite ?

Il faut bien avoir en tête que cette limite se change à la volée avec la commande ulimit. Tout processus lancé prendra la limite en cours dans le shell dans lequel il est lancé :

$ ulimit -n 512
$ <processus>

Néanmoins, on veut en général augmenter cette limite, et seul root peut augmenter cette limite.

Pour changer cette limite lors de l’identification d’un utilisateur via ssh, login, su, etc. on pourra utiliser le fichier /etc/security/limits.conf :

root                -       nofile          8192
jdoe                -       nofile          4096
*                   -       nofile          2048

Ainsi, lors du prochain login, un utilisateur « obtiendra » la limite indiquée.

Mais ATTENTION cela ne modifie PAS la limite des processus lancés au démarrage de la machine ! Cela peut être un vrai piège… Prenons un exemple concret : si j’augmente la limite du max open files à 8192 pour root via /etc/security/limits.conf j’ai donc cette valeur quand je me logue en root ! Si j’installe un logiciel qui se lance en daemon (ou si je redémarre un daemon déjà installé), celui se lancera  avec ma valeur courante soit 8192. MAIS si je redémarre ma machine, le logiciel se relancera cette fois avec la valeur 1024 ! J’espère que vous comprenez le piège que cela peut être !!

La meilleure solution sur un serveur destiné à lancer des daemons automatiquement (c’est souvent le cas sur un serveur :-D )  est donc de positionner explicitement la limite avec la commande ulimit. Cela permet de positionner la bonne valeur au démarrage de la machine et pour chaque redémarrage du daemon. Sous Debian, on positionnera notamment ces valeurs dans les fichiers /etc/default/<daemon> :

# echo "ulimit -n 4096" >> /etc/default/tomcat6
# echo "ulimit -n 1337" >> /etc/default/ssh

par evolix le 06 novembre 2011 à 14:14