Rechercher sur arkzoyd.com

26 janvier 2010

1, 2 et 3 OCM

C'est mon très grand plaisir d'accueillir 2 nouvelles Oracle Certified Mistresses (OCM) et Oracle Alumini qui vont devoir me supporter; elles aussi... Bravo Audiane et Isabelle ! Cette bouteille de champagne que je bois ce matin, c'est la votre :-)

16 janvier 2010

Oracle VM : Principes, bénéfices et la solution packagée d'Easyteam


En moins de 9', découvrez Oracle VM, ses bénéfices pour votre entreprise et pour vous ainsi que l'offre Easyteam pour l'implémenter dans votre contexte; Vous découvrirez peut-être la réponse à vos questions:
  • Comment réduire les coûts Oracle mais aussi matériels ?
  • Comment tirer avantages des serveurs multi-cores et consolider vos environnements ?
  • Comment garantir support des produits et performances avec Oracle sur des environnements virtualisés ?
  • Comment déployer, superviser, sauvegarder ou cloner facilement Oracle ?
  • Comment réduire vos risques au minimum ?
  • Comment pouvez-vous être opérationnels en 15 jours ?
  • Comment OracleVM permet de résoudre vos problèmes insolubles jusqu'à présent avec VMWare?
Cette présentation video, vous donnera, à n'en pas douter, de nouvelles perspectives pour qu'Oracle devienne "Facile"(*) pour vous... dès 2010!

(*) Facile grâce à Easyteam?

15 janvier 2010

Le CPUJan2001 et les nouveaux PSU sont dehors

Le Critical Patch Update de janvier 2010 est dehors; A en croire le système de notation (CVSS), Oracle Database 10g et 11g Release 1 sont de loin les virus les plus déployés sur Unix et Linux. Du coup, j'ai passé ma nuit à mettre à jour tous mes systèmes bases de données, Clusterware et GridControl qui n'étaient pas déjà 11.2 avec les derniers PSU; Tant qu'à faire de passer un patch! Si vous avez encore des bases 10g ou 11g, précipitez-vous...

07 janvier 2010

Les LOBs et leurs index

Oracle contient son lot de bizarreries. Parmi elles, la syntaxe de création de l'index d'un LOB qui accepte une clause tablespace en 10.2 et 11.2 ainsi qu'une clause storage mais qui s'assoit dessus... En voici l'illustration:
create table x(id number,
text clob)
storage (initial 1024k)
tablespace system
lob(text)
store as x_lob(
storage (initial 1024k)
tablespace users
index x_lobix (
storage (initial 1024k)
tablespace system)
);

col segment_name format a7
select segment_name, initial_extent, tablespace_name
from dba_segments
where (segment_name,owner, segment_type) in
(('X_LOBIX', user, 'LOBINDEX'),
('X_LOB', user, 'LOBSEGMENT'),
('X', user, 'TABLE'),
('X_IX', user, 'INDEX'));

SEGMENT INITIAL_EXTENT TABLESPACE_NAME
------- -------------- ---------------
X 1048576 SYSTEM
X_LOB 1048576 USERS
X_LOBIX 65536 USERS
L'explication quant à la clause tablespace est dans la section pertinente de la documentation. Celle-ci indique, en effet, que le segment LOB et son index doivent être dans le même tablespace. Je n'ai pas trouvé d'explication quant à la clause storage; pourtant celle-ci semble prendre évidemment les paramètres du tablespace; au moins avec un tablespace LMT et une allocation automatique sur 11.2.0.1/Linux x86 ! Le phénomène est identique lorsque vous déplacez tables et LOB; même causes, même conséquences ?
alter table x move
lob(text)
store as x_lob(
storage (initial 1024k)
tablespace users
index x_lobix (
storage (initial 1024k)
tablespace system)
);

col segment_name format a7
select segment_name, initial_extent, tablespace_name
from dba_segments
where (segment_name,owner, segment_type) in
(('X_LOBIX', user, 'LOBINDEX'),
('X_LOB', user, 'LOBSEGMENT'),
('X', user, 'TABLE'),
('X_IX', user, 'INDEX'));

SEGMENT INITIAL_EXTENT TABLESPACE_NAME
------- -------------- ---------------
X 1048576 SYSTEM
X_LOB 1048576 USERS
X_LOBIX 65536 USERS
Si vous arrivez à trouver la référence indiquant la restriction concernant la clause storage, je suis intéressé. Sinon, supprimez simplement la clause pour rendre l'information plus lisible:
create table x(id number,
text clob)
storage (initial 1024k)
tablespace system
lob(text)
store as x_lob(
storage (initial 1024k)
tablespace users
index x_lobix (storage (initial 1024k) tablespace system)
);
Supprimez ensuite la table de démonstration:

drop table x purge;
Cela dit, la clause INDEX de LOB_storage_clause n'est même pas référencée dans la documentation produit alors...

05 janvier 2010

Monter les disques de vos guests sur les serveurs de VM

Pouvoir manipuler le contenu de vos machines virtuelles ou de vos templates sans les démarrer est plutôt utile. Cela permet en particulier de corriger un problème lié au démarrage ou d'ajouter vos scripts ou un point de montage dans votre VM avant de la démarrer; comme si de rien n'était...

Dans cet article, je vous propose de trouver quelques commandes utiles pour créer un disque puis le manipuler depuis le VM Server.
Note:
pour manipuler les fichiers disques depuis le VM Server, votre VM doit être arrêtée. Ca parait évident mais ça va mieux en le disant.

Créer un disque

Comme vous le savez sans doute OCFS2 1.4 (inclus dans OracleVM Server 2.2) permet de créer des sparse files. Cela accélère la création du fichier d'une part et minimiser l'espace occupé par vos machines virtuelles. Nous allons commencé la série de manipulation par la création d'un sparse file avec la commande dd
dd if=/dev/zero of=/OVS/sharedDisk/Orcldb.img bs=1024k count=1 seek=1024
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.730697 seconds, 1.4 MB/s

Monter le fichier sur loopN pour émuler un device

Vous pouvez directement formater le fichier avec les commande mkfs puis les monter avec la commande mount. C'est sans doute la méthode la plus simple :
mkfs -t ext3 /OVS/sharedDisk/Orcldb.img
mke2fs 1.39 (29-May-2006)
/OVS/sharedDisk/Orcldb.img is not a block special device.
Proceed anyway? (y,n)
y
warning: 256 blocks unused.

Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
131328 inodes, 262144 blocks
13120 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=268435456
8 block groups
32768 blocks per group, 32768 fragments per group
16416 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376

Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 21 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.


mkdir -p /disks/vm
mount -t ext3 -o loop /OVS/sharedDisk/Orcldb.img /disks/vm

df -h /disks/vm
Filesystem Size Used Avail Use% Mounted on
/var/ovs/mount/E82FDACC6E714F21BD62EF7EC8F85BA1/sharedDisk/Orcldb.img
1008M 34M 924M 4% /disks/vm
Mais disons qu'on préfèrerait se compliquer la tache et créer des partitions, des volumes physiques/logiques ou les deux. Commençons par effacer notre fichier:
cd /
umount /disks/vm
losetup -a
rm -f /OVS/sharedDisk/Orcldb.img

dd if=/dev/zero of=/OVS/sharedDisk/Orcldb.img bs=1024k count=1 seek=1024
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.001991 seconds, 527 MB/s
Au lieu de cela, nous allons simplement monter notre fichier sur une des interface loop :
losetup -a

losetup /dev/loop1 /OVS/sharedDisk/Orcldb.img

losetup -a

/dev/loop1: [0808]:524815 (/OVS/sharedDisk/Orcldb.img)

Partitioner votre nouveau disque

Vous pouvez partitionner votre disque avec votre outil de partitionnement préféré comme fdisk ou parted. Ci-dessous, je vous propose un exemple avec parted :
parted -s /dev/loop1 mklabel gpt

parted -s /dev/loop1 print

parted -s /dev/loop1 help mkpart

parted -s /dev/loop1 mkpart primary 1 100%

Error: Error informing the kernel about modifications to partition /dev/loop1p1 -- Invalid argument. This means Linux won't know about any changes you made to /dev/loop1p1 until you reboot -- so you shouldn't mount it or use it in any way before rebooting.
Warning: The kernel was unable to re-read the partition table on /dev/loop1 (Invalid argument). This means Linux won't know anything about the modifications you made until you reboot. You should reboot your computer before doing anything with /dev/loop1.


parted -s /dev/loop1 print

Model: ls -ltra /dev/mapperUnknown (unknown)
Disk /dev/loop1: 1075MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number Start End Size File system Name Flags
1 17.4kB 1075MB 1075MB primary
Vous aurez sans doute remarqué que les partitions ne sont pas remontées sur le système (i.e. le méchant message d'erreur ci-dessous); la commande kpartx vous permettra de publier les partitions dans /dev/mapper :
kpartx -a /dev/loop1

ls -ltra /dev/mapper
total 0
crw------- 1 root root 10, 62 Jan 5 00:29 control
brw-r----- 1 root disk 253, 0 Jan 5 00:38 loop1p1

Utiliser LVM

Cette section est de peu d'intérêt probablement mais vous pouvez configurer des volumes logiques sur votre disque partitionnné ou non. Je vous propose de créer une configuration très simple pour illustrer comment démonter et remonter toute votre pile:
pvcreate /dev/mapper/loop1p1
Physical volume "/dev/mapper/loop1p1" successfully created

vgcreate arkzoyd /dev/mapper/loop1p1

lvcreate --size 100m --name lv00 arkzoyd

lvdisplay
--- Logical volume ---
LV Name /dev/arkzoyd/lv00
VG Name arkzoyd
LV UUID VKAPlU-uqNf-sWER-IPUi-I5ET-f0Gb-YvAEIs
LV Write Access read/write
LV Status available
# open 0
LV Size 100.00 MB
Current LE 25
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:1
Vous voilà prêt à créer votre système de fichier sur votre volume logique :
mkfs -t ext3 /dev/arkzoyd/lv00
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
25688 inodes, 102400 blocks
5120 blocks (5.00%) reserved for the super user
First data block=1
Maximum filesystem blocks=67371008
13 block groups
8192 blocks per group, 8192 fragments per group
1976 inodes per group
Superblock backups stored on blocks:
8193, 24577, 40961, 57345, 73729

Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 26 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.


mkdir -p /disks/vm
mount -t ext3 /dev/arkzoyd/lv00 /disks/vm

df -h /disks/vm
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/arkzoyd-lv00
97M 5.6M 87M 7% /disks/vm

Tout descendre, du système de fichiers à l'interface loop

Voilà la partie intéressante, à savoir comment descendre toute la pile du système de fichiers à l'interface loop en passant par le volume logique, le volume groupe et les partitions. Bien sur vous adapterez ce script à vos besoins selon votre configuration :
# Démonter le système de fichier
umount /disks/vm

df -h /disks/vm
Filesystem Size Used Avail Use% Mounted on
/dev/sda4 48G 10G 35G 23% /


# Désactiver les volume logique du VG arkzoyd
vgchange -an arkzoyd
0 logical volume(s) in volume group "arkzoyd" now active

lvscan
inactive '/dev/arkzoyd/lv00' [100.00 MB] inherit

# Désactiver le groupe de volume arkzoyd:
vgexport arkzoyd
Volume group "arkzoyd" successfully exported

vgdisplay arkzoyd
Volume group arkzoyd is exported
--- Volume group ---
VG Name arkzoyd
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status exported/resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 1.00 GB
PE Size 4.00 MB
Total PE 256
Alloc PE / Size 25 / 100.00 MB
Free PE / Size 231 / 924.00 MB
VG UUID aotOfR-MnrM-pGq7-Mnng-fXpT-3zkm-aqYMgz


# Supprimer les partitions de /dev/mapper
kpartx -dls -l /dem/mapper /dev/loop1

ls -l /dev/mapper
crw------- 1 root root 10, 62 Jan 5 00:29 control

# Démonter l'interface loop1
losetup -d /dev/loop1
losetup -a

Tout remonter

Dans cet exemple, nous avons tout créé depuis OracleVM Server. Souvent, la situation dans laquelle on se trouve est celle d'un fichier existant à remonter pour accéder à son contenu depuis OracleVM Server. C'est cette dernière situation que je vous propose d'exployer :
# Monter le disque sur loop1
losetup /dev/loop1 /OVS/sharedDisk/Orcldb.img
losetup -a

# Vérifier s'il y a des partitions dans le disque
fdisk -l /dev/loop1

WARNING: GPT (GUID Partition Table) detected on '/dev/loop1'! The util fdisk doesn't support GPT. Use GNU Parted.


Disk /dev/loop1: 1074 MB, 1074790400 bytes
255 heads, 63 sectors/track, 130 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/loop1p1 1 131 1049599+ ee EFI GPT
Partition 1 has different physical/logical beginnings (non-Linux?):
phys=(0, 0, 1) logical=(0, 0, 2)
Partition 1 has different physical/logical endings:
phys=(1023, 254, 63) logical=(130, 170, 40)


parted -s /dev/loop1 print

Model: Unknown (unknown)
Disk /dev/loop1: 1075MB
Sector size (logical/physical): 512B/512B
Partition Table: gpt

Number Start End Size File system Name Flags
1 17.4kB 1075MB 1075MB primary


# Monter les partitions dans /dev/mapper
kpartx -l /dev/loop1
loop1p1 : 0 2099133 /dev/loop1 34
kpartx -a /dev/loop1
ls -l /dev/mapper/
total 0
crw------- 1 root root 10, 62 Jan 5 00:59 control
brw-r----- 1 root disk 253, 0 Jan 5 01:04 loop1p1


# Lister les VG et les importer
vgdisplay
Volume group arkzoyd is exported
--- Volume group ---
VG Name arkzoyd
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 3
VG Access read/write
VG Status exported/resizable
MAX LV 0
Cur LV 1
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 1.00 GB
PE Size 4.00 MB
Total PE 256
Alloc PE / Size 25 / 100.00 MB
Free PE / Size 231 / 924.00 MB
VG UUID aotOfR-MnrM-pGq7-Mnng-fXpT-3zkm-aqYMgz


lvscan
Volume group arkzoyd is exported

vgimport arkzoyd
Volume group "arkzoyd" successfully imported

# Activer les volumes logiques
lvscan
inactive '/dev/arkzoyd/lv00' [100.00 MB] inherit

vgchange -ay arkzoyd
1 logical volume(s) in volume group "arkzoyd" now active

lvscan
ACTIVE '/dev/arkzoyd/lv00' [100.00 MB] inherit

lvdisplay arkzoyd/lv00
--- Logical volume ---
LV Name /dev/arkzoyd/lv00
VG Name arkzoyd
LV UUID HzxedG-LZBb-siwf-3o31-FY1N-khpR-NDpSaX
LV Write Access read/write
LV Status available
# open 0
LV Size 100.00 MB
Current LE 25
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 256
Block device 253:1


# Monter le système de fichiers
fsck -V /dev/arkzoyd/lv00
fsck 1.39 (29-May-2006)
[/sbin/fsck.ext3 (1) -- /dev/arkzoyd/lv00] fsck.ext3 /dev/arkzoyd/lv00
e2fsck 1.39 (29-May-2006)
/dev/arkzoyd/lv00: clean, 11/25688 files, 8914/102400 blocks


mkdir -p /disks/vm
mount -t ext3 /dev/arkzoyd/lv00 /disks/vm

df -h /disks/vm
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/arkzoyd-lv00
97M 5.6M 87M 7% /disks/vm
Vous voilà prêt à modifier le contenu de vos templates et de vos VM sous Linux; vous pourrez également modifier les services, les fichiers de configuration ou les points de montage. Les applications sont intéressantes, y compris pour vos scripts de migrations automatiques. Mais c'est déjà une autre histoire...

02 janvier 2010

Créer vos templates OracleVM manuellement

Parmi les bonnes raisons d'utiliser OracleVM, la possibilité d'installer des guests en quelques minutes est une très bonne motivation. Oracle offre de nombreux templates sur eDelivery, d'Oracle EL 5.4 à Oracle E-Business Suite en passant par Fusion Middleware ou Oracle BI. Créer des templates est bien plus rapide que d'utiliser virt-install et des scripts Kickstart.

Pour répondre aux besoins de personalisation, vous pourrez simplement ajouter vos scripts, des agents de sauvegarde, de supervision ou n'importe quel programme. Les templates interrogent les administrateurs quant aux paramètres qu'ils doivent positionner : configuration réseau, nom du serveur, paramètres Oracle, etc. Dans cet article, vous trouverez quelques éléments pour construire vos propres templates, sans utiliser Oracle VM Template Builder.

Introduction

Pour déployer des machines virtuelles, vous pouvez construire vos templates avec Oracle EL JeOS et le Template Builder : Une fois le template créé et chargé sur Oracle VM Manager, vous pourrez installer vos guests et répondre aux questions lors du premier démarrage :Pour se faire, Oracle inclut un service nommé oraclevm-template dans JeOS et ses templates. Vous pouvez configurer ce service avec l'utilitaire du même nom et le fichier /etc/sysconfig/oraclevm-template. Ce service est conçu pour interroger l'administrateur quant au paramètre de configuration de votre guest lors de son premier démarrage uniquement; vous pouvez créer vos propres scripts pour ajouter vos propres paramètres.

Le Principe

Au lieu d'utiliser Oracle VM Template Builder, vous pouvez simplement démarrer un template existant et le modifier. C'est cette méthode que cet article présente en reprenant l'exemple disponible sur OTN intitulé
Oracle VM Template Developer's Guide: Creating Pre-Built VMs for Rapid Software Deployment
. Comme vous vous en rendrez compte, c'est extrèmement simple !

Note:
Je suis un grand fan des installations en mode silent. J'ai d'ailleurs écrit de nombreux articles sur le sujet à propos d'Oracle Database 11g R2, de l'Infrastructure Grid Stand-alone (aka Oracle Restart), des Patch Set et même d'Oracle Real Application Clusters. Toutefois dans le cas de la création de template, l'utilisation des scripts de cloning est sans doute la solutions la plus simple et la plus rapide à l'installation; après tout chaque minute compte

Télécharger et démarrer un template de VM

Il est entendu que pour créer un template il vous faut un serveur Oracle VM. Pour créer vos VM, vous pouvez simplement télécharger et démarrer un template existant depuis eDelivery. Ainsi, pas besoin d'OracleVM Template Builder ! Vous pourrez alors changer les différents éléments de configuration comme la langue du clavier : system-config-keyboard, le mot de passe de l'utilisateur Root : passwd ou de l'utilisateur Oracle : passwd oracle. Vous pourrez également vérifier que le service oraclevm-template est correctement installé.

Créer et attacher les disques à votre VM

Une méthode simple et discrète pour partager des logiciels avec une VM consiste à créer un disque et charger les distributions dessus. Vous pouvez effecter cette opération depuis n'importe quel portable ou poste de travail sous Linux:
dd if=/dev/zero of=/disk/distribs.img bs=1024k count=1 seek=10240 
sudo mkdir /distribs
mount -t ext3 -o loop /disk/distribs.img /distribs
sudo chown oracle:oinstall /distribs
Vous pouvez simplement télécharger les logiciels de votre choix et les décompresser dans /distribs. Une fois le disque sur le VM Server, créez le disque qui contiendra les logiciels installés et attachez-les à votre VM:
xm list

dd if=/dev/zero \
of=/OVS/running_pool/OVM_EL5U4_ORA112_X86_PVM/Oracle.img \
bs=1024k count=1 seek=10240

xm block-attach 3 \
"tap:aio:/OVS/running_pool/OVM_EL5U4_ORA112_X86_PVM/Oracle.img" \
xvdb w

ls -l /disk/

xm block-attach 3 "tap:aio:/disk/distribs.img" xvdc w

Monter les disques dans le guest

Une fois les disque créé et publiés dans la VM, vous pouvez les monter depuis la console de la machine virtuelle ou une session SSH:
mkdir /distribs
mount -t ext3 /dev/xvdc /distribs

mkfs -t ext3 /dev/xvdb
cat >>/etc/fstab <<EOF
/dev/xvdb /u01 ext3 defaults 0 0
EOF

mount /u01

df -h
Filesystem Size Used Avail Use% Mounted on
/dev/xvda2 3.9G 2.0G 1.9G 52% /
/dev/xvda1 92M 12M 76M 14% /boot
tmpfs 513M 0 513M 0% /dev/shm
/dev/xvdc 9.9G 4.1G 5.3G 44% /distribs
/dev/xvdb 20G 173M 19G 1% /u01

Installer la base de données Oracle

Installer uniquement le logiciel Oracle Database 11g Release 2 ne dépend pas du nom du serveur. Toutefois, ce n'est pas le cas de l'infrastructure Grid. L'objectif du présent article n'est pas d'entrer dans ce type de détails. En revanche, vous trouverez ci-dessous les commandes à exécuter pour installer le logiciel et l'utiliser sans ASM; d'abord, sous root, créez l'inventory :
if [ -f "/etc/oraInst.loc" ]; then
echo "File Exists"
else
echo "inventory_loc=/u01/app/oraInventory" >/etc/oraInst.loc;
echo "inst_group=oinstall" >>/etc/oraInst.loc;
mkdir -p /u01/app/oraInventory;
chown oracle:oinstall /u01/app;
chown oracle:oinstall /u01/app/oraInventory;
chmod 664 /etc/oraInst.loc;
fi
Puis sous Oracle, installez le logiciel :
su - oracle

cd /distribs/database

export DISTRIB=`pwd`

./runInstaller -silent \
-responseFile $DISTRIB/response/db_install.rsp \
oracle.install.option=INSTALL_DB_SWONLY \
UNIX_GROUP_NAME=oinstall \
INVENTORY_LOCATION=/u01/app/oraInventory \
SELECTED_LANGUAGES=en \
ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1 \
ORACLE_BASE=/u01/app/oracle \
oracle.install.db.InstallEdition=EE \
oracle.install.db.isCustomInstall=false \
oracle.install.db.DBA_GROUP=dba \
oracle.install.db.OPER_GROUP=dba \
SECURITY_UPDATES_VIA_MYORACLESUPPORT=false \
DECLINE_SECURITY_UPDATES=true
Enfin sous root encore, lancez le script root.sh :
/u01/app/oracle/product/11.2.0/db_1/root.sh

Installer l'agent Oracle

Vous pouvez ensuite installer l'agent Enterprise Manager 10.2.0.5 depuis la distribution associée; voici les commandes à mancer :
grep -v "^#" /distribs/agent/linux/response/additional_agent.rsp \
|grep -v "^[ \t]"|grep -v "^$" |grep -v BASEDIR \
|grep -v sl_OMSConnectInfo >/tmp/my.rsp

cat <<EOF >>/tmp/my.rsp
BASEDIR=/u01/app/oracle/product
sl_OMSConnectInfo={"dummy","9999"}
EOF

cd /distribs/agent/linux/agent

./runInstaller -silent -responseFile /tmp/my.rsp

sudo /u01/app/oracle/product/agent10g/root.sh

Reconfigurer le template

Pour configurer le template, il faut créer un script de configuration et un script de déconfiguration. Pour l'agent, vous trouverez l'ensemble des informations utiles dans le document Oracle VM Template Developer's Guide: Creating Pre-Built VMs for Rapid Software Deployment. Pour vous simplifier la tâche, je vous propose de télécharger et exécuter le script ci-joint emagent-shell.sh sur le guest qui vous servira de template. Une fois l'opération effectuée, vous pouvez configurer le service oraclevm-template :
## export ORACLE_TRACE=T

cp -p /etc/sysconfig/oraclevm-template \
/etc/sysconfig/oraclevm-template.bak

grep -v "^TEMPLATE_CLEANUP_SCRIPT" \
/etc/sysconfig/oraclevm-template.bak \
| grep -v "^TEMPLATE_CONFIG_SCRIPT" \
>/etc/sysconfig/oraclevm-template

cat >>/etc/sysconfig/oraclevm-template <<EOF
TEMPLATE_CLEANUP_SCRIPT=/u01/emagent-cleanup.sh
TEMPLATE_CONFIG_SCRIPT=/u01/emagent-reconfig.sh
EOF

oraclevm-template --enable

Arrêter le serveur et créer le template

Vous êtes prêt à packager le template; arrêter la VM et copier l'ensemble des fichiers:
cp --sparse=always -R 154_OVM_EL5U4_ORACLE_X86_PVM \
/OVS/seed_pool/OVM_EL5U4_ORA112_X86_PVM
Vous pouvez ensuite régénérer le fichier vm.cfg :
# cat >>vm.cfg <<EOF
bootloader = '/usr/bin/pygrub'
disk = ['tap:aio:/OVS/seed_pool/OVM_EL5U4_ORA112_X86_PVM/System.img,xvda,w',
'tap:aio:/OVS/seed_pool/OVM_EL5U4_ORA112_X86_PVM/Oracle.img,xvdb,w']
memory = '1024'
name = 'OVM_EL5U4_ORA112_X86_PVM'
vcpus = 1
on_crash = 'restart'
on_reboot = 'restart'
vfb = ['type=vnc,vncunused=1,vnclisten=0.0.0.0']
vif = ['type=netfront']
EOF
Votre template est prêt à être déployé sur ce serveur (ou sur un autre)