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 »

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 »

Mise en place de sauvegardes avec backup-manager

Sauvegardez simplement le contenu de votre pc sur un autre pc simplement via backup-manager et en toute sécurité via ssh

Préambule

Soit :
  • serv_prod : le serveur de production dont vous souhaitez sauvegarder le contenu,
  • serv_backup : le serveur sur lequel vos backups seront uploadés,
  • user_prod : l’utlisateur sous lequel seront réalisés les fichiers de backup,
  • user_backup : l’utilisateur que l’on utilise pour se connecter à serv_backup.

Créer vos utilisateurs de backup sur les serveurs respectifs

sudo adduser user_prod --home /home/backup
sudo adduser user_backup --home /home/backup

Installation et configuration de backup-manager

C’est tout simple, sur serv_prod :

sudo aptitude update
sudo aptitude install backup-manager dar
backup-manager vous demande un certain nombre d’informations :
  • Dépot des archives : /home/backup
  • utilisateur propriétaire du dépot : user_prod
  • groupe propriétaire du dépot : user_prod
  • format des sauvegardes : .tar.bz2
  • fréquence des sauvegardes : hebdomadaire
  • Suivre les liens symboliques : non
  • Format du nom des archives : long
  • Temps de conservation des sauvegardes : 14 (permet de conserver 2 semaines de sauvegardes par ex)
  • Répertoires à sauvegarder : indiquer ici les répertoires qui vous intéressent
  • Répertoires à ne pas sauvegarder : /home/backup
  • Encrypter les archives : non
  • Activer le système de transfert des fichiers
  • Protocole de transfert à utiliser : scp
  • Hote distant : ip ou nom d’hote de serv_backup
  • Utilisateur distant : user_backup
  • Clé privée : /home/backup/.ssh/id_dsa
  • Répertoire de destination : /home/backup
  • Activer la gravure : non

Lors de l'installation de base, il ne vous demande pas tout cela. Pour remplir tous ces champs, vous pouvez faire :

sudo dpkg-reconfigure backup-manager

Paramétrage avancé de backup-manager

Sur serv_prod, éditez /etc/backup-manager.conf

Si vous voulez passer en mode incrémental, changez la valeur suivante :

export BM_ARCHIVE_METHOD="tarball-incremental"

Si vous voulez sauvegarder aussi vos base MySQL, vos dépôts subversion (il faudra ensuite renseigner les sections MySQL et Subversion plus loin dans le fichier).

export BM_ARCHIVE_METHOD="tarball-incremental mysql svn"

Pour utiliser Dar et définir la taille maximale d’un volume de sauvegarde ( ex découper vos sauvegardes en tranches de 100 Mo - pratique pour les transferts) :

export BM_TARBALL_FILETYPE="dar"

et un peu plus bas :

export BM_TARBALL_SLICESIZE="100M"

Mise en place de l’authentification par clé entre serv_prod et serv_backup

Sur serv_prod, connectez vous en user_prod.

Créez une paire de clé privée/publique ssh :

ssh-keygen -t dsa
On va vous demander :
  • le chemin où sera stocké votre clé privée, tapez simplement entrée pour accepter la valeur par défaut
  • une passphrase : laissez vide et tapez sur entrée
  • la confirmation de votre passphrase : tapez encore sur entrée.

La raison pour laquelle on ne définit pas de passphrase est que cela au permet d’automatiser les scripts et éviter que la passphrase soit demandée lors de la connexion au serveur.

Copiez ensuite votre clé publique sur le serveur de backup :

ssh-copy-id -i ~/.ssh/id_dsa user_backup@serv_backup

Testez ensuite la connection :

ssh user_backup@serv_backup

Vous devriez pouvoir vous connecter sans authentification.

Exécutez votre premier jeu de sauvegarde avec backup-manager

Lancez backup-manager :

sudo backup-manager -v

Automatisation des sauvegardes

Comme vous avez rentré une fréquence lors de l’installation de backup-manager, vous aurez une entrée correspondante dans /etc/cron.* (si vous avez choisi une fréquence hebdo, ce sera dans /etc/cron.weekly).

View details »

Vim : trucs & astuces

Départ

Commande Description
i Passage en mode insertion
Echap Passage en mode commande

Commandes basiques

Toutes les commandes qui suivent se font en "mode commande".

Commande Description
:q Quitte Vim sans sauvegarder le fichier (si le fichier a été modifié, il suggère de l’enregistrer)
:x Quitte Vim en sauvegardant le fichier
:w Enregistre les modifications
:wq Equivaut à :x
:w toto.txt Sauvegarde le fichier sous le nom toto.txt

Il est possible d’ajouter un ! pour forcer l’opération : :q! vous fait sortir de vim sans sauvegarder le fichier. Si vous aviez modifié votre fichier, les modifications sont alors perdues.

Recherche et remplacement de texte

Commande Description
/texte recherche les occurrences de la chaîne "texte" dans le fichier ouvert. Pour passer d’un élément à un autre, il suffit d’appuyer sur la touche n.
:s/erreure/erreur remplace sur la ligne où le curseur est positionné la chaîne "erreure" par "erreur"
:0,$s/erreure/erreur remplace de la 1ère ligne à la dernière ligne du fichier la chaîne "erreure" par "erreur". Le remplacement est global, il ne se fait pas au cas par cas
:s/var/www/var/www/monsite.com remplace la chaine "/var/www/" par "/var/www/monsite.com" - l’intérêt ici est de voir l’utilisation de l’antislash () qui permet d’éviter la prise en compte des slashs (/) par sed (le s ). Il traite alors le slash comme un caractère normal et non comme un caractère séparant la chaine à remplacer de sa valeur de remplacement.
:g#emacs#d La commande g (grep) permet de chercher des lignes et d'appliquer des commandes dessus. Cet exemple efface toutes les lignes contenant la chaîne «emacs»
:g#ABC#s/./U&/g Cette commande substitue les lignes contenant la chaîne «ABC» par la même ligne en majuscule.(notez l'utilisation de 2 délimiteurs différents pour le grep et le substitute, cela n'est pas obligatoire).
:0,$s/var\/www/var\/www\/monsite.com

peut s'écrire :

:%s#/var/www#/var/www/monsite.com#g
Explications :
  • %s est un alias de 0,$s
  • L'utilisation de # comme caractère de délimitation de l'expression régulière permet d'éviter de backslasher tous les slashs.

Copier / Coller

Commande Description
d couper
y copier
c remplacer, ie on passe en mode édition à la place de ce qu'on vient de couper
x effacer un caractère ou espace
p copier en avant, ie après le curseur
P copier en arrière, ie au dessus du curseur

Sélectionner un espace, un mot, un bloc

Commande Description
d+espace couper une lettre
d+w couper le mot
d+d couper une ligne
d+d+p couper une ligne et la coller après
Pour faire une sélection plus étendue :
  • Utiliser "v" pour commencer un bloc et se déplacer pour spécifier la fin de ce bloc. Après quoi, on utilise d,y ou c pour le couper, copier ou remplacer.
  • V (majuscule) sélectionne des lignes entières
  • Ctrl+v sélectionne un bloc rectangulaire

Écrire et lire dans / à partir de commandes shell

Commande Description
:!commande lance une commande à partir de Vi (svn par exemple), l'édition du document en cours reprendra une fois la commande terminée
!!commande lance la commande spécifiée et remplace le contenu de la ligne du curser par la sortie de cette commande
:w !commande écrit le contenu du fichier courant en entrée de la commande spécifiée (vous pensiez à la commande «mysql» ? ;)
View details »

Remonter un disque crypté et LVM

Si par le plus grand des hasard, votre pc plante et que vous aveiz installé une debian dessus avec des partitions crypées et avec lvm, voici comment récupérer ces petits :

Etape 1 : Décrypter la partition

sudo cryptsetup luksOpen /dev/mapartition sesameouvretoi

Entrez votre mot de passe et c'est bon :-)

Etape 2 : Monter les partitions LVM

sudo vgdisplay nomduvolume
sudo lvdisplay nom_du_volume
sudo vgchange -a n
sudo vgexport -a
sudo vgimport -a
sudo vgchange -a y

au besoin, créez vous des points de montage :

sudo mkdir /mnt/coffre_ouvert
sudo mkdir /mnt/coffre_ouvert_bis
...

Montez et accédez à vos données

sudo mount -t ext3 /dev/nom_du_volume/nom_répertoire /mnt/coffre_ouvert
...

Démonter le tout...

sudo umount /mnt/coffre_ouvert
sudo vgchange -a n
sudo cryptsetup luksClose sesameouvretoi
View details »