Activer une interface veth (vmbr) sous Proxmox sans redémarrer

Si vous avez déjà essayé de créer une nouvelle interface veth dans votre proxmox, vous avez sans doutes remarqué qu’une fois cette nouvelle interface veth créée, mettons vmbr10, elle ne s’active pas toute seule et vous devez généralement redémarrer votre machine hôte pour prendre en compte cette modification !

Voici la solution pour activer votre nouvelle interface veth (plus connue sous le nom de vmbr) sans avoir à redémarrer votre hôte :

Lire le reste de cet article »

Installation du routeur Quagga sur Proxmox / OpenVZ

Le but de cet article est de vous accompagner pour la mise en place de Quagga dans votre environnement Proxmox/OpenVZ.

Quagga est un routeur logiciel fonctionnant sur des architectures standard (x86 et x64) et permettant de fournir des protocoles de routage que l’on ne trouve que dans les routeurs hardware tels que des Cisco ou équivalents. Les protocoles implémentés sont par exemple : RIP et OSPF en ipv4 et ipv6, BGP, et IS-IS. L’interface d’administration du routeur logiciel est très proche du système d’exploitation IOS des Cisco et permet donc pour ceux qui connaissent les commandes IOS de retrouver leurs marques.

Nous allons ici installer un routeur Quagga sur un container OpenVZ au sein d’un système de type Proxmox.

Lire le reste de cet article »

Configurer simplement le wifi d’un Raspberry PI sous Raspbian en CLI

Voici un petit howto pour configurer très simplement le réseau wifi de votre Raspberry PI fonctionnant sous Raspbian (la distribution Debian optimisée pour Raspberry téléchargeable ici), et ce en ligne de commande.

Cette méthode vous permet d’assigner des configuration IP spécifiques pour chaque réseau wifi que vous allez enregistrer (pratique pour ceux qui bougent pas mal !)

Lire le reste de cet article »

Configurer un DHCP sur Debian

La configuration d’un serveur DHCP est très simple et ne comporte pas beaucoup d’étapes.

Voici un exemple simple qui permet un dhcp sur un réseau privé :

Lire le reste de cet article »

Sécurisation de votre serveur dédié OVH avec le firewall adfirewall

Ce petit article a pour but de mettre en oeuvre le firewall adfirewall disponible sur les dépôts adrepo.net, sur notre serveur dédié OVH. Ce firewall se caractérise par une facilité et une lisibilité de configuration et des fonctionnalités sympa comme par exemple le Port Knocking.

Lire le reste de cet article »

POO Javascript proche de PHP

Vous avez l’habitude d’utiliser la POO en php avec extends, parent:: etc. et vous souhaiteriez avoir un équivalent en javascript pour vous simplifier la programmation objet ?

C’est faisable avec ces quelques lignes de code que je viens de trouver sur le blog de John Resig.

Voila un exemple d’utilisation avec ce petit bout de code :

var Person = Class.extend({
  init: function(isDancing){
    this.dancing = isDancing;
  },
  dance: function(){
    return this.dancing;
  }
});
var Ninja = Person.extend({
  init: function(){
    this._super( false );
  },
  dance: function(){
    // Call the inherited version of dance()
    return this._super();
  },
  swingSword: function(){
    return true;
  }
});

var p = new Person(true);
p.dance(); // => true

var n = new Ninja();
n.dance(); // => false
n.swingSword(); // => true

// Should all be true
p instanceof Person && p instanceof Class &&
n instanceof Ninja && n instanceof Person && n instanceof Class

et le fameux code qui permet ceci :

/* Simple JavaScript Inheritance
 * By John Resig http://ejohn.org/
 * MIT Licensed.
 */
// Inspired by base2 and Prototype
(function(){
  var initializing = false, fnTest = /xyz/.test(function(){xyz;}) ? /\b_super\b/ : /.*/;
  // The base Class implementation (does nothing)
  this.Class = function(){};
  
  // Create a new Class that inherits from this class
  Class.extend = function(prop) {
    var _super = this.prototype;
    
    // Instantiate a base class (but only create the instance,
    // don't run the init constructor)
    initializing = true;
    var prototype = new this();
    initializing = false;
    
    // Copy the properties over onto the new prototype
    for (var name in prop) {
      // Check if we're overwriting an existing function
      prototype[name] = typeof prop[name] == "function" && 
        typeof _super[name] == "function" && fnTest.test(prop[name]) ?
        (function(name, fn){
          return function() {
            var tmp = this._super;
            
            // Add a new ._super() method that is the same method
            // but on the super-class
            this._super = _super[name];
            
            // The method only need to be bound temporarily, so we
            // remove it when we're done executing
            var ret = fn.apply(this, arguments);        
            this._super = tmp;
            
            return ret;
          };
        })(name, prop[name]) :
        prop[name];
    }
    
    // The dummy class constructor
    function Class() {
      // All construction is actually done in the init method
      if ( !initializing && this.init )
        this.init.apply(this, arguments);
    }
    
    // Populate our constructed prototype object
    Class.prototype = prototype;
    
    // Enforce the constructor to be what we expect
    Class.prototype.constructor = Class;

    // And make this class extendable
    Class.extend = arguments.callee;
    
    return Class;
  };
})();

et la version minimifiée avec Yahoo UI Compressor:

(function(){var a=false,b=/xyz/.test(function(){xyz})?/\b_super\b/:/.*/;this.Class=function(){};Class.extend=function(g){var f=this.prototype;a=true;var e=new this();a=false;for(var d in g){e[d]=typeof g[d]=="function"&&typeof f[d]=="function"&&b.test(g[d])?(function(h,i){return function(){var k=this._super;this._super=f[h];var j=i.apply(this,arguments);this._super=k;return j}})(d,g[d]):g[d]}function c(){if(!a&&this.init){this.init.apply(this,arguments)}}c.prototype=e;c.prototype.constructor=c;c.extend=arguments.callee;return c}})();

Réduire un volume logique LVM (OpenVZ, snapshot et Free PE)

Problème du jour : Comment redimmensionner une partition LVM pour augmenter l’espace libre dans le groupe LVM (vgdisplay => Free PE) nécessaire pour pouvoir faire des backups en mode snapshot dans OpenVZ ?

Dans l’exemple suivant, le volume logique est /dev/mapper/pve-pvevz, de taille initiale 882Go (Free PE : 2), que l’on désire réduire à 860Go :

umount /dev/mapper/pve-pvevz # On démonte la partition LVM monté en /var/lib/vz
e2fsck -f /dev/mapper/pve-pvevz # On effectue un check filesystem par sécurité
resize2fs /dev/mapper/pve-pvevz 860G # On reduit le système de fichier à la taille désirée
lvresize -L 860G /dev/mapper/pve-pvevz # On réduit l'espace du volume logique LVM
e2fsck -f /dev/mapper/pve-pvevz # Vérification du filesystem

Attention, l’ordre des commandes ci-dessus n’est valable que pour une réduction de taille !!

Résultat :

# vgdisplay
  --- Volume group ---
  VG Name               pve
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  5
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                1
  Open LV               0
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               882.68 GB
  PE Size               4.00 MB
  Total PE              225966
  Alloc PE / Size       220160 / 860.00 GB
  Free  PE / Size       5806 / 22.68 GB
  ...

Forcer un redémarrage de Linux via SSH quand reboot ne marche pas

Que faire quand Linux ne réagit pas à une commande « reboot » ni même à un halt ?

Voici la méthode la plus sûre :

echo s > /proc/sysrq-trigger # Flusher les buffers d'IO pour ne pas perdre de données
echo u > /proc/sysrq-trigger # Démonter puis Remonter toutes les partitions en Read-Only
echo b > /proc/sysrq-trigger # Forcer le reboot de la machine

Edit : Je tombe de plus en plus sur des cas ou les appels au sysrq ne se font pas assez rapidement et où le shell est tué avant d’executer les commandes suivantes (cf commentaire de Alf), j’ai donc supprimé du post les commandes « r », « e », et « i » qui amenaient à un serveur inaccessible et n’ayant pas rebooté. Les commandes « s », « u » et « b » décrites ci-dessus ne m’ont à ce jour jamais planté dans les doigts !

Plus d’infos sur Wikipedia

Une simple mise à jour suffit à corriger la faille DOS d’Apache2 de septembre 2011

D’après le Bulletin d’alerte DSA-2298-2 apache2 concernant le Déni de service détecté il y a peu, une simple mise à jour d’apache2 (y compris apache2-mpm-itk) suffit à corriger la faille.

Un certificat SSL par VirtualHost avec une seule IP sur Apache2

Bonjour à toutes et à tous !

Pour tous ceux qui voudraient utiliser plusieurs certificats SSL sur une seule ip voici la solution :

Le module GnuTLS pour Apache2. Il va remplacer le module SSL installé par défaut dans Apache2.

Voici un petit tutoriel pour l’installation de ce module sur Debian Squeeze :

Lire le reste de cet article »