samedi 21 janvier 2017

New Debian package 2017 w3

Les news S3/S9 2017

Voici des petits packages qui me plaisent bien:

  • Bareos pour gérer des backups; est-ce plus pratique qu'unison ?
  •  duperemove: http://markfasheh.github.io/duperemove/ pour faire de la deduplication
  • biboumi qui est une gateway entre XMPP et IRC https://biboumi.louiz.org/
  • seafile pour créer un cloud privé seafile.com
  • stenographer sauvegarde de packet reseau sur disque pour analyse d'intrusion
  • suricata est un IDS intrusion detection system https://suricata-ids.org/
  • webcamd pour placer des images webcam sur un srv web
  • hxtools un petit vrac d'outils
  • jq un command line processor pour json comme du sed, grep ou awk
  • Capstone : lib pour desassembler du code ARM, ARM64, Mips, PowerPC, x86 
  • uncrustify : pour mettre en forme du code 
  • jq : comme sed pour json

jeudi 8 décembre 2016

SVN to GIT Automate

SVN to GIT automate
Very short article to explain how i would like to automate migration from svn repository to git one.
To test my process i'll use svn tree from boswar game.

But, as all is already done with script from Atlassian, this article becomes just a link to their site.

Note: It is necessary to use svn or http protocol to do migration.


Alternative:
Using John Albin's work who wrote this article about conversion



dimanche 24 janvier 2016

Virtualisation part 6: deux Vm et ballooning

   Objectifs

Démarrage des deux VMs installées et ballooning.

   Démarrage

Nous lançons qemu et nous choisissons dans les menus de grub:
Xen 4.1.4
Debian GNU/Linux avec Xen 4.1.4 et Linux 3.2.73-dom
Nous nous loguons en tant que root.

   Vérifications

Avant d'aller plus avant, vérifiez que tout semble ok par:
$ xl list

La commande devrait vous retourner un petit tableau dans lequel apparaît des informations sur Domain-0. Ok ?
 
Autre vérification, la commande:
$ ls /etc/xen/vm*

Devrait vous retourner deux noms de fichiers /etc/xen/vm1.cfg et /etc/xen/vm2.cfg

Tout est ok ?

Dernière vérification, la commande:
$ grep ^memory /etc/xen/vm*

Devrait  renvoyer:
/etc/xen/vm1.cfg: memory      = 1024
/etc/xen/vm2.cfg: memory      = 1024

Toujours ok ?

Si ce n'est pas le cas... aïe ! Je pense qu'il vous faut reprendre des étapes des articles précédents.

   Démarrage VM1

C'est parti démarrons la 1ère VM:
$ xl create /etc/xen/vm1.cfg

La commande:
$ xl list 

Présente maintenant un tableau enrichi des informations de la vm que nous venons de démarrer.

En particulier nous voyons qu'elle dispose de 1024Mo de mémoire vive. Au passage,  notez que nous n'avons pas joué avec SMP et que la machine virtuelle ne dispose que d'un CPU virtuel (vcpu).
 

   Connexion à la vm1

Connectons nous maintenant à la VM1 que nous venons de démarrer, pour cela:
$ xl console vm1

Selon le temps pris entre la commande de démarrage et cette précédente commande, vous devriez arriver dans la vm1 soit durant son démarrage, soit sur le prompt de login. Dans le 1er cas, veuillez attendre le prompt de login.
Une fois au prompt de logi, vous vous connectez en tant que root selon le mot de pass que vous avez renseigné lors de l'installation.

Vous pouvez ensuite afficher la mémoire disponible attribuée à cette vm par:
$ free -m

 Personnellement, cela m'affiche 996mo de mémoire totale pour 944mo de mémoire libre.

Quittons cette vm1 pour revenir au dom0. Pour cela, il faut utiliser la combinaison de touches: ctrl + alt gr + ]

Une fois de retour dans Dom-0, vous pouvez afficher les états par:
$ xl list

   Ballooning

Afin de démarrer la seconde VM, nous allons prendre de la mémoire à la VM1. C'est donc ici qu'entre en jeu le ballooning. Pour cela rien de plus simple:
$ xl mem-set vm1 128

Nous venons de demander à la vm1 de réduire sa mémoire à 128Mo. Ce que nous pouvons constater par un :
$ xl list

Retournons dans la vm1 par:
$ xl console vm1

Et là, nous pouvons afficher la mémoire disponible de la vm1 pour constater que sa mémoire a bien diminuée:
$ free -m

Dans ma configuration, je lis qu'elle dispose de 100mo au total dont 48mo de libre.

   Lancement de la seconde VM

Retour au Dom0 par ctrl + alt gr + ]  pour le lancement de la seconde VM.

Comme pour la première il suffit d'exécuter:
$ xl create /etc/xen/vm2.cfg

Avec la commande:
$ xl list 

Nous avons désormais un tableau avec les informations du Dom0 et des deux vms que nous avons démarrées.

Dans ma configuration, j'ai Dom0 avec 708mo, vm1 avec les 1287mo que je lui ai attribués et la vm2 avec 1024mo qui est la valeur de démarrage configurée dans le fichier /etc/xen/vm2.cfg.

Connexion à la vm2

Connectons nous à la VM2 que nous venons de démarrer, pour cela:
$ xl console vm2

Tout comme pour la 1ère, il faut attendre le prompt de connexion pour se loguer en tant que root.

Avec la commande free -m je lis, dans ma vm2, un total de 996mo pour 949mo de libre.

Voilà, nous avons démarré deux vm sous Xen et nous avons fait un peu de ballooning pour basculer de la mémoire RAM de l'une à l'autre.

Quelques explications concernant le ballooning dans le dernier article; et aussi, car j'en avais parlé, des infos pour la configuration réseau...

Virtualisation part 5: Installer les machines virtuelles (DomU)

  Objectifs

Installation des machines virtuelles (ou DomµU) vm1 et vm2.

   Démarrage

Nous lançons qemu et nous choisissons dans les menus de grub:
Xen 4.1.4
Debian GNU/Linux avec Xen 4.1.4 et Linux 3.2.73-dom

Nous nous logguons en tant que root et nous montons  diskB (voir article 2) dans le répertoire /mnt de la machine qemu par:
$ mount /dev/sdb /mnt

  Xen-tools

Afin de faciliter l'installation du Dom-U, nous allons utiliser un outil bien pratique, les xen-tools.
Comme l'installation actuelle n'est pas faite via les paquets Debian, je ne passe pas par apt-get afin de télécharger le paquet xen-tools qui va bien.

Je vais télécharger les sources et les installer directement.
$ cd /mnt
$ wget http://xen-tools.org/software/xen-tools/xen-tools-4.3.1.tar.gz
$ tar xzf xen-tools-4.3.1.tar.gz
$ cd xen-tools-4.3.1
$ make install


Note: Suivant les mises à jour de xen-tools, il vous faudra peut être aller chercher une autre version plus récente du lien que j'indique ci-dessus pour le wget.

  Packages perl and co...

J'installe les packages :
$ apt-get install -y  libtext-template-perl
$ apt-get install -y  libfile-slurp-perl
$ apt-get install -y debootstrap

$ apt-get install -y btrfs-tools

$ apt-get install -y cfengine2
$ apt-get install -y libconfig-inifiles-perl
$ apt-get install -y  libexpect-perl
$ apt-get install -y reiserfsprogs
$ apt-get install -y rinse
$ apt-get install -y xfsprogs

  Pont réseau

J'y pense, il nous faut installer un pont réseau. Pour cela, rien de très compliqué:
 
$ brctl addbr xenbr0

  Répertoire des disques des VM

Créons le répertoire où seront stockés les disques virtuels (root file system et swap) des VMs:
$ mkdir /home/xen

  La commande magique xen-create-image

Voici  la commande qui va créer la vm1 avec la configuration suivante:
  • adresse IP = 192.168.0.1 via bridge xenbr0 de dom0,
  • 4Go de disque dur virtuel,
  • 512Mo de swap,
  • 1024Mo de mémoire vive,
  • kernel linux 3.2.73,
  • root file system construit sur la wheezy,
  • les disques virtuels étant stockés en /home/xen/domains/vm1
 
$ xen-create-image --hostname=vm1 --ip=192.168.0.1 \
 --kernel=/boot/vmlinuz-3.2.73-dom \
--memory=1024M --passwd --size=4G --swap=512M --bridge=xenbr0  \
--dist=wheezy --dir=/home/xen

L'option --passwd vous permet de saisir le mot de passe root durant l'installation.
Un problème ?! Dans le fichier de configuration généré, le paramètre de configuration de la mémoire n'est pas bien formaté.
Il faut modifier la ligne mémoire.

  La seconde VM

Mais créons d'abord la second VM, nous corrigerons par la suite.

$ xen-create-image --hostname=vm2 --ip=192.168.0.2 \
 --kernel=/boot/vmlinuz-3.2.73-dom \
--memory=1024M --passwd --size=4G --swap=512M --bridge=xenbr0  \
--dist=wheezy --dir=/home/xen

  Correction des fichiers de conf

Maintenant corrigeons le problème des fichiers de configuration des vms. Ces fichiers se trouvent en /etc/xen.
$ sed "s/'1024M'/1024/g" /etc/xen/vm?.cfg -i

  Merge work and qcow

Voilà, si tout s'est bien passé, les deux VMs sont installées. Je vous propose de merger votre disque de travail avec le disque qcow de référence.
Pour cela, vous quittez qemu par:
$ halt

Puis, une fois que la machine virtuelle est arrêtée, sur votre PC hôte faire:
$ qemu-img  commit  xendeb2.qcow

Nous allons tout redémarrer et faire un peu de ballooning... au prochain article.

samedi 23 janvier 2016

Virtualisation part 4: génération et installation de Xen

  Objectifs

Sous qemu génération et installation de Xen.

   Démarrage

Nous lançons qemu et nous choisissons le kernel linux-3.2.73 dans le menu grub. Nous nous logguons en tant que root et nous montons  diskB (voir article 2) dans le répertoire /mnt de la machine qemu par:
$ mount /dev/sdb /mnt

  Génération et installation de Xen

Afin de générer Xen, il nous faut installer les packages suivants:
$ apt-get install -y  build-essential
$ apt-get install -y  bcc bin86 gawk bridge-utils iproute libcurl3 

$ apt-get install -y  libcurl4-openssl-dev bzip2 module-init-tools transfig tgif
$ apt-get install -y  texinfo texlive-latex-base texlive-latex-recommended

$ apt-get install -y  texlive-fonts-extra texlive-fonts-recommended
$ apt-get install -y  pciutils-dev mercurial
$ apt-get install -y  make gcc libc6-dev zlib1g-dev python python-dev 

$ apt-get install -y  python-twisted libncurses5-dev patch libvncserver-dev
$ apt-get install -y  libsdl-dev libjpeg62-dev
$ apt-get install -y  iasl libbz2-dev e2fslibs-dev git-core uuid-dev ocaml 

$ apt-get install -y  ocaml-findlib libx11-dev bison flex xz-utils libyajl-dev
$ apt-get install -y  gettext libpixman-1-dev libaio-dev markdown pandoc
$ apt-get install -y  libc6-dev-i386


Ensuite, nous pouvons entrer dans le répertoire où nous avons décompressé les sources de Xen.
$ cd /mnt/xen-4.1.4

Et démarrer les générations:
$ make -j 4 world
$ make -j 4 tools

Une fois que tout est généré, il faut installer Xen:
$ make install-xen && make install-tools

Puis, nous allons mettre à jour grub afin que Xen soit accessible dans les options de boot.
$ cd boot; update-grub2

Nous allons redémarrer la machine qemu et choisir dans les menus de grub:
Xen 4.1.4
Debian GNU/Linux avec Xen 4.1.4 et Linux 3.2.73-dom
 
Pour cela, simplement rebootez:
$ reboot

Et faites les bons choix dans les menus de grub...

  Mise à jour de ld.conf et démarrage des démons Xen

Il est nécessaire de mettre à jour les chemins du linker dynamic afin que les outils de Xen soient utilisables.

Pour cela, avec votre éditeur préféré (vi ou nano), créez un fichier /etc/ld.so.conf.d/xen.conf dans lequel vous enregistrez la ligne ci-dessous:
/usr/lib64

Ceci fait, provoquez une mise à jour des liens par:
$ ldconfig

Enfin, vous pouvez démarrer les démons Xen par:
$ /etc/init.d/xencommons start

Note: afin d'activer par défaut le chargement du daemon xencommons:
$ update-rc.d xencommons defaults

  Vérification...

Si tout est ok, vous devriez pouvoir faire:
$ xl list

Et obtenir en retour   un petit tableau indiquant que seul le Dom0 est présent.

  Merge work and qcow

 Si tout est ok, je vous propose de merger votre disque de travail avec le disque qcow de référence.
Pour cela, vous quittez qemu par:
$ halt

Puis, une fois que la machine virtuelle est arrêtée, sur votre PC hôte faire:
$ qemu-img  commit  xendeb2.qcow

Prochaine étape, nous installons un Dom-U...

samedi 16 janvier 2016

Virtualisation part 3: générer linux et l'installer sous Qemu

Virtualisation part3

Qemu, linux, Xen et Ballooning

 

  Objectifs

Sous Qemu, génération du noyau linux et installation.

  Installation de packages

J'y pense, il serait certainement utile d'installer gcc, make, ... Sauf qu'actuellement, la gestion de paquets du Dom0 ne permet d'accéder qu'au CD 1 de la Debian installée.

Une fois qemu démarré, se logguer en root.

Nous allons mettre à jour les sources de mise à jour. Pour cela, en utilisant vi ou nano selon votre convenance, il faut modifier le fichier /etc/apt/sources.list

Tout d'abord commenter la ligne où se trouve: deb cdrom:...
Pour commenter il faut ajouter # en début de ligne.

Ensuite, plus bas dans le fichier, il faut décommenter les lignes:
# deb http:..... wheezy-updates main
# deb-src http:..... wheezy-updates main

Pour cela, il faut ôter les # en début de ligne.
Second point, il faut enlever -updates sur ces mêmes deux lignes pour ne garder que wheezy main

Ok, c'est fait ? Vous sauvegardez et vous utilisez aptitude pour mettre à jour la base de données:
$ aptitude update


Note: Si vous avez besoin de configurer un proxy, il vous faut, en console, exporter les variables d'environnements http_proxy et ftp_proxy:
$ export  http_proxy="http://<ip votre proxy>:<port votre proxy>"
$ export  ftp_proxy="http://<ip votre proxy>:<port votre proxy>"

 

  Environnement de développement

Allez, c'est l'heure de la mise à jour... Faire:
$ apt-get install  -y gcc make ncurses-dev

 

 Génération linux kernel


Je vais compiler le noyau linux pour le DomU. Pour cela, je monte le disque B que je vois sous /dev/sdb lorsque je fais:
$ lsblk

je fais le montage puis je vais dans les sources linux:
$ mount /dev/sdb /mnt
$ cd /mnt/linux-3.2.73

J'y copie le fichier de configuration du noyau linux booté.
$ cp /boot/config-3.2.0-4-amd64 .config

puis le menu de configuration de linux:
$ make menuconfig

Dans la configuration linux je modifie le nom de mon kernel dans General setup / local version et j'ajoute -dom 

Je reviens au menu principal par <esc> et je vais charger en static les modules de filesystem classiques ext2, ext3 et ext4.  Ceci se fait dans File systems où il faut remplacer les <M> par <*> pour Second extended fs support, Ext3... et The Extended 4...

Et go pour la génération:
$ make -j 4  

Note: j'ai eu un plantage qemu pendant la génération. Enfin, je n'étais pas devant mon pc alors je ne sais pas trop ce qui est arrivé. J'ai relancé avec un make -j 3, mais bon...

 

  Installation linux kernel

Une fois compilé,un petit coup de :
$ make modules_install && make install

Une fois cela fait, grub est mis à jour afin de pouvoir sélectionner le noyau fraîchement compilé lors du boot.

Nous pouvons arrêter qemu:
$ halt

 

 Commit du disque de travail

Maintenant que cette étape est effectuée avec succès et afin de ne pas perdre les modifications faites sur le disque dur de travail, nous allons commiter (fusionner) les modifications du disque de travail sur le disque orignial.

Pour cela, sur le PC hôte faire:
$ qemu-img  commit  xendeb2.qcow

Allez, au prochain article nous nous occupons de XEN ! ...

Virtualisation part 2: Préparer les sources de linux et Xen

  Objectifs

Linux est installé, nous préparons les sources à compiler et l'environnement.

  Options qemu

Rapidement parler des options qemu que j'utilise:

 -enable-kvm : comme mon PC est un x86_64 et que je n'émule pas sous qemu une autre architecture, j'utilise kvm pour la virtualisation matérielle,
  -cpu host : j'indique ici à qemu d'utiliser directement le type de cpu de mon PC,
 -smp 4 : je permets à qemu d'utiliser 4 coeurs,
 -m 2048 : je lui donne 2Go de mémoire,
 -hda xxx : le disque 1 sera xxx
 -hdb yyy : le disque 2 sera yyy


  Backing file

Maintenant que l'installation est faite de la Debian 7.8, je vais veiller à ne pas l'abîmer et pour cela rien de plus facile que d'utiliser un snapshot disque.

L'idée est de créer un nouveau disque qui est l'image du 1er mais qui ne contiendra que les modifications du travail qui va suivre.
Ainsi, si pb, le 1er disque est intact et il suffit de refaire une image de travail à partir de lui pour reprendre proprement.

Pour créer le backing, sur mon PC hôte:
$ qemu-img create -f qcow2 -b xendeb.qcow  xendeb2.qcow

xendeb2.qcow devient notre second disque sur lequel nous allons poursuivre les mises à jour.

 DiskB

Autre chose, je crée, sur mon PC hôte, un disqueB qui va me permettre de faciliter les transferts entre mon PC et linux sous qemu.
Je pourrai monter ce disque simplement dans un répertoire local sur mon PC et sous qemu.

Ok, je pouvais faire cela avec le disque qcow, mais je trouve pénible les montages en nbd même si c'est génial et bien pratique dans d'autres circonstances. Et oui aussi, je peux faire cela par réseau lorsque celui-ci sera configuré. A voir suivant mon humeur... :-)

Création du disque B:
$ truncate diskB.raw --size 32G

Je le formate en ext2:
$ sudo mkfs.ext2 diskB.raw

Et je le monte dans un répertoire mnt local (que je crée si nécessaire):
$ mkdir mnt
$ sudo mount diskB.raw mnt

Par la suite j’appellerai Bmnt le répertoire où je monte diskB.

Attention, il me faudra monter/démonter régulièrement ce disque afin de l'utiliser une fois dans mon environnement PC (hôte), une fois sous qemu.

 

  Script lancement qemu

Comme je n'ai pas envie de multiplier les commandes pour démarrer mon environnement qemu, j'écris un script shell go.sh:
#!/bin/bash
# I would like to test XEN Ballooning
#
#
DISKNAME=xendeb.qcow
DISKB=diskB.raw
WORKDISKNAME=xendeb2.qcow
RMWORK="TRUE"

# $1 $... - the message string
die()
{
  retcode=-1
  printf >&2 "%s\n" "$@"
  exit $retcode
}

while [ "$1" != "" ]; do
  if [ "$1" == "-no-rm" ]; then
    RMWORK="FALSE"
  else
    die "Unknown option $1. Only valid is -no-rm";
  fi
  shift
done

# working disk deletion
if [ "$WORKDISKNAME" == "" ]; then
  echo "No Work Disk used !!!";
else
  echo "Work Disk used !!!";
  if [ "$RMWORK" == "TRUE" -a -f $WORKDISKNAME ]; then
      echo "it is recreated"
      rm $WORKDISKNAME || die "$WORKDISKNAME deletion failed"
  else
      echo "it is not recreated"
  fi
fi

# Go go go
if [ "$WORKDISKNAME" != "" ]; then
  if [ ! -f $WORKDISKNAME ]; then
    qemu-img create -f qcow2 -b $DISKNAME $WORKDISKNAME
  fi
else
  WORKDISKNAME=$DISKNAME
fi
qemu-system-x86_64 -enable-kvm -cpu host -smp 4 -m 2048 -hda $WORKDISKNAME -hdb $DISKB
En deux mots, ce script va démarrer qemu avec un disque A (xendeb2.qcow) qui sera le disque de travail et un disque B (diskB.raw).

xendeb2.qcow est effacé à chaque démarrage (si l'option -no-rm n'est pas utilisée) et recréé comme backing file de xendeb.qcow. Nous repartons donc à chaque démarrage sur une image propre.

 

  Linux Vanilla

Je vais utiliser le diskB pour y placer les sources linux et xen que je vais utiliser pour les générations.

Tout d'abord, quelle est la version du noyau que j'ai installé via le CD Debian ?
Pour cela je regarde dans le fichier /boot/config-3.2.0-4-amd64 sous qemu. Donc je lance la machine virtuelle qemu en utilisant mon script:

$ go.sh

Une fois qemu démarré et le linux booté, je me loggue comme root et un simple head me permet d'afficher la 1ère ligne du fichier où se trouve la version exacte du noyau:
$ head /boot/config-3.2.0-4-amd64

Je lis sur la troisième ligne qu'il s'agit d'un 3.2.73. Je vais donc le chercher dans les archives du noyau:
https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.2.73.tar.xz

Et j'arrête ma machine qemu:
$ halt

Sur mon PC hôte, je télécharge donc les sources d'un kernel linux. Et je le décompresse dans Bmnt:
$ cd Bmnt
$ sudo tar xJf ~/Téléchargements/linux-3.2.73.tar.xz

   Source Xen

Pendant que j'y suis, je vais aussi y placer les sources de Xen 4.1.4:
http://www.xenproject.org/downloads/xen-archives/supported-xen-41-series/xen-414.html

Une fois téléchargées sur le site précédent,  je les décompresse dans Bmnt:
$sudo tar xzf ~/Téléchargements/xen-4.1.4.tar.gz


Voilà pour cette partie deux. Pour la suite nous allons passer sous qemu pour compiler tout ce petit monde...