VirtualBox - Accéder aisément à votre vm depuis l'hôte

Au bureau et à la maison, j'utilise souvent VirtualBox pour mes besoins de virtualisation. Jusu'à présent, à chaque VM, j'associais plusieurs interfaces réseaux :

  • Une interface bridge qui me permettait d'avoir un accès vers le réseau local et internet mais pas à l'hôte et d'être vu comme un poste sur le réseau ; pour autant, les accès entre l'hôte et l'invité via cette IP n'était pas garantie pour des raisons plus ou moins obscures.
  • Une interface "Réseau privé hôte" pour permettre des échanges de fichiers, une connexion SSH ou autre entre la VM et son hôte.

Jusqu'à ce que je découvre il y a peu la redirection de ports sur l'option NAT.

Dès lors, une seule carte/interface réseau, en mode NAT, suffit au lieu des deux précédentes.

Une fois la carte en NAT, se rendre dans redirection de ports et cliquer sur le "+" pour ajouter une règle ; Pour un accès SSH, il suffit juste de préciser le port sur l'hôte (2222 par ex) et le port cible sur l'invité (22)

VrtualBox NAT SSH rule

Ensuite pour se connecter à votre VM, il ne faut pas utiliser l'IP de votre VM mais localhost !

ssh localhost -p 2222

Et vous voilà connecté en SSH. Il vous reste à étendre les règles en fonction de vos besoins !

Learn more »

FreeBSD - Nginx, MongoDB, Python, Postgres, Node.js

Installation nginx

Par défaut, les options de configuration de nginx ne permettent pas de déployer un vhost en https ou encore la compression gzip. Il faudra donc compiler ce logiciel et ajouter le(s) module(s) dont vous avez besoin.

portmaster www/nginx

Pour que nginx démarre automattiquement au démarrager, dans /etc/rc.conf, ajouter :

nginx_enable=YES

Installation MongoDB

Le point important à savoir ici est que spidermonkey n'est pas configuré avec le support de l'UTF8 par défaut. Il vous faudra donc compiler ce paquet pour que MongoDB ne râle pas.

portmaster lang/spidermonkey

Puis :

portmaster databases/mongodb

Pour que MongoDB démarre automattiquement au démarrager, dans /etc/rc.conf, ajouter :

mongod_enable=YES

Installation Postgres

Simple et trivial ; à noter tout de même que 4 versions de Postgres sont proposés : 8.3, 8.4, 9.0 et 9.1

portmaster databases/postgresql91-server

Pour initialiser le serveur Postges :

/usr/local/etc/rc.d/postgresql initdb

Pour que Postgres démarre automattiquement au démarrager, dans /etc/rc.conf, ajouter :

postgresql_enable=YES

Installation Node.js

portmaster www/node

Installation Python

Là encore, le choix est large au niveau des versions : 2.4, 2.5, 2.6, 2.7 (version par défaut ?), 3.1 et 3.2

portmaster lang/python27

Pour récupérer pip et autres librairies, il faut aller les chercher dans devel/py-*

Par exemple pour récupérer pip et virtualenvwrapper :

portmaster devel/py-pip devel/py-virtualenvwrapper

Par contre, pour des frameworks comme Django ou Flask, il faut aller voir du coté de www/py-django et www/py-flask, sauf à ce qu'ils soient installés dans votre environnement 'virtualenv' via pip justement. A tout hasard :

portmaster www/py-django www/py-flask

Installation DVCS

portmaster devel/git (ou) devel/mercurial
View details »

Auto-complétion / colorisation / raccourcis sous Debian/Ubuntu

L’auto-complétion permet, en utilisant la touche Tabulation, de compléter automatiquement les commandes.

La colorisation permet d’avoir un affichage plus sympathique

Les raccourcis permettent de simplifier les commandes à taper

Auto-complétion

dans /home/utilistateur/.bashrc, décommentez :

#if [ -f /etc/bash_completion ]; then
#  . /etc/bash_completion
#fi

Pour activer l’auto-complétion pour l"utilisateur root, il faut ajouter ces lignes dans /root/.bashrc ou copier /etc/skel/.bashrc dans /root/

Colorisation

Toujours dans le fichier .bashrc, décommentez les lignes pour avoir le résultat suivant :

# enable color support of ls and also add handy aliases
if [ "$TERM" != "dumb" ]; then
    eval `dircolors -b`
    alias ls='ls --color=auto'
    #alias dir='ls --color=auto --format=vertical'
    #alias vdir='ls --color=auto --format=long'
fi

Raccourcis

Toujours dans le fichier .bashrc, décommentez les lignes suivantes :

#alias ll='ls -l'
#alias la='ls -A'
#alias l='ls -CF'

Vous pouvez créer vos alias sur le même motif :

alias lamp_start='sudo /etc/init.d/apache2 start && sudo /etc/init.d/mysql start'
alias lamp_restart='sudo /etc/init.d/apache2 restart && sudo /etc/init.d/mysql restart'
alias lamp_reload='sudo /etc/init.d/apache2 reload && sudo /etc/init.d/mysql reload'
alias lamp_stop='sudo /etc/init.d/apache2 stop && sudo /etc/init.d/mysql stop'

Prise en compte des modifications

Une fois ces modifications effectuées, sauvegardez votre fichier, puis dans la console tapez :

source .bashrc

Tapez alors par ex ll pour voir si cela fonctionne bien.

Si vous avez activez l’autocompletion pour root, alors les commandes peuvent être réalisées plus rapidement :
  • aptitude update && apt—get dist-upgrade devient apti+[tab] upd+[tab] && apti+[tab] di+[tab]
  • Supposons que je veuille installer un nouveau kernel-image : apti+[tab] i+[tab] kern+[tab]-im+[tab] et ainsi de suite. En appuyant plusieurs fois sur [tab], la liste des paquets disponibles est alors affichée. Il suffit alors de compléter au fur et à mesure.

Ce ne sont que des exemples et sont applicables pour toutes les commandes :-)

View details »

FreeBSD - Mise à jour d'un système "stable"

Cherchant à évaluer les systèmes BSD, j'ai resorti mon Linutop V1, une clé USB et une image de FreeBSD 9.0. Du fait des faibles resssouces et pour préserver ma clé USB, je fais donc volontairement le choix de n'utiliser que les packages prêt à l'emploi plutôt que de compiler les ports moi-même.

En voulant mettre à jour mon système, je ne parvenais pas à récupérer les packages récents. Ci-après la procédure suivie et qui semble fonctionner. S'il y a des BSDistes dans la salle, je suis preneur de leur retour, n'ayant pas trouvé la documentation officielle super claire sur ce sujet.

Dans le fichier .profile de root, il faut surcharger la valeur de PACKAGESITE pour prendre le canal "stable" plutôt que "release". Le premier canal contient les versions à jour des packages de FreeBSD 9 alors que le second ne contient que les binaires disponibles au moment de la sortie de votre version de FreeBSD 9 :

PACKAGESITE=ftp://ftp.fr.freebsd.org/pub/FreeBSD/ports/i386/packages-9-stable/Latest/
export PACKAGESITE

Il vous faudra le faire aussi une fois dans votre console et valider la bonne valeur de PACKAGESITE avant d'aller plus loin.

echo $PACKAGESITE
ftp://ftp.fr.freebsd.org/pub/FreeBSD/ports/i386/packages-9-stable/Latest/

Récupérer et mettre à jour la liste des ports :

portsnap fetch
portsnap extract

Pour les prochaines mises à jour, il suffira de faire :

portsnap fetch update

Pour mettre à jour votre système en utilisant que les packages compilés :

portmaster -a -PP

Il faut bien sur avoir préalablement installer portmaster via un :

pkg_add -r portmaster

Il ne me reste plus qu'à paraméter nginx et shellinabox pour avoir un shell accessible de n'importe où via mon navigateur...

View details »

mount, bind et fstab

Il peut être intéressant de devoir mettre à disposition une zone de votre disque dur à différents endroits de votre ordinateur / serveur. Il y a certes l'option des liens symboliques mais cela peut poser certains problèmes de compatibilités avec certaines solutions logicielles. Plutôt que de dupliquer les contenus, on peut traiter la problématique via un point de montage et l'option bind

Mise en place

Sur mon NAS, ma musique est dans /volume1/nicolas/Music, or mon NAS n'accepte de partager comme musique que le contenu de /volume1/music, alors il suffit de procéder de la façon suivante pour rendre la musique accessible via le second chemin :

Dans /etc/fstab, rajoutez:

/volume1/nicolas/Music      /volume1/music  bind    bind,defaults   0       0

Ensuite, mount -a ou mount /volume1/music et un ls /volume1/music auparavant vide vous donne maintenant le contenu de /volume1/nicolas/Music/.

Au niveau de mon NAS, je peux alors partager ma musique sans doublon. Attention toutefois à la gestion des permissions ;-)

View details »

Redéfinir massivement les droits sur les répertoires et fichiers

Pour mettre tous les répertoires avec les droits 755, et ce récursivement à partir de l’endroit ou vous vous sitez (ie le premier point):

find . -type d | xargs chmod 755

Pour mettre tous les fichiers avec les droits 644, et ce récursivement à partir de l’endroit ou vous vous situez (ie le premier point):

find . -type f | xargs chmod 644
View details »

Commandes Postgres

Backup

Au format "plain text" :

pg_dump -f fichier.sql -U <user> <dbname>
pg_dumpall -U postgres -f full.sql

Backup de toutes vos bases postgres au format custom (pour utilisation de pg_restore)

#! /bin/sh

# Author : Nicolas Steinmetz
# Date : 2011/02/22
# Desc : backup all postgres db in /var/backup using the custom format
#       so that we can use pg_restore to restore the whole or part of the
#       DB
#       For more details :
#               http://www.postgresql.org/docs/8.4/static/app-pgdump.html
#               http://www.postgresql.org/docs/8.4/static/app-pgrestore.html
#
# Requires that ~/.pgpass is defined as follow :
#       host:port:dbname (use * for all db):user:password
#
# Be sure that ~/.pgpass is "chmoded" 600
#

psql -Atw -U postgres -c "SELECT datname FROM pg_database \
                      WHERE NOT datistemplate"| \
while read f;
    do pg_dump -U postgres -w --format=c --file=/var/backup/$f.sql $f;
done;

Restauration

Si votre backup est au format "plain text" :

psql -U <user> -d <base> -f fichier.sql

ou s'il est au format tar ou custom :

pg_restore -U <user> -d <base> -f /path/to/file.sql

Autre intérêt de pg_restore, il est possible, à partir d'un dump complet, de ne demander la restauration que d'une table, fonction, trigger, etc.

View details »

Configurer un serveur DNS (Bind)

Ce tutoriel explique, dans le cadre de la mise en place d’un Serveur Privé Virtuel chez Lycos, comment j’ai mis en place mon propre serveur DNS

Installation

Il suffit de procéder de la façon suivante :

aptitude update
aptitude install bind9

Configuration

Dans cet exemple : * vous avez déjà créé votre 1er vhost avec Apache * votre domaine est : monsite.com * l’ip de votre serveur est : 100.100.100.100 * vous utilisez le dns secondaire fourni par Gandi (ns6.gandi.net)

Solution 1 : Gestion via Webmin

Ouvrez Webmin

Si webmatin n’est pas installé :

aptitude update
aptitude install webmin webmin-bind
/etc/init.d/webmin start
Ensuite :

Créer une nouvelle zone primaire

  • Cliquer sur "Créer une nouvelle zone primaire"
  • Dans "Nom de domaine / réseau" entrez : "monsite.com"
  • Dans "Serveur primaire" entrez : "ns1.monsite.com"
  • Dans "Adresse électronique" entrez : votre email pour contact admin du dns
  • Cliquer sur créer

Bloc "Adresse"

  • Cliquer sur "Adresse" :
  • Dans "Nom" entrez : "www"
  • Dans "Adresse" entrez : "100.100.100.100"
  • Cliquer sur créer
  • Recommencer l’opération x fois en entrant dans nom : "ns1", "ftp", "mail", "pop", "smtp", etc et une fois en laissant "nom" vide.
  • Une fois fini cliquer sur "Retourner à Type d’enregistrement"

Bloc "Serveur de nom"

  • Cliquer sur "Serveur de nom"
  • Dans "Nom de zone" : laisser vide
  • Dans "Serveur de nom" entrez le dns secondaire : "ns1.monsite.com"
  • Cliquer sur Créer
  • Dans "Nom de zone" : laisser vide
  • Dans "Serveur de nom" entrez le dns secondaire : "ns6.gandi.net"
  • Une fois fini cliquer sur "Retourner à Type d’enregistrement"

Bloc "Serveur de courrier"

  • Cliquer sur "serveur de courrier" :
  • Dans "Nom " : laisser vide
  • Dans "Serveur de courrier" entrez "mail.monsite.com."
    • ne pas oublier de mettre le "." à la fin
    • NB : à condition d’avoir créer le sous domaine mail plus haut
  • Dans "Priorité" entrez : "10"
  • Cliquer sur créer
  • Une fois fini cliquer sur "Retourner à Type d’enregistrement"

Redémarrez Bind :

/etc/init.d/bind restart

Solution 2 : Gestion en console

FIXME

Déclaration de votre serveur DNS auprès de votre registar

Une fois cela fait il faut déclarer votre serveur ns1.monsite.com comme serveur DNS auprès de votre registrar.

Par exemple si "monsite.com" est chez gandi, dans la section de configuration des DNS :
  • Champ de gauche entrez "ns1.mondomaine.com"
  • Champ de droite entrez l’ip de votre serveur, dans notre ex "100.100.100.100"
Pour le serveur secondaire, il suffit de faire de même ;-)
  • Champ de gauche : entrez "ns6.gandi.net"
  • Champ de droite : laissez vide

Résultat

/etc/bind/named.conf.local :

zone "monsite.com" {
    type master;
    file "/var/cache/bind/monsite.com.hosts";
    };

/var/cache/bind/monsite.com.hosts :

$ttl 38400
monsite.com.   IN      SOA     ns1.monsite.com. root.monsite.com. (
                       1105498423
                       10800
                       3600
                       604800
                       38400 )
monsite.com.           IN      NS      ns1.monsite.com.
www.monsite.com.       IN      A       100.100.100.100
monsite.com.           IN      A       100.100.100.100
smtp.monsite.com.      IN      A       100.100.100.100
ftp.monsite.com.       IN      A       100.100.100.100
mail.monsite.com.      IN      A       100.100.100.100
monsite.com.           IN      NS      ns6.gandi.net.
monsite.com.           IN      MX      10 mail.monsite.com.
ns1.monsite.com.       IN      A       100.100.100.100

Et ensuite...

Il vous suffit / faut attendre que la propagation des DNS se fasse (de quelques minutes à 48h maxi)

View details »

Correcteur orthographique et serveur Tex pour SPIP

Ce tutoriel explique comment installer le serveur Tex et le correcteur orthographique pour Spip sous Debian Sarge

Serveur Tex

Documentation de référence : http://wiki.rezo.net/test/TeX

Déjà, installez latex et gs

aptitude install latex gs

Récupérez ensuite tex2im :

tar xzf tex2im-1.8.tar.gz
mv tex2im /usr/local/bin
chmod 755 /usr/local/bin/tex2im

Récupérer le contenu de tex.php via un copier coller.

Là, créer un doublon du fichier tex.php sous le nom spitex.php ; 2 solutions :

cp tex.php spitex.php

ou :

ln -s tex.php spitex.php

Créer le dossier CACHE/spiTeX :

mkdir CACHE
mkdir CACHE/spiTeX
chmod 777 -R CACHE/

Voilà, tout est fait, lancez alors dans votre navigateur : http://www.monserveur.com/tex.php?x^2 et vous devez voir apparaître un beau x au carré apparaître.

Mise en place du correcteur orthographique

Dans /etc/apt/sources.list, ajoutez :

# Dotdeb
deb http://packages.dotdeb.org stable all
deb-src http://packages.dotdeb.org stable all

Mettez à jour votre distribution (si php est installé alors vous passerez en version 4.4.0 de PHP)

aptitude update
aptitude (dist-)upgrade --show-upgraded

Si php n’est pas installé alors faites :

aptitude update
aptitude install php5 php5-mysql libapache-mod-php5 (ou libapache2-mod-php5 si vous utilisez apache2) php5-pspell

Installez ensuite aspell et ses dictionnaires :

aptitude install aspell-*

(cela installera tous les dictionnaires disponibles pour aspell - sinon précisez les langues qui vous intéressent...)

Récupérer alors ortho_serveur.php

Dans le répertoire où se trouve ce fichier, créer le répertoire data :

mkdir data
chmod 777 -R data

Rendez-vous alors sur http://www.monserveur.com/ortho_serveur.php pour tester le fonctionnement du serveur.

Voilà, rien de plus compliqué !

View details »

Externaliser votre configuration MySQL

Depuis MySQL 5.0.4, il est possible de surcharger la configuration de MySQL en incluant le fichier de configuration de son choix.

Au niveau des distributions Linux, on se retrouve face à plusieurs situations (je ne sais pas ce qu'il en est pour Solaris / Windows) :

  1. Soit le fichier my.cnf n'est pas installé dans /etc/ ou /etc/mysql et dans ce cas, MySQL tourne avec des options par défaut (cas de RHEL par ex)
  2. Soit le fichier my.cnf existe et est pris en compte avec les options précisées dans ce fichier (cas de Debian par ex)

Note

Des fichiers exemples de configuration sont disponibles en général dans /usr/share/mysql/

Dans le cas 1, en créant son propre fichier my.cnf dans /etc/, on surcharge donc la configuration par défaut. Lors des montées de version de MySQL il y a a priori peu de risque que votre fichier soit effacé (sauf si la distribution se met à en fournir un par défaut, ce qui n'est jamais improbable).

Dans le cas 2, lors d'une montée de version, si vous avez modifié le fichier fourni initialement par la distribution et suivant la subtilité du gestionnaire de paquet, vos modifications peuvent potentiellement être perdues.

La solution consiste donc à externaliser vos modifications dans une zone qui ne sera jamais impactée par le package standard de MySQL.

MySQL vous offre 2 options (à ajouter en fin de fichier /etc/my.cnf) :

  • include permet de ne charger qu'un fichier de configuration donné :
!include /home/mysql/conf/myopt.cnf
  • !includedir permet de charger tous les fichiers de configuration d'un répertoire :
!includedir /home/mysql/conf

Il n'est pas précisé de règle pour l'ordre de chargement, je présuppose que cela se fait par ordre alphabétique (comme Apache)

Quelques règles :

  • Les fichiers doivent avoir une extension en .cnf pour être pris en compte.
  • Dans votre fichier, il vous faut rappeler à quelle section de la configuration vos variables s'appliquent

Ex :

[client]
port            = 3306
socket          = /var/lib/mysql/mysql.sock

[mysqld]
key_buffer = 100M
myisam_sort_buffer_size = 64M

On peut donc imaginer utiliser !includedir /home/mysql/conf et que ce répertoire contienne n fichiers :

  • cache.cnf qui contient les paramètres pour les mécanismes de cache
  • replication.cnf qui contient les paramètres pour la réplication
  • etc.

Ref : http://dev.mysql.com/doc/refman/5.0/en/option-files.html

View details »