Articles Tagués ‘lxc-stop’

La virtualisation d’un système d’exploitation permet aujourd’hui d’exploiter au mieux les configurations matérielles disponibles de nos jours. Je pense principalement à la multiplication des coeurs au sein d’un même serveur et de la RAM qui les accompagne.

La virtualisation peut alors s’appuyer sur VMware, Microsoft ????, ou encore sur LXC.

D’ailleurs, on ne parle plus de VM ou de machine virtuelle mais plutôt de container 😉

1. Installation

# apt-get install lxc bridge-utils libvirt-bin debootstrap

2. Configuration

2.1 Cgroups

cgroups (control groups) est une fonctionnalité du noyau Linux pour limiter, compter et isoler l’utilisation des ressources (processeur, mémoire, utilisation disque, etc.). Pour plus de détails : wikipédia

Dans le fichier /etc/fstab : ajoutez la ligne suivante

## LXC
cgroup    /sys/fs/cgroup    cgroup    defaults    0    0

puis

# mount -a

2.2 Réseau

Commentez la configuration de votre carte réseau eth0

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
#allow-hotplug eth0
#iface eth0 inet static
#address x.x.x.x
#netmask y.y.y.y
#gateway    x.x.x.x
#network x.x.x.x

Ajoutez la configuration de votre nouvelle interface bridge ci-dessous :

auto br0
iface br0 inet static
       bridge_ports eth0
       bridge_fd 0
       address x.x.x.x
       netmask y.y.y.y
       network x.x.x.x
       broadcast x.x.x.x
       gateway x.x.x.x
       # dns-* options are implemented by the resolvconf package, if installed
       dns-nameservers x.x.x.x
       dns-search votre.domaine.dns

2.3 Réseau virtuel

# virsh -c lxc:/// net-define /etc/libvirt/qemu/networks/default.xml
# virsh -c lxc:/// net-start default
# virsh -c lxc:/// net-autostart default
# virsh -c lxc:/// net-edit default

exemple : ici un range d

<network>
  <name>default</name>
  <uuid>961c5bb4-6023-2485-dc64-140ee33d59f0</uuid>
  <forward mode='nat'/>
  <bridge name='virbr0' stp='on' delay='0' />
  <ip address='192.168.122.1' netmask='255.255.255.0'>
    <dhcp>
      <range start='192.168.122.2' end='192.168.122.254' />
    </dhcp>
  </ip>
</network>

2.4 Vérification

# lxc-checkconfig

qui donne :

Kernel config /proc/config.gz not found, looking in other places…
Found kernel config file /boot/config-3.2.0-4-686-pae
— Namespaces —
Namespaces: enabled
Utsname namespace: enabled
Ipc namespace: enabled
Pid namespace: enabled
User namespace: enabled
Network namespace: enabled
Multiple /dev/pts instances: enabled

— Control groups —
Cgroup: enabled
Cgroup clone_children flag: enabled
Cgroup device: enabled
Cgroup sched: enabled
Cgroup cpu account: enabled
Cgroup memory controller: enabled
Cgroup cpuset: enabled

— Misc —
Veth pair device: enabled
Macvlan: enabled
Vlan: enabled
File capabilities: enabled

Note : Before booting a new kernel, you can check its configuration
usage : CONFIG=/path/to/config /usr/bin/lxc-checkconfig

Tout est au vert ?

Vous voici désormais avec une plate-forme de virtualisation opérationnelle.

Voyons comment l’administrer :

3. Création d’un container

# lxc-create -n <moncontainer> -t debian

Un container est créé et enregistré sous /var/lib/lxc/moncontainer.

Exemple :

# lxc-create -n proxy -t debian

puis :

Sélection_001

Sélection_002

Sélection_003

Sélection_004

Sélection_005

Sélection_006

Sélection_007

Sélection_008

Sélection_009

Mais attention, ce container n’est pas immédiatement opérationnel.

En effet, les accès consoles, réseaux, … ne sont pas configurés.

4. Correction/activation du container

4.1 Console

La gestion de la console LXC pose un problème.

Lors de son lancement #lxc-console -n <moncontainer>, le message suivant apparaît :

Type <Ctrl+a q> to exit the console, <Ctrl+a Ctrl+a> to enter Ctrl+a itself

et vous ne pouvez plus vous loguer !!!

En effet, de prime à bord vous ne pouvez pas vous connecter à la console sans avoir au préalable effectué une petite opération.

# chroot /var/lib/lxc/moncontainer/rootfs
# mknod -m 666 /dev/tty1 c 4 1
# mknod -m 666 /dev/tty2 c 4 2
# mknod -m 666 /dev/tty3 c 4 3
# mknod -m 666 /dev/tty4 c 4 4
# mknod -m 666 /dev/tty5 c 4 5
# mknod -m 666 /dev/tty6 c 4 6

4.2 Languages – Locales

Par défaut, le container est créé sans configuration des locales, donc : Démarrez le container en console :

# lxc-start -n moncontainer -d
# lxc-console -n moncontainer

Loguez-vous sous ROOT, puis :

# locale-gen en_US en_US.UTF-8 fr_FR.UTF-8
# dpkg-reconfigure locales

4.3 Quelques outils manquants

# apt-get install dnsutils man locate rsyslog gcc

5. Démarrage automatique

ln -s /var/lib/lxc/<monnouveaucontainer>/config /etc/lxc/auto/<monnouveaucontainer>

et voilà …

6. Administration

6.1 Fichiers et dossiers

  • Dossier de stockage de vos containers : /var/lib/lxc/
  • Configuration de votre container : /var/lib/lxc/<votre container>/config
# /var/lib/lxc/moncontainer/config

## Container
lxc.utsname                             = moncontainer

lxc.rootfs                              = /var/lib/lxc/moncontainer/rootfs
#lxc.console                            = /var/log/lxc/moncontainer.console
lxc.tty                                 = 6
lxc.pts                                 = 1024

## Capabilities
lxc.cap.drop                            = mac_admin
lxc.cap.drop                            = mac_override
lxc.cap.drop                            = sys_admin
lxc.cap.drop                            = sys_module
## Devices
# Allow all devices
#lxc.cgroup.devices.allow               = a
# Deny all devices
lxc.cgroup.devices.deny                 = a
# Allow to mknod all devices (but not using them)
lxc.cgroup.devices.allow                = c *:* m
lxc.cgroup.devices.allow                = b *:* m

# RESEAU
lxc.network.type = veth
lxc.network.flags = up
lxc.network.link = br0
lxc.network.name = eth0
lxc.network.ipv4 = x.x.x.x/24
lxc.network.veth.pair = vethvm2
lxc.network.hwaddr = 00:FF:AA:00:00:02

# /dev/console
lxc.cgroup.devices.allow                = c 5:1 rwm
# /dev/fuse
lxc.cgroup.devices.allow                = c 10:229 rwm
# /dev/null
lxc.cgroup.devices.allow                = c 1:3 rwm
# /dev/ptmx
lxc.cgroup.devices.allow                = c 5:2 rwm
# /dev/pts/*
lxc.cgroup.devices.allow                = c 136:* rwm
# /dev/random
lxc.cgroup.devices.allow                = c 1:8 rwm
# /dev/rtc
lxc.cgroup.devices.allow                = c 254:0 rwm
# /dev/tty
lxc.cgroup.devices.allow                = c 5:0 rwm
# /dev/urandom
lxc.cgroup.devices.allow                = c 1:9 rwm
# /dev/zero
lxc.cgroup.devices.allow                = c 1:5 rwm

## Limits
#lxc.cgroup.cpu.shares                  = 1024
#lxc.cgroup.cpuset.cpus                 = 0
#lxc.cgroup.memory.limit_in_bytes       = 256M
#lxc.cgroup.memory.memsw.limit_in_bytes = 1G

## Filesystem
lxc.mount.entry                         = proc /var/lib/lxc/moncontainer/rootfs/proc proc nodev,noexec,nosuid 0 0
lxc.mount.entry                         = sysfs /var/lib/lxc/moncontainer/rootfs/sys sysfs defaults,ro 0 0
#lxc.mount.entry                        = /srv/moncontainer /var/lib/lxc/moncontainer/rootfs/srv/moncontainer none defaults,bind 0 0

5.2 Commandes

  • lxc-list : liste l’ensemble des containers et donne leur état (Running, Frozen, Stopped)
  • lxc-ls -Al : liste l’ensemble des fichiers et répertoires des containers. Mêmes options que la commande ls
  • lxc-start : démarre un container (ex: # lxc-start -d -n moncontainer). L’option -d permet l’exécution du container en démon
  • lxc-halt : arrête proprement un container (ex: # lxc-halt -n moncontainer)
  • lxc-stop : stoppe le container (ex: # lxc-stop -n moncontainer)
  • lxc-console : ouvre une console de connexion locale à un container (ex : # lxc-console -n moncontainer)Attention : si le prompt ne s’affiche pas, alors le paragraphe n° 4
  • lxc-info : affiche l’état d’un container et son PID (ex: # lxc-info -n moncontainer)
  • lxc-ps : affiche les processus de chaque container
  • lxc-create : crée un container (ex: # lxc-create -n monnouveaucontainer -t debian)
  • lxc-destroy : supprime un container

7. Problèmes rencontrés et solutions

71 SSH

Le serveur SSH est installé mais sa configuration est incomplète. En effet il manque les fichiers ssh_host_dsa_key et ssh_host_rsa_key.

# lxc-console -n serveur
# cd /etc/ssh
# ssh-keygen -t dsa -f ssh_host_dsa_key
# ssh-keygen -t rsa1 -f ssh_host_rsa_key
# /etc/init.d/ssh restart

7.2 Interface réseau

L’interface réseau et la route ne sont pas configurées.

Ajouter dans /etc/network/interface

iface eth0 inet static
address 192.168.1.201
mask 255.255.255.0
gatewau 192.168.1.1

et pour la route :

route add -net 0.0.0.0 gw 192.168.1.1 dev eth0

… et on redémarre : ctrl+a q      lxc-stop -n <moncontainer>

7.3 Paquets manquants

Bon nombre de paquets manquent à l’appel. On notera particulièrement : vi, nano

Publicités