mardi 14 juin 2016

CentOS 7 + Fedora, comment profiter des nombreux paquets de Fedora dans CentOS

En suivant le wiki de Archlinux pour l'accélération matérielle, je n'ai pas trouvé de paquet pour CentOS 7 qui contienne la librairie libvdpau_r600.so.
Je me suis donc tourné vers Fedora et le paquet mesa-vdpau-drivers.x86_64. Il se trouve que CentOS est entre F20 et F21 (en tout cas de ce que j'ai vu).

Voici comment permettre l'installation des paquets de Fedora 20 + 21 sur CentOS 7.

Avertissement

Attention quand vous allez utiliser cela, évité peut-être d'installer des paquets qui mettraient à jour ceux de CentOS.
Exemple: mesa-cvpau-drivers est disponible en version 9.2 et 10.3 sur F20 et en version 10.3 et 10.4 en F21.
Les version de F21 - la 10.3 comme la 10.4 - veulent mettre à jour libstdc++ et llvm-libs.

mardi 18 novembre 2014

Knockout + Bootstrap + jQuery : simple forms validation

Introduction

Here is a simple implementation of dynamically toggle .has-error bootstrap css class, when input (or .form-control) value changes.

Knockout + Bootstrap + jQuery

Using these 3 JavaScript libraries make things easier. We will bind change event with Knockout, find the right DOM element with jQuery and finally apply to (or remove from) it the .has-error css class.

The code

HTML code :
<input type="email" class="form-control" placeholder="Enter your email" required data-bind="event: { change: validate }" />
or
<fieldset class="form-group">
    <label class="control-label" for="Email">Email address</label>
    <input id="Email" class="form-control" type="email" placeholder="Enter your email" required data-bind="event: { change: validate, invalid: validate }" />
</fieldset>


JavaScript code :

ko.applyBindings({
  validate: function(viewModel, event) {
    var element = event.target || event.srcElement;
    $(element).parent().toggleClass("has-error", !element.validity.valid);
  }
});

Displaying error comment

Append a span.help-block after the .form-control element :
<fieldset class="form-group">
    <label class="control-label" for="Email">Email address</label>
    <input id="Email" class="form-control" type="email" placeholder="Enter your email" required data-bind="event: { change: validate }" />
    <span class="help-block"></span>
</fieldset>

We need an error message object that looks like this :
var validation = {
  errors: {
    default: "Invalid value",
    valueMissing: "Required field"
  }
}

The binding model becomes :
ko.applyBindings({
  validate: function(viewModel, event) {
    var element = event.target || event.srcElement;
    for (var k in element.validity) {
      if (k != "valid" && element.validity[k]) {
        message = validation.errors[k] || validation.errors["default"];
      }
    }
    $(element).parent().toggleClass("has-error", !element.validity.valid)
      .children(".help-block").text(message);
  }
});

Updates [2014-11-19]

To apply this behaviour when the form is submitted, bind also the invalid event to the .form-control element.

mercredi 22 octobre 2014

gnome-boxes : Comment accéder à une machine virtuelle par le réseau local ?

Introduction

Gnome-boxes permet de virtualiser très simplement des systèmes.C'est donc un outils pratique pour qui veut tester une distribution avant de l'installer sur un serveur ou remplacer sa distribution courante (voire même lancer windows).
Le problème c'est que NetworkManager ne gère pas vraiment l'interface réseau virtuelle créer par ces machine virtuelles (enfin par libvirt exactement, mais bon ...).

Contourner le problème

Rien de plus simple (après plusieurs heures de recherche et de tentatives).
On arrête le service "NetworkManager" pour le "remplacer" par le service "network"
$ sudo systemctl stop NetworkManager.service
$ sudo systemctl start network.service
Si tout ce passe bien vous devriez toujours avoir votre connexion internet active et fonctionnelle (la preuve la rédaction de ce charabia).

Configurer Gnome-Boxes

Une petite modification de la configuration de gnome-boxes s'impose. Contrairement à ses concurrents (virt-manager, VirtualBox, ...), on ne peut tout simplement rien presque rien configurer ... graphiquement.
Il existe un outils obscur qui permet de manipuler ces machines virtuelles "virsh".
Par défaut qemu utilise le mode "user" pour générer une interface réseau, qui permet d'accéder à internet, mais ne permet pas d'échange entre l'hôte et l'invité. Il faut passer la configuration au mode "bridge".
On liste toutes nos machines :


$ virsh -c qemu:///session list --all
 ID    Nom                            État
----------------------------------------------------
 -     boxes-unknown                  fermé
 -     OpenMediaVault                 fermé

On édite celle que l'ont veux éditer
$ virsh edit OpenMediaVault

Si vous n'êtes pas familier avec vi, je vous conseille d'ajouter ces lignes dans votre ~/.bashrc (ou ~/.bash_rc selon les distros)

export VISUAL=gedit
export EDITOR=vim # ou nano


dans le fichier de configuration XML rechercher  la balise "interface". Vous deviez avoir ces lignes (ou quelque chose d'approchant):
<interface type='user'>
  <mac address='52:54:00:bf:c5:97'/>
  <model type='rtl8139'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface>
Il faut les modifier pour obtenir ceci
<interface type='bridge'>
  <mac address='52:54:00:bf:c5:97'/>
  <model type='virtio'/>
  <source bridge='virbr0'/>
  <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
</interface

Maintenant, en relançant votre machine virtuelle vous deviez pouvoir y accéder comme si c'était un ordinateur de votre réseau (enfin seulement à partir de votre PC).

Attention : l'adresse IP de l'invité n'est pas sur le même réseau que votre réseau local. Par exemple mon réseau est configuré sur 192.168.0.0/24, or celui de la machine virtuelle sur 192.168.122.0/24.

Sources :

mardi 27 mai 2014

Pattern Singleton + PHP trait : une manière simple d'implémenter un design pattern récurrent

Depuis PHP 5.3.0, il est possible de faire la différence entre la classe qui contient un code statique et la classe qui exécute ce code. Ce qui rend donc l'implémentation du design pattern singleton assez simple.
Et avec PHP 5.4.0, nous avons droit aux traits. Les traits sont des bouts de code qui peuvent être réutilisés dans n'importe quelle classe. Vous trouverez ici tout ce que vous devez savoir sur les traits.

Objectif

Dans une premier temps je vais présenter (rapidement) le pattern singleton. En suite je vais décrire une méthode d'implémentation baseé sur les traits de PHP.
Attention :
Utiliser des traits pour ce genre de technique à l'avantage de ne pas bloquer l'héritage d'un objet, tout en écrivant un code complet (en opposition aux interfaces, où le code doit être recopié implémenté pour chaque classe).
Le pattern singleton est relativement simple a écrire, c'est pourquoi je trouve qu'il s'associe bien avec cette nouvelle fonctionnalité de PHP. Mais on peut rapidment écrire du code spaghetti avec le traits. C'est pourquoi je préconise de les utiliser seulement sur des comportements simples est clairs.

lundi 23 septembre 2013

Mes débuts dans la sécurité, IPTABLES


Cet article fait suite à "Mes débuts en matière de défences de mon serveur", mais devrait être lu avant celui-ci.

Configuration d'iptables

Introduction

On peut difficilement parler de sécurité informatique et passer sous silence la question du firewall. Jusqu'à maintenant je n'avais pas activé iptables sur mon serveur, ça visibilité étant surtout locale, je n'avais pas vraiment peur d'un piratage.
Mais comme la sécurité commence par là, "So be it !" comme dirait les 'ricains et les rosbifs.

L'état exacte d'iptables sous Archlinux avant qu'on fasse quoi que ce soit, je ne le connais pas. Enfin bref, après un # touch /etc/iptables/iptables.rules et un redémarrage ça marche.

mercredi 11 septembre 2013

[draft][being rectified] My (quite) Perfect Server (NAS, HTPC) - Partitioning

Introduction

In this article by mediacenter I mean the computer I use as server/NAS/HTPC.
I'm french and, as you probably know, we are bad english speaker, do with it :-p.

Hardware & Software

The mediacenter is base on an Asus P5N7A-VM (with an IGP GeForce 9300) and a Core 2 Duo E8400.
Data is stored on a 1TB HDD (sata II).
I'm using Arch linux and I will made a clean reinstall of it with RAID mirror and striping and LVM.

jeudi 21 mars 2013

Mes débuts en matière de défenses de mon serveur

 Contexte

J'ai un petit serveur à la maison qui me sert de NAS et de HTPC.
Je viens de modifier légèrement ma configuration de lighty pour utiliser simple_vhosts. Et comme jamais rien ne marche du primer coup j'obtiens un joli "404 Not Found".
Premier réflexe :
# tail /var/log/lighttpd/access.log
Pour voir ce que me retourne la recherche de chemin (mais au final je ne pense pas que ce soit ici, surtout que simple-vhost.debug n'est pas à enable).

Surprise : dans les dernières lignes je vois:
222.126.196.123 - - [20/Mar/2013:09:42:34 +0100] "GET /w00tw00t.at.ISC.SANS.DFind:) HTTP/1.1" 400 349 "-" "-"
Bon évidemment ça ne me plais pas trop.