PROJET AUTOBLOG


Planet-Libre

source: Planet-Libre

⇐ retour index

OLPC France : [Nosy Komba] Rapport de déploiement 2012

vendredi 14 décembre 2012 à 21:48

Alors que l’année 2012 s’achève Laura et Margaux de l’équipe projet Nosy Komba ont finalisés le rapport de déploiement de l’année. Il raconte le long travail de préparation du projet et les actions réalisés sur place.

Un déploiement de l’ordinateur XO est un projet complexe nécessitant de prendre en compte de nombreux facteurs (logistiques, techniques, énergétiques, humains, …).
Pendant les premières années du déploiement de l’ordinateur XO à Nosy Komba, nous avons donc principalement dû consacrer nos actions sur des aspects techniques (machines et logiciels), logistiques (transport) et d’infrastructure (énergétique, internet).
Depuis cette année, nous avons pu concentrer nos efforts sur les enseignants qui sont la clé de la réussite d’un tel projet. Grâce aux apports du projet mené par OLPC France à Saint-Denis, aux observations que nous avons pu réaliser lors de notre visite des déploiements à Haïti et en Jamaïque et aux échanges que nous avons entretenu avec les autres communautés OLPC dans le monde, nous avons mis en place en 2012 des actions spécifiques afin de mieux comprendre et accompagner les enseignants à l’utilisation du XO.
Si un travail important reste encore à faire, les compétences que nous avons observé chez les enfants, la relation de confiance que nous avons établie avec les enseignants et l’accueil que nous avons reçu au collège nous montrent combien nous avons progressés et combien l’ordinateur XO est en train de transformer en profondeur l’éducation à Nosy Komba.
Voilà ce qui nous motive pour la mission Nosy Komba 2013 !

Gravatar de OLPC France
Original post of OLPC France.Votez pour ce billet sur Planet Libre.

Articles similaires

Zeus DeltaGeekBlog : Découverte de PostgreSQL

vendredi 14 décembre 2012 à 20:06

Prés-requis :

Afin de (mieux) comprendre ce tutoriel, les connaissances suivantes sont importantes :

  1. GNU/Linux : Base
  2. Langage SQL : Intermédiaire
  3. Langage HTML/PHP : Base de la base ;)
  4. Modélisation de donnée (Merise/UML) : Base

Qu’est-ce que PostgreSQL ?

PostgreSQL est un système de gestion de base de données relationnelle et objet (SGBDRO).

Un « moteur » SGBDR permet d’exécuter des bases de données afin de stocker les données de façon relationnelle.

Les bases de données sont utilisées tous les jours par des milliards d’utilisateurs. En effet, sans le savoir vous utilisez quotidiennement et par différents moyens des bases de données : votre banque, vos sites Web d’achat en ligne préférés, les sites de réseaux sociaux, ce site…

En réalité presque 100% des sites et application Web stocke en partie vos données dans des bases de données relationnelle.

Parmi les différentes solution de SGBDR, une est particulièrement interressant à mes yeux : PostgreSQL.

Open-source et gratuit c’est l’un des SGBDR les plus performants.

 

J’invite les anglophones, à lire la liste des fonctionnalités sur Wikipedia.

 

Qui utilise PostgreSQL ?

McAfee, Trend Micro, McAfee, Trend Micro, Skype, Météo France, leboncoin.fr utilisent PostgreSQL…

Pour info, Météo France gère une base de 3,5To :)

Allez voir les témoignages sur le site officiel !

 

Comment l’installer ?

Sur GNU/Linux c’est toujours aussi simple :

Distribution CentOS/Red-Hat/Fedora:

# yum install postgresql-server

 

Distribution Debian/Ubuntu :

# apt-get install postgresql

 

Vous pouvez même l’installer sur un serveur Windows !

 

Remarque : la distribution GNU/Linux utilisée durant ce tutoriel est : CentOS 6.3 x86_64.

Vous pouvez également installer les sources depuis le site officiel

 

Je souhaite que le serveur postgresql se lance à chaque démarrage du serveur :

# chkconfig postgresql on

 

Je vérifie si la commande est bien passée :

# chkconfig postgresql --list
 postgresql 0:arrêt 1:arrêt 2:marche 3:marche 4:marche 5:marche 6:arrêt

Le contraire m’aurait étonné ;) . Pour info, le « runlevel » par défaut sur CentOS est 3.

 

Pour vérifier votre « niveau d’exécution » :

# runlevel
 N 3

 

Après l’installation, il est indispensable d’initialiser le moteur de SGBDR.

Sans cette initialisation, le serveur PostgreSQL ne peut tout simplement par démarrer !

Initialisation du SGBDR :

# service postgresql initdb
 Initializing database: [ OK ]

 

PostgreSQL peut maintenant être démarrer :

# service postgresql start
 Démarrage du service postgresql : [ OK ]

 

On s’assure que le service est bien lancé :

# ps aux | grep postgres
 postgres 1956 2.6 0.3 216292 6440 ? S 22:40 0:00 /usr/bin/postmaster -p 5432 -D /var/lib/pgsql/data
 postgres 1958 0.0 0.0 179304 1440 ? Ss 22:40 0:00 postgres: logger process
 postgres 1960 0.3 0.0 216292 1700 ? Ss 22:40 0:00 postgres: writer process
 postgres 1961 0.2 0.0 216292 1612 ? Ss 22:40 0:00 postgres: wal writer process
 postgres 1962 0.0 0.1 216436 2032 ? Ss 22:40 0:00 postgres: autovacuum launcher process
 postgres 1963 0.0 0.0 179436 1708 ? Ss 22:40 0:00 postgres: stats collector process
 root 1971 0.0 0.0 105308 936 pts/0 S+ 22:40 0:00 grep postgres

 

Le moteur est à présent démarrer, nous pouvons commencer à travailler…

Nous allons créer une base de donnée qui sera le « backend » d’une application de commerce en ligne : appelée « Shop » !

Cette base sera pour des raisons évidentes simplifiée.

 

La première étape est sans conteste la plus importante : l’étude du modèle de donnée.

Pour ce faire, il faut un papier et un crayon afin de définir le modèle de donnée. Je ne m’étend pas volontairement sur le MDD, l’idée du tutoriel est vraiment axé sur PostgreSQL et considère que vous avez déjà quelques base en modélisation de données et SQL.

Je rappelle, que notre Appli se doit d’être relationnelle (dans le sens où les éléments auront des relations entre eux).

 

Ici vos meilleurs outils sont : le crayon, la feuille blanche et surtout la gomme :D

Application « simplifiée » de commerce en ligne.

Mais au faite, que va faire notre Appli ?

C’est simple, permettre à des internautes (table « client ») de commander des produits (table « produit »).
Un internaute pourra donc commander un ou plusieurs produits et spécifier leurs quantités (grâce à la table « cmd_prod »).

Pour finir, le client aura bien sur une commande (table « commande ») avec un montant, une date…

 

Autour de PostgreSQL :

Lors de l’installation de PostgreSQL, un utilisateur UNIX (administrateur du moteur SQL) fut créé : postgres

# cat /etc/passwd | grep postgres
 postgres:x:26:26:PostgreSQL Server:/var/lib/pgsql:/bin/bash

 

Répertoire des bases de données : /var/lib/pgsql/data/base/

Tous les fichiers de configuration se trouvent dans le répertoire : « /var/lib/pgsql/data ».

Créer un lien symbolique si vous avez l’habitude de travailler dans le répertoire « /etc » :

# ln -s /var/lib/pgsql/data/ /etc/postgresql
# ls /etc/postgresql/
 base pg_clog pg_ident.conf pg_multixact pg_subtrans pg_twophase pg_xlog postmaster.opts
 global pg_hba.conf pg_log pg_stat_tmp pg_tblspc PG_VERSION postgresql.conf postmaster.pid

 

La configuration de base de postgreSQL est correcte pour la plupart des usages.

Cependant si votre serveur web est sur un autre serveur, vous serez obliger d’autoriser les connexions tout à la fin du fichier « pg_hba.conf » !

Plus d’info : http://docs.postgresql.fr/8.4/client-authentication.html

 

Pour se connecter avec l’utilisateur administrateur de PostgreSQL, rien de plus simple :

# su - postgres
 $ whoami
 postgres

Pour info : Postgres est un utilisateur Unix mais il y à aussi un utilisateur postgreSQL postgres.

 

La première étape est donc de modifier le mot de passe de l’utilisateur SQL postgres.
Pour ce faire, il faut se connecter au moteur via la commande « psql » :

$ psql
 psql (8.4.13)
 Saisissez « help » pour l'aide.
postgres=#

Le prompt nous indique ici que nous somme connecter sur la base « postgres » créée à l’installation NDLD !

 

Commençons par lister les bases de données existantes :

postgres=# \\l
 Liste des bases de données
 Nom | Propriétaire | Encodage | Tri | Type caract. | Droits d'accès
 -----------+--------------+----------+-------------+--------------+-----------------------
 postgres | postgres | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 | 
 template0 | postgres | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 | =c/postgres : postgres=CTc/postgres 
 template1 | postgres | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 | =c/postgres : postgres=CTc/postgres
 (3 lignes)

 

Modifier le mot de passe de l’utilisateur SQL postgres :

postgres=# ALTER USER postgres WITH ENCRYPTED PASSWORD 'mysecretpassword' ;
 ALTER ROLE

Pour le bien de l’article, nous allons créer une base de données ainsi qu’un utilisateur (geek) propre à l’application (shop).
D’une manière générale, c’est une bonne pratique. En effet, en cas de compromission de « geek », seule l’appli « shop » sera vulnérable…

 

Création de l’utilisateur « geek » avec comme mot de passe « mysecretpassword » :

postgres=# CREATE USER geek WITH ENCRYPTED PASSWORD 'mysecretpassword' ;
 CREATE ROLE

 

Lister les utilisateurs SQL :

postgres=# SELECT rolname FROM pg_roles;
 rolname
 ----------
 postgres
 geek
 (2 lignes)

 

Création de notre base de donnée :

À présent, on peut créer la base de donnée. Plusieurs méthodes sont possibles pour créer un base, celle-ci est néanmoins la plus universelle :

postgres=# CREATE DATABASE shop ;
 CREATE DATABASE

 

Modifier le propriétaire de la base « shop » :

postgres=# ALTER DATABASE shop OWNER TO geek ;
 ALTER DATABASE

 

Lister de nouveau les bases :

postgres=# \\l
 Liste des bases de données
 Nom | Propriétaire | Encodage | Tri | Type caract. | Droits d'accès
 -----------+--------------+----------+-------------+--------------+-----------------------
 postgres | postgres | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 | 
 shop | geek | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 |
 template0 | postgres | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 | =c/postgres : postgres=CTc/postgres
 template1 | postgres | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 | =c/postgres : postgres=CTc/postgres
 (4 lignes)

 

Se connecter en tant que « geek » :

-bash-4.1$ psql -U geek
 psql: FATAL: authentification Ident échouée pour l'utilisateur « geek »

C’est normal, nous n’avons pas autorisé cette connexion dans le fichier « pg_hba.conf » :

# vim pg_hba.conf
 # "local" is for Unix domain socket connections only
 local all all md5
 # IPv4 local connections:
 host all all 127.0.0.1/32 md5
 # IPv6 local connections:
 host all all ::1/128 md5

Afin de prendre en compte cette modification il est nécessaire de relancer le moteur Postgres (ou tout du moins de recharger la conf) :

# service postgresql restart
 Arrêt du service postgresql: [ OK ]
 Démarrage du service postgresql : [ OK ]

 

On retente une connexion :

# su - postgres
 $ psql -U geek shop
 Mot de passe pour l'utilisateur geek :
 psql (8.4.13)
 Saisissez « help » pour l'aide.
shop=>

Nous allons pouvoir créer nos tables et insérer nos données :

N.B. Dans une vraie application, l’insertion des données ainsi que l’affichage se fera bien sur via une interface Web…(ou pas forcément web ;) )

 

Création des tables :

Création de la table « marque » :

shop=> CREATE TABLE marque (
 id_marq integer PRIMARY KEY,
 nom text,
 description text,
 pays text
 );
 NOTICE: CREATE TABLE / PRIMARY KEY créera un index implicite « marque_pkey » pour la table « marque »
 CREATE TABLE

Remarque : la contrainte « PRIMARY KEY » signifie que « id_marq » ne peut pas être Null et doit être Unique.

 

On visualise cette table :

shop=> \\d
 Liste des relations
 Schéma | Nom | Type | Propriétaire
 --------+--------+-------+--------------
 public | marque | table | geek
 (1 ligne)

Tout est bon :D

 

Pour les raisons de ce tutoriel, nous allons insérer tout de suite des données dans cette table.

Insertion des marques :

shop=> INSERT INTO marque VALUES (1, 'APPLE', 'Multinationale américaine qui conçoit et vend des produits électroniques grand public, des ordinateurs personnels et des logiciels informatiques', 'USA');
 INSERT 0 1
 shop=> INSERT INTO marque VALUES (2, 'MICROSOFT', 'Multinationale informatique américaine, fondée par Bill Gates et Paul Allen. Son activité principale consiste à développer et vendre des systèmes d’exploitation et des logiciels. Son revenu annuel a atteint 60,42 milliards de dollars sur l’exercice 2007-20081 et elle emploie 88 180 personnes dans 107 pays différents.', 'USA');
 INSERT 0 1
 shop=> INSERT INTO marque VALUES (3, 'ASUS', 'Société basée à Taïwan qui produit des cartes mères, des cartes graphiques, des lecteurs optiques, des PDA, des ordinateurs portables, des périphériques réseau, des téléphones portables, des boîtiers et des systèmes de refroidissement d’ordinateurs.', 'TAIWAN');
 INSERT 0 1
 shop=> INSERT INTO marque VALUES (4, 'ARCHOS', 'société française qui conçoit et vend des produits électroniques, notamment des baladeurs numériques ainsi que des tablettes multimédias fonctionnant sous Android et Windows. Créé en 1988, le nom de cette société est un anagramme. Henri Crohas, actuel PDG et créateur de la marque.', 'FRANCE');
 INSERT 0 1

 

Afficher toutes les marques :

shop=> SELECT * FROM marque ;
 id_marque | nom | description | pays
 1 | APPLE | Multinationale américaine qui conçoit et vend des produits électroniques grand public, des ordinateurs personnels et des logiciels informatiques | USA
 2 | MICROSOFT | Multinationale informatique américaine, fondée par Bill Gates et Paul Allen. Son activité principale consiste à développer et vendre des systèmes d’exploitation et des logiciels. Son revenu annuel a atteint 60,42 milliards de dollars sur l’exercice 2007-20081 et elle emploie 88 180 personnes dans 107 pays différents. | USA
 3 | ASUS | Société basée à Taïwan qui produit des cartes mères, des cartes graphiques, des lecteurs optiques, des PDA, des ordinateurs portables, des périphériques réseau, des téléphones portables, des boîtiers et des systèmes de refroidissement d’ordinateurs. | TAIWAN
 4 | ARCHOS | société française qui conçoit et vend des produits électroniques, notamment des baladeurs numériques ainsi que des tablettes multimédias fonctionnant sous Android et Windows. Créé en 1988, le nom de cette société est un anagramme. Henri Crohas, actuel PDG et créateur de la marque. | FRANCE
 (4 lignes)

 

Création de la table client :

shop=> CREATE TABLE client (
 id_cli integer PRIMARY KEY,
 nom text,
 prenom text,
 adresse text,
 CP integer,
 ville text,
 email text,
 sexe text,
 ip inet,
 date_inscription date
 );
 NOTICE: CREATE TABLE / PRIMARY KEY créera un index implicite « client_pkey » pour la table « client »
 CREATE TABLE

 

Insertion des clients :

shop=> INSERT INTO client VALUES (1, 'DELTAGEEK', 'Zeus','20 rue de la pointe', 75000, 'PARIS','zeus@deltageek.fr','M','127.0.0.1','27/10/12');
 INSERT 0 1
 shop=> INSERT INTO client VALUES (2, 'HASH', 'Roberta','34 allée de bavière', 67000,'STRASBOURG','roberta.hash@domain.tld','F','192.168.1.24','25/12/11');
 INSERT 0 1

 

Affichage des clients :

shop=> SELECT * FROM client ;
 id_client | nom | prenom | adresse | cp | ville | email | sexe | ip | date_inscription
 -----------+-----------+---------+---------------------+-------+------------+-------------------------+------+--------------+------------------
 1 | DELTAGEEK | Zeus | 20 rue de la pointe | 75000 | PARIS | zeus@deltageek.fr | M | 127.0.0.1 | 2012-10-27
 2 | HASH | Roberta | 34 allée de bavière | 67000 | STRASBOURG | roberta.hash@domain.tld | F | 192.168.1.24 | 2011-12-25
 (2 lignes)

 

Création de la table « produit » :

shop=> CREATE TABLE produit (
 id_prod integer PRIMARY KEY,
 nom text,
 description text,
 prix numeric,
 marque integer REFERENCES marque (id_marq)
 );
 NOTICE: CREATE TABLE / PRIMARY KEY créera un index implicite « produit_pkey » pour la table « produit »
 CREATE TABLE

 

Insertion des produits :

shop=> INSERT INTO produit VALUES (1, 'iPhone 5', 'Le tout dernier téléphone de la marque à la pomme !', 679, 1);
 INSERT 0 1
 shop=> INSERT INTO produit VALUES (2, 'iPad 3', 'Lorsque vous tenez le nouvel iPad entre vos mains, tout se fait naturellement...', 489, 1);
 INSERT 0 1
 shop=> INSERT INTO produit VALUES (3, 'Windows 8', 'Nouvel OS de Micro$oft.', 159, 2);
 INSERT 0 1
 shop=> INSERT INTO produit VALUES (4, 'A6JC', 'Pc portable', 759, 3);
 INSERT 0 1
 shop=> INSERT INTO produit VALUES (5, 'ARCHOS 101 XS', 'Coverboard ultrafin pour protéger, maintenir et écrire sur votre tablette', 379, 4);
 INSERT 0 1

 

Afficher tous les produits :

shop=> SELECT * FROM produit ;
 id_prod | nom | description | prix | marque
 ---------+---------------+----------------------------------------------------------------------------------+------+--------
 1 | iPhone 5 | Le tout dernier téléphone de la marque à la pomme ! | 679 | 1
 2 | iPad 3 | Lorsque vous tenez le nouvel iPad entre vos mains, tout se fait naturellement... | 489 | 1
 3 | Windows 8 | Nouvel OS de Micro$oft. | 159 | 2
 4 | A6JC | Pc portable | 759 | 3
 5 | ARCHOS 101 XS | Coverboard ultrafin pour protéger, maintenir et écrire sur votre tablette | 379 | 4
 (5 lignes)

 

Création de la table « cmd_prod » :

shop=> CREATE TABLE cmd_prod (
 id_cmd integer REFERENCES commande,
 id_prod integer REFERENCES produit,
 quantite integer CHECK (quantite > 0),
 PRIMARY KEY (id_prod, id_cmd)
 );
 NOTICE: CREATE TABLE / PRIMARY KEY créera un index implicite « cmd_prod_pkey » pour la table « cmd_prod »
 CREATE TABLE

 

Création de la table commande :

shop=> CREATE TABLE commande (
 id_cmd integer PRIMARY KEY,
 client integer REFERENCES client (id_cli),
 date_cmd date,
 montant integer
 );
 NOTICE: CREATE TABLE / PRIMARY KEY créera un index implicite « commande_pkey » pour la table « commande »
 CREATE TABLE

 

Insertion des produits :

shop=> INSERT INTO cmd_prod VALUES (1,1,1); -- 1 iPhone pour la commande n°1
 INSERT INTO cmd_prod VALUES (2,1,1);
 INSERT INTO cmd_prod VALUES (2,4,1);
 INSERT 0 1
 shop=> INSERT INTO cmd_prod VALUES (1,2,2); -- 3 iPad pour la commande n°1
 INSERT 0 1
 shop=> INSERT INTO cmd_prod VALUES (1,3,1);
 INSERT 0 1
 shop=> INSERT INTO cmd_prod VALUES (2,1,1);
 INSERT 0 1
 shop=> INSERT INTO cmd_prod VALUES (2,4,1);
 INSERT 0 1
 shop=> INSERT INTO cmd_prod VALUES (3,5,1);
 INSERT 0 1

 

Afficher la table « cmd_prod » est encore abstrait :

shop=> SELECT * from cmd_prod ;
 id_cmd | id_prod | quantite
 --------+---------+----------
 1 | 1 | 1
 1 | 2 | 2
 1 | 3 | 1
 2 | 1 | 1
 2 | 4 | 1
 3 | 5 | 1
 (6 lignes)

 

Insertion des données dans la tables commande :
Remarque ici nous calculons le total à la main… Dans la vraie vien l’Appli se chargera de cela !

shop=> INSERT INTO commande VALUES (1,1,'10/10/12',1816);
 INSERT 0 1
 shop=> INSERT INTO commande VALUES (2,2,'03/09/12',1438);
 INSERT 0 1
 shop=> INSERT INTO commande VALUES (3,1,'25/11/12',379);
 INSERT 0 1

 

Afficher les commandes :

id_cmd | client | date_cmd | montant
 --------+--------+------------+---------
 1 | 1 | 2012-10-10 | 1816
 2 | 2 | 2012-09-03 | 1438
 3 | 1 | 2012-11-25 | 379
 (3 lignes)

Cette table nous apprend que l’utilisateur avec l’id 2 a commandé le 2012-09-03 pour 1438€ de produit (produit 1 et 4) !

Requêtes avec jointure :

Afficher les produits et leur marque :

shop=> SELECT marque.nom AS "Marque", produit.nom AS "Produit" FROM produit, marque WHERE produit.marque=marque.id_marq;
 Marque | Produit
 -----------+---------------
 APPLE | iPhone 5
 APPLE | iPad 3
 MICROSOFT | Windows 8
 ASUS | A6JC
 ARCHOS | ARCHOS 101 XS
 (5 lignes)

 

Afficher toutes les commandes :

shop=> SELECT commande.id_cmd AS "N° de la commande", client.nom, client.prenom, montant AS "Total commande" FROM commande,client WHERE commande.client = client.id_cli ;
 N° de la commande | nom | prenom | Total commande
 -------------------+-----------+---------+----------------
 1 | DELTAGEEK | Zeus | 1816
 2 | HASH | Roberta | 1438
 3 | DELTAGEEK | Zeus | 379
 (3 lignes)

 

Afficher les commandes de plus de 1500 € :

shop=> SELECT commande.id_cmd AS "N° de la commande", client.nom, client.prenom, montant AS "Total commande" FROM commande,client WHERE commande.client = client.id_cli AND montant > 1500 ;
 N° de la commande | nom | prenom | Total commande
 -------------------+-----------+--------+----------------
 1 | DELTAGEEK | Zeus | 1816
 (1 ligne)

 

Afficher les produits commandés par chaque client :

shop=> SELECT produit.nom AS "Produit", commande.id_cmd AS "N° de la commande", client.nom, client.prenom, cmd_prod.quantite, produit.prix AS "Prix unitaire", montant AS "Total commande" FROM produit,commande,client,cmd_prod WHERE commande.id_cmd = cmd_prod.id_cmd AND commande.client = client.id_cli AND produit.id_prod = cmd_prod.id_prod;
 Produit | N° de la commande | nom | prenom | quantite | Prix unitaire | Total commande
 ---------------+-------------------+-----------+---------+----------+---------------+----------------
 iPhone 5 | 1 | DELTAGEEK | Zeus | 1 | 679 | 1816
 iPad 3 | 1 | DELTAGEEK | Zeus | 2 | 489 | 1816
 Windows 8 | 1 | DELTAGEEK | Zeus | 1 | 159 | 1816
 iPhone 5 | 2 | HASH | Roberta | 1 | 679 | 1438
 A6JC | 2 | HASH | Roberta | 1 | 759 | 1438
 ARCHOS 101 XS | 3 | DELTAGEEK | Zeus | 1 | 379 | 379
 (6 lignes)

 

Conclusion sur l’application « Shop » :

Ce tutoriel permet de vous familiariser avec PostgreSQL. La base de données « Shop » permet au final de créer des clients, des produits et permettre aux clients de passer commande d’un ou plusieurs produits…

Bien sur, dans le cadre d’une « vraie » application, un « front » web serait mise en place pour permet à n’importe qui d’insérer des données dans les tables, de faire des requêtes SQL…

 

Extraction de donnée :

Extraire des données en CSV (il faut être super-utilisateur : postgres) :
Rappel, MS EXCEL utilise le délimiteur ‘;’ :

# psql -U postgres -d shop -c "COPY (select * from "client") to '/tmp/client.csv' delimiter ';' CSV HEADER"
 Mot de passe pour l'utilisateur postgres :
 COPY 2
# more /tmp/client.csv
 id_cli;nom;prenom;adresse;cp;ville;email;sexe;ip;date_inscription
 1;DELTAGEEK;Zeus;20 rue de la pointe;75000;PARIS;zeus@deltageek.fr;M;127.0.0.1;2012-10-27
 2;HASH;Roberta;34 allée de bavière;67000;STRASBOURG;roberta.hash@domain.tld;F;192.168.1.24;2011-12-25

 

La sauvegarde/restauration :

PostgreSQL est fournit avec une outil de sauvegarde bien pratique : pg_dumpall

Son utilisation est extrêmement simple.

Sauvegarde :

# su - postgres
 -bash-4.1$ pg_dump shop > shop.sql

 

Sauvegarder et archiver :

-bash-4.1$ pg_dump -Ft -b shop > shop.tar

 

Restauration :

-bash-4.1$ psql -d shop -f shop.sql

ou

-bash-4.1$ pg_restore -d nouvellebase shop.tar

 

Administration via PgAdmin :

PgAdmin est un logiciel client d’administration de PostgreSQL. Compatible FreeBSD, Linux, Mac OSX et Microsoft Windows, il s’installe très facilement et permet d’administrer vos bases via le réseau.

Pour ce faire, il faut bien sur autoriser la connexion dans votre fichier pg_hba.conf.

# vim pg_hba.conf
# Autorisation réseau Dev
host shop geek 192.168.1.0/24 md5

Ici on autorise le réseau « 192.168.1.0″ à se connecter sur la base « shop » avec le nom d’utilisateur « geek ». Un mot de passe (de type md5) sera toutefois demandé.

 

Ajout d’un serveur

Affichage de la base

Module de requête SQL intégrée :)

Comme toujoours, vous trouverez plus d’informations sur le site web officiel.

Administration en mode Web : phpPgAdmin

Installer phpPgAdmin
Ce package est présent dans le dépôt EPEL

# yum install phpPgAdmin -y

 

Modifier le vhost :

# vim /etc/httpd/conf.d/phpPgAdmin.conf
Alias /phpPgAdmin /usr/share/phpPgAdmin

 Order deny,allow
 Deny from all
 Allow from 127.0.0.1
 Allow from ::1
 Allow from IpStationDev
 # Allow from .example.com
 

 

Configurer phpPgAdmin via le fichier :

# vim /etc/phpPgAdmin/config.inc.php
 // Si vous souhaitez autoriser la connexion avec postgres :
 $conf['extra_login_security'] = false;

 

Relancer Apache.

http://myserver/phpPgAdmin/

Aperçu de l’interface full web de phpPgAdmin :

Cette interface permet d’effectuer les fonctionnalités courantes…

BONUS :

Visualisation du contenu dans une page PHP.
Alors je ne suis pas un spécialiste PHP mais voici un bout de code qui permet d’afficher la table « client » dans une page Web.

Liste des clients de l’Appli Shop

Télécharger le fichier : client.txt
PS : pensez à renommer le fichier en .php si vous souhaitez l’utiliser sur votre maquette :)

J’espère que cet article vous à fait découvrir (un peut plus) PostgreSQL…

Have a lot of Fun

Gravatar de Zeus DeltaGeekBlog
Original post of Zeus DeltaGeekBlog.Votez pour ce billet sur Planet Libre.

Articles similaires

Francois Aichelbaum : Infrastructure Redis en haute disponibilité

vendredi 14 décembre 2012 à 16:33

A l’heure où tout devient “connecté”, “disponible en ligne”, les échanges par l’internet se multiplient. Pour accompagner la démocratisation des liens rapides mais également pour améliorer l’expérience cliente, il est nécessaire que les fournisseurs de service en ligne optimisent leurs applications et la manière dont ils les livrent. Bien sûr, on peut toujours augmenter les ressources matériels, mais le coût n’est pas négligeable. Parfois, les développeurs peuvent travailler main dans la main avec les administrateurs. C’est le cas de l’utilisation des caches applicatifs (Memcached,Couchbase, Redis…).

Avant-propos

Redis, dans la version stable actuelle (2.6) n’offre aucune fonctionnalité de mise en cluster comme Couchbase. Je ne parle pas non plus de l’absence totale d’organes de sécurité. Le but est clairement énoncé : la PER-FOR-MANCE.

Du coup, peu de solution pour la haute disponibilité si ce n’est mettre en place une architecture type maître/esclave avec une promotion automatique de l’esclave en tant que maître en cas de défaillance du premier. Nous allons voir cette mise en place puis tant qu’à faire, sa supervision.

Installation de l’infrastructure Redis

On suppose pré-installés deux serveurs Debian Squeeze 64 bit. Notez que la version disponible de Redis dans les repositories officiels est une vieille 1.2.6 et que seule la branche 2.4 est disponible dans les backports. Traduction : nous allons être obligés de tout compiler à la main.

Pour cela, quelques pré-requis à installer :

aptitude install build-essential tcl8.5 pwgen

Le package tcl8.5 est là pour vous permettre d’effectuer quelques tests au besoin lors de la séance de compilation. Nous pouvons alors nous attaquer à Redis :

cd /usr/src
wget http://redis.googlecode.com/files/redis-2.6.7.tar.gz
tar -xzf redis-2.6.7.tar.gz
rm redis-2.6.7.tar.gz
cd redis-2.6.7
make
make install
useradd redis
mkdir /opt/redis
chown redis:redis /opt/redis
chmod 770 /opt/redis

Configuration Redis

Je vous met à disposition un fichier un peu préparer, ici. Cependant, quelques modifications sont à prévoir.

wget http://cdn.aichelbaum.com/files/r/redis.conf -O /etc/redis.conf

Dans le cas que je présente ici, je bind l’application sur toutes les interfaces car les serveurs Redis sont sur un VLAN précis et isolé. Au besoin, on peut simplement l’isoler sur une IP en rajoutant dans la configuration un :

bind X.X.X.X

Il s’agit également de traitement en temps réel mais donc j’ai besoin d’avoir un maximum de garanties sur la pérennité des informations stockées, je sauvegarde toutes les 60 secondes s’il y a eu au moins une modification en base.

Redis a (trop) peu de sécurité. Cependant, autant mettre au moins un mot de passe pour la réplication. Pour se faire, on va en générer un propre avec pwgen :

pwgen -s -y 16

Il est à renseigner à la ligne commençant par masterauth. On réutilise le même mot dfe passe pour le champ requirepass.

Autre point important à modifier dans la configuration : la taille de la mémoire allouée à Redis. Dans mon exemple :

maxmemory 512mb

On peut aussi la passer à 8 Go par exemple :

maxmemory 8gb

Penser également à rajouter la ligne suivante dans votre /etc/security/limits.conf :

redis - nofile 20000

Redis nécessite un rajout à sysctl :

echo "vm.overcommit_memory=1" >> /etc/sysctl.conf
sysctl -p

Mise en place de la réplication

On a donc installé deux serveurs. On suppose leurs noms et IP :

On veut que redis02 soit esclave de redis01 :

sed -i "s/# slaveof  /# slaveof  \\n#slaveof 192.168.1.1 6379/" /etc/redis.conf

Mais aussi l’inverse pour que redis01 devienne automatiquement esclave de redis01 en cas de failover :

sed -i "s/# slaveof  /# slaveof  \\n#slaveof 192.168.1.2 6379/" /etc/redis.conf

Mise en place du failover Redis

On va entre s’appuyer sur redis-sentinel qui est une solution permettant de gérer facilement le failover entre les serveurs.

/usr/src/redis-2.6.7/src/redis-sentinel /usr/local/bin/redis-sentinel

Plus qu’à importer la configuration (et l’adapter avec vos IP et mots de passe) :

wget http://cdn.aichelbaum.com/files/s/sentinel.conf

Petite précision : sentinel gère le failover, pas le fallback automatique. Il faut donc que l’ancien maître (redis01) devienne un esclave du nouvellement promu (redis02).

Pensez à installer un 3e sentinel sur le serveur de supervision avec les mêmes informations. Il vous permettra d’avoir un quorum de 2 sur les 3 sentinels possibles, très utile en cas de split-brain (chaque serveur est UP & Running mais ne voit plus son voisin).

On n’avait pas encore les fichiers d’init donc on va les mettre en place avec l’intelligence. J’ai préparé deux scripts d’init pour le coup

wget http://cdn.aichelbaum.com/files/r/redis-server.init -O /etc/init.d/redis-server
 wget http://cdn.aichelbaum.com/files/r/redis-sentinel.init -O /etc/init.d/redis-sentinel
 chmod +x /etc/init.d/redis-se*
 update-rc.d redis-sentinel defaults
 update-rc.d redis-server defaults
 insserv redis-sentinel
 insserv redis-server

Load balancing

On va gérer l’IP flottante permettant de n’accéder qu’au maître (pour fonctionner en actif/passif) avec un bête script. Pourquoi bête ? parce que le mode de fonctionnement ne requière pas l’installation d’une usine à gaz et qu’on a un simple cron qui peut faire le boulot. Pensez juste à éditer l’IP mise pour la VIP.

wget http://cdn.aichelbaum.com/files/r/redis-vip.sh -O /usr/local/bin/redis-vip.sh
chmod +x /usr/local/bin/redis-vip.sh
echo "* * * * * /usr/local/bin/redis-vip.sh &> /dev/null" > /etc/cron.d/redis-vip

Supervision Nagios pour Redis

On va s’appuyer sur un plugin existant : check_redis. Il permet aussi bien de superviser l’instance Redis en elle-même, que la réplication. Pour cela, il demande au serveur son rôle dans la réplication et dans le cas d’un esclave (slave) son status.

Rien de particulier pour l’installation en soit. Le plugin est vraiment standard :

Usage: check_redis [--host|-H ] [--port|-p ] [ -c|--critical= ] [ -w|--warning=] [-?|--usage] [-V|--version] [-h|--help] [-v|--verbose] [-t|--timeout=]

Par contre, il faut également superviser les sentinels. Au choix : un check_tcp sur le port 26379 ou vérifier en NRPE ou SNMP le status du service redis-sentinel.

The post Infrastructure Redis en haute disponibilité appeared first on D'ici et d'ailleurs.

Gravatar de Francois Aichelbaum
Original post of Francois Aichelbaum.Votez pour ce billet sur Planet Libre.

Ploum : Les opportunités manquées du Libre 3 : la vie privée

vendredi 14 décembre 2012 à 12:55

EDIT du 18 décembre 2012 : texte retravaillé pour tenir compte des amis qui partagent vos données.

La défense de la vie privée fait partie de l'ADN des promoteurs du logiciel libre. L'équation de base est simple : si le logiciel est libre, on peut contrôler ce qu'il fait de nos données. Il m'est arrivé d'entendre des libristes s'exclamer haut et fort que jamais ils ne feraient confiance à Google pour des choses aussi importantes que leurs emails.

Love locks

Face à la frénésie exhibitionniste qui s'empare du globe sur les réseaux sociaux, on pourrait croire que le libre tiendrait le rôle d'un contre poids important. Il n'en a rien été car, malheureusement, les libristes n'ont soit pas compris les enjeux réels, soit ce sont évertués à les solutionner sans tenir compte de la satisfaction des utilisateurs, soit se sont complètement radicalisés et marginalisés.

Google n'aura pas accès à mes mails

Récemment, j'ai été frappé de constater à quel point l'écrasante majorité des mes contacts utilisaient GMail. Et j'ajoute à cela ceux qui utilisent Google Apps sans que je le sache.

Il s'ensuit qu'à peu près chacun des emails que j'ai envoyés et reçus ces dernières années est connu de Google. Pour certains ce sera plus Microsoft avec Hotmail/Outlook.com ou Yahoo mais l'idée es la même : à l'exception de quelques échanges entre libristes, tout ce qui compte dans mes conversations est passé par un gros fournisseur.

Pire : vos amis compléterons d'eux-mêmes les détails dans leur liste de contact : adresse postale, téléphone, date de naissance. Même si vous n'avez jamais utilisé ces services, il est probable que Google et Facebook connaissent déjà énormément sur vous.

Le voyeur le plus dangereux

Dans le fantasme collectif, la vie privée est le seul moyen de se protéger contre un état totalitaire ou une société hégémonique. Mais, finalement, les grandes entreprises sont très surveillées et je pense qu'un géant comme Google ne peut pas se permettre le moindre faux pas.

À l'opposé, cet ami qui héberge votre site et vos emails est-il vraiment digne de confiance ? Et ce partenaire qui a lancé une association à laquelle vous cotisez et que vous vous êtes mis à dos en dénonçant sa gestion calamiteuse de la caisse ? En temps qu'administrateur de serveurs de mails, il m'est arrivé d'avoir accès aux boites d'anciennes petites amies avec qui je n'étais pas en bons termes. De découvrir que j'avais cet accès m'a fortement mis mal à l'aise.

La situation est donc identique à la décentralisation : idéalement, chacun devrait s'auto-héberger et être responsable de ses propres services. Mais, à défaut, utiliser un géant centralisé est plus sûr qu'une petite structure.

Aujourd'hui, tout va bien, tout le monde s'entend. Mais que se passera-t-il en cas de conflit ?

Une profonde et contre-productive incompréhension

La vie privée est tellement mal comprise que certains en fond une paranoïa tout à fait contre-productive et insensée. Il y a ce refus de publier son adresse email, son numéro de téléphone, son adresse physique ou son numéro de compte en banque.

Pourtant, ce sont des données qui ont été déjà divulguées à des centaines et des centaines de personnes ou de sociétés, qui sont reprises un peu partout et, dans bien des cas, sont trouvables par une simple recherche sur le web. Un peu comme cette personne qui m'a un jour demandé, après un échange par mail, d'effacer tous les emails de la conversation et de ne donner son adresse à personne, la même adresse étant sur la page de contact du site de l'association dont elle était secrétaire.

Ce qui est dommage avec tout ça, c'est que si vos données circulent déjà dans la nature, elles sont difficilement accessibles à vos amis et à vos proches qui doivent les tenir à jour manuellement dans des carnets d'adresses ou des mémoires de téléphone. Alors qu'en les publiant tout simplement sur un profil Facebook ou G+, vous êtes toujours joignables. Et que, de toutes façons, au moins un de vos amis va compléter son profil pour son usage personnel et donner ces renseignements à Facebook.

Dernièrement, j'ai même entendu que le numéro de compte en banque pouvait servir à faire des retraits sans votre accord. Encore une fois, ce numéro est public : chaque personne qui vous a un jour fait un virement, chaque personne à qui vous avez un jour payé 1€ connaît ce numéro. Vous le trouvez sur les bulletins de virement distribués à tous, sur les cartes de banque tombées par terre et même sur des sites webs. Si il y avait la moindre raison de le cacher, le système bancaire croulerait sous les réclamations et les escroqueries !

Oui mais…

Notre instinct à la vie privée est louable mais notre incompréhension nous pousse à faire les pires choix.

Google, encore lui, possède un service intitulé Google Latitude qui permet de visualiser son historique de position, jour après jour. Très pratique pour se souvenir où l'on était tel jour. Ou pour partager temporairement sa position avec un ami et se retrouver dans une grande ville sans s'échanger mille coups de fil.

Évidemment, une telle fonctionnalité fait peur. Cela veut dire que Google va savoir où nous sommes ! Google propose d'ailleurs, en un clic, d'effacer tout l'historique Latitude « en cas d'urgence ».

Jusqu'au jour où quelqu'un m'a fait remarqué que, ces données, Google, l'opérateur téléphonique et le gouvernement y avaient déjà accès.

En quelques sortes, activer cette fonctionnalité n'est pas donner un accès à sa vie privée, c'est surtout voir ce qu'ils savent déjà sur nous. Et à ce titre, c'est un outil très pertinent de protection de la vie privée.

Les solutions techniques…

En fait, si l'on souhaite réellement protéger sa vie privée, il n'y a pas trente-six solutions :  On doit faire une croix totale sur le téléphone mobile et sur le paiement par carte. Toutes nos communications, toutes nos données doivent également être chiffrées et ne communiquer qu'avec des amis "sûrs" (exit donc la vie sociale).

Ce concept de cryptage, les libristes l'ont défendu bec et ongles avec la promotion de PGP/GPG. Malheureusement, encore une fois, ils n'ont pas tenu compte une seule seconde de l'utilisation réelle que faisaient les gens de leur email.

Aucune interface correcte de gestion de clé de PGP/GPG n'a jamais vu le jour, l'utilisation de la ligne de commande étant toujours requise à un point ou un autre. Mais, pire, GPG supposait la conservation parfaite de la clé secrète (sans divulgation mais sans perte) ainsi que l'accès à l'email uniquement depuis des terminaux parfaitement sécurisés où la clé secrète était installée.

Les auteurs de GPG eux-mêmes ont pris conscience de ces lacunes et ont tenté d'y apporter une solution avec le projet STEED.

Il faut cependant mettre au crédit du libre l'apparition de réseaux entièrement anonymes comme Retroshare ou de contournement comme Tor.

…et l'évolution des mœurs

Finalement, la solution n'est pas venue de la technique mais des utilisateurs eux-mêmes. Les mentalité évoluent et la vie privée n'a plus le même sens.

La jeune génération s'affiche sans aucune honte sur les réseaux sociaux. Des messages très intimes s'échangent sur les murs publics ou sur Twitter. Les jeunes sont-ils bêtes ? N'ont-ils pas compris ?

Ou bien les vieux que nous sommes sont-ils juste réactionnaires comme l'étaient nos arrières grands parents face à un baiser trop passionné en public ?

Et si, contrairement à ce que nous avons cru, la vie privée n'était pas un enjeu technique mais bien sociétal ? Et si c'était une bonne chose d'ouvrir ce débat, de lancer en politique des jeunes qui ont grandi avec une culture d'ouverture ?



Photo par Mahmood Al-Yousif.


Flattr our API Documentation

Gravatar de Ploum
Original post of Ploum.Votez pour ce billet sur Planet Libre.

Articles similaires

Tasse de Café : Plus de 15 millions de fichiers sur Wikimedia Commons !

vendredi 14 décembre 2012 à 09:00

Si vous ne connaissez pas, Wikimedia Commons est une plate-forme mise en place par la Wikimedia Foundation. Le service prend la forme d’un wiki et permet aux utilisateurs de poster des fichiers de type média, c’est-à-dire des photos, des vidéos et des sons, tous utilisables librement, certains sous une licence Creative Commons (souvent CC-BY ou CC-BY-SA), d’autres carrément dans le domaine public. Vous l’aurez compris, Wikimedia Commons est une véritable mine d’or pour qui cherche des fichiers pour illustrer leurs travaux (à titre d’exemple, je m’en suis déjà servi plusieurs fois pour illustrer mes articles).

Wikimedia Commons contient plus de 15 millions de fichiers

Et justement, si Wikipedia Commons est arrivé au point d’être qualifié de mine d’or, c’est grâce à la communauté toujours grandissante qui fournit un nombre toujours plus important de fichiers, un nombre qui a passé un cap très important il y a peu : le 4 décembre dernier, un certain Supportstorm a uploadé une photo du domaine public représentant une dépression tropicale datant du 14 août 1996.

Sous son aspect banal, cette photo est pourtant très importante car elle a fait monter le nombre de fichiers présents sur Wikimedia Commons à tout juste 15 millions. C’est tout simplement énorme et d’autant plus impressionnant que la limite des 10 millions avait été atteinte il y a seulement moins de deux ans (le 15 avril 2011). Et la petite anecdote bien sympathique qui rajoute encore plus de symbolisme à ce quinzième million, c’est que c’est ce mois-ci que Creative Commons fête le dixième anniversaire des premières licences du même nom, ces mêmes licences qui ont contribué à faciliter la propagation de fichiers libres sur Internet.

Via

Gravatar de Tasse de Café
Original post of Tasse de Café.Votez pour ce billet sur Planet Libre.