Dernière mise-à-jour :

SO211 - Gestion des Zones

Solaris Containers

Le concept de zones sous Solaris est similaire du concept des BSD Jails. Vue de cette façon une zone est une machine virtuelle minimaliste.

Au lieu de monopoliser un ordinateur par serveur monté, il est possible d'installer plusieurs prisons ou zones dans le même ordinateur.

Sous Solaris le terme container peut défini en tant que :

Solaris container = Solaris Zone + Solaris Resource Manager ( SRM )

Chaque zone nécessite approximativement 100Mo d'espace disque et 15Mo de mémoire vive.

Il existe deux types de zones :

Zone globale

Zone locale

Zone Globale

Une zone globale :

possède un ID de 0,

fournit une instance unique du noyau de Solaris,

contient l'installation complète des paquetages de Solaris,

peut contenir d'autres logiciels et fichiers non installés via un paquetage,

contient une base de données de toutes les applications installées dans la zone globale,

détient l'information de configuration concernant la zone globale telle le nom de domaine,

possède la connaissance de tous les devices et de tous les file systems,

est au courant de la présence des zones locales ainsi que leurs configurations,

est la zone à partir de laquelle peuvent être créées, installées, configurées, gérées ou désinstallées les zones locales.

Zone locale

Une zone locale :

est attribuée un ID de zone quand la zone est bootée,

partage le noyau avec la zone globale,

contient une partie des paquetages Solaris,

partage des paquetages avec la zone globale,

peut contenir d'autres logiciels et fichiers non partagés avec la zone globale,

contient une base de données de toutes les applications installées dans la zone locale ainsi que celles partagés avec la zone globale,

n'a aucune connaissance des autres zones locales,

ne peut pas installer, gérer ou désinstaller d'autres zones locales, y compris elle-même,

détient l'information de configuration concernant la zone locale telle le nom de domaine et l'adresse IP.

Il existe deux types de zones locales :

Small zone ou Sparse Root zone,

Big zone ou Whole Root zone.

Small zone

C'est le type de zone par défaut. Il partage les répertoires suivants avec la zone globale :

/usr

/lib

/platform

/sbin

Big zone

Contient une arborescence propre à elle.

LAB #1 - L'Installation d'une Zone Locale

La Configuration de la Dataset de la Zone

Créez un File System dédié aux zones :

# zfs list
NAME USED AVAIL REFER MOUNTPOINT
mypool 372K 340M 37,4K /mypool
# zfs create -o mountpoint=/zones mypool/zones
# zfs list
NAME USED AVAIL REFER MOUNTPOINT
mypool 227K 340M 37,4K /mypool
mypool/zones 37,4K 340M 37,4K /zones

Créez maintenant une zone en utilisant la commande zonecfg :

# zonecfg -z myzone
myzone: Aucune zone de cette sorte configurée
Utilisez 'create' pour commencer à configurer une nouvelle zone.
zonecfg:myzone> create
zonecfg:myzone> set zonepath=/zones/myzone
zonecfg:myzone> set autoboot=true
zonecfg:myzone> verify
zonecfg:myzone> commit
zonecfg:myzone> exit

L'option -z indique à la commande zonecfg que l'argument myzone est le nom de la zone.

La configuration de votre zone est stocké zone un fichier xml :

# cat /etc/zones/myzone.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE zone PUBLIC "-//Sun Microsystems Inc//DTD Zones//EN" "file:///usr/share/lib/xml/dtd/zonecfg.dtd.1">
<!--
DO NOT EDIT THIS FILE. Use zonecfg(1M) instead.
-->
<zone name="myzone" zonepath="/zones/myzone" autoboot="true">
<inherited-pkg-dir directory="/lib"/>
<inherited-pkg-dir directory="/platform"/>
<inherited-pkg-dir directory="/sbin"/>
<inherited-pkg-dir directory="/usr"/>
</zone>

Pour créer une BIG zone, il convient de supprimer les lignes <inherited-pkg-dir directory=“/chemin”/> et </zone>. Par exemple :

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE zone PUBLIC "-//Sun Microsystems Inc//DTD Zones//EN" "file:///usr/share/lib/xml/dtd/zonecfg.dtd.1">
<!--
DO NOT EDIT THIS FILE. Use zonecfg(1M) instead.
-->
<zone name="myzone1" zonepath="/zones/myzone1" autoboot="true"/>

Vous pouvez aussi utiliser la commande create -b pour générer ce fichier automatiquement.

Votre fichier de zone a été généré en utilisant un modèle :

# cat /etc/zones/SUNWdefault.xml
<?xml version="1.0"?>
<!--
Copyright 2005 Sun Microsystems, Inc. All rights reserved.
Use is subject to license terms.
ident "@(#)SUNWdefault.xml 1.2 07/01/14 SMI"
DO NOT EDIT THIS FILE. Use zonecfg(1M) instead.
-->
<!DOCTYPE zone PUBLIC "-//Sun Microsystems Inc//DTD Zones//EN" "file:///usr/share/lib/xml/dtd/zonecfg.dtd.1">
<zone name="default" zonepath="" autoboot="false">
<inherited-pkg-dir directory="/lib"/>
<inherited-pkg-dir directory="/platform"/>
<inherited-pkg-dir directory="/sbin"/>
<inherited-pkg-dir directory="/usr"/>
</zone>

Vous pouvez voir la configuration de votre zone en utilisant la commande info:

# zonecfg -z myzone
zonecfg:myzone> info
zonename: myzone
zonepath: /zones/myzone
brand: native
autoboot: true
bootargs:
pool:
limitpriv:
scheduling-class:
ip-type: shared
hostid:
inherit-pkg-dir:
dir: /lib
inherit-pkg-dir:
dir: /platform
inherit-pkg-dir:
dir: /sbin
inherit-pkg-dir:
dir: /usr
zonecfg:myzone>

Pour quitter zonecfg, utilisez la commande exit :

zonecfg:myzone> exit
#

Lister les zones sur votre machine en utilisant la sous-commande list de la commande zoneadm :

# zoneadm list -cv
ID NAME STATUS PATH BRAND IP
0 global running / native shared
- myzone configured /zones/myzone native shared

Les options utilisées avec la commande sont :

Switch	Description
-c	Lister toutes les zones
-v	Verbose

Notez que la zone locale est configurée par défaut avec une couche IP partagée (shared). Ceci implique que l'interface réseau est partagée entre la zone globale et la zone locale. De ce fait aucune configuration du routage ne peut être faite dans la zone locale. En effet tout le routage doit être configuré dans la zone globale. Il est cependant possible de dédier une interface réseau à la zone locale en stipulant set ip-type=exclusive avec la commande zonecfg.

Installation d'une Zone

Installez maintenant votre zone :

# zoneadm -z myzone install
Un système de fichiers ZFS a été créé pour cette zone.
Preparing to install zone <myzone>.
Creating list of files to copy from the global zone.
Copying <2893> files to the zone.
Initializing zone product registry.
Determining zone package initialization order.
Preparing to initialize <1181> packages on the zone.
Initialized <1181> packages on zone.
Zone <myzone> is initialized.
Le fichier </zones/myzone/root/var/sadm/system/logs/install_log> contient un journal de l'installation de la zone.

Lister de nouveau vos zones :

# zoneadm list -cv
ID NAME STATUS PATH BRAND IP
0 global running / native shared
- myzone installed /zones/myzone native shared

Notez que le STATUS de myzone est passé de configured à installed.

Premier Démarrage de votre Zone

Vérifiez et démarrez votre zone ainsi :

# zoneadm -z myzone verify
# zoneadm -z myzone boot

Vérifiez maintenant que le statut de myzone est passé à running :

# zoneadm list -cv
ID NAME STATUS PATH BRAND IP
0 global running / native shared
1 myzone running /zones/myzone native shared

Connectez-vous maintenant à votre zone :

# zlogin -C myzone
[Connecté à la console de la zone 'myzone']

Appuyez sur la touche ↵ Entrée et configurez la zone :

host name = myzone.fenestros.loc

time zone = Europe/Paris

root password = Wind0w$

Après que la zone soit redémarrée, vous verrez un résultat similaire à celui-ci :

rebooting system due to change(s) in /etc/default/init
[NOTICE : Zone en cours de réinitialisation]
SunOS Release 5.10 Version Generic_147441-01 64-bit
Copyright (c) 1983, 2011, Oracle and/or its affiliates. All rights reserved.
Hostname: myzone.fenestros.loc
myzone.fenestros.loc console login:

Se Connecter à une Zone directement en tant que root

Ouvrez un autre terminal et connectez-vous directement à la zone en utilisant l'option -S avec la commande zlogin :

# zlogin -S myzone
[Connecté à la zone 'myzone' pts/7]
# pwd
/
# hostname
myzone.fenestros.loc
#

Se Connecter à une Zone directement en tant qu'un Utilisateur

Créez l'utilisateur user1 dans myzone :

# zlogin -S myzone
[Connecté à la zone 'myzone' pts/7]
# mkdir -p /export/home/user1
# useradd -d /export/home/user1 -m user1
# passwd user1
New Password: pass1234
Re-enter new Password: pass1234
passwd: password successfully changed for user1
# exit
[Connexion à la zone 'myzone' pts/5 fermée]
#

Afin de se connecter à myzone directement en tant qu'user1, utilisez l'option -l de la commande zlogin :

# zlogin -l user1 myzone
[Connecté à la zone 'myzone' pts/5]
Oracle Corporation SunOS 5.10 Generic Patch January 2005
$ exit
[Connexion à la zone 'myzone' pts/5 fermée]
#

LAB #2 - Administration des Zones

Partage de Fichiers entre la Zone Globale et une Zone Locale

Pour pouvoir partager des fichiers, vous devez configurer un montage de type LOFS.

Dans la zone globale, créez un répertoire pour partager des fichiers :

# mkdir -p /root/zones/myzone

Utilisez maintenant la commande zonecfg afin de configurer le partage :

# zonecfg -z myzone
zonecfg:myzone> add fs
zonecfg:myzone:fs> set dir=/root/share
zonecfg:myzone:fs> set special=/root/zones/myzone
zonecfg:myzone:fs> set type=lofs
zonecfg:myzone:fs> add options [rw,nodevices]
zonecfg:myzone:fs> end
zonecfg:myzone> exit
#

Notez que dir indique le point de montage dans la zone locale tandis que special indique le partage dans la zone globale.

Créez maintenant un fichier dans /root/zones/myzone :

# touch /root/zones/myzone/testshare

Redémarrez la zone myzone, connectez-vous en tant que root et vérifiez que vous pouvez voir le partage. Ensuite créez un fichier dans /root/share :

# zoneadm -z myzone reboot
# zoneadm list -cv
ID NAME STATUS PATH BRAND IP
0 global running / native shared
3 myzone running /zones/myzone native shared
# zlogin -S myzone
[Connecté à la zone 'myzone' pts/5]
# cd /root
# ls
share
# cd share
# ls
testshare
# touch shareback

Quittez la zone myzone et vérifiez que vous pouvez voir le fichier shareback à partir de la zone globale :

# exit
[Connexion à la zone 'myzone' pts/5 fermée]
# ls /root/zones/myzone
shareback testshare

Insérez le CD des Additions invité de VirtualBox en utilisant les menus Périphériques > Installer les Additions invité … de la fenêtre de votre machine virtuelle.

Vous pouvez aussi partager le lecteur DVD de la zone globale. Par contre il ne faut pas utiliser la procédure ci-dessus car celle-ci crée un point de montage permenant de type LOFS qui vous empêchera de retirer un DVD du lecteur tant que a zone locale fonctionne :

# mkdir /zones/myzone/root/globaldvdrom
# ls /cdrom/cdrom0
# ls /cdrom/cdrom0
32Bit runasroot.sh
64Bit VBoxLinuxAdditions.run
AUTORUN.INF VBoxSolarisAdditions.pkg
autorun.sh VBoxWindowsAdditions-amd64.exe
cert VBoxWindowsAdditions-x86.exe
OS2 VBoxWindowsAdditions.exe
# mount -F lofs /cdrom/cdrom0 /zones/myzone/root/globaldvdrom
# zlogin myzone ls /globaldvdrom
32Bit
64Bit
AUTORUN.INF
OS2
VBoxLinuxAdditions.run
VBoxSolarisAdditions.pkg
VBoxWindowsAdditions-amd64.exe
VBoxWindowsAdditions-x86.exe
VBoxWindowsAdditions.exe
autorun.sh
cert
runasroot.sh

Démontez le DVD et éjectez-le :

# umount /zones/myzone/root/globaldvdrom
# eject cdrom

Retirer un Partage

Pour retirer le partage LOFS, il faut procéder ainsi :

# zonecfg -z myzone
zonecfg:myzone> info fs
fs:
dir: /root/share
special: /root/zones/myzone
raw non spécifié
type: lofs
options: [rw,nodevices]
zonecfg:myzone> remove fs dir=/root/share
zonecfg:myzone> exit
# zoneadm -z myzone reboot
#

Avant de continuer, arrêtez votre VM Solaris, ajoutez un deuxième processeur à la VM et démarrez-la.

Allocation de Ressources CPU

Visualisez d'abord ce que votre zone locale a détecté en tant que CPU présents :

# zlogin myzone psrinfo -v
Status of virtual processor 0 as of: 06/05/2013 12:05:25
on-line since 06/05/2013 11:45:32.
The i386 processor operates at 2300 MHz,
and has an i387 compatible floating point processor.
Status of virtual processor 1 as of: 06/05/2013 12:05:25
on-line since 06/05/2013 11:45:34.
The i386 processor operates at 2300 MHz,
and has an i387 compatible floating point processor.

Comme vous pouvez constater, la zone locale s'est attribué les deux processeurs. Afin de limiter la zone locale à un seul processeur il convient de modifier la configuration de celle-ci :

# zonecfg -z myzone
zonecfg:myzone> add dedicated-cpu
zonecfg:myzone:dedicated-cpu> set ncpus=1
zonecfg:myzone:dedicated-cpu> end
zonecfg:myzone> exit
# zoneadm -z myzone reboot
# zlogin myzone psrinfo -v
Status of virtual processor 0 as of: 06/05/2013 12:09:33
on-line since 06/05/2013 11:45:32.
The i386 processor operates at 2300 MHz,
and has an i387 compatible floating point processor.
#

Le CPU dédié est maintenant invisible aux zones locales. Vous pouvez aussi faire une allocation variable telle 1-3, au quel cas, la machine sera lancée avec un minimum d'un processeur et un maximum de 3 processeurs en fonction de la disponibilité.

Pour retirer un processeur dédié, procédez ainsi :

# zonecfg -z myzone "remove dedicated-cpu"
# zoneadm -z myzone reboot

Fair Share Scheduler

Vous pouvez aussi partager le CPU en utilisant le Fair Share Scheduler. Premièrement il convient de définir le FSS comme ordonnanceur par défaut pour la zone globale :

# dispadmin -d FSS
# dispadmin -l
CONFIGURED CLASSES
==================
SYS (System Class)
TS (Time Sharing)
SDC (System Duty-Cycle Class)
FX (Fixed Priority)
IA (Interactive)
FSS (Fair Share)

Ensuite définir la même chose pour la zone locale :

# zonecfg -z myzone "set scheduling-class=FSS"

% Vous pouvez maintenant attribuer 75% des deux processeurs à la zone globale et 25% à la zone locale :

# zonecfg -z myzone "set scheduling-class=FSS"
# zonecfg -z global
zonecfg:global> set cpu-shares=75
zonecfg:global> exit
# zonecfg -z myzone
zonecfg:myzone> set cpu-shares=25
zonecfg:myzone> exit
# zoneadm -z myzone reboot
#

Allocation de Ressources en Mémoire

IL existe trois types de plafonnement de mémoire dans une zone :

Plafonnement	Description
Physical	Quantité totale de mémoire physique disponible pour la zone.
Locked	Quantité de mémoire qui peut allouée à une application gourmande par une zone.
Swap	Quantité d'espace swap utilisable par une zone.

Pour plafonner la mémoire physique d'une zone, il convient de configurer la propriété capped-memory :

# zonecfg -z myzone
zonecfg:myzone> add capped-memory
zonecfg:myzone:capped-memory> set physical=50m
zonecfg:myzone:capped-memory> end
zonecfg:myzone> exit
# zonecfg -z myzone info capped-memory
capped-memory:
physical: 50M
#

Privilèges et Zones Locales

Certaines tâches ne peuvent être faites à partir d'une zone locale. Pour visualiser les privilèges disponibles dans la zone locale myzone, utilisez la commande suivante :

# zlogin myzone ppriv -l
contract_event
contract_observer
cpc_cpu
dtrace_kernel
dtrace_proc
dtrace_user
file_chown
file_chown_self
file_dac_execute
file_dac_read
file_dac_search
file_dac_write
file_downgrade_sl
file_link_any
file_owner
file_setid
file_upgrade_sl
graphics_access
graphics_map
ipc_dac_read
ipc_dac_write
ipc_owner
net_bindmlp
net_icmpaccess
net_mac_aware
net_privaddr
net_rawaccess
proc_audit
proc_chroot
proc_clock_highres
proc_exec
proc_fork
proc_info
proc_lock_memory
proc_owner
proc_priocntl
proc_session
proc_setid
proc_taskid
proc_zone
sys_acct
sys_admin
sys_audit
sys_config
sys_devices
sys_ipc_config
sys_linkdir
sys_mount
sys_ip_config
sys_net_config
sys_nfs
sys_res_config
sys_resource
sys_suser_compat
sys_time
sys_trans_label
win_colormap
win_config
win_dac_read
win_dac_write
win_devices
win_dga
win_downgrade_sl
win_fontpath
win_mac_read
win_mac_write
win_selection
win_upgrade_sl
net_access

Modification du Nom d'une Zone

Pour modifier le nom d'une zone celle-ci doit être arrêtée :

# zoneadm -z myzone halt

Changez ensuite le nom de la zone à myzone1 :

# zonecfg -z myzone "set zonename=myzone1"
# zoneadm list -cv
ID NAME STATUS PATH BRAND IP
0 global running / native shared
- myzone1 installed /zones/myzone native shared

Modification de la Dataset d'une Zone

Pour modifier la Dataset associée avec une zone, utilisez la commande suivante :

# zoneadm -z myzone1 move /zones/myzone1
# zoneadm list -cv
ID NAME STATUS PATH BRAND IP
0 global running / native shared
- myzone1 installed /zones/myzone1 native shared

Sauvegarde d'une Zone

Sauvegarder une zone implique la sauvegarde de la configuration de la zone ainsi que les données d'application à l'intérieur de la zone. Vous pouvez utiliser tout type de logiciel de sauvegarde pour les données puis exporter et ré-importer après la restauration de la zone. La configuration de la zone est sauvegardée ainsi :

# zonecfg -z myzone1 export -f myzone1.config
# cat myzone1.config
create -b
set zonepath=/zones/myzone1
set autoboot=true
set scheduling-class=FSS
set ip-type=shared
add inherit-pkg-dir
set dir=/lib
end
add inherit-pkg-dir
set dir=/platform
end
add inherit-pkg-dir
set dir=/sbin
end
add inherit-pkg-dir
set dir=/usr
end
add capped-memory
set physical=50M
end
add rctl
set name=zone.cpu-shares
add value (priv=privileged,limit=25,action=none)
end

Restauration d'une Zone

Désinstallez et supprimez myzone1 :

# zoneadm -z myzone1 uninstall
Voulez-vous vraiment uninstall la zone myzone1 (y/[n])? y
Un système de fichier ZFS a été détruit pour cette zone.
# zonecfg -z myzone1 delete
Voulez-vous vraiment supprimer la zone myzone1 (y/[n])? y

Restaurez maintenant myzone1 :

# zonecfg -z myzone1 -f myzone1.config
# zoneadm -z myzone1 install
Un système de fichiers ZFS a été créé pour cette zone.
Preparing to install zone <myzone1>.
Creating list of files to copy from the global zone.
Copying <2893> files to the zone.
Initializing zone product registry.
Determining zone package initialization order.
Preparing to initialize <1181> packages on the zone.
Initialized <1181> packages on zone.
Zone <myzone1> is initialized.
Le fichier </zones/myzone1/root/var/sadm/system/logs/install_log> contient un journal de l'installation de la zone.

Afin que la zone ne vous pose pas de questions lors de la première connexion, supprimez le fichier /zones/myzone1/root/etc/.UNCONFIGURED :

# rm /zones/myzone1/root/etc/.UNCONFIGURED

Vérifiez le statut de votre zone :

# zoneadm list -cv
ID NAME STATUS PATH BRAND IP
0 global running / native shared
- myzone1 installed /zones/myzone1 native shared

Vérifiez la configuration de la zone :

# zonecfg -z myzone1
zonecfg:myzone1> info
zonename: myzone1
zonepath: /zones/myzone1
brand: native
autoboot: true
bootargs:
pool:
limitpriv:
scheduling-class: FSS
ip-type: shared
hostid:
[cpu-shares: 25]
inherit-pkg-dir:
dir: /lib
inherit-pkg-dir:
dir: /platform
inherit-pkg-dir:
dir: /sbin
inherit-pkg-dir:
dir: /usr
capped-memory:
physical: 50M
rctl:
name: zone.cpu-shares
value: (priv=privileged,limit=25,action=none)
zonecfg:myzone1> exit
#

Démarrez votre zone :

# zoneadm -z myzone1 verify
# zoneadm -z myzone1 boot

Vérifiez que vous pouvez vous connecter en tant que root :

# zlogin -S myzone1
[Connecté à la zone 'myzone1' pts/4]
# hostname
myzone1
# ls
bin export lib opt sbin usr
dev home mnt platform system var
etc kernel net proc tmp
# exit
[Connexion à la zone 'myzone1' pts/4 fermée]
#

Création d'une Clone d'une Zone Locale

Dans cette section vous allez créer un modèle de zone que vous pouvez utiliser pour créer d'autres zones. Commencez par créer une zone qui s'appelle cleanzone :

# zonecfg -z cleanzone
cleanzone: Aucune zone de cette sorte configurée
Utilisez 'create' pour commencer à configurer une nouvelle zone.
zonecfg:cleanzone> create
zonecfg:cleanzone> set zonepath=/zones/cleanzone
zonecfg:cleanzone> set autoboot=true
zonecfg:cleanzone> verify
zonecfg:cleanzone> commit
zonecfg:cleanzone> exit
#

Installez la zone :

# zoneadm -z cleanzone install
Un système de fichiers ZFS a été créé pour cette zone.
Preparing to install zone <cleanzone>.
Creating list of files to copy from the global zone.
Copying <2893> files to the zone.
Initializing zone product registry.
Determining zone package initialization order.
Preparing to initialize <1181> packages on the zone.
Initialized <1181> packages on zone.
Zone <cleanzone> is initialized.
Le fichier </zones/cleanzone/root/var/sadm/system/logs/install_log> contient un journal de l'installation de la zone.

Démarrez la zone pour importer le fichier manifest :

root@solaris:~# zoneadm -z cleanzone boot

Connectez-vous en tant que root et appuyez sur la touche ↵ Entrée. Quittez la zone immédiatement en appuyant sur les touches ~. :

# zlogin -C cleanzone
[Connecté à la console de la zone 'cleanzone']
[Entrée]
Select a Language
0. English
1. French
Please make a choice (0 - 1), or press h or ? for help: ~.
[Connexion à la console de la zone 'cleanzone'impo fermée]
#

Vous allez maintenant cloner la zone cleanzone. Pour être cloner, la zone doit être arrêtée :

# zoneadm -z cleanzone halt
# zoneadm list -cv
ID NAME STATUS PATH BRAND IP
0 global running / native shared
5 myzone1 running /zones/myzone1 native shared
- cleanzone installed /zones/cleanzone native shared

Créez maintenant une clone de cleanzone:

# zonecfg -z myzone2 "create -t cleanzone"
# zonecfg -z myzone2 "set zonepath=/zones/myzone2"
# zoneadm -z myzone2 clone cleanzone
Clonage de l'instantané mypool/zones/cleanzone@SUNWzone1
À la place d'une copie, un clône ZFS a été créé pour cette zone.
grep: can't open /a/etc/dumpadm.conf
# zoneadm list -cv
ID NAME STATUS PATH BRAND IP
0 global running / native shared
5 myzone1 running /zones/myzone1 native shared
- cleanzone installed /zones/cleanzone native shared
- myzone2 installed /zones/myzone2 native shared
# zoneadm -z myzone2 boot
# zoneadm list -cv
ID NAME STATUS PATH BRAND IP
0 global running / native shared
5 myzone1 running /zones/myzone1 native shared
8 myzone2 running /zones/myzone2 native shared
- cleanzone installed /zones/cleanzone native shared
# zlogin -S myzone2
[Connecté à la zone 'myzone2' pts/4]
# ~.
[Connexion à la zone 'myzone2' pts/4 fermée]
#

References

The Oracle Technology Network

<html> <center> Copyright © 2011-2018 I2TCH LIMITED.<br><br> </center> </html>