Poster une réponse à un sujet: Script de démarrage/arrêt VirtualBox
Attention, ce sujet est un sujet ancien (5319 jours sans réponse)
Gras [b]Texte[/b] Italique [i]Italique[/i] Souligné [u]Souligné[/u] Barré [strike]Barré[/strike]
Courriel [email=nobody@nobody.org]Nom[/email] Lien [url=http://www.website.com]Texte[/url] Ancre [anchor]Nom[/anchor] Image [img]http://www.website.com/image.jpg[/img] Insérer une image en provenance du site
Aligné à gauche [align=left]Texte[/align] Centré [align=center]Texte[/align] Aligné à droite [align=right]Texte[/align] Toute la largeur [align=justify]Texte[/text]
Couleur [color=#000000]Text[/color] Mise en forme [highlight=pascal]Texte[/highlight] Widgets Emoticons :code: [:code] Convertisseur HTML vers BBCode Convertisseur Word vers BBCode
Prévisualisation Vérification de l'orthographe

Copier Coller Couper Tout sélectionner
Tout effacer Insérer la date Insérer l'heure Insérer la date et heure Insérer votre IP
Liste [list=square][item]BlaBla[/item][/list] Liste Numérotée [list=decimal][item]BlaBla[/item][/list]
Citation [quote=name]Texte[/quote] Spoiler [spoiler]James est le meurtrier![/spoiler]
Tout en majuscules [uppercase]Texte[/uppercase] Tout en minuscules [lowercase]Texte[/lowercase] l33t [l33t]Je suis un nerd[/l33t] Texte en indice [sub]Texte[/sub] Texte en exposant [sup]Texte[/sup] Taille du texte [size=8]Texte[/size]
 
jimalexp
Merci de partager. Je garde ça au chaud sur mon 'dur.
rfr
Comme j'avais besoin d'un script de démarrage pour mes machines virtuelles, j'ai écris quelques petits trucs qui pourraient vous être utile donc je partage.

Tout d'abord, voici le script, à installer dans /etc/init.d:


#!/bin/sh

### BEGIN INIT INFO
# Provides: vboxcontrol
# Required-Start: $network $local_fs $remote_fs
# Required-Stop: $network $local_fs $remote_fs
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start VirtualBox Virtual Machines
### END INIT INFO

CFGFILE=/etc/virtualbox/vms

startvm()
{
echo -n "\tStarting vm [$1:$2]..."
VBoxManage modifyvm "$1" --vrdp on --vrdpport $2 1> /dev/null 2>&1
VBoxManage startvm "$1" --type vrdp 1> /dev/null 2>&1
echo "done."
}

stopvm()
{
echo -n "\tStopping vm [$1:$2]..."
VBoxManage controlvm "$1" acpipowerbutton 1> /dev/null 2>&1
/usr/bin/wpshutdown $2 360
if [ "$?" = "0" ] ; then echo "done."; else echo "failed."; fi
}

case "$1" in

start)
echo "Starting VirtualBox Virtual Machines:"
while read vm; do
vmname=`echo $vm | cut -d: -f1`
vmport=`echo $vm | cut -d: -f2`
startvm "$vmname" $vmport
done < $CFGFILE
echo "done."
;;
stop)
echo "Stopping VirtualBox Virtual Machines:"
while read vm; do
vmname=`echo $vm | cut -d: -f1`
vmport=`echo $vm | cut -d: -f2`
stopvm "$vmname" $vmport
done < $CFGFILE
echo "done."
;;
status)
VBoxManage list runningvms
;;
*)
echo "$0 (start|stop|status)"
esac


Un script assez simple qui fait appel à un fichier de configuration (/etc/virtualbox/vms) qui contient une ligne par machine virtuelle à démarrer/arrêter. Le format est le suivant:


Nom_de_la_machine:Port_VRDP


Au démarrage, chaque machine sera donc démarrée en mode VRDP sur le port 'Port_VRDP'. 'Port_VRDP' doit donc être UNIQUE pour chaque vm.

Exemple:


Windows XP SP3:3389
Domain Controller DC2:3390


Pour vérifier que la machine est bien arrêtée au "stop", j'utilise une petite application qui teste pendant une période de temps donnée si un port tcp est toujours "ouvert" ou non (mode LISTEN y compris). J'ai appelé ce petit utilitaire "wpshutdown" pour "Wait Port Shutdown".

En voici les sources:


/*
* main.c
*
* Created on: 5 oct. 2009
* Author: rfr
*/

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <time.h>
#include <string.h>


int is_port_listening(char *port) {

FILE *ports;
int found = 0;
char buffer[160];

ports = fopen("/proc/net/tcp", "r");

if (!ports) {
fprintf(stderr, "error: is /proc filesystem available?\n");
exit(2);
}

while (!feof(ports))
{
int i;
if (fgets(buffer, 160, ports)) {
i=0;
size_t b_len = strlen(buffer);
for(;(i < b_len) && (buffer[i] != ':') ; i++);
i++;
for(;(i < b_len) && (buffer[i] != ':') ; i++);

if ((i < b_len) && (buffer[i] == ':') && !strncmp(port, buffer+i+1, 4)) {
found = 1;
}
}
}
fclose(ports);

return found;
}

int main(int argc, char *argv[]) {

if (argc < 2) {
printf("Usage: %s <tcp port> [timeout]\n", argv[0]);
return 2;
}

long port = strtol(argv[1], (char **) NULL, 10);
if (errno == EINVAL || errno == ERANGE) {
printf("error: argument is not a port number: %s\n", argv[1]);
return 2;
}

if (!(port > 0 && port <= 65535 )) {
printf("error: argument is not a valid port number: %s\n", argv[1]);
return 2;
}

long timeout = 30;
if (argc > 2) {
timeout = strtol(argv[2], (char**)NULL, 10);
if (timeout == 0) {
printf("error: invalid timeout value: %s\n", argv[2]);
return 2;
}
}

char hexport[5];
sprintf(hexport, "X", (unsigned int) port);

int failed = 0;
time_t initial = time(NULL);

while(is_port_listening(hexport)) {
fwrite(".", 1, 1, stdout); fflush(stdout);
if ((time(NULL) - initial) >= timeout)
{
failed = 1;
break;
}
sleep(1);
}
return failed;
}


Pour compiler ce code, un simple "gcc -o wpshutdown source.c" suffira. Ne pas oublier de copier wpshutdown dans le répertoire /usr/bin.

Quelques petites notes:

1) Les devices "tap" sont configurée par la méthode normale dans le fichier "/etc/network/interfaces"

Exemple:

auto tap0
iface tap0 inet manual
tunctl_user rfr

auto tap1
iface tap1 inet manual
tunctl_user rfr


Pour que cela fonctionne, il faut que le package "uml-utilities" soit installé. Il est utile aussi d'intaller le package "bridge-utils" pour configurer l'interface bridge utilisée par les interfaces tapX.

2) L'arrêt par ACPI ne fonctionne pas par défaut sous Windows Server 2003. Pour que le script fonctionne, il faut faire ceci:


1. Start / Run / gpedit.msc
2. Drill into Computer Configuration / Windows Settings / Security Settings / Local Policies / Security Options. Find the entry named "Shutdown: Allow system to be shut down without having to log on". Double click on it, change it to "Enabled".
3. Drill into Computer Configuration / Administrative Templates / System. Find the entry named "Display Shutdown Event Tracker". Double click on it, change it to "Disabled".


Crédit: http://www.proxmox.com/forum/showthread.php?p=2560#poststop

Voilà, circuler, il n'y a plus rien à voir ...
Catégorie:  






Ada
CSS
Cobol
CPP
HTML
Fortran
Java
JavaScript
Pascal
Perl
PHP
Python
SQL
VB
XML
Anon URL
DailyMotion
eBay
Flickr
FLV
Google Video
Google Maps
Metacafe
MP3
SeeqPod
Veoh
Yahoo Video
YouTube
6px
8px
10px
12px
14px
16px
18px
Informaticien.be - © 2002-2024 AkretioSPRL  - Generated via Kelare
The Akretio Network: Akretio - Freedelity - KelCommerce - Votre publicité sur informaticien.be ?