30 mars 2012

Stop Disable Remove

Je défends l’idée que d’ajouter des couches de sécurité, et donc d’avoir plus de code en mémoire, n’est pas une garantie de plus de sécurité. Je préfère ne faire tourner que le strict minimum, correctement configuré et à jour.

Donc, après une installation de Linux je désactive systématiquement SELinux, iptables, ipv6 et les applications inutiles telles que sendmail.
systemctl stop sendmail
systemctl disable sendmail

systemctl stop iptables
systemctl disable iptables

systemctl stop ip6tables
systemctl disable ip6tables

systemctl stop firewalld
systemctl disable firewalld
Pour désactiver SELinux éditer /etc/selinux/config pour remplacer cette ligne :
SELINUX=enforcing
par celle ci :
SELINUX=disabled
Verifier l'etat avec
sestatus

Après le reboot il doit afficher
SELinux status:                 disabled

Pour désactiver ipv6, ajouter ces 4 lignes au fichier /etc/sysctl.conf
net.ipv6.conf.lo.disable_ipv6=1
net.ipv6.conf.all.disable_ipv6=1
net.ipv6.conf.default.disable_ipv6=1
net.ipv6.conf.enp2s0.disable_ipv6
Remplacer enp2s0 par le nom de l'interface sur la quelle vous voulez désactiver ipv6.

Utiliser la commande  find /proc/sys/net/ipv6 -name disable_ipv6 pour trouver tous les flags pouvant être utilisés


Une partie de IPv6 est maintenant intégrée au noyau, la désactivation n'est donc jamais complète.

Je vérifie qu’il n’y que les services nécessaires qui acceptent des connections.
 netstat –nat
Je vérifie de n’avoir sur le disque que des applications utiles
yum list installed
Je supprime celles qui sont inutiles
yum erase sendmail procmail
Je met a jour celles qui restent

yum update
Enfin, pour que les modif dans les fichier de conf soient prises en compte:
shutdown -r now            # -r pour reboot

IMPORTANT:  Ce travail au niveau de Linux doit aussi être fait aussi au niveaux d'applications comme Apache qui, par défaut, chargent trop de modules inutiles.


 


26 mars 2012

Paradoxe de Borda

PREALABLE

Ceci n'est pas une discussion sur la fiabilité des sondages mais sur un paradoxe soulevé par Bordas et repris par Condorcet (les sondages n’existaient pas à leur époque). Le paradoxe présenté ici ne fait que rajouter à la complexité d’interprétation des sondages.

Ce qui suit peut s’appliquer à tous types de choix ; qu’il s’agisse de choisir un président de la république, un sous-traitant, un projet à financer ect…  J’utiliserai le vocabulaire des élections (candidats, électeurs, voix) mais ce n’est pas une exigence.

ETABLIR  LES  PREFERENCES

Posons la question suivante à tous les électeurs et supposons que tous les électeurs répondent honnêtement.
« Parmi ces 3 candidats A, B, C pour lequel voteriez vous ? »
On note la réponse de l’électeur, puis on lui repose la question en éliminant de la liste celui qu’il vient de choisir. Ainsi, pour chaque électeur on obtient un classement des 3 candidats.

Exemple :
Q1) Votre choix entre « A, B, C » ?
R2) B.
Q2) Votre choix entre « A, C » ?
R2) A.
Pour cet électeur le classement est donc : B, A, C (ligne 3 dans les tableaux ci-dessous)

NOTES: Avec 3 candidats il y a 6 combinaisons possibles. De manière générale avec n candidats il y a factorielle(n) combinaisons, ce qui croit très vite : 3 candidats 6 combinaisons, 4 candidats 24 combinaisons … 11 candidats 39 916 800 combinaisons. Pour des raisons de facilité j’en reste à 3 candidats mais avec des programmes on peut simuler sans problèmes des millions de combinaisons. Notez qu’avec 12 candidats il y a plus de combinaisons que d’électeurs en Europe !

Imaginons que les préférences des électeurs établissent le classement suivant :

    combinaisons      voix
1    A    B    C       2 %
2    A    C    B      37 %
3    B    A    C       5 %
4    B    C    A      27 %
5    C    A    B       3 %
6    C    B    A      26 %

ANALYSE

39% des électeurs ont mis A en tête (lignes 1 et 2)
32% des électeurs ont mis B est en tête (lignes 3 et 4)
29% des électeurs ont mis C est en tête (lignes 5 et 6)


Notez que ces trois pourcentages sont exactements les même que dans le paradoxe de Condorcet.

Dans un système à deux tours, comme la présidentielle en France, A et B seraient sélectionnés pour le second tour.

Analysons les préférences en prenant les candidats deux à deux.


  1. A face à B : B l’emporte, paradoxalement, avec 58% des voix.
    Le candidat A recevra les voies des combinaisons où il est classé avant B,
    c’est à dire les lignes 1, 2, 5. Soit 2% + 37% + 3% = 42%
    Le candidat B recevra les voies des combinaisons où il est classé avant A,
    c’est à dire les lignes 3, 4, 6. Soit 5% +27% + 12% = 58% 

     
  2. B face à C : C l’emporte, paradoxalement, avec 66% des voix.
    Le candidat B recevra les voies des combinaisons où il est classé avant C,
    c’est à dire les lignes 1, 3, 4. Soit 2% + 5% +27% = 34%
    Le candidat C recevra les voies des combinaisons où il est classé avant B,
    c’est à dire les lignes 2, 5, 6. Soit 37% + 3% + 26% = 66%

     
  3. A face à C : C l’emporte, paradoxalement, avec 56% des voix.
    Le candidat A recevra les voies des combinaisons où il est classé avant C,
    c’est à dire les lignes 1, 2, 3. Soit 2% + 37% + 5% = 44%
    Le candidat C recevra les voies des combinaisons où il est classé avant A,
    c’est à dire les lignes 4, 5, 6. Soit 27% + 3% + 26% = 56%

     

PARADOXE  DE  BORDA

Paradoxalement, le vainqueur du premier tour perd en tête à tête face aux autres candidats. Ici le résultat des tête à tête est l'exact opposé du classement général : C'est le paradoxe de Borda. 

L'ordre, d'aprés les 3 tête à tête, est C, B, A. Contraitement au paradoxe de Condorcet, la transitivite des tête à tête est respectée. Pourtant on ne retrouve pas cette logique dans le classement quand on compares les 3 candidats sur un seul tour.

Le vainqueur de l'ensemble des tête à tête (ici C) est appelé "vainqueur de Condorcet". C'est  celui qui est préféré à tout autre. Mais ce vainqueur n'existe pas toujour : c'est le paradoxe de Condorcet.

Paradoxe de Condorcet

PREALABLE

Ceci n'est pas une discussion sur la fiabilité des sondages mais sur un paradoxe soulevé par Condorcet (les sondages n’existaient pas à son époque). Le paradoxe présenté ici ne fait que rajouter à la complexité d’interprétation des sondages.

Ce qui suit peut s’appliquer à tous types de choix ; qu’il s’agisse de choisir un président de la république, un sous-traitant, un projet à financer ect…  J’utiliserai le vocabulaire des élections (candidats, électeurs, voix) mais ce n’est pas une exigence.

ETABLIR  LES  PREFERENCES

Posons la question suivante à tous les électeurs et supposons que tous les électeurs répondent honnêtement.
« Parmi ces 3 candidats A, B, C pour lequel voteriez vous ? »
On note la réponse de l’électeur, puis on lui repose la question en éliminant de la liste celui qu’il vient de choisir. Ainsi, pour chaque électeur on obtient un classement des 3 candidats.

Exemple :
Q1) Votre choix entre « A, B, C » ?
R2) B.
Q2) Votre choix entre « A, C » ?
R2) A.
Pour cet électeur le classement est donc : B, A, C (ligne 3 dans les tableaux ci-dessous)

NOTES: Avec 3 candidats il y a 6 combinaisons possibles. De manière générale avec n candidats il y a factorielle(n) combinaisons, ce qui croit très vite : 3 candidats 6 combinaisons, 4 candidats 24 combinaisons … 11 candidats 39 916 800 combinaisons. Pour des raisons de facilité j’en reste à 3 candidats mais avec des programmes on peut simuler sans problèmes des millions de combinaisons. Notez qu’avec 12 candidats il y a plus de combinaisons que d’électeurs en Europe !

Imaginons que les préférences des électeurs établissent le classement suivant :

    combinaisons      voix
1    A    B    C      37 %
2    A    C    B       2 %
3    B    A    C       5 %
4    B    C    A      27 %
5    C    A    B      17 %
6    C    B    A      12 %

ANALYSE

39% des électeurs ont mis A en tête (lignes 1 et 2)
32% des électeurs ont mis B est en tête (lignes 3 et 4)
29% des électeurs ont mis C est en tête (lignes 5 et 6)
 

Notez que ces trois pourcentages sont les mêmes que dans le paradoxe de Borda.

Dans un système à deux tours comme la présidentielle A et B seraient sélectionnés pour le second tour.

Analysons les préférences en prenant les candidats deux à deux.


  1. A face à B : A l’emporte, logiquement, avec 56% des voix.
    Le candidat A recevra les voies des combinaisons où il est classé avant B,
    c’est à dire les lignes 1, 2, 5. Soit 37% + 2% + 17% = 56%
    Le candidat B recevra les voies des combinaisons où il est classé avant A,
    c’est à dire les lignes 3, 4, 6. Soit 5% +27% + 12% = 44%

  2. B face à C : B l’emporte, logiquement, avec 69% des voix.
    Le candidat B recevra les voies des combinaisons où il est classé avant C,
    c’est à dire les lignes 1, 3, 4. Soit 37% + 4% +27% = 69%
    Le candidat C recevra les voies des combinaisons où il est classé avant B,
    c’est à dire les lignes 2, 5, 6. Soit 2% + 17% + 12% = 31%

  3. A face à C : C l’emporte, paradoxalement, avec 56% des voix.
    Le candidat A recevra les voies des combinaisons où il est classé avant C,
    c’est à dire les lignes 1, 2, 3. Soit 37% + 2% + 4% = 44%
    Le candidat C recevra les voies des combinaisons où il est classé avant A,
    c’est à dire les lignes 4, 5, 6. Soit 27% + 17% + 12% = 56%

PARADOXE  DE  CONDORCET

Paradoxalement, le vainqueur du premier tour perd face à celui qui serait éliminé au premier tout !!  

En maths on dit que la transitivité n’est pas respectée. La transitivité c’est ce qui dit que : Si A pèse plus lourd que B et que B pèse plus lourd que C alors A pèse plus lourd que C. Le poids permet d’établir une relation transitive entre les personnes. Pas le vote !

Ce n’est pas l’absence de cette logique qui est la cause de ce paradoxe. Borda a montré que même avec des tête à tête transitifs on n’obtenait pas toujours un classement à un tour représentant cette logique.

Trucs pour virsh

Voici 3 conseils pour utiliser la commande virsh console

1) Comme cela vous est gentiment dit en début de session
Escape character is ^]
Le problème c’est que sur un clavier français CTRL + ] ne marche pas.
En fait l’équivalent de  CTRL + ]  est  CTRL + $.

2) Ne pas établir plusieurs sessions avec la même machine virtuelle en même temps. Vous obtiendrez des affichages incohérents dans toutes les sessions. En fait les caractères affichés sont dispatchés aléatoirement vers les différentes sessions ouvertes.

3) Quand on établie une session avec une machine virtuelle on prend le contrôle de la console dans l'état où elle est. On peut couper la session (avec CTRL + $), et la reprendre plus tard dans l’état où on l’a laissé. Le fait de couper la session ne provoque pas un logout. . (Un peut comme avec la commande screen)

Conséquence:
Dans le cas où la machine virtuelle est en attente du login le fait de s'y connecter à ce moment là ne fera pas apparaitre le prompt « login : »,. Donc on pourrait taper le nom d’utilisateur puis Enter, là on obtiendrait le prompt password et on continuerait comme d’habitude.

# virsh console vm1
Connected to domain vm1
Escape character is ^]
root
Password:
Last login: Mon Mar 26 01:08:45 on ttyS0
[root@localhost ~]#

Vous trouverez parfois le très mauvais conseil suivant :
« Taper sur la touche Enter pour faire apparaitre le prompt du login »
En effet, si vous ne tapez que sur la touche Enter sans avoir taper un nom d’utilisateur le prompt du login se réaffiche. Mais ceci est très dangereux !!

Que ce passerait il si, au lieu d’attendre le login, la machine virtuelle avait déjà un shell ouvert avec cette ligne de commande : « rm –rf / »
En appuyant aveuglement sur Enter vous valideriez l’effacement de tous les fichiers !!

Voila pourquoi il ne faut jamais taper sur Enter ‘pour faire apparaitre le prompt’. Il faut toujours commencer par CRTL+C pour annuler l’éventuelle commande en cours.
Si un shell est en cour il annulera l’éventuelle commande et réaffichera son prompt.

Si le CRTL+C ne provoque rien tapez CTRL+D. Dans le cas d’un login cela relance la procédure au début avec un nouveau prompt.


24 mars 2012

Virtualisation avec FEDORA

Si à la base on a un serveur à la hauteur on constate très vite qu'il est plus souple de gérer des machines virtuelles que des serveurs réels. Voici comment configurer le serveur hôte (le serveur réel) puis comment créer un serveur virtuel. Tout ceci a été testé avec Fedora 16 noyau  3.3.0-4.fc16.i686.PAE puis Fedora 18 noyau 3.8.9-200.fc18.x86_64

A: VÉRIFICATIONS


1) Vérification du processeur
grep -E 'vmx|svm' /proc/cpuinfo
Si rien ne s’affiche inutile de continuer car le processeur ne permet pas la virtualisation.
 
2) Installation des packages utiles
yum groupinstall Virtualisation

3) Vérification de la configuration logiciel

lsmod | grep kvm
Doit afficher un truc comme ca
  kvm_intel      126394  0
  kvm            346342  1 kvm_intel

sinon essayer
modprobe kvm 

modprobe kvm-intel   (ou modprobe kvm-amd)

FC16> /etc/init.d/libvirtd status
 
FC18> systemctl status libvirtd
Doit afficher ce type d'information
libvirtd.service - LSB: daemon for libvirt virtualization API
         Loaded: loaded (/etc/rc.d/init.d/libvirtd)
         Active: active (running) since Mon, 19 Mar 2012 16:25:13
        Process: 2131 ExecStart=/etc/rc.d/init.d/libvirtd start
       Main PID: 2137 (libvirtd)
         CGroup: name=systemd:/system/libvirtd.service
                 2137 libvirtd --daemon
                 2187 /usr/sbin/dnsmasq --strict-order ...
 
sinon essayer
/etc/init.d/libvirtd stop    (FC18> systemctl stop libvirtd)
/etc/init.d/libvirtd start   (FC18> systemctl start libvirtd)



virsh -c qemu:///system list
Doit donner une liste vide:
Id Name                 State
----------------------------------

ifconfig
Doit afficher, en plus des interfaces normales, l'interface virbr0

virbr0    Link encap:Ethernet  HWaddr 52:54:00:AB:EA:FD 
         inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0
         UP BROADCAST MULTICAST  MTU:1500  Metric:1
         RX packets:0 errors:0 dropped:0 overruns:0 frame:0
         TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
         collisions:0 txqueuelen:0
         RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

Ceci est signe que la configuration de base est en place mais on n’utilisera pas virbr0. On va même le retirer pour le remplacer par une interface Bridge.

B: CONFIGURATION RÉSEAU (HOST)

NOTES:
- Depuis Fedora 15 les interfaces ethernet sont nommées em1 em2 ect... à la place de eth0 eth1 .... Dans ce qui suit remplacer em1 par eth0 si vous avez une interface nommée eth0.

- BOOTPROTO=static   est la même chose que   BOOTPROTO=none
- NETMASK ou PREFIX (deux méthodes pour fixer le réseaux/host)
- DOMAIN  ou SEARCH (deux méthodes pour fixer le domaine par défaut) 
 
1) Désactiver NetworkManager
/etc/init.d/NetworkManager stop
chkconfig NetworkManager off

 
2) Activer le démarrage classique du réseau
chkconfig --levels 35 network on
/etc/init.d/network restart


3) Rebooter (en ayant la machine à porté de main ;-) pour vérifier que le réseau fonctionne.


4) Configurer l'interface bridge br0

Créer le fichier /etc/sysconfig/network-scripts/ifcfg-br0 en reprenant les valeurs de ifcfg-em1

DEVICE=br0
TYPE=Bridge
ONBOOT=yes
BOOTPROTO=none
IPADDR=<ip de ifcfg-em1>
PREFIX=<valeur de ifcfg-em1>
GATEWAY=<ip de ifcfg-em1>
DNS1=<ip de ifcfg-em1>
DNS2=<ip de ifcfg-em1>
SEARCH=<nom de ifcfg-em1>


5) Reconfigurer l'interface ethernet em1
Modifier /etc/sysconfig/network-scripts/ifcfg-em1 pour avoir

DEVICE=em1
TYPE=Ethernet
ONBOOT=yes
HWADDR=xx:xx:xx:xx:xx:xx
#### valeurs déplacées dans le bridge
# BOOTPROTO=none
# IPADDR=xxx.xxx.xxx.xxx
# PREFIX=xx
# GATEWAY=xxx.xxx.xxx.xxx
# DNS1=xxx.xxx.xxx.xxx
# DNS2=xxx.xxx.xxx.xxx
# SEARCH=xxxxxxx.xxx
####
NM_CONTROLLED=no
DEFROUTE=yes
IPV4_FAILURE_FATAL=yes
IPV6INIT=no
BRIDGE=br0
 


ATTENTION: Avec FC18 le paramètre GATEWAY est ignoré dans les fichiers ifcg-xxxx. Il faut le placer dans  /etc/sysconfig/network. 

6) Redémarrer le réseau ou rebooter.
/etc/init.d/network restart
 
7) Vérifier les interfaces et les routes
On doit voir apparaitre br0
ifconfig
br0      Link encap:Ethernet  HWaddr 50:E5:49:20:A3:16 
         inet addr:xx.xx.xx.xx  Bcast:xx.xx.xx.255  Mask:255.255.255.0
         inet6 addr: fe80::xxxx:xxxx:xxxx:xxxx/64 Scope:Link

em1      Link encap:Ethernet  HWaddr 50:E5:49:20:A3:16 
         inet6 addr: fe80::xxxx:xxxx:xxxx:xxxx/64 Scope:Link

lo       Link encap:Local Loopback 
         inet addr:127.0.0.1  Mask:255.0.0.0
         inet6 addr: ::1/128 Scope:Host

virbr0   Link encap:Ethernet  HWaddr 52:54:00:AB:EA:FD 
         inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0

Vérifier les routes avec la commande route
Destination    Gateway      Genmask        Flags Metric Ref  Use Iface
default        xx.xx.xx.xx  0.0.0.0        UG    0      0      0 br0
link-local     *            255.255.0.0    U     1003   0      0 br0
192.168.122.0  *            255.255.255.0  U     0      0      0 virbr0
xx.xx.xx.0     *            255.255.255.0  U     0      0      0 br0

8) Supprimer virbr0 et utiliser br0 par défaut.

Par défaut le réseau utilisé pour communiquer avec les machine virtuelle s'appelle 'defaut'
Il est définit dans le fichier /etc/libvirt/qemu/networks/default.xml
Et doit ressembler a ceci:
<network>
  <name>default</name>
  <uuid>ea588191-e2b0-459a-92f8-f89cea306984</uuid>
  <bridge name="virbr0" />
  ect...
</network>
On va en construire un autre: /etc/libvirt/qemu/networks/host-bridge.xml
contenant:
<network>
  <name>host-bridge</name>
  <uuid>d78fe37d-5723-27cb-102e-73386878f36d</uuid>
  <forward mode='bridge'/>
  <bridge name='br0' />
</network>

Maintenant on peut désactiver le réseau 'defaut' qui utilise virbr0
virsh net-destroy   default
virsh net-autostart default  --disable


Et activer notre réseaux 'host-bridge' qui utilise br0
virsh net-define    host-bridge.xml
virsh net-autostart host-bridge
virsh net-start     host-bridge

Vérifier que tout est ok:
virsh net-info host-bridge 
Name           host-bridge
UUID           d78fe37d-5723-27cb-102e-73386878f36d
Active:        yes
Persistent:    yes
Autostart:     yes
Bridge:        br0


Vérifier avec ifconfig et route que virtbr0 n'apparait plus. 

C: Installation de la machine virtuelle

ATTENTION
** Suite a une limitation du programme virt-install il n’est pas possible d’installer en mode texte autrement qu’en prenant la source via l'option --location.  (En pratique ce n'est pas un problème)


** L’installation en mode texte ne permet pas de partitionner soit même. On est limité au partitionnement standard. (C'est rarement un  problème)

** Il faut au minimum 800MB de ram pour installer Fedora 16 (même en mode texte!). Si nécessaire on pourra par la suite diminuer cette valeur avant d’exécuter la machine virtuelle en éditant le fichier xml de configuration de cette machine.


** avoir son terminal en mode UTF8 pour avoir les cadres texte.



Insérez le dvd de Fedora 16 dans votre lecteur de dvd puis :

mkdir /mnt/cdrom
mount /dev/cdrom1 /mnt/cdrom

La commande pour créer une machine virtuelle est (en une seule ligne)

virt-install \
-n vm1 \
-r 1024 \
--vcpus 1 \
--nographics \
--os-type linux \
--os-variant fedora16 \
--network bridge:br0 \
--location /mnt/cdrom \
--disk path=/dev/vg_srv0/lv_vm1 \
--extra-args 'console=tty0 console=ttyS0,115200n8 serial' \
--prompt

Si vous n'avez pas de DVD :
  • soit vous utilisez la version en ligne en donnant l'url comme paramètre de l'option --location :
    --location 'http://ftp.lip6.fr/ftp/pub/linux/distributions/fedora/releases/16/Fedora/i386/os'
     
  • soit vous telechargez la version iso avec wget
    wget http://ftp.lip6.fr/ftp/pub/linux/distributions/fedora/releases/17/Fedora/i386/iso/Fedora-17-i386-DVD.iso
    puis remplacez /mnt/cdrom par le path vers le fichier iso qui vient d'etre telechargé.

Pour des raisons de performances on utilise comme paramètre de --disk path=... un volume LVM (/dev/vg_srv0/lv_vm1) spécialement créé, plutôt qu'un fichier classique pour stoker le disque virtuel. Voir ce post pour plus d'info sur la gestion des volumes LVM.

La procédure d’installation commence ainsi :

Starting install...
Retrieving file .treeinfo...          | 1.8 kB     00:00 ...
Retrieving file vmlinuz...            | 7.8 MB     00:01 ...
Retrieving file initrd.img...         | 257 MB     00:38 ...
Creating domain...                    |    0 B     00:01    
Connected to domain vm1

Escape character is ^]
...attendre environ une minute ...
[0.000000] Initializing cgroup subsys cpuset
[0.000000] Initializing cgroup subsys cpu
[0.000000] Linux version 3.1.0-7.fc16.i686 (mockbuild@x86-11.phx2.fedoraproject.org) (gcc version 4.6.2 20111027 (Red Hat 4.6.2-1) (GCC) ) #1 SMP Tue Nov 1 21:00:16 UTC 2011
[0.000000] BIOS-provided physical RAM map:
[0.000000]  BIOS-e820: 0000000000000000 - 000000000009dc00 (usable)
ect...
[0.000000] Booting paravirtualized kernel on KVM
[0.000000] setup_percpu: NR_CPUS:32 nr_cpumask_bits:32 nr_cpu_ids:1 nr_node_ids:1
[0.000000] PERCPU: Embedded 13 pages/cpu @ee400000 s29504 r0 d23744 u4194304
[0.000000] kvm-clock: cpu 0, msr 0:2e406b01, primary cpu clock
[0.000000] KVM setup async PF for cpu 0
[0.000000] kvm-stealtime: cpu 0, msr 2e402240
[0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 259978
[0.000000] Kernel command line:  console=tty0 console=ttyS0,115200n8 serial
ect...
[0.022024] Brought up 1 CPUs
[0.022361] Total of 1 processors activated (6185.94 BogoMIPS).
ect...

Et on arrive à la procédure d’installation en mode texte:


ect...


et enfin...



On reboote...


et voila ! On obtient le prompt de la machine virtuelle :


Notez le (ttyS0) qui correspond au deuxième paramètre console de l'option --extra-args
--extra-args 'console=tty0 console=ttyS0,115200n8 serial'

D: Configuration reseau  (Guest)

Coté machine virtuelle le réseau est  configuré comme indiqué durant son installation mais le réseau  n'est pas activé au boot.

Si vous ne l'avez plus, retablir le lien avec la console de votre machine virtuelle
virsh console vm1

[voir ce post sur virsh et l'access à la concole d'une machine virtuelle]

Se loger en root sur la machine virtuelle et taper :
cat /etc/sysconfig/network-scripts/ifcfg-eth0

Note: Dans la machine virtuelle, même avec Fedora 16, l'interface ethernet s'apelle eth0, et non em1 comme dans la machine reelle...

Si la config est ok on peut la rendre active au boot :
chkconfig --level 35 network on

Puis rebooter la machine virtuelle
reboot
La machine virtuelle est maintenant accessible en ssh, comme une machine réelle.


E: START / STOP

Une fois les machines virtuelles crées on en trouve les traces dans le repertoire /etc/libvirt/qemu , avec un fichier xml par machine virtuelle et dans la liste des volumes logiques (si on a installé les machines virtuelles dans des volumes logiques)
lvdisplay | grep "LV Name"
Attention : il se peut que tous les volumes ne soient pas des machines virtuelles. Certains peuvent être ceux utilisés par la machine hôte.

Connaissant le nom d’une machine virtuelle (ici vm1) on peut la démarrer manuellement avec la commande :  
virsh -c qemu:///system start vm1

Si on veut qu’une machine nomée vm1 démarre quand la machine hôte boote faire :
virsh autostart vm1
Ceci créera un lien logique depuis /etc/libvirt/qemu/autostart/vm1.xml vers le fichier /etc/libvirt/qemu/vm1.xml

Si on ne veut plus que la machine virtuelle nomée vm1 démarre au boot de la machine hôte faire :
virsh autostart vm1 -–disable
Ceci detruira le lien logique.

Note: Le boot automatique des machines virtuelles n’est possible que si libvirtd est actif.
Pour l’activer utiliser la commande
 
chkconfig libvirtd on

Pour arreter proprement une machine virtuelle il suffit de faire

virsh shutdown vm1

Avec la console (virsh console vm1) on peut verifier le déroulement de l'arret de la machine.

ATTENTION : pour pouvoir faire un shutdown d’une machine virtuelle depuis l’hôte avec la commande « virsh shutdown vm1 » il faut deux choses :
1) Coté machine virtuelle il faut que le daemon acpid fonctionne (yum install acpid si nécessaire)
2) Coté hôte il faut que le fichier xml (/etc/libvirt/qemu/vm1.xml) décrivant la machine virtuelle contienne :
  <features>
    <acpi/>
    <apic/>
    <pae/>
  </features>


Perte de controle d'une machine virtuelle qui ne boote pas ? Commencez par ici...

Resize d'un volume LVM


Que faire si tous l'espace disque de votre système Linux est attribué et que vous ayez besoin de place pour créer un nouveau point de montage ou creer un nouveau périphérique ? Si vous avez pris soin d’installer votre système Linux en utilisant les volumes logiques (LVM ) vous pouvez garder espoir, sinon vous pouvez arrêter la lecture ici !.

Dans mon cas il me fallait récupérer de la place pour créer des devices qui seront ensuite utilisées pour y stoker des machines virtuelles. (C'est plus efficace que de stoker la machine virtuelle dans un gros fichier)

1) ANALYSE
Vérifiez la configuration avec la commande “vgdisplay
On obtient des infos sur chaque groupe (VG) ce qui correspond en gros aux ancienne partitions
.Le résultat ressemble à ceci :

 --- Volume group ---
 VG Name               vg_srv0
 Format                lvm2
 VG Access             read/write
 VG Status             resizable     
 MAX LV                0
 Cur LV                3
 Open LV               3
 Max PV                0
 Cur PV                2
 Act PV                2
 VG Size               929.12 GiB
 PE Size               32.00 MiB
 Total PE              29732
 Alloc PE / Size       29732 / 929.12 GiB
 Free  PE / Size       0 / 0   <== PAS DE PLACE LIBRE ! C'EST LE PROBLÈME

Pour plus détails sur ce qui il y a dans le(s) groupe(s) utiliser la commande "lvdisplay" qui donnera l’info sur chaque volume (LV) se situant dans chaque groupe.

 --- Logical volume ---
 LV Name                /dev/vg_srv0/lv_swap
 VG Name                vg_srv0
 LV Write Access        read/write
 LV Status              available
 LV Size                5.44 GiB
  
 --- Logical volume ---
 LV Name                /dev/vg_srv0/lv_home
 VG Name                vg_srv0
 LV Write Access        read/write
 LV Status              available
 LV Size                873.69 GiB
  
 --- Logical volume ---
 LV Name                /dev/vg_srv0/lv_root
 VG Name                vg_srv0
 LV Write Access        read/write
 LV Status              available
 LV Size                50.00 GiB

Ici les “LV Name” donnent une idée de ce qu’il y a dans ces volumes. Ce n'est pas toujours le cas ... Mais on peut le vérifier avec la commande mount, (et un peut de filtrage)

mount | grep  ^/dev/ | awk '{print $1 "  " $3}'

Le résultat ressemble alors à ceci:

/dev/mapper/vg_srv0-lv_root   /
/dev/sda2                     /boot
/dev/mapper/vg_srv0-lv_home   /home

On constate que la racine du système est dans le volume lv_root et que /home est dans le volume lv_home.

lvmdisplay nous a montré que lv_home fait 873.69 GiB
C’est ce volume qu’on va diminuer pour faire de la place.
IMPORTANT: On ne peut pas diminuer la taille d’un volume qui est monté. On ne peut donc pas diminuer la taille de la racine, pour cela il faudrait booter sur un cd de rescue.

2) DIMINUTION

Donc on va commencer par retirer le volume lv_home de /home
Ce qui sous entend qu’aucun process ou utilisateur n’utilise /home
(le vérifier avec “lsof | grep /home” qui ne doit rien afficher.)

   unmount /home

Vérifier que le volume est sain avec la commande e2fsck
  e2fsck -f /dev/mapper/vg_srv0-lv_home

On va ramener la taille lv_home de 873.69 Go à 200Go libérant ainsi 673Go

On commence par diminuer le file-system (regrouper les fichiers)
(cela peut prendre plus ou moins de temps suivant le nombre de fichiers à déplacer)
  resize2fs -p /dev/mapper/vg_srv0-lv_home 200G

Enfin on réduit la taille du volume
  lvreduce -L 200G /dev/mapper/vg_srv0-lv_home

Avec la commande ‘vgdisplay’ on vérifie qu’il y a bien de la place libre et avec ‘lvdisplay’ que la taille du volume réduit est bien la valeur attendue.

Dernier test
  e2fsck -f /dev/mapper/vg_srv0-lv_home

On réactive /home
  mount /home

3) AJOUT

Maintenant on a de la place, on va pouvoir ajouter de nouveau volumes. Commençons par un volume de 20G, nommé lv_vm1 et qui sera dans le groupe vg_srv0,  donc accessible via le device /dev/vg_srv0/lv_vm1 ou /dev/mapper/vg_srv0-lv_vm1

  lvcreate -L 20G -n lv_vm1 vg_srv0

Puis un second volume lv_vm2
  lvcreate -L 20G -n lv_vm2 vg_srv0

Ces 2 volumes lv_vm1 et lv_vm2 seront utilisé pour y installer 2 machines virtuelles d’où leur nom vm.... Dans ce cas le travail s’arrête là. 


Pour pouvoir les monter et y stoker des fichiers il faut les formater avec:


mkfs.ext4 /dev/mapper/vg_srv0-lv_vm1